diff -rupN ldap/ldap_servers/LdapServer.class.php ldap.new/ldap_servers/LdapServer.class.php
--- ldap/ldap_servers/LdapServer.class.php	2013-05-06 01:20:44.000000000 +0000
+++ ldap.new/ldap_servers/LdapServer.class.php	2013-05-11 15:34:05.796951209 +0000
@@ -439,11 +439,13 @@ class LdapServer {
       return FALSE;
     }
 
+    //dpm($attributes,"attributes createLdapEntry");
     $result = @ldap_add($this->connection, $dn, $attributes);
     if (!$result) {
       $error = "LDAP Server ldap_add(%dn) Error Server ID = %sid, LDAP Err No: %ldap_errno LDAP Err Message: %ldap_err2str ";
       $tokens = array('%dn' => $dn, '%sid' => $this->sid, '%ldap_errno' => ldap_errno($this->connection), '%ldap_err2str' => ldap_err2str(ldap_errno($this->connection)));
       debug(t($error, $tokens));
+      //dpm(debug_backtrace());
       watchdog('ldap_server', $error, $tokens, WATCHDOG_ERROR);
     }
 
@@ -508,6 +510,11 @@ class LdapServer {
 
   function modifyLdapEntry($dn, $attributes = array(), $old_attributes = FALSE) {
 
+    /*dpm($dn,"Method  modifyLdapEntry DN");
+    dpm($attributes,"Method  modifyLdapEntry attributes");
+    dpm(debug_backtrace());*/
+
+
     $this->connectAndBindIfNotAlready();
 
     if (!$old_attributes) {
@@ -867,12 +874,15 @@ class LdapServer {
         break;
 
       case LDAP_SCOPE_BASE:
+        //dpm($params,"case LDAP_SCOPE_BASE read");
         $result = @ldap_read($this->connection, $params['base_dn'], $params['filter'], $params['attributes'], $params['attrsonly'],
           $params['sizelimit'], $params['timelimit'], $params['deref']);
-        if ($params['sizelimit'] && $this->ldapErrorNumber() == LDAP_SIZELIMIT_EXCEEDED) {
+        if (($params['sizelimit'] && $this->ldapErrorNumber() == LDAP_SIZELIMIT_EXCEEDED) || ($this->ldapErrorNumber() == LDAP_NO_SUCH_OBJECT)) {
           // false positive error thrown.  do not result limit error when $sizelimit specified
         }
         elseif ($this->hasError()) {
+          //dpm( $this->errorMsg('ldap'));
+          //dpm( $this->ldapErrorNumber('ldap'));
           watchdog('ldap_server', 'ldap_read() function error.  LDAP Error: %message, ldap_read() parameters: %query',
             array('%message' => $this->errorMsg('ldap'), '%query' => @$params['query_display']),
             WATCHDOG_ERROR);
@@ -1869,4 +1879,4 @@ class LdapServersRebindHandler {
     }
     return 0;
   }
-}
\ No newline at end of file
+}
diff -rupN ldap/ldap_servers/ldap_servers.module ldap.new/ldap_servers/ldap_servers.module
--- ldap/ldap_servers/ldap_servers.module	2013-05-06 01:20:44.000000000 +0000
+++ ldap.new/ldap_servers/ldap_servers.module	2013-05-11 15:34:05.794951259 +0000
@@ -60,6 +60,8 @@ define('LDAP_SERVER_GROUPS_RECURSE_DEPTH
 
 define('LDAP_FAIL', -1);
 
+define('ATTRIBUTE_WITHOUT_ORDINAL',-1);
+
 define('LDAP_SUCCESS', 0x00);
 define('LDAP_OPERATIONS_ERROR', 0x01);
 define('LDAP_PROTOCOL_ERROR', 0x02);
diff -rupN ldap/ldap_servers/ldap_servers.tokens.inc ldap.new/ldap_servers/ldap_servers.tokens.inc
--- ldap/ldap_servers/ldap_servers.tokens.inc	2013-05-06 01:20:44.000000000 +0000
+++ ldap.new/ldap_servers/ldap_servers.tokens.inc	2013-05-11 15:34:05.794951259 +0000
@@ -95,7 +95,7 @@ function ldap_servers_token_extract_attr
   foreach ($tokens as $token) {
     $token = str_replace(array(LDAP_SERVERS_TOKEN_PRE, LDAP_SERVERS_TOKEN_POST), array('', ''), $token);
     $parts = explode(LDAP_SERVERS_TOKEN_DEL, $token);
-    $ordinal = (isset($parts[1]) && $parts[1]) ? $parts[1] : 0;
+    $ordinal = isset($parts[1]) ? $parts[1] : ATTRIBUTE_WITHOUT_ORDINAL; //XM flag non multivalued attributes with ATTRIBUTE_WITHOUT_ORDINAL (-1) instead of forcing 0 
     $attr_name = $parts[0];
     $source_data_type = NULL;
 
diff -rupN ldap/ldap_user/LdapUserConf.class.php ldap.new/ldap_user/LdapUserConf.class.php
--- ldap/ldap_user/LdapUserConf.class.php	2013-05-06 01:20:44.000000000 +0000
+++ ldap.new/ldap_user/LdapUserConf.class.php	2013-05-11 15:34:05.797951335 +0000
@@ -681,6 +681,7 @@ class LdapUserConf {
       );
 
       list($proposed_ldap_entry, $error) = $this->drupalUserToLdapEntry($account, $ldap_server, $params, $ldap_user);
+      //dpm($proposed_ldap_entry,"synchToLdapEntry proposed_ldap_entry ");
       if ($error != LDAP_USER_PROV_RESULT_NO_ERROR) {
         $result = FALSE;
       }
@@ -692,12 +693,7 @@ class LdapUserConf {
             if (isset($attr_values['count'])) {
               unset($attr_values['count']);
             }
-            if (count($attr_values) == 1) {
-              $attributes[$attr_name] = $attr_values[0];
-            }
-            else {
-              $attributes[$attr_name] = $attr_values;
-            }
+            $attributes[$attr_name] = $attr_values;
           }
         }
 
@@ -895,6 +891,7 @@ class LdapUserConf {
 
   }
 
+
 /**
   *  populate ldap entry array for provisioning
   *
@@ -937,8 +934,9 @@ class LdapUserConf {
       // Loop over the mappings.
     foreach ($mappings as $field_key => $field_detail) {
       list($ldap_attr_name, $ordinal, $conversion) = ldap_servers_token_extract_parts($field_key, TRUE);  //trim($field_key, '[]');
-      $ordinal = (!$ordinal) ? 0 : $ordinal;
-      if ($ldap_user_entry && isset($ldap_user_entry[$ldap_attr_name]) && is_array($ldap_user_entry[$ldap_attr_name]) && isset($ldap_user_entry[$ldap_attr_name][$ordinal]) ) {
+      $has_ordinal = ($ordinal != ATTRIBUTE_WITHOUT_ORDINAL);
+      if ($ldap_user_entry && isset($ldap_user_entry[$ldap_attr_name]) && is_array($ldap_user_entry[$ldap_attr_name]) 
+        && ($has_ordinal ? isset($ldap_user_entry[$ldap_attr_name][$ordinal]) : isset($ldap_user_entry[$ldap_attr_name]) ) ) {
         continue; // don't override values passed in;
       }
 
@@ -958,10 +956,14 @@ class LdapUserConf {
           $ldap_user_entry['dn'] = $value;
         }
         elseif ($value) {
-          if (!isset($ldap_user_entry[$ldap_attr_name]) || !is_array($ldap_user_entry[$ldap_attr_name])) {
+          if ($has_ordinal && (!isset($ldap_user_entry[$ldap_attr_name]) || !is_array($ldap_user_entry[$ldap_attr_name]))) {
             $ldap_user_entry[$ldap_attr_name] = array();
           }
-          $ldap_user_entry[$ldap_attr_name][$ordinal] = $value;
+          if ($has_ordinal){
+            $ldap_user_entry[$ldap_attr_name][$ordinal] = $value; }
+          else {
+            $ldap_user_entry[$ldap_attr_name] = $value; 
+          }
           if ($include_count) {
             $ldap_user_entry[$ldap_attr_name]['count'] = count($ldap_user_entry[$ldap_attr_name]);
           }
@@ -972,6 +974,7 @@ class LdapUserConf {
 
     }
 
+    
     /**
      * 4. call drupal_alter() to allow other modules to alter $ldap_user
      */
