--- a/pyke/special.py
+++ b/pyke/special.py
@@ -26,17 +26,17 @@
 # claim_goal, fact, prove_all, gather_all
 
 class special_knowledge_base(knowledge_base.knowledge_base):
-    def __init__(self):
-	super(special_knowledge_base, self).__init__('special')
+    def __init__(self, engine):
+	super(special_knowledge_base, self).__init__(engine, 'special')
     def add_fn(self, fn):
 	if fn.name in self.entity_lists:
 	    raise KeyError("%s.%s already exists" % (self.name, fn.name))
 	self.entity_lists[fn.name] = fn
 
 class special_fn(knowledge_base.knowledge_entity_list):
-    def __init__(self, name):
+    def __init__(self, special_base, name):
 	super(special_fn, self).__init__(name)
-	Special.add_fn(self)
+	special_base.add_fn(self)
     def lookup(self, bindings, pat_context, patterns):
 	raise SyntaxError("special.%s may not be used in forward chaining "
 			  "rules" % self.name)
@@ -45,11 +45,15 @@
 			  "rules" % self.name)
 
 class claim_goal(special_fn):
-    def __init__(self):
-	super(claim_goal, self).__init__('claim_goal')
+    def __init__(self, special_base):
+	super(claim_goal, self).__init__(special_base, 'claim_goal')
     def prove(self, bindings, pat_context, patterns):
 	yield
 	raise rule_base.StopProof
+
+def create_for(engine):
+    special_base = special_knowledge_base(engine)
+    claim_goal(special_base)
 
 def test():
     import doctest
@@ -58,6 +62,3 @@
 
 if __name__ == "__main__":
     test()
-else:
-    Special = special_knowledge_base()
-    claim_goal()