diff --git a/demo/ball_bounces.py b/demo/ball_bounces.py
index 754b788c6b6f97f8103a50f6fb2b260ddffe943b..68dee14d04b00e120cd7adbeb2891ae149c83837 100644
--- a/demo/ball_bounces.py
+++ b/demo/ball_bounces.py
@@ -1,13 +1,10 @@
-from dryvr_plus_plus.sensor import BaseSensor
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor4
-import plotly.graph_objects as go
 from dryvr_plus_plus.plotter.plotter2D import *
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap3
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_agent.ball_agent import BallAgent
+from dryvr_plus_plus.example import SimpleMap3, BallAgent
+from dryvr_plus_plus import Scenario
 from enum import Enum, auto
 import copy
-from typing import List
+
+
 # from dryvr_plus_plus.map import Lane
 
 
diff --git a/demo/ball_bounces_dev.py b/demo/ball_bounces_dev.py
index 39ee1c10931b33b967c5403eec391c366e20e108..b21960819091a513157506143f98e238c2a1b62a 100644
--- a/demo/ball_bounces_dev.py
+++ b/demo/ball_bounces_dev.py
@@ -1,6 +1,5 @@
 from enum import Enum, auto
-import copy
-from typing import List
+
 
 class BallTypeMode(Enum):
     TYPE1 = auto()
@@ -44,13 +43,10 @@ def controller(ego:State, other: State):
     assert not (dist(ego, other) < 5 and ego.x < other.x), "collision"
     return output
 
-from dryvr_plus_plus.example.example_agent.ball_agent import BallAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap3
+from dryvr_plus_plus.example import BallAgent
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
 import plotly.graph_objects as go
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor4
-from dryvr_plus_plus.sensor import BaseSensor
 
 if __name__ == "__main__":
     ball_controller = './demo/ball_bounces_dev.py'
diff --git a/demo/example_controller1.py b/demo/controller/example_controller1.py
similarity index 100%
rename from demo/example_controller1.py
rename to demo/controller/example_controller1.py
diff --git a/demo/example_controller10.py b/demo/controller/example_controller10.py
similarity index 100%
rename from demo/example_controller10.py
rename to demo/controller/example_controller10.py
diff --git a/demo/example_controller2.py b/demo/controller/example_controller2.py
similarity index 100%
rename from demo/example_controller2.py
rename to demo/controller/example_controller2.py
diff --git a/demo/example_controller3.py b/demo/controller/example_controller3.py
similarity index 100%
rename from demo/example_controller3.py
rename to demo/controller/example_controller3.py
diff --git a/demo/example_controller4.py b/demo/controller/example_controller4.py
similarity index 100%
rename from demo/example_controller4.py
rename to demo/controller/example_controller4.py
diff --git a/demo/example_controller5.py b/demo/controller/example_controller5.py
similarity index 100%
rename from demo/example_controller5.py
rename to demo/controller/example_controller5.py
diff --git a/demo/example_controller6.py b/demo/controller/example_controller6.py
similarity index 100%
rename from demo/example_controller6.py
rename to demo/controller/example_controller6.py
diff --git a/demo/example_controller7.py b/demo/controller/example_controller7.py
similarity index 100%
rename from demo/example_controller7.py
rename to demo/controller/example_controller7.py
diff --git a/demo/example_controller8.py b/demo/controller/example_controller8.py
similarity index 100%
rename from demo/example_controller8.py
rename to demo/controller/example_controller8.py
diff --git a/demo/example_controller9.py b/demo/controller/example_controller9.py
similarity index 100%
rename from demo/example_controller9.py
rename to demo/controller/example_controller9.py
diff --git a/demo/example_two_car_sign_lane_switch.py b/demo/controller/example_two_car_sign_lane_switch.py
similarity index 91%
rename from demo/example_two_car_sign_lane_switch.py
rename to demo/controller/example_two_car_sign_lane_switch.py
index 1930576211bd0ea249e80da7a69645f7fbd86359..6f7d9798ce49f00c6dda9386d0923eb7ea09163f 100644
--- a/demo/example_two_car_sign_lane_switch.py
+++ b/demo/controller/example_two_car_sign_lane_switch.py
@@ -1,9 +1,9 @@
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor2
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap3
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_agent.sign_agent import SignAgent
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent
-from dryvr_plus_plus.plotter.plotter2D import *
+from dryvr_plus_plus.example import FakeSensor2
+from dryvr_plus_plus.example import SimpleMap3
+from dryvr_plus_plus import Scenario
+from dryvr_plus_plus.example import SignAgent
+from dryvr_plus_plus.example import CarAgent
+from dryvr_plus_plus.plotter2D import *
 
 from enum import Enum, auto
 import copy
diff --git a/demo/demo1.py b/demo/demo1.py
index 80b267bca24c217d61cd74d5ea4f71bdc179213d..f491c41c7edb7b788063e51587afa15774177004 100644
--- a/demo/demo1.py
+++ b/demo/demo1.py
@@ -1,9 +1,6 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor2
+from dryvr_plus_plus.example import CarAgent, NPCAgent, SimpleMap2, FakeSensor2
+from dryvr_plus_plus import Scenario
 from enum import Enum, auto
-import plotly.graph_objects as go
 from dryvr_plus_plus.plotter.plotter2D import *
 
 
@@ -33,7 +30,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller1.py'
+    input_code_name = './demo/controller/example_controller1.py'
     scenario = Scenario()
 
     car = NPCAgent('car1')
diff --git a/demo/demo10.py b/demo/demo10.py
index 4ae5e871f4f3b9b8854086e295b2f9805267086a..bd7571f688187d76567aefc6827d73269c25e078 100644
--- a/demo/demo10.py
+++ b/demo/demo10.py
@@ -1,7 +1,5 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6, SimpleMap3_v2
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor2
+from dryvr_plus_plus.example import CarAgent, SimpleMap3_v2, FakeSensor2
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
 
 from enum import Enum, auto
@@ -35,7 +33,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller10.py'
+    input_code_name = './demo/controller/example_controller10.py'
     scenario = Scenario()
 
     car = CarAgent('car1', file_name=input_code_name)
diff --git a/demo/demo2.py b/demo/demo2.py
index 357ebf75b3442f8b3dfb17c7292a40fd013f786c..6cad100dd03191cdc1568f29baabe3b4b014f945 100644
--- a/demo/demo2.py
+++ b/demo/demo2.py
@@ -1,13 +1,7 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor2
-from enum import Enum, auto
-import plotly.graph_objects as go
+from dryvr_plus_plus.example import CarAgent, SimpleMap3, FakeSensor2
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
-
-
-import numpy as np
+from enum import Enum, auto
 
 
 class VehicleMode(Enum):
@@ -36,7 +30,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller2.py'
+    input_code_name = './demo/controller/example_controller2.py'
     scenario = Scenario()
 
     car = CarAgent('car1', file_name=input_code_name)
diff --git a/demo/demo3.py b/demo/demo3.py
index 1d159d99ebd6d62dbe6bb2c69e526cee94e8512c..32508c0251e0e8474fa6a9e3081e777dea6748ae 100644
--- a/demo/demo3.py
+++ b/demo/demo3.py
@@ -1,8 +1,6 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
+from dryvr_plus_plus.example import CarAgent, NPCAgent, SimpleMap3
+from dryvr_plus_plus import Scenario
 from enum import Enum, auto
-import plotly.graph_objects as go
 from dryvr_plus_plus.plotter.plotter2D import *
 
 
@@ -41,7 +39,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller4.py'
+    input_code_name = './controller/example_controller4.py'
     scenario = Scenario()
 
     scenario.add_agent(CarAgent('car1', file_name=input_code_name))
diff --git a/demo/demo4.py b/demo/demo4.py
index fd631ba44d458d8dce07a30b4c9e1bcc55aa1d05..9316da449398b91ffeb7180699ef26b17963f66a 100644
--- a/demo/demo4.py
+++ b/demo/demo4.py
@@ -1,6 +1,5 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap4, SimpleMap5, SimpleMap6
+from dryvr_plus_plus.example import CarAgent, NPCAgent, SimpleMap4
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
 
 from enum import Enum, auto
@@ -43,7 +42,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller8.py'
+    input_code_name = './demo/controller/example_controller8.py'
     scenario = Scenario()
 
     car = CarAgent('car1', file_name=input_code_name)
diff --git a/demo/demo5.py b/demo/demo5.py
index 58efc3a84fc0c64dff4ef60b160df3988771ba4e..b67f55f3b875318142b9dc70d9737d937f92382f 100644
--- a/demo/demo5.py
+++ b/demo/demo5.py
@@ -1,10 +1,7 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
-from dryvr_plus_plus.sensor import BaseSensor
-from enum import Enum, auto
-import plotly.graph_objects as go
+from dryvr_plus_plus.example import CarAgent, NPCAgent, SimpleMap3
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
+from enum import Enum, auto
 
 
 class LaneObjectMode(Enum):
@@ -29,7 +26,7 @@ class LaneMode(Enum):
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller7.py'
+    input_code_name = './demo/controller/example_controller7.py'
     scenario = Scenario()
 
     car = CarAgent('car1', file_name=input_code_name)
diff --git a/demo/demo6.py b/demo/demo6.py
index 7dd1186ecc4275b64cf0ce6da8a20012554e77e7..2d974e792081c1410ae0e5e760b9161e44a79685 100644
--- a/demo/demo6.py
+++ b/demo/demo6.py
@@ -1,8 +1,6 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap4, SimpleMap5, SimpleMap6
+from dryvr_plus_plus.example import CarAgent, NPCAgent, SimpleMap4
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
-from dryvr_plus_plus.sensor import BaseSensor
 
 from enum import Enum, auto
 import plotly.graph_objects as go
@@ -43,7 +41,7 @@ class LaneMode(Enum):
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller7.py'
+    input_code_name = './demo/controller/example_controller7.py'
     scenario = Scenario()
 
     car = CarAgent('car1', file_name=input_code_name)
diff --git a/demo/demo7.py b/demo/demo7.py
index afecb72dec5e8c6edf4c72831e5a84e061a970f9..71032326138a7b03f793572cb09220368d49b19a 100644
--- a/demo/demo7.py
+++ b/demo/demo7.py
@@ -1,10 +1,8 @@
 # SM: Noting some things about the example
 
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap4, SimpleMap5, SimpleMap6
+from dryvr_plus_plus.example import CarAgent, NPCAgent, SimpleMap4
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
-from dryvr_plus_plus.sensor import BaseSensor
 
 from enum import Enum, auto
 import plotly.graph_objects as go
@@ -46,7 +44,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller8.py'
+    input_code_name = './demo/controller/example_controller8.py'
     scenario = Scenario()
 
 
diff --git a/demo/demo8.py b/demo/demo8.py
index 0c2c6dc9c6d7d73770fa54b83c67b42664a1c71b..a7e1158603e75c8bd69538346de6632ecf21e942 100644
--- a/demo/demo8.py
+++ b/demo/demo8.py
@@ -1,7 +1,5 @@
-from dryvr_plus_plus.example.example_agent.car_agent import CarAgent, NPCAgent
-from dryvr_plus_plus.example.example_agent.sign_agent import SignAgent
-from dryvr_plus_plus.scenario import Scenario
-from dryvr_plus_plus.example.example_map.simple_map2 import SimpleMap2, SimpleMap3, SimpleMap5, SimpleMap6
+from dryvr_plus_plus.example import CarAgent, SignAgent, SimpleMap3
+from dryvr_plus_plus import Scenario
 from dryvr_plus_plus.plotter.plotter2D import *
 
 from enum import Enum, auto
@@ -42,7 +40,7 @@ class State:
 
 
 if __name__ == "__main__":
-    input_code_name = './demo/example_controller9.py'
+    input_code_name = './demo/controller/example_controller9.py'
     scenario = Scenario()
 
     car = CarAgent('car1', file_name=input_code_name)
diff --git a/dryvr_plus_plus/__init__.py b/dryvr_plus_plus/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..af3ec2c61677a78e5cfe6fcfc6992d2785c14757 100644
--- a/dryvr_plus_plus/__init__.py
+++ b/dryvr_plus_plus/__init__.py
@@ -0,0 +1,8 @@
+from .agents import *
+from .sensor import *
+from .map import *
+from .scenario import *
+
+from .reachability_engine import *
+from .plotter import plotter2D, plotter3D
+from . import sensor, scenario, reachability_engine, plotter, map, example, code_parser, automaton, analysis, agents
diff --git a/dryvr_plus_plus/agents/__init__.py b/dryvr_plus_plus/agents/__init__.py
index fcf6102ab7d0406564912b1125ec0bb1db78b860..1a24524c641ee6a2dc1ebc4faf03ec81c5bf800b 100644
--- a/dryvr_plus_plus/agents/__init__.py
+++ b/dryvr_plus_plus/agents/__init__.py
@@ -1 +1,2 @@
-from dryvr_plus_plus.agents.base_agent import BaseAgent
+from . import base_agent
+from .base_agent import BaseAgent
diff --git a/dryvr_plus_plus/analysis/__init__.py b/dryvr_plus_plus/analysis/__init__.py
index b9cd78de2d8d5d62bfd461b193c4e128370072a2..0e99ae1521bab2784e681061fe1fa57caef67be5 100644
--- a/dryvr_plus_plus/analysis/__init__.py
+++ b/dryvr_plus_plus/analysis/__init__.py
@@ -1,3 +1,4 @@
-from dryvr_plus_plus.analysis.analysis_tree_node import AnalysisTreeNode
-from dryvr_plus_plus.analysis.simulator import Simulator
-from dryvr_plus_plus.analysis.verifier import Verifier
+from . import simulator, verifier, analysis_tree_node
+from .analysis_tree_node import AnalysisTreeNode
+from .simulator import Simulator
+from .verifier import Verifier
diff --git a/dryvr_plus_plus/analysis/simulator.py b/dryvr_plus_plus/analysis/simulator.py
index fd5f431c3857e4e1e7c91688c0ef8923629d9821..2298c145c492fca7e67dbaef47defec06b4d6c52 100644
--- a/dryvr_plus_plus/analysis/simulator.py
+++ b/dryvr_plus_plus/analysis/simulator.py
@@ -5,8 +5,8 @@ import itertools, functools
 import pprint
 pp = functools.partial(pprint.pprint, compact=True, width=100)
 
-from dryvr_plus_plus.agents import BaseAgent
-from dryvr_plus_plus.analysis import AnalysisTreeNode
+from dryvr_plus_plus.agents.base_agent import BaseAgent
+from dryvr_plus_plus.analysis.analysis_tree_node import AnalysisTreeNode
 
 class Simulator:
     def __init__(self):
diff --git a/dryvr_plus_plus/analysis/verifier.py b/dryvr_plus_plus/analysis/verifier.py
index cc4724403b4dca67fabe3af4d979c31d39a04943..ac4fea85f0d06705ca03132b8ffd9fde3f5ef09b 100644
--- a/dryvr_plus_plus/analysis/verifier.py
+++ b/dryvr_plus_plus/analysis/verifier.py
@@ -1,11 +1,11 @@
-from typing import List, Dict
+from typing import List
 import copy
 
 import numpy as np
 
-from dryvr_plus_plus.agents import BaseAgent
-from dryvr_plus_plus.analysis import AnalysisTreeNode
-from dryvr_plus_plus.dryvr import calc_bloated_tube, SIMTRACENUM
+from dryvr_plus_plus.agents.base_agent import BaseAgent
+from dryvr_plus_plus.analysis.analysis_tree_node import AnalysisTreeNode
+from dryvr_plus_plus.reachability_engine.dryvr import calc_bloated_tube, SIMTRACENUM
 
 class Verifier:
     def __init__(self):
diff --git a/dryvr_plus_plus/automaton/__init__.py b/dryvr_plus_plus/automaton/__init__.py
index 1574d747d76fe990f830d4b8e71ad3a08b603b18..0651cd10599cb4dcfea46cdffaa8ce8559e697af 100644
--- a/dryvr_plus_plus/automaton/__init__.py
+++ b/dryvr_plus_plus/automaton/__init__.py
@@ -1,2 +1,3 @@
-from dryvr_plus_plus.automaton.guard import GuardExpressionAst
-from dryvr_plus_plus.automaton.reset import ResetExpression
+from . import guard, reset
+from .guard import GuardExpressionAst
+from .reset import ResetExpression
diff --git a/dryvr_plus_plus/automaton/guard.py b/dryvr_plus_plus/automaton/guard.py
index 5d93fb766bfcf78e9b13f4d93df1c0591419f1ed..ec844a0a396d5c9d147d1d400b0897b3a5dbc120 100644
--- a/dryvr_plus_plus/automaton/guard.py
+++ b/dryvr_plus_plus/automaton/guard.py
@@ -1,14 +1,12 @@
-from typing import List, Dict, Any
+from typing import Any
 import pickle
 import ast
-import copy
 
 from z3 import *
-import numpy as np
 
 from dryvr_plus_plus.map import LaneMap, AbstractLane
-from dryvr_plus_plus.utils import *
-from dryvr_plus_plus.agents import BaseAgent
+from dryvr_plus_plus.reachability_engine.utils import *
+from dryvr_plus_plus.agents.base_agent import BaseAgent
 from dryvr_plus_plus.code_parser import Reduction, ReductionType, unparse
 
 class LogicTreeNode:
diff --git a/dryvr_plus_plus/code_parser/__init__.py b/dryvr_plus_plus/code_parser/__init__.py
index d80ed7918346f55da021aeca3b9007b76abd7958..94dd2096946c228da4dd33ce7c1bd297e8cbdf9c 100644
--- a/dryvr_plus_plus/code_parser/__init__.py
+++ b/dryvr_plus_plus/code_parser/__init__.py
@@ -1 +1,2 @@
-from dryvr_plus_plus.code_parser.parser import ControllerIR, StateDef, ModeDef, Lambda, Reduction, ReductionType, unparse
+from . import astunparser, parser
+from .parser import ControllerIR, StateDef, ModeDef, Lambda, Reduction, ReductionType, unparse
diff --git a/dryvr_plus_plus/code_parser/parser.py b/dryvr_plus_plus/code_parser/parser.py
index 417148e2373268fba208963f311e6876a8766ae5..e94fdd4575dcd753846ff7452e1e4c85ab4d8dcc 100644
--- a/dryvr_plus_plus/code_parser/parser.py
+++ b/dryvr_plus_plus/code_parser/parser.py
@@ -3,7 +3,7 @@ from typing import List, Dict, Union, Optional, Any, Tuple
 from dataclasses import dataclass, field, fields
 from enum import Enum, auto
 from dryvr_plus_plus.code_parser import astunparser
-from dryvr_plus_plus.utils import find
+from dryvr_plus_plus.reachability_engine.utils import find
 
 def merge_conds(c):
     if len(c) == 0:
diff --git a/dryvr_plus_plus/example/__init__.py b/dryvr_plus_plus/example/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3bb9efd19441a15ccddc244e9d5e279d584cbab6 100644
--- a/dryvr_plus_plus/example/__init__.py
+++ b/dryvr_plus_plus/example/__init__.py
@@ -0,0 +1,4 @@
+from . import example_agent, example_map, example_sensor
+from .example_agent import *
+from .example_map import *
+from .example_sensor import *
\ No newline at end of file
diff --git a/dryvr_plus_plus/example/example_agent/__init__.py b/dryvr_plus_plus/example/example_agent/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1f841e3b9b8c66e9d6c12b7c89d661ee182f6fc5 100644
--- a/dryvr_plus_plus/example/example_agent/__init__.py
+++ b/dryvr_plus_plus/example/example_agent/__init__.py
@@ -0,0 +1,4 @@
+from . import ball_agent, car_agent, sign_agent
+from .ball_agent import BallAgent
+from .car_agent import CarAgent, NPCAgent
+from .sign_agent import  SignAgent
\ No newline at end of file
diff --git a/dryvr_plus_plus/example/example_agent/ball_agent.py b/dryvr_plus_plus/example/example_agent/ball_agent.py
index 8abfccfbf94c9e5d7f9225a52a8761d4e28f65e7..22aa9419581bddfac8f321219460f18baa276704 100644
--- a/dryvr_plus_plus/example/example_agent/ball_agent.py
+++ b/dryvr_plus_plus/example/example_agent/ball_agent.py
@@ -4,8 +4,8 @@ from typing import Tuple, List
 import numpy as np
 from scipy.integrate import ode
 
-from dryvr_plus_plus.agents import BaseAgent
-from dryvr_plus_plus.map import LaneMap
+from dryvr_plus_plus import BaseAgent
+from dryvr_plus_plus import LaneMap
 
 
 class BallAgent(BaseAgent):
diff --git a/dryvr_plus_plus/example/example_agent/car_agent.py b/dryvr_plus_plus/example/example_agent/car_agent.py
index 8150778f7925a226517d050c7a77a7301ce97bda..445a3ae0fe90dfd8565aacb578f4cae2781670cc 100644
--- a/dryvr_plus_plus/example/example_agent/car_agent.py
+++ b/dryvr_plus_plus/example/example_agent/car_agent.py
@@ -4,8 +4,8 @@ from typing import Tuple, List
 import numpy as np
 from scipy.integrate import ode
 
-from dryvr_plus_plus.agents import BaseAgent
-from dryvr_plus_plus.map import LaneMap
+from dryvr_plus_plus import BaseAgent
+from dryvr_plus_plus import LaneMap
 from dryvr_plus_plus.code_parser import ControllerIR
 
 
diff --git a/dryvr_plus_plus/example/example_agent/sign_agent.py b/dryvr_plus_plus/example/example_agent/sign_agent.py
index 7746c4175eb9e15eadea3d79bc13b13711073a0f..31db92782710cb1dcfaf02fa5d47c3bbd1bd6443 100644
--- a/dryvr_plus_plus/example/example_agent/sign_agent.py
+++ b/dryvr_plus_plus/example/example_agent/sign_agent.py
@@ -1,4 +1,4 @@
-from dryvr_plus_plus.agents import BaseAgent
+from dryvr_plus_plus import BaseAgent
 import numpy as np
 from dryvr_plus_plus.code_parser import ControllerIR
 
diff --git a/dryvr_plus_plus/example/example_map/__init__.py b/dryvr_plus_plus/example/example_map/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6a212095c04a3a72c94bae3387a1894f98012509 100644
--- a/dryvr_plus_plus/example/example_map/__init__.py
+++ b/dryvr_plus_plus/example/example_map/__init__.py
@@ -0,0 +1,3 @@
+from . import simple_map, simple_map2
+from .simple_map import *
+from .simple_map2 import *
\ No newline at end of file
diff --git a/dryvr_plus_plus/example/example_map/simple_map.py b/dryvr_plus_plus/example/example_map/simple_map.py
index d61aecab54feb30605edaedd15b4912ee52a918d..943ef7c21cf6b6ff26c1193e677a29a62c598d7e 100644
--- a/dryvr_plus_plus/example/example_map/simple_map.py
+++ b/dryvr_plus_plus/example/example_map/simple_map.py
@@ -1,4 +1,4 @@
-from dryvr_plus_plus.map import LaneMap, LaneSegment
+from dryvr_plus_plus import LaneMap, LaneSegment
 
 class SimpleMap(LaneMap):
     def __init__(self):
diff --git a/dryvr_plus_plus/example/example_map/simple_map2.py b/dryvr_plus_plus/example/example_map/simple_map2.py
index 66126a2c4e84adbf83ea463a176f8209952609bc..49af38b66ed4f1780158e30c334a5d5b5b5696ab 100644
--- a/dryvr_plus_plus/example/example_map/simple_map2.py
+++ b/dryvr_plus_plus/example/example_map/simple_map2.py
@@ -1,4 +1,4 @@
-from dryvr_plus_plus.map import LaneMap, LaneSegment, StraightLane, CircularLane, Lane
+from dryvr_plus_plus import LaneMap, LaneSegment, StraightLane, CircularLane, Lane
 
 import numpy as np
 
diff --git a/dryvr_plus_plus/example/example_sensor/__init__.py b/dryvr_plus_plus/example/example_sensor/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..58456deab85a455132fb357c67dda535f0b48a5f 100644
--- a/dryvr_plus_plus/example/example_sensor/__init__.py
+++ b/dryvr_plus_plus/example/example_sensor/__init__.py
@@ -0,0 +1,2 @@
+from . import fake_sensor
+from .fake_sensor import *
\ No newline at end of file
diff --git a/dryvr_plus_plus/map/__init__.py b/dryvr_plus_plus/map/__init__.py
index 0fe16879b55685203c47b3fed5622aa48744e0c7..417b0d6b9e7726799bebe6160912df80cde0e59e 100644
--- a/dryvr_plus_plus/map/__init__.py
+++ b/dryvr_plus_plus/map/__init__.py
@@ -1,3 +1,4 @@
-from dryvr_plus_plus.map.lane_segment import AbstractLane, LaneSegment, StraightLane, CircularLane
-from dryvr_plus_plus.map.lane_map import LaneMap
-from dryvr_plus_plus.map.lane import Lane
+from . import lane_segment, lane_map, lane
+from .lane_segment import AbstractLane, LaneSegment, StraightLane, CircularLane
+from .lane_map import LaneMap
+from .lane import Lane
diff --git a/dryvr_plus_plus/map/lane_segment.py b/dryvr_plus_plus/map/lane_segment.py
index 36a4c83161b342658b15d131d9692424aab186e9..db2a32c0003830d1ac34831f12f8a07ee5fd51f6 100644
--- a/dryvr_plus_plus/map/lane_segment.py
+++ b/dryvr_plus_plus/map/lane_segment.py
@@ -3,7 +3,7 @@ from abc import ABCMeta, abstractmethod
 from typing import Tuple, List, Optional
 import copy
 
-from dryvr_plus_plus.utils import wrap_to_pi, Vector, get_class_path, class_from_path, to_serializable
+from dryvr_plus_plus.reachability_engine.utils import wrap_to_pi, Vector, get_class_path, to_serializable
 
 
 class LineType:
diff --git a/dryvr_plus_plus/plotter/__init__.py b/dryvr_plus_plus/plotter/__init__.py
index 5dbc287d927065e02e00ed2cccd0389194764818..82943711d2fd0ab8bf62d81d5d4546d962ee1715 100644
--- a/dryvr_plus_plus/plotter/__init__.py
+++ b/dryvr_plus_plus/plotter/__init__.py
@@ -19,4 +19,5 @@
 #
 #
 #     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#	Codes are far away from bugs with the protection
\ No newline at end of file
+#	Codes are far away from bugs with the protection
+from . import parser, plotter2D, plotter3D
diff --git a/dryvr_plus_plus/plotter/plotter2D.py b/dryvr_plus_plus/plotter/plotter2D.py
index 42d75895deb3af49ff89ee7967e3f57e236020f9..7f0ac77edcc26aaf27f0a018b902b043ecde8f8c 100644
--- a/dryvr_plus_plus/plotter/plotter2D.py
+++ b/dryvr_plus_plus/plotter/plotter2D.py
@@ -4,12 +4,10 @@ This file consist main plotter code for DryVR reachtube output
 
 from __future__ import annotations
 import numpy as np
-from math import pi
 import plotly.graph_objects as go
 from typing import List, Tuple
 from plotly.graph_objs.scatter import Marker
-import copy
-# from dryvr_plus_plus.analysis.analysis_tree_node import AnalysisTreeNode
+# from dryvr_plus_plus import AnalysisTreeNode
 
 colors = [['#CC0000', '#FF0000', '#FF3333', '#FF6666', '#FF9999'],
           ['#CC6600', '#FF8000', '#FF9933', '#FFB266', '#FFCC99'],
diff --git a/dryvr_plus_plus/plotter/plotter3D.py b/dryvr_plus_plus/plotter/plotter3D.py
index 68a3a96f6d2e2aba25bd8b7f2ac2cbcd9705847f..4ffcc086a28839599185c32b5dcf900a5ba9b8a6 100644
--- a/dryvr_plus_plus/plotter/plotter3D.py
+++ b/dryvr_plus_plus/plotter/plotter3D.py
@@ -1,5 +1,4 @@
 # Plot polytope in 3d
-# Written by: Kristina Miller
 
 import numpy as np
 
diff --git a/dryvr_plus_plus/reachability_engine/__init__.py b/dryvr_plus_plus/reachability_engine/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..f5d04b4cc7b557b99807d17232335c19f12873ef
--- /dev/null
+++ b/dryvr_plus_plus/reachability_engine/__init__.py
@@ -0,0 +1 @@
+from . import dryvr
\ No newline at end of file
diff --git a/dryvr_plus_plus/dryvr.py b/dryvr_plus_plus/reachability_engine/dryvr.py
similarity index 100%
rename from dryvr_plus_plus/dryvr.py
rename to dryvr_plus_plus/reachability_engine/dryvr.py
diff --git a/dryvr_plus_plus/utils.py b/dryvr_plus_plus/reachability_engine/utils.py
similarity index 100%
rename from dryvr_plus_plus/utils.py
rename to dryvr_plus_plus/reachability_engine/utils.py
diff --git a/dryvr_plus_plus/scenario/__init__.py b/dryvr_plus_plus/scenario/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..d0b85f91a62a505230b77bc564bbb59815dd314b
--- /dev/null
+++ b/dryvr_plus_plus/scenario/__init__.py
@@ -0,0 +1,2 @@
+from . import scenario
+from .scenario import *
\ No newline at end of file
diff --git a/dryvr_plus_plus/scenario.py b/dryvr_plus_plus/scenario/scenario.py
similarity index 99%
rename from dryvr_plus_plus/scenario.py
rename to dryvr_plus_plus/scenario/scenario.py
index 6af44de4c7cc313440538742be834456076ffdc2..640899ea132864502d374632636765a96f3aeaa5 100644
--- a/dryvr_plus_plus/scenario.py
+++ b/dryvr_plus_plus/scenario/scenario.py
@@ -7,12 +7,12 @@ import ast
 
 import numpy as np
 
-from dryvr_plus_plus.agents import BaseAgent
+from dryvr_plus_plus.agents.base_agent import BaseAgent
 from dryvr_plus_plus.automaton import GuardExpressionAst, ResetExpression
 from dryvr_plus_plus.analysis import Simulator, Verifier, AnalysisTreeNode
-from dryvr_plus_plus.utils import find, sample_rect
-from dryvr_plus_plus.sensor import BaseSensor
-from dryvr_plus_plus.map import LaneMap
+from dryvr_plus_plus.reachability_engine.utils import find, sample_rect
+from dryvr_plus_plus.sensor.base_sensor import BaseSensor
+from dryvr_plus_plus.map.lane_map import LaneMap
 
 EGO, OTHERS = "ego", "others"
 
diff --git a/dryvr_plus_plus/sensor/__init__.py b/dryvr_plus_plus/sensor/__init__.py
index 5fdd4a838f3fc53ba8559a6531c52d49755065d0..9f6c0813058057a165d44ce6fb458f4e78e112b4 100644
--- a/dryvr_plus_plus/sensor/__init__.py
+++ b/dryvr_plus_plus/sensor/__init__.py
@@ -1 +1,2 @@
-from dryvr_plus_plus.sensor.base_sensor import BaseSensor
+from . import base_sensor
+from .base_sensor import BaseSensor
\ No newline at end of file
diff --git a/dryvr_plus_plus/sensor/base_sensor.py b/dryvr_plus_plus/sensor/base_sensor.py
index e77246b9d17b9307e6e90502ad7b8ddea326cdd8..b668a38d02ef08686ab9fb78422a49db2f6dbceb 100644
--- a/dryvr_plus_plus/sensor/base_sensor.py
+++ b/dryvr_plus_plus/sensor/base_sensor.py
@@ -1,5 +1,5 @@
 import numpy as np
-from dryvr_plus_plus.agents import BaseAgent
+from dryvr_plus_plus.agents.base_agent import BaseAgent
 
 def sets(d, thing, attrs, vals):
     d.update({thing + "." + k: v for k, v in zip(attrs, vals)})
diff --git a/tests/testdpp.py b/tests/testdpp.py
index 5c2ebb35d36dcd74b6a4b41d5f25a275f6670dd8..e030d76653c573ff62dbf00ad331d4f777060cfc 100644
--- a/tests/testdpp.py
+++ b/tests/testdpp.py
@@ -48,11 +48,8 @@ def controller(ego:State):
     return output_vehicle_mode, output_lane_mode
 
 from dryvr_plus_plus.example.example_agent.car_agent import CarAgent
-from dryvr_plus_plus.scenario import Scenario
+from dryvr_plus_plus.scenario.scenario import Scenario
 from dryvr_plus_plus.example.example_map.simple_map import SimpleMap2
-from dryvr_plus_plus.example.example_sensor.fake_sensor import FakeSensor1
-import matplotlib.pyplot as plt
-import numpy as np
 
 
 class TestSimulatorMethods(unittest.TestCase):