diff --git a/spaces_og/plugins/space_og.inc b/spaces_og/plugins/space_og.inc
index 1b1e473..41307ff 100644
--- a/spaces_og/plugins/space_og.inc
+++ b/spaces_og/plugins/space_og.inc
@@ -137,6 +137,7 @@ class space_og extends space_type_purl {
             return;
           }
         }
+/*
         // Group enabled node, route to correct group context.
         else if (!og_is_omitted_type($node->type) && !empty($node->og_groups)) {
           // If the node belongs to the current active group space, or we're in an allowable other space type, pass thru
@@ -148,6 +149,7 @@ class space_og extends space_type_purl {
           spaces_load('og', current($node->og_groups))->activate();
           return;
         }
+*/
         break;
     }
   }
diff --git a/spaces_og/spaces_og.module b/spaces_og/spaces_og.module
index 6330a39..66c87a3 100644
--- a/spaces_og/spaces_og.module
+++ b/spaces_og/spaces_og.module
@@ -232,69 +232,89 @@ function spaces_og_permission() {
 }
 
 /**
- * Implements hook_nodeapi().
+ * Implements hook_node_load().
  */
-function spaces_og_nodeapi_OLD(&$node, $op, $teaser = NULL, $page = NULL) {
-  // TODO Remaining code in this function needs to be moved to the appropriate new hook function.
-  // Groups
-  if (og_is_group_type($node->type)) {
-    switch ($op) {
-      case 'load':
-        $modifier = purl_load(array('id' => isset($node->nid) ? $node->nid : NULL, 'provider' => 'spaces_og'));
-        $node->purl = $modifier['value'];
-        break;
-      case 'insert':
-      case 'update':
-        $space = spaces_load('og', $node->nid, TRUE);
-        if ($space) {
-          // Save preset values.
-          if (!empty($node->spaces_preset_og)) {
-            $space->controllers->variable->set('spaces_preset_og', $node->spaces_preset_og);
-          }
-          // Configure OG directly from space object as node_save() may be
-          // called from outside of actual group space.
-          $selective = $space->controllers->variable->get('spaces_og_selective');
-          $node->og_selective = $selective === NULL ? OG_OPEN : $selective;
-          $register = $space->controllers->variable->get('spaces_og_register');
-          $node->og_register = $register === NULL ? TRUE : $register;
-          $directory = $space->controllers->variable->get('spaces_og_directory');
-          $node->og_directory = $directory === NULL ? TRUE : $directory;
-          $private = $space->controllers->variable->get('spaces_og_private');
-          if ($op == 'update' && $private != $node->og_private) {
-            // Privacy has changed, update og_public flags, and queue a rebuid.
-            // TODO Please convert this statement to the D7 database API syntax.
-            /* db_query("UPDATE {og_access_post} og_p
-             INNER JOIN {og_ancestry} og_a ON og_p.nid = og_a.nid
-             INNER JOIN {node} n ON og_p.nid = n.nid
-             SET og_public = %d WHERE og_a.group_nid = %d", ! $private, $node->nid) */
-            NULL;
-            node_access_needs_rebuild(TRUE);
-          }
-          $node->og_private = $private === NULL ? FALSE : $private;
-          og_update_group($node);
+function spaces_og_node_load($nodes, $types) {
+  foreach ($types as $type) {
+    if (og_is_group_type($type)) {
+      foreach ($nodes as $node) {
+        if (og_is_group_type($node->type)) {
+          $modifier = purl_load(array('id' => isset($node->nid) ? $node->nid : NULL, 'provider' => 'spaces_og'));
+          $node->purl = $modifier['value'];
         }
+      }
+    }
+  }
+}
 
-        // Save PURL modifier.
-        $modifier = array(
-          'provider' => 'spaces_og',
-          'id' => $node->nid,
-        );
-        if (is_array($node->purl) && !empty($node->purl['value'])) {
-          $modifier['value'] = $node->purl['value'];
-          purl_save($modifier);
-        }
-        else if (empty($node->purl)) {
-          $modifier['value'] = "{$node->type}-{$node->nid}";
-          purl_save($modifier);
-        }
-        break;
-      case 'delete':
-        spaces_delete('og', $node->nid);
-        purl_delete(array('provider' => 'spaces_og', 'id' => $node->nid));
-        break;
+/**
+ * Implements hook_node_insert().
+ */
+function spaces_og_node_insert($node) {
+  spaces_og_node_update($node, 'insert');
+}
+
+/**
+ * Implements hook_node_update().
+ */
+function spaces_og_node_update($node, $op = 'update') {
+  if (og_is_group_type($node->type)) {
+    $space = spaces_load('og', $node->nid, TRUE);
+    if ($space) {
+      // Save preset values.
+      if (!empty($node->spaces_preset_og)) {
+        $space->controllers->variable->set('spaces_preset_og', $node->spaces_preset_og);
+      }
+      // Configure OG directly from space object as node_save() may be
+      // called from outside of actual group space.
+      $selective = $space->controllers->variable->get('spaces_og_selective');
+      $node->og_selective = $selective === NULL ? OG_OPEN : $selective;
+      $register = $space->controllers->variable->get('spaces_og_register');
+      $node->og_register = $register === NULL ? TRUE : $register;
+      $directory = $space->controllers->variable->get('spaces_og_directory');
+      $node->og_directory = $directory === NULL ? TRUE : $directory;
+      $private = $space->controllers->variable->get('spaces_og_private');
+      if ($op == 'update' && $private != $node->og_private) {
+        // Privacy has changed, update og_public flags, and queue a rebuid.
+        db_query("UPDATE {og_access_post} og_p
+          INNER JOIN {og_ancestry} og_a ON og_p.nid = og_a.nid
+          INNER JOIN {node} n ON og_p.nid = n.nid
+          SET og_public = %d WHERE og_a.group_nid = %d", ! $private, $node->nid);
+        node_access_needs_rebuild(TRUE);
+      }
+      $node->og_private = $private === NULL ? FALSE : $private;
+      og_update_group($node);
+    }
+
+    // Save PURL modifier.
+    $modifier = array(
+      'provider' => 'spaces_og',
+      'id' => $node->nid,
+    );
+    if (is_array($node->purl) && !empty($node->purl['value'])) {
+      $modifier['value'] = $node->purl['value'];
+      purl_save($modifier);
+    }
+    else if (empty($node->purl)) {
+      $modifier['value'] = "{$node->type}-{$node->nid}";
+      purl_save($modifier);
     }
   }
+}
+
+/**
+ * Implements hook_node_delete().
+ */
+function spaces_og_node_delete($node) {
+  if (og_is_group_type($node->type)) {
+    spaces_delete('og', $node->nid);
+    purl_delete(array('provider' => 'spaces_og', 'id' => $node->nid));
+  }
+}
+
+function spaces_og_nodeapi_OLD() {
   // Nodes in groups
+/* TODO og_is_omitted_type() is no longer an og function.
   else if (!og_is_omitted_type($node->type)) {
     switch ($op) {
       case 'validate':
@@ -329,6 +349,7 @@ function spaces_og_nodeapi_OLD(&$node, $op, $teaser = NULL, $page = NULL) {
         break;
     }
   }
+*/
 }
 
 /**
