diff --git a/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc b/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc
deleted file mode 100644
index cc656954d093f4c5933f27c989dd3fa3c11b6f1c..0000000000000000000000000000000000000000
Binary files a/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc and /dev/null differ
diff --git a/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc b/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc
deleted file mode 100644
index a06ba46d2fd037c5de118254a50a2126fe8a3f69..0000000000000000000000000000000000000000
Binary files a/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc and /dev/null differ
diff --git a/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc b/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc
deleted file mode 100644
index 62f438879a721f3c291cee585ba7cb6b7f901289..0000000000000000000000000000000000000000
Binary files a/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc and /dev/null differ
diff --git a/energyplus_calibrator/__pycache__/utils.cpython-310.pyc b/energyplus_calibrator/__pycache__/utils.cpython-310.pyc
deleted file mode 100644
index 31985f0c4c5f92099425d6221cbe3d778021570e..0000000000000000000000000000000000000000
Binary files a/energyplus_calibrator/__pycache__/utils.cpython-310.pyc and /dev/null differ
diff --git a/energyplus_calibrator/energy_plus_api.py b/energyplus_calibrator/energy_plus_api.py
index 85427064dfda371278458a16fcc64fd7ecb230e7..bc08172b79b0674ace34d9b80a7145ff6c56f096 100644
--- a/energyplus_calibrator/energy_plus_api.py
+++ b/energyplus_calibrator/energy_plus_api.py
@@ -34,13 +34,13 @@ class EPlusSimulationSetup(SimulationSetup):
         _default_solver: Default solver setting
         _allowed_solvers: List of allowed solver options
     """
-    sim_intervals: List[str] = Field(
+    sim_intervals: List[Union[str, Tuple[datetime, datetime]]] = Field(
         default=['2024-01-01 to 2024-01-02'],
         description='One or many simulation intervals in format "YYYY-MM-DD to YYYY-MM-DD"',
         title='sim_intervals'
     )
 
-    evaluation_intervals: List[str] = Field(
+    evaluation_intervals: List[Union[str, Tuple[datetime, datetime]]] = Field(
         default=['2024-01-01 to 2024-01-02'],
         description='One or many evaluation intervals in format "YYYY-MM-DD to YYYY-MM-DD"',
         title='evaluation_intervals'
@@ -50,7 +50,7 @@ class EPlusSimulationSetup(SimulationSetup):
         default='Timestep',
         description='Interval of the resulting dataframe ("Hourly" or "Timestep")',
         title='dataframe_interval'
-    ),
+    )
 
     n_steps_per_hour: int = Field(
         default=6,
@@ -63,42 +63,55 @@ class EPlusSimulationSetup(SimulationSetup):
 
     @field_validator('sim_intervals', 'evaluation_intervals')
     @classmethod
-    def check_intervals(cls,
-                        intervals: List[str]) -> List[Tuple[datetime, datetime]]:
+    def check_intervals(
+        cls, 
+        intervals: List[Union[str, Tuple[datetime, datetime]]]) -> List[Tuple[datetime, datetime]]:
         """
-        Validate and convert interval strings to datetime tuples.
+        Validate and convert interval strings or datetime tuples.
 
         Args:
-            intervals: List of interval strings in format "YYYY-MM-DD to YYYY-MM-DD"
+            intervals: List of either:
+                - interval strings in format "YYYY-MM-DD to YYYY-MM-DD"
+                - tuples of (start_datetime, stop_datetime)
 
         Returns:
-            List of (start, stop) datetime tuples
+            List of (start_datetime, stop_datetime) tuples
 
         Raises:
             ValueError: If intervals are invalid or not chronologically ordered
         """
+        
         if intervals is None:
             return intervals
+            
         _intervals = []
-        for sim_interval in intervals:
-            if not isinstance(sim_interval, str):
-                return intervals
-            start, stop = sim_interval.split(' to ')
-            start = datetime.strptime(start, "%Y-%m-%d")
-            stop = datetime.strptime(stop, "%Y-%m-%d")
+        for interval in intervals:
+            # If already a datetime tuple, validate and add directly
+            if isinstance(interval, tuple):
+                start, stop = interval
+                if not (isinstance(start, datetime) and isinstance(stop, datetime)):
+                    raise ValueError('Tuple intervals must contain datetime objects')
+            # If string, parse to datetime tuple
+            elif isinstance(interval, str):
+                start, stop = interval.split(' to ')
+                start = datetime.strptime(start, "%Y-%m-%d")
+                stop = datetime.strptime(stop, "%Y-%m-%d")
+            else:
+                raise ValueError('Intervals must be either strings or datetime tuples')
 
             if stop <= start:
-                raise ValueError('Start must be before stop in sim intervals')
-
+                raise ValueError('Start must be before stop in intervals')
+                
             _intervals.append((start, stop))
 
+        # Check chronological order
         for n in range(len(_intervals) - 1):
             if _intervals[n][1] > _intervals[n + 1][0]:
                 raise ValueError(
-                    'When specifying sim intervals, they must be increasing in time, meaning the first'
-                    'simulation interval is the "oldest" interval')
+                    'Intervals must be increasing in time, meaning the first '
+                    'interval is the "oldest" interval')
 
-        return intervals
+        return _intervals
 
     @field_validator('dataframe_interval')
     @classmethod
@@ -192,8 +205,7 @@ class EnergyPlusAPI(SimulationAPI):
             model_name=str(model_path),
             n_cpu=n_cpu
         )
-
-        # set via the sim_intervals in the simulation setup
+        # will be set via the intervals in the simulation setup
         self._start_date = None
         self._stop_date = None
 
@@ -299,10 +311,7 @@ class EnergyPlusAPI(SimulationAPI):
 
         _dfs = []
 
-        for interval in self.sim_setup.sim_intervals:
-            start, stop = interval.split(' to ')
-            start = datetime.strptime(start, "%Y-%m-%d")
-            stop = datetime.strptime(stop, "%Y-%m-%d")
+        for start, stop in self.sim_setup.sim_intervals:
             self._start_date = start
             self._stop_date = stop
 
@@ -521,10 +530,7 @@ class EnergyPlusAPI(SimulationAPI):
         """
         
         _df_list = []
-        for interval in self.sim_setup.evaluation_intervals:
-            start, stop = interval.split(' to ')
-            start = datetime.strptime(start, "%Y-%m-%d")
-            stop = datetime.strptime(stop, "%Y-%m-%d")
+        for start, stop in self.sim_setup.evaluation_intervals:
             _df = df.loc[(df.index > start) &
                          (df.index <= stop + pd.Timedelta(days=1))].copy()
             _df_list.append(_df)
diff --git a/examples/e1_run_energyplus_simulation.py b/examples/e1_run_energyplus_simulation.py
index 2a158615a8e6756bddd9c17e7171b82661611db5..d696ab74749aa93d15f3ca90a26810935e8ef55c 100644
--- a/examples/e1_run_energyplus_simulation.py
+++ b/examples/e1_run_energyplus_simulation.py
@@ -18,6 +18,15 @@ def main():
                             '2015-01-01 to 2015-02-01'
                         ]}
     
+    simulation_setup = {"output_interval": 600,
+                        "sim_intervals": [
+                            '2015-01-01 to 2015-02-01'
+                        ],
+                        "evaluation_intervals": [
+                            '2015-01-01 to 2015-02-01'
+                        ],
+                        "dataframe_interval": "Hourly"}
+    
     parameters = None
 
     EP_API = EnergyPlusAPI(