diff --git a/smartqueue_og.module b/smartqueue_og.module
index 5026d67..f770d33 100644
--- a/smartqueue_og.module
+++ b/smartqueue_og.module
@@ -124,22 +124,6 @@ function smartqueue_og_nodequeue_subqueues(&$queue, $node) {
   // Build reference strings for all subqueues.
   $references = smartqueue_og_build_string(array_filter($field_names));
 
-  // We're returning an array of references for efficiency, but we also have
-  // to check to see if the references we've generated exist. If they don't,
-  // we have to create them.
-  $exists = array();
-  $subqueues = nodequeue_load_subqueues_by_reference(array($queue->qid => $references));
-  foreach ($subqueues as $subqueue) {
-    $exists[$subqueue->reference] = TRUE;
-  }
-
-  // Create subqueues if needed.
-  foreach ($references as $reference) {
-    if (empty($exists[$reference])) {
-      nodequeue_add_subqueue($queue, smartqueue_og_nodequeue_subqueue_title($queue, $reference), $reference);
-    }
-  }
-
   return $references;
 }
 
@@ -230,3 +214,18 @@ function smartqueue_og_group_delete(OgGroup $og_group) {
     }
   }
 }
+
+/**
+ * Implements hook_group_insert().
+ *
+ * Creates subqueues for group nodes.
+ */
+function smartqueue_og_group_insert(OgGroup $og_group) {
+  $node = node_load($og_group->etid);
+  $queues = nodequeue_load_queues(nodequeue_get_all_qids());
+  foreach ($queues as $qid => $queue) {
+    if ($queue->owner == 'smartqueue_og') {
+      nodequeue_add_subqueue($queue, $node->title);
+    }
+  }
+}
