diff --git a/nodes.py b/nodes.py
index 7d368dd9793037689a40195525c766c7316e3cab_bm9kZXMucHk=..6b28ea39cf54e312ddf5213b5db3a52ba61d899f_bm9kZXMucHk= 100644
--- a/nodes.py
+++ b/nodes.py
@@ -184,5 +184,5 @@
         return self.add_restriction(make_relation(lhsvar, rtype, (rhsvar,),
                                                   VariableRef))
 
-    def add_eid_restriction(self, var, eid):
+    def add_eid_restriction(self, var, eid, c_type='Int'):
         """builds a restriction node to express '<var> eid <eid>'"""
@@ -188,5 +188,6 @@
         """builds a restriction node to express '<var> eid <eid>'"""
-        return self.add_constant_restriction(var, 'eid', eid, 'Int')
+        assert c_type in ('Int', 'Substitute'), "Error got c_type=%r in eid restriction" % c_type
+        return self.add_constant_restriction(var, 'eid', eid, c_type)
 
     def add_type_restriction(self, var, etype):
         """builds a restriction node to express : variable is etype"""
@@ -478,7 +479,7 @@
 
     def change_optional(self, value):
         root = self.root
-        if root.should_register_op and value != self.optional:
+        if root is not None and root.should_register_op and value != self.optional:
             from rql.undo import SetOptionalOperation
             root.undo_manager.add_operation(SetOptionalOperation(self, self.optional))
         self.optional= value