Index: subsites.helpers.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/subsites/subsites.helpers.inc,v
retrieving revision 1.4
diff -u -r1.4 subsites.helpers.inc
--- subsites.helpers.inc	19 Mar 2010 09:13:54 -0000	1.4
+++ subsites.helpers.inc	23 Sep 2010 15:13:20 -0000
@@ -131,19 +131,22 @@
 function subsites_get_current() {
   static $sid;
 
-  if ($sid) return $sid;
-
-  if ($sid = _subsites_get_current_by_pages()) {
-    return $sid;
-  }
-  if ($sid = _subsites_get_current_by_menu()) {
-    return $sid;
-  }
-  if ($sid = _subsites_get_current_by_node()) {
-    return $sid;
+  if ($sid === NULL) {
+    $detection_methods = module_invoke_all('subsite_detection_methods');
+    drupal_alter('subsite_detection_methods', $detection_methods);
+
+    foreach ($detection_methods as $method => $method_info) {
+      if (isset($method_info['file'])) {
+        include_once($method_info['file']);
+      }
+      $sid = call_user_func($method);
+      if ($sid) {
+        break;
+      }
+    }
   }
 
-  return FALSE;
+  return $sid;
 }
 
 function _subsites_get_current_by_pages() {
Index: subsites.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/subsites/subsites.module,v
retrieving revision 1.5
diff -u -r1.5 subsites.module
--- subsites.module	22 Jun 2010 05:56:06 -0000	1.5
+++ subsites.module	23 Sep 2010 15:13:20 -0000
@@ -191,7 +191,7 @@
         '#collapsible' => TRUE,
         '#collapsed' => !($form['#node']->subsite && $form['#node']->subsite > -1),
       );
-      
+
       $form['subsites']['subsite'] = array(
         '#type' => 'select',
         '#title' => t('Subsite'),
@@ -300,11 +300,29 @@
   // Add multiple suggestions.
   if ($sid = subsites_get_current()) {
     $subsite = subsites_get($sid);
-    
+
     // Try to find a page template with subsite id.
     $variables['template_files'][] = 'page-subsites-'. $subsite->sid;
 
     // Try to find a page template named like the subsite.
     $variables['template_files'][] = 'page-subsites-'. _subsites_slug($subsite->name);
   }
-}
\ No newline at end of file
+}
+
+/**
+ * Implementation of hook_subsite_detection_methods().
+ */
+function subsites_subsite_detection_methods() {
+  return array(
+    '_subsites_get_current_by_pages' => array(
+      'title' => t('Page'),
+    ),
+    '_subsites_get_current_by_menu' => array(
+      'title' => t('Menu'),
+    ),
+    '_subsites_get_current_by_node' => array(
+      'title' => t('Node'),
+    ),
+  );
+}
+
