diff --git a/includes/nodereference.inc b/includes/nodereference.inc
index 4c84360..7a5061f 100644
--- a/includes/nodereference.inc
+++ b/includes/nodereference.inc
@@ -28,7 +28,7 @@ function nodereference_spaces_og_clone_node_cleanup($node, $group, $sandbox, $se
           // See if node was part of old group and was not copied.
           // We don't want to touch out of group/global references.
           else {
-            $referenced_node = node_load($map[$val['nid']]);
+            $referenced_node = node_load($val['nid']);
             if (!empty($referenced_node->og_groups) && in_array($group->spaces_og_clone_group->nid, $referenced_node->og_groups)) {
               unset($node->{$field_name}[$delta]);
               $update_node = TRUE;
diff --git a/spaces_og_clone.inc b/spaces_og_clone.inc
index f07ac58..d08bfaa 100644
--- a/spaces_og_clone.inc
+++ b/spaces_og_clone.inc
@@ -14,7 +14,6 @@ function spaces_og_clone_clone($new_group, $old_group, $settings, $batch = FALSE
 
   // Set some default information if not set
   $settings += array(
-    'name' => $user->name,
     'uid' => $user->uid,
   );
 
@@ -22,7 +21,7 @@ function spaces_og_clone_clone($new_group, $old_group, $settings, $batch = FALSE
   if (empty($new_group)) {
     $new_group = _spaces_og_clone_node_clean_group($old_group);
     $new_group->uid = $settings['uid'];
-    $new_group->name = $settings['name'];
+    $new_group->name = _spaces_og_fetch_user_name($new_group->uid);
 
     // spaces_og + node_save purl bug.
     if (module_exists('spaces_og') && $new_group->purl) {
@@ -85,7 +84,7 @@ function spaces_og_clone_clone($new_group, $old_group, $settings, $batch = FALSE
   if ($nids) {
     // For a small number of nodes, just create them, don't bother with batch.
     if (!$batch || count($nids) <= (SPACES_OG_CLONE_BATCH_MAX_RUNS / 2)) {
-      _spaces_og_clone_node_clone_nodes($nids, $new_group, $settings);
+      spaces_og_clone_node_clone_nodes($nids, $new_group, $settings);
     }
     else {
       $batch = array(
@@ -135,6 +134,21 @@ function spaces_og_clone_nid_map_insert($clone_node, $original_group, $sogcid) {
 }
 
 /**
+ * Fetches a map of NIDs for a specific community.
+ *
+ * @param $new_group_nid
+ *   The NID of the group to look up NIDs for.
+ */
+function spaces_og_clone_get_cloned_node_nids($new_group_nid) {
+  $result = db_query('SELECT clone_nid, original_nid FROM {spaces_og_clone_nid_map} INNER JOIN og_ancestry on clone_nid = nid WHERE group_nid = %d', $new_group_nid);
+  $map = array();
+  while ($pair = db_fetch_object($result)) {
+    $map[$pair->original_nid] = $pair->clone_nid;
+  }
+  return $map;
+}
+
+/**
  * Given a node object, removes any non-cloneable information.
  */
 function _spaces_og_clone_node_clean(&$node) {
@@ -210,14 +224,26 @@ function _spaces_og_clone_node_clean_group($old_group) {
 
 /**
  * Clone a set of nodes.
+ *
+ * @param $nids
+ *   An array of nids to clone to the new group.
+ * @param $group
+ *  An group object that the nodes are being cloned to.
+ * @param $settings
+ *   An array of additional settings.
+ *    uid: The user uid to set to the author of the node.
+ *    sogcid: the spaces og clone group clone this clone is from.
+ *
  */
-function _spaces_og_clone_node_clone_nodes($nids, $group, $settings) {
+function spaces_og_clone_node_clone_nodes($nids, $group, $settings = array()) {
+  spaces_og_clone_include_files();
   $sandbox = array(
     'group' => $group,
     'settings' => $settings,
     'book_map' => array(),
     'nid_map' => array(),
     'mlid_map' => array(),
+    'sogcid' => 0,
   );
   _spaces_og_clone_first_pass($nids, $sandbox);
   _spaces_og_clone_second_pass($sandbox['nid_map'], $sandbox);
@@ -281,6 +307,7 @@ function _spaces_og_clone_node_clone_nodes_batch($nids, $group, $settings, &$con
 function _spaces_og_clone_first_pass($nids, &$sandbox) {
   // Avoid any issues with the space not being active when creating nodes.
   if (module_exists('spaces_og')) {
+    $current_space = spaces_get_space();
     $space = spaces_load('og', $sandbox['group']->nid);
     spaces_set_space($space);
   }
@@ -296,9 +323,11 @@ function _spaces_og_clone_first_pass($nids, &$sandbox) {
     _spaces_og_clone_node_clean($node);
     $node->og_groups = array($sandbox['group']->nid => $sandbox['group']->nid);
     //change the user id to the one that the form dictates
-    $node->uid = $sandbox['settings']['uid'];
+    if (isset($sandbox['settings']['uid'])) {
+      $node->uid = $sandbox['settings']['uid'];
+    }
     //change the author name to match
-    $node->name = $sandbox['settings']['name'];
+    $node->name =_spaces_og_fetch_user_name($node->uid);
     //account for books
     if (isset($node->book['mlid'])) {
       // Clear the book and set new information.
@@ -326,7 +355,7 @@ function _spaces_og_clone_first_pass($nids, &$sandbox) {
     $sandbox['nid_map'][$old_node->nid] = $node->nid;
   }
   if (module_exists('spaces_og')) {
-    spaces_set_space(FALSE);
+    spaces_set_space($current_space);
   }
 }
 
@@ -338,6 +367,7 @@ function _spaces_og_clone_first_pass($nids, &$sandbox) {
  */
 function _spaces_og_clone_second_pass($nids, &$sandbox) {
   if (module_exists('spaces_og')) {
+    $current_space = spaces_get_space();
     $space = spaces_load('og', $sandbox['group']->nid);
     spaces_set_space($space);
   }
@@ -357,7 +387,7 @@ function _spaces_og_clone_second_pass($nids, &$sandbox) {
     }
   }
   if (module_exists('spaces_og')) {
-    spaces_set_space(FALSE);
+    spaces_set_space($current_space);
   }
 }
 
@@ -392,3 +422,17 @@ function spaces_og_clone_replace_links($text, $map) {
 
   return str_replace($maps[$key]['original'], $maps[$key]['replacements'], $text);
 }
+
+/**
+ * Fetch the name of the user.
+ *
+ * Since user_load is not cached and all we need is name, we use this.
+ * (node_save doesn't work well without name set). 
+ */
+function _spaces_og_fetch_user_name($uid) {
+  static $names;
+  if (!isset($names[$uid])) {
+    $names[$uid] = db_result(db_query('SELECT name from {users} WHERE uid = %d', $uid));
+  }
+  return $names[$uid];
+}
