diff -uprN ./maxlength.js ./maxlength.js
--- ./maxlength.js	2008-09-29 02:14:48.000000000 +0200
+++ ./maxlength.js	2011-01-20 16:52:32.000000000 +0100
@@ -1,10 +1,23 @@
 /* $Id: maxlength.js,v 1.1.6.6 2008/09/29 00:14:48 acm Exp $ */
+function strip_tags (input, allowed) {
+    // Strips HTML and PHP tags from a string  
+
+   allowed = (((allowed || "") + "")
+	  .toLowerCase()
+	  .match(/<[a-z][a-z0-9]*>/g) || [])
+	  .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
+   var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
+	   commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
+   return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){
+	  return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
+   });
+}
 
 Drupal.maxLength_limit = function (field) {
   var limit = field.attr("limit");
 
   // calculate the remaining count of chars
-  var remainingCnt = limit - field.val().length;
+  var remainingCnt = limit - strip_tags(field.val()).length;
 
   // if there is not remaining char, we clear additional content
   if (remainingCnt < 0) {
@@ -21,6 +34,23 @@ Drupal.maxLength_change = function () {
   Drupal.maxLength_limit($(this), $(this).attr("limit"));
 }
 
+Drupal.maxLength_cke_change = function (elementid) {
+  var field = $('#'+elementid);
+  var limit = field.attr("limit");
+
+  // calculate the remaining count of chars
+  var remainingCnt = limit - strip_tags(CKEDITOR.instances[elementid].getData()).length;
+
+  // if there is not remaining char, we clear additional content
+  if (remainingCnt < 0) {
+    field.val(field.val().substr(0, limit));
+    remainingCnt = 0;
+  }
+
+  // update the remaing chars text
+  $('#maxlength-'+field.attr('id').substr(5) + ' span.maxlength-counter-remaining').html(remainingCnt.toString());
+}
+
 if (Drupal.jsEnabled) {
   $(document).ready(function(){
     // get all the settings, and save the limits in the fields
@@ -30,10 +60,18 @@ if (Drupal.jsEnabled) {
       element.attr("limit", limit);
       // update the count at the page load
       Drupal.maxLength_limit(element);
-
-      element.load(Drupal.maxLength_change);
-      element.keyup(Drupal.maxLength_change);
-      element.change(Drupal.maxLength_change);
+	  if(Drupal.settings.ckeditor && Drupal.settings.ckeditor.settings[id]){			
+			if(CKEDITOR.instances[id]){
+				myCkeditor = CKEDITOR.instances[id];
+				myCkeditor.on("key", function() {
+					  Drupal.maxLength_cke_change(id);
+				});
+			}
+	  } else {
+		  element.load(Drupal.maxLength_change);
+		  element.keyup(Drupal.maxLength_change);
+		  element.change(Drupal.maxLength_change);
+	  }
     }
   });
 }
diff -uprN ./maxlength.module ./maxlength.module
--- ./maxlength.module	2009-06-06 19:53:32.000000000 +0200
+++ ./maxlength.module	2011-01-20 11:08:40.000000000 +0100
@@ -245,7 +245,7 @@ function maxlength_nodeapi(&$node, $op, 
       switch ($op) {
         case 'validate':
           $form = $a3;
-          if (drupal_strlen($node->$field) > $limit) {
+          if (drupal_strlen(strip_tags($node->$field)) > $limit) {
             form_set_error($field, t('The !field field has exceeded its maximum number of characters (!limit).', array('!limit' => $limit, '!field' => $field)));
           }
           break;
