+SGSubsystem*
+SGSubsystemMgr::remove(const char* name)
+{
+ SubsystemDict::iterator s =_subsystem_map.find(name);
+ if (s == _subsystem_map.end()) {
+ return NULL;
+ }
+
+ SGSubsystem* sub = s->second;
+ _subsystem_map.erase(s);
+
+// tedious part - we don't know which group the subsystem belongs too
+ for (int i = 0; i < MAX_GROUPS; i++) {
+ if (_groups[i]->get_subsystem(name) == sub) {
+ _groups[i]->remove_subsystem(name);
+ break;
+ }
+ } // of groups iteration
+
+ return sub;
+}
+
+