--- ldap.php    2009-10-07 16:16:38.000000000 +0000
+++ ldap.php.mod        2010-10-25 06:59:40.000000000 +0000
@@ -350,7 +350,7 @@
         $filter = $this->_buildObjectclassFilter();
         $oldres = @ldap_read($this->_ds, String::convertCharset($object_id, NLS::getCharset(), $this->_params['charset']), $filter, array_merge(array_keys($attributes), array('objectclass')));
         $info = ldap_get_attributes($this->_ds, ldap_first_entry($this->_ds, $oldres));
-
+        
         if ($this->_params['version'] == 3 &&
             String::lower(str_replace(array(',', '"'), array('\\2C', ''), $this->_makeKey($attributes))) !=
             String::lower(str_replace(',', '\\2C', $object_id))) {
@@ -390,6 +390,10 @@
                 }
                 unset($attributes[$key]);
             }
+            elseif (isset($attributes[$key])&& 
+                    $var[0] == $attributes[$key]) {
+                    unset($attributes[$key]);
+            }
         }
 
         unset($attributes[String::lower($object_key)]);
@@ -397,10 +401,15 @@
         $attributes = array_filter($attributes, array($this, '_emptyAttributeFilter'));
 
         /* Modify objectclass if old one is outdated. */
+        $old_classes = array_map('strtolower',$info['objectclass']);
+        array_shift($old_classes);
         $attributes['objectclass'] = array_unique(array_map('strtolower', array_merge($info['objectclass'], $this->_params['objectclass'])));
         unset($attributes['objectclass']['count']);
         $attributes['objectclass'] = array_values($attributes['objectclass']);
 
+        if((!array_diff($old_classes, $attributes['objectclass']))) {
+            unset($attributes['objectclass']);
+        }
         if (!@ldap_modify($this->_ds, String::convertCharset($object_id, NLS::getCharset(), $this->_params['charset']), $attributes)) {
             return PEAR::raiseError(sprintf(_("Modify failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
         } else {