diff --git a/demo/tacas2023/exp2/example_controller5.py b/demo/tacas2023/exp2/example_controller5.py
index 2c95eee4d486ccfa0cee4e25d82848a8ec9d69c9..3414a5c21dcdb0fc1c61f6616de9c140836e5fd6 100644
--- a/demo/tacas2023/exp2/example_controller5.py
+++ b/demo/tacas2023/exp2/example_controller5.py
@@ -49,7 +49,7 @@ def controller(ego:State, others:List[State], lane_map):
     output = copy.deepcopy(ego)
     if ego.agent_mode == VehicleMode.Normal:
         if vehicle_front(ego, others, lane_map):
-            if lane_map.h_exist(ego.lane_mode, ego.agent_mode, 'SwitchLeft'):
+            if lane_map.h_exist(ego.lane_mode, ego.agent_mode, VehicleMode.SwitchLeft):
                 output.agent_mode = VehicleMode.SwitchLeft
                 output.lane_mode = lane_map.h(ego.lane_mode, ego.agent_mode, 'SwitchLeft')
         if vehicle_front(ego, others, lane_map):
diff --git a/demo/tacas2023/exp3/demo6.py b/demo/tacas2023/exp3/demo6.py
index b73c5bda752b79f1c53c921ddf0c5af60ad64ee1..071a9ee8686cf4f10b1f25e6732c197021402a5d 100644
--- a/demo/tacas2023/exp3/demo6.py
+++ b/demo/tacas2023/exp3/demo6.py
@@ -71,7 +71,7 @@ if __name__ == "__main__":
     #                        1, 2], 'lines', 'trace', sample_rate=1)
     # fig.show()
 
-    traces = scenario.verify(20, 0.05)
+    traces = scenario.verify(80, 0.1)
     fig = go.Figure()
     fig = reachtube_tree(traces, tmp_map, fig, 1, 2, [1, 2], 'lines', 'trace')
     fig.show()
diff --git a/verse/analysis/analysis_tree.py b/verse/analysis/analysis_tree.py
index 324079000f875610bcdc28920634b10c87817a3b..83dd940fb2a96c3c238168471289fa305af3df44 100644
--- a/verse/analysis/analysis_tree.py
+++ b/verse/analysis/analysis_tree.py
@@ -58,6 +58,8 @@ class AnalysisTreeNode:
         return rst_dict
 
     def get_track(self, agent_id, D):
+        if 'TrackMode' not in self.agent[agent_id].controller.mode_defs:
+            return ""
         for d in D:
             if d in self.agent[agent_id].controller.mode_defs['TrackMode'].modes:
                 return d
@@ -65,6 +67,10 @@ class AnalysisTreeNode:
 
     def get_mode(self, agent_id, D):
         res = []
+        if 'TrackMode' not in self.agent[agent_id].controller.mode_defs:
+            if len(D)==1:
+                return D[0]
+            return D
         for d in D:
             if d not in self.agent[agent_id].controller.mode_defs['TrackMode'].modes:
                 res.append(d)
diff --git a/verse/map/lane_map.py b/verse/map/lane_map.py
index abe532efb6336b0978f67b983066e7b82ce4ed84..a286fbaaf19f95adf2de94a58747fd53645da05d 100644
--- a/verse/map/lane_map.py
+++ b/verse/map/lane_map.py
@@ -104,6 +104,8 @@ class LaneMap:
         return lane.get_lane_width()
 
     def h(self, lane_idx, agent_mode_src, agent_mode_dest):
+        if self.h_dict == {}:
+            return ""
         return self.h_dict[(lane_idx, agent_mode_src, agent_mode_dest)]
 
     def h_exist(self, lane_idx, agent_mode_src, agent_mode_dest):
diff --git a/verse/parser/parser.py b/verse/parser/parser.py
index 60b6ee2354e2598e56674eb5ed31541680dcc7ea..eebcb893bf5725e21ea71f4b195821675af65906 100644
--- a/verse/parser/parser.py
+++ b/verse/parser/parser.py
@@ -623,8 +623,6 @@ def proc(node: ast.AST, env: Env) -> Any:
     elif isinstance(node, ast.Name):# and isinstance(node.ctx, ast.Load):
         return env.lookup(node.id)
     elif isinstance(node, ast.Attribute) and isinstance(node.ctx, ast.Load):
-        if isinstance(node.value, ast.Name) and node.value.id in env.mode_defs:
-            return node.attr
         obj = proc(node.value, env)
         # TODO since we know what the mode and state types contain we can do some typo checking
         if not_ir_ast(obj):
@@ -704,7 +702,16 @@ def proc(node: ast.AST, env: Env) -> Any:
                 if len(node.args) > 1:
                     raise ValueError("too many args to `copy.deepcopy`")
                 return proc(node.args[0], env)
-            return node
+            ret = copy.deepcopy(node)
+            tmp = []
+            for a in ret.args:
+                if isinstance(a, ast.Attribute) and isinstance(a.value, ast.Name) and a.value.id in env.mode_defs:
+                    tmp.append(ast.Constant(a.attr, kind=None))
+                else: 
+                    tmp.append(a)
+            ret.args = tmp
+        
+            return ret
         if isinstance(fun, ast.arg):
             if fun.arg == "copy.deepcopy":
                 raise Exception("unreachable")