diff --git a/Simulation/Aivika/Experiment.hs b/Simulation/Aivika/Experiment.hs
--- a/Simulation/Aivika/Experiment.hs
+++ b/Simulation/Aivika/Experiment.hs
@@ -70,14 +70,14 @@
 
 import GHC.Conc (getNumCapabilities)
 
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
 import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Signal
-import Simulation.Aivika.Dynamics.Ref
-import Simulation.Aivika.Dynamics.Var
-import Simulation.Aivika.Dynamics.UVar
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Parameter
+import Simulation.Aivika.Event
+import Simulation.Aivika.Signal
+import Simulation.Aivika.Ref
+import Simulation.Aivika.Var
+import Simulation.Aivika.Parameter
 import Simulation.Aivika.Statistics
 
 import Simulation.Aivika.Experiment.HtmlWriter
@@ -146,7 +146,7 @@
 -- is numeric but it may be any string.
 --  
 -- At the same time, if the array or list of numeric values
--- is wrapped in monad 'Simulation' or 'Dynamics' then the
+-- is wrapped in monads 'Simulation', 'Dynamics' or 'Event' then the
 -- underlying numeric array and list are already treated as
 -- a sampling statistics or list of numbers in time point.
 --
@@ -170,19 +170,19 @@
 data SeriesProvider =
   SeriesProvider { providerName :: String,
                    -- ^ Return the name.
-                   providerToDouble :: Maybe (Dynamics Double),
+                   providerToDouble :: Maybe (Event Double),
                    -- ^ Try to return the data as double values.
-                   providerToDoubleStats :: Maybe (Dynamics (SamplingStats Double)),
+                   providerToDoubleStats :: Maybe (Event (SamplingStats Double)),
                    -- ^ Try to return the statistics data in time points.
-                   providerToDoubleList :: Maybe (Dynamics [Double]),
+                   providerToDoubleList :: Maybe (Event [Double]),
                    -- ^ Try to return the list of double values.
-                   providerToInt :: Maybe (Dynamics Int),
+                   providerToInt :: Maybe (Event Int),
                    -- ^ Try to return the data as integers.
-                   providerToIntStats :: Maybe (Dynamics (SamplingStats Int)),
+                   providerToIntStats :: Maybe (Event (SamplingStats Int)),
                    -- ^ Try to return the statistics data in time points.
-                   providerToIntList :: Maybe (Dynamics [Int]),
+                   providerToIntList :: Maybe (Event [Int]),
                    -- ^ Try to return the list of integer values.
-                   providerToString :: Maybe (Dynamics String),
+                   providerToString :: Maybe (Event String),
                    -- ^ Try to return the data as strings.
                    providerSignal :: Maybe (Signal ())
                    -- ^ Try to get a signal for the data, which
@@ -195,9 +195,7 @@
 
 -- | It describes the source simulation data used in the experiment.
 data ExperimentData =
-  ExperimentData { experimentQueue :: EventQueue,
-                   -- ^ Return the event queue.
-                   experimentSignalInIntegTimes :: Signal Double,
+  ExperimentData { experimentSignalInIntegTimes :: Signal Double,
                    -- ^ The signal triggered in the integration time points.
                    experimentSignalInStartTime :: Signal Double,
                    -- ^ The signal triggered in the start time.
@@ -209,14 +207,13 @@
 
 -- | Prepare data for the simulation experiment in start time from the series 
 -- with the specified labels.
-experimentDataInStartTime :: EventQueue -> [(String, SeriesEntity)] -> Simulation ExperimentData
-experimentDataInStartTime q m = runDynamicsInStartTime d where
-  d = do signalInIntegTimes <- newSignalInIntegTimes q
-         signalInStartTime  <- newSignalInStartTime q
-         signalInStopTime   <- newSignalInStopTime q
+experimentDataInStartTime :: [(String, SeriesEntity)] -> Simulation ExperimentData
+experimentDataInStartTime m = runEventInStartTime IncludingEarlierEvents d where
+  d = do signalInIntegTimes <- newSignalInIntegTimes
+         signalInStartTime  <- newSignalInStartTime
+         signalInStopTime   <- newSignalInStopTime
          let series = M.fromList m
-         return ExperimentData { experimentQueue              = q,
-                                 experimentSignalInIntegTimes = signalInIntegTimes,
+         return ExperimentData { experimentSignalInIntegTimes = signalInIntegTimes,
                                  experimentSignalInStartTime  = signalInStartTime,
                                  experimentSignalInStopTime   = signalInStopTime,
                                  experimentSeries             = series }
@@ -260,8 +257,7 @@
              reporterFinalise   :: IO (),
              -- ^ Finalise the reporting after
              -- all simulation runs are finished.
-             reporterSimulate   :: ExperimentData -> 
-                                   Dynamics (Dynamics ()),
+             reporterSimulate   :: ExperimentData -> Event (Event ()),
              -- ^ Start the simulation run in the start time
              -- and return a finalizer that will be called 
              -- in the stop time after the last signal is 
@@ -326,12 +322,11 @@
      let simulate :: Simulation ()
          simulate =
            do d  <- simulation
-              fs <- runDynamicsInStartTime $
+              fs <- runEventInStartTime IncludingEarlierEvents $
                     forM reporters $ \reporter ->
                     reporterSimulate reporter d
-              runDynamicsInStopTime $
-                do runQueueSync $ experimentQueue d
-                   sequence_ fs
+              runEventInStopTime IncludingCurrentEvents $
+                sequence_ fs
      executor $ runSimulations simulate specs runCount
      forM_ reporters reporterFinalise
      experimentIndexHtml e e reporters path
@@ -432,7 +427,7 @@
 class SeriesContainer c where
 
   -- | Extract data from the container.
-  containerData :: c a -> Dynamics a
+  containerData :: c a -> Event a
 
   -- | Get the signal for the container.
   containerSignal :: c a => Maybe (Signal ())
@@ -445,6 +440,12 @@
 
 instance SeriesContainer Dynamics where
 
+  containerData = liftDynamics
+
+  containerSignal = const Nothing
+
+instance SeriesContainer Event where
+
   containerData = id
 
   containerSignal = const Nothing
@@ -541,44 +542,6 @@
                                         providerSignal =
                                           containerSignal s }] }
 
-instance Series (UVar Double) where
-  
-  seriesEntity name s =
-    SeriesEntity { seriesProviders =
-                      [SeriesProvider { providerName     = name,
-                                        providerToDouble = Just $ readUVar s,
-                                        providerToDoubleStats =
-                                          Just $ fmap returnSamplingStats (readUVar s),
-                                        providerToDoubleList =
-                                          Just $ fmap return (readUVar s),
-                                        providerToInt    = Nothing,
-                                        providerToIntStats = Nothing,
-                                        providerToIntList = Nothing,
-                                        providerToString = Just $ fmap show (readUVar s),
-                                        providerSignal   = Just $ uvarChanged_ s }] }
-
-instance Series (UVar Int) where
-  
-  seriesEntity name s =
-    SeriesEntity { seriesProviders =
-                      [SeriesProvider { providerName     = name,
-                                        providerToDouble = Just $ fmap fromIntegral (readUVar s),
-                                        providerToDoubleStats =
-                                          Just $
-                                          fmap returnSamplingStats $
-                                          fmap fromIntegral (readUVar s),
-                                        providerToDoubleList =
-                                          Just $
-                                          fmap return $
-                                          fmap fromIntegral (readUVar s),
-                                        providerToInt    = Just $ readUVar s,
-                                        providerToIntStats =
-                                          Just $ fmap returnSamplingStats (readUVar s),
-                                        providerToIntList =
-                                          Just $ fmap return (readUVar s),
-                                        providerToString = Just $ fmap show (readUVar s),
-                                        providerSignal   = Just $ uvarChanged_ s }] }
-    
 instance Series s => Series [s] where
   
   seriesEntity name s = 
@@ -619,17 +582,33 @@
                               seriesVectorSubscript :: V.Vector String }
 
 -- | Add the specified subscript to the list.
-seriesListWithSubscript :: Series s => [s] -> [String] -> SeriesListWithSubscript s
+seriesListWithSubscript :: Series s
+                           => [s]
+                           -- ^ the list to subscript
+                           -> [String]
+                           -- ^ the list of subscripts
+                           -> SeriesListWithSubscript s
+                           -- ^ the subscripted list
 seriesListWithSubscript = SeriesListWithSubscript
 
 -- | Add the specified subscript to the array.
-seriesArrayWithSubscript :: (Ix i, Series s) => Array i s -> Array i String
+seriesArrayWithSubscript :: (Ix i, Series s)
+                            => Array i s
+                            -- ^ the array to subscript
+                            -> Array i String
+                            -- ^ the array of subscripts
                             -> SeriesArrayWithSubscript i s
+                            -- ^ the subscripted array
 seriesArrayWithSubscript = SeriesArrayWithSubscript
 
 -- | Add the specified subscript to the vector.
-seriesVectorWithSubscript :: Series s => V.Vector s -> V.Vector String
+seriesVectorWithSubscript :: Series s
+                             => V.Vector s
+                             -- ^ the vector to subscript
+                             -> V.Vector String
+                             -- ^ the vector of subscripts
                              -> SeriesVectorWithSubscript s
+                             -- ^ the subscripted vector
 seriesVectorWithSubscript = SeriesVectorWithSubscript
 
 instance Series s => Series (SeriesListWithSubscript s) where
diff --git a/Simulation/Aivika/Experiment/ExperimentSpecsWriter.hs b/Simulation/Aivika/Experiment/ExperimentSpecsWriter.hs
--- a/Simulation/Aivika/Experiment/ExperimentSpecsWriter.hs
+++ b/Simulation/Aivika/Experiment/ExperimentSpecsWriter.hs
@@ -19,7 +19,7 @@
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.HtmlWriter
 
-import Simulation.Aivika.Dynamics.Simulation
+import Simulation.Aivika.Specs
 
 -- | Defines a writer that knows how to represent the
 -- experiment specs as the HTML table.
diff --git a/Simulation/Aivika/Experiment/FinalStatsView.hs b/Simulation/Aivika/Experiment/FinalStatsView.hs
--- a/Simulation/Aivika/Experiment/FinalStatsView.hs
+++ b/Simulation/Aivika/Experiment/FinalStatsView.hs
@@ -27,11 +27,10 @@
 import Simulation.Aivika.Experiment.SamplingStatsWriter
 import Simulation.Aivika.Experiment.SamplingStatsSource
 
-import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Signal
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Base
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
+import Simulation.Aivika.Event
+import Simulation.Aivika.Signal
 import Simulation.Aivika.Statistics
 
 -- | Defines the 'View' that gathers the statistics
@@ -43,7 +42,7 @@
                    -- ^ This is a description used in HTML.
                    finalStatsWriter      :: SamplingStatsWriter Double,
                    -- ^ It shows the sampling statistics.
-                   finalStatsPredicate   :: Dynamics Bool,
+                   finalStatsPredicate   :: Event Bool,
                    -- ^ It specifies the predicate that defines
                    -- when we count data when gathering the statistics.
                    finalStatsSeries      :: [String]
@@ -102,7 +101,7 @@
                                 finalStatsValues = values }
        
 -- | Simulation the specified series.
-simulateFinalStats :: FinalStatsViewState -> ExperimentData -> Dynamics (Dynamics ())
+simulateFinalStats :: FinalStatsViewState -> ExperimentData -> Event (Event ())
 simulateFinalStats st expdata =
   do let protolabels = finalStatsSeries $ finalStatsView st
          protoproviders = flip map protolabels $ \protolabel ->
diff --git a/Simulation/Aivika/Experiment/FinalTableView.hs b/Simulation/Aivika/Experiment/FinalTableView.hs
--- a/Simulation/Aivika/Experiment/FinalTableView.hs
+++ b/Simulation/Aivika/Experiment/FinalTableView.hs
@@ -30,11 +30,10 @@
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.HtmlWriter
 
-import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Signal
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Base
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
+import Simulation.Aivika.Event
+import Simulation.Aivika.Signal
 
 -- | Defines the 'View' that saves the simulation 
 -- results in the final time points for all 
@@ -73,7 +72,7 @@
                    -- ^ It defines the formatter which is applied
                    -- to all values before they will be written
                    -- in the CSV file.
-                   finalTablePredicate   :: Dynamics Bool,
+                   finalTablePredicate   :: Event Bool,
                    -- ^ It specifies the predicate that defines
                    -- when we can save data in the table.
                    finalTableSeries      :: [String] 
@@ -141,7 +140,7 @@
                                 finalTableValues = values }
        
 -- | Simulation of the specified series.
-simulateFinalTable :: FinalTableViewState -> ExperimentData -> Dynamics (Dynamics ())
+simulateFinalTable :: FinalTableViewState -> ExperimentData -> Event (Event ())
 simulateFinalTable st expdata =
   do let labels = finalTableSeries $ finalTableView st
          providers = experimentSeriesProviders expdata labels
diff --git a/Simulation/Aivika/Experiment/LastValueView.hs b/Simulation/Aivika/Experiment/LastValueView.hs
--- a/Simulation/Aivika/Experiment/LastValueView.hs
+++ b/Simulation/Aivika/Experiment/LastValueView.hs
@@ -26,11 +26,10 @@
 import Simulation.Aivika.Experiment.HtmlWriter
 import Simulation.Aivika.Experiment.Utils (replace)
 
-import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Signal
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Base
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
+import Simulation.Aivika.Event
+import Simulation.Aivika.Signal
 
 -- | Defines the 'View' that shows the last values of the simulation
 -- variables.
@@ -93,7 +92,7 @@
                                  lastValueMap        = m }
        
 -- | Get the last values during the simulation.
-simulateLastValues :: LastValueViewState -> ExperimentData -> Dynamics (Dynamics ())
+simulateLastValues :: LastValueViewState -> ExperimentData -> Event (Event ())
 simulateLastValues st expdata =
   do let labels = lastValueSeries $ lastValueView st
          input  =
diff --git a/Simulation/Aivika/Experiment/ListSource.hs b/Simulation/Aivika/Experiment/ListSource.hs
--- a/Simulation/Aivika/Experiment/ListSource.hs
+++ b/Simulation/Aivika/Experiment/ListSource.hs
@@ -25,13 +25,13 @@
 import Data.IORef
 import Control.Monad
 
-import Simulation.Aivika.Dynamics
+import Simulation.Aivika.Event
 import Simulation.Aivika.Statistics
 import Simulation.Aivika.Experiment
 
 -- | Represents the optimized source of data for constructing the list.
-data ListSource a = SingleValueSource (Dynamics a)
-                  | MultipleValueSource (Dynamics [a])
+data ListSource a = SingleValueSource (Event a)
+                  | MultipleValueSource (Event [a])
 
 -- | Represents the optimized data by which the list will be created.
 data ListData a = SingleValueData !a
@@ -58,7 +58,7 @@
         Nothing -> Nothing
 
 -- | Get data from the source in the current time point.
-listSourceData :: ListSource a -> Dynamics (ListData a)
+listSourceData :: ListSource a -> Event (ListData a)
 listSourceData (SingleValueSource x)    = x >>= return . SingleValueData
 listSourceData (MultipleValueSource xs) =
   do ys <- xs
diff --git a/Simulation/Aivika/Experiment/SamplingStatsSource.hs b/Simulation/Aivika/Experiment/SamplingStatsSource.hs
--- a/Simulation/Aivika/Experiment/SamplingStatsSource.hs
+++ b/Simulation/Aivika/Experiment/SamplingStatsSource.hs
@@ -18,13 +18,13 @@
         samplingStatsSourceData,
         addDataToSamplingStats) where
 
-import Simulation.Aivika.Dynamics
+import Simulation.Aivika.Event
 import Simulation.Aivika.Statistics
 import Simulation.Aivika.Experiment
 
 -- | Represents the optimized source of data for the statistics.
-data SamplingStatsSource a = SingleValueSource (Dynamics a)
-                           | MultipleValueSource (Dynamics (SamplingStats a))
+data SamplingStatsSource a = SingleValueSource (Event a)
+                           | MultipleValueSource (Event (SamplingStats a))
 
 -- | Represents the optimized data to be included in the statistics.
 data SamplingStatsData a = SingleValueData !a
@@ -51,7 +51,7 @@
         Nothing -> Nothing
 
 -- | Get data from the source in the current time point.
-samplingStatsSourceData :: SamplingStatsSource a -> Dynamics (SamplingStatsData a)
+samplingStatsSourceData :: SamplingStatsSource a -> Event (SamplingStatsData a)
 samplingStatsSourceData source =
   case source of
     SingleValueSource x -> x >>= return . SingleValueData
diff --git a/Simulation/Aivika/Experiment/TableView.hs b/Simulation/Aivika/Experiment/TableView.hs
--- a/Simulation/Aivika/Experiment/TableView.hs
+++ b/Simulation/Aivika/Experiment/TableView.hs
@@ -29,11 +29,10 @@
 import Simulation.Aivika.Experiment.HtmlWriter
 import Simulation.Aivika.Experiment.Utils (replace)
 
-import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Signal
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Base
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
+import Simulation.Aivika.Event
+import Simulation.Aivika.Signal
 
 -- | Defines the 'View' that saves the simulation results
 -- in the CSV file(s).
@@ -91,7 +90,7 @@
               -- ^ It defines the formatter which is applied
               -- to all values before they will be written
               -- in the CSV file(s).
-              tablePredicate   :: Dynamics Bool,
+              tablePredicate   :: Event Bool,
               -- ^ It specifies the predicate that defines
               -- when we can save data in the table.
               tableSeries      :: [String] 
@@ -148,7 +147,7 @@
                              tableMap          = m }
        
 -- | Write the tables during the simulation.
-simulateTable :: TableViewState -> ExperimentData -> Dynamics (Dynamics ())
+simulateTable :: TableViewState -> ExperimentData -> Event (Event ())
 simulateTable st expdata =
   do let labels = tableSeries $ tableView st
          providers = experimentSeriesProviders expdata labels
diff --git a/Simulation/Aivika/Experiment/TimingStatsView.hs b/Simulation/Aivika/Experiment/TimingStatsView.hs
--- a/Simulation/Aivika/Experiment/TimingStatsView.hs
+++ b/Simulation/Aivika/Experiment/TimingStatsView.hs
@@ -27,11 +27,11 @@
 import Simulation.Aivika.Experiment.TimingStatsWriter
 import Simulation.Aivika.Experiment.Utils (replace)
 
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
 import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Signal
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Base
+import Simulation.Aivika.Event
+import Simulation.Aivika.Signal
 import Simulation.Aivika.Statistics
 
 -- | Defines the 'View' that shows the timing statistics
@@ -53,7 +53,7 @@
                     -- ^ The description for the view.
                     timingStatsWriter      :: TimingStatsWriter Double,
                     -- ^ It shows the timing statistics.
-                    timingStatsPredicate   :: Dynamics Bool,
+                    timingStatsPredicate   :: Event Bool,
                     -- ^ Specifies when gathering the statistics.
                     timingStatsSeries      :: [String] 
                     -- ^ It contains the labels of the observed series.
@@ -98,7 +98,7 @@
                                    timingStatsMap        = m }
        
 -- | Get the timing statistics during the simulation.
-simulateTimingStats :: TimingStatsViewState -> ExperimentData -> Dynamics (Dynamics ())
+simulateTimingStats :: TimingStatsViewState -> ExperimentData -> Event (Event ())
 simulateTimingStats st expdata =
   do let labels = timingStatsSeries $ timingStatsView st
          input providers =
@@ -112,7 +112,6 @@
          predicate = timingStatsPredicate $ timingStatsView st
      i <- liftSimulation simulationIndex
      let r = fromJust $ M.lookup (i - 1) $ timingStatsMap st
-     t <- time
      forM_ labels $ \label ->
        do let providers = experimentSeriesProviders expdata [label]
               pairs     = input providers
@@ -123,7 +122,7 @@
                let h = filterSignalM (const predicate) $
                        experimentMixedSignal expdata [provider]
                handleSignal_ h $ \_ ->
-                 do t <- time
+                 do t <- liftDynamics time
                     x <- input
                     liftIO $
                       do y <- readIORef stats
diff --git a/aivika-experiment.cabal b/aivika-experiment.cabal
--- a/aivika-experiment.cabal
+++ b/aivika-experiment.cabal
@@ -1,5 +1,5 @@
 name:            aivika-experiment
-version:         0.3.1
+version:         0.4
 synopsis:        Simulation experiments for the Aivika library
 description:
     This package allows defining simulation experiments for the Aivika
@@ -53,7 +53,7 @@
                      split >= 0.2.2,
                      network >= 2.3.0.13,
                      parallel-io >= 0.3.2.1,
-                     aivika >= 0.6.1
+                     aivika >= 0.7
 
     extensions:      FlexibleInstances
                      
diff --git a/examples/LinearArray.hs b/examples/LinearArray.hs
--- a/examples/LinearArray.hs
+++ b/examples/LinearArray.hs
@@ -14,12 +14,10 @@
 
 import qualified Data.Vector as V
 
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
 import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.SystemDynamics
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Base
-import Simulation.Aivika.Dynamics.Signal
+import Simulation.Aivika.SystemDynamics
 
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.LastValueView
@@ -44,8 +42,7 @@
 
 model :: Int -> Simulation ExperimentData
 model n =
-  mdo queue <- newQueue
-      m <- generateArray (1, n) $ \i ->
+  mdo m <- generateArray (1, n) $ \i ->
         integ (q + k * (c!(i - 1) - c!i) + k * (c!(i + 1) - c!i)) 0
       let c =
             array (0, n + 1) [(i, if (i == 0) || (i == n + 1)
@@ -54,7 +51,7 @@
           q = 1
           k = 2
           v = 0.75
-      experimentDataInStartTime queue
+      experimentDataInStartTime
         [("t", seriesEntity "time" time),
          ("m", seriesEntity "M" m),
          ("c", seriesEntity "C" c)]
diff --git a/examples/MachRep3.hs b/examples/MachRep3.hs
--- a/examples/MachRep3.hs
+++ b/examples/MachRep3.hs
@@ -19,13 +19,14 @@
 import Control.Monad
 import Control.Monad.Trans
 
+import Simulation.Aivika.Specs
+import Simulation.Aivika.Simulation
 import Simulation.Aivika.Dynamics
-import Simulation.Aivika.Dynamics.Simulation
-import Simulation.Aivika.Dynamics.Base
-import Simulation.Aivika.Dynamics.EventQueue
-import Simulation.Aivika.Dynamics.Ref
-import Simulation.Aivika.Dynamics.Resource
-import Simulation.Aivika.Dynamics.Process
+import Simulation.Aivika.Event
+import Simulation.Aivika.Ref
+import Simulation.Aivika.QueueStrategy
+import Simulation.Aivika.Resource
+import Simulation.Aivika.Process
 
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.LastValueView
@@ -77,56 +78,55 @@
      
 model :: Simulation ExperimentData
 model =
-  do queue <- newQueue
-     
-     -- number of machines currently up
-     nUp <- newRef queue 2
+  do -- number of machines currently up
+     nUp <- newRef 2
      
      -- total up time for all machines
-     totalUpTime <- newRef queue 0.0
+     totalUpTime <- newRef 0.0
      
-     repairPerson <- newResource queue 1
+     repairPerson <- newResource FCFS 1
      
-     pid1 <- newProcessID queue
-     pid2 <- newProcessID queue
+     pid1 <- newProcessId
+     pid2 <- newProcessId
      
-     let machine :: ProcessID -> Process ()
+     let machine :: ProcessId -> Process ()
          machine pid =
            do startUpTime <- liftDynamics time
               upTime <- liftIO $ exprnd upRate
               holdProcess upTime
               finishUpTime <- liftDynamics time
-              liftDynamics $ modifyRef totalUpTime 
+              liftEvent $ modifyRef totalUpTime 
                 (+ (finishUpTime - startUpTime))
                 
-              liftDynamics $ modifyRef nUp $ \a -> a - 1
-              nUp' <- liftDynamics $ readRef nUp
+              liftEvent $ modifyRef nUp $ \a -> a - 1
+              nUp' <- liftEvent $ readRef nUp
               if nUp' == 1
                 then passivateProcess
-                else do n <- liftDynamics $ 
-                             resourceCount repairPerson
+                else liftEvent $
+                     do n <- resourceCount repairPerson
                         when (n == 1) $ 
-                          liftDynamics $ reactivateProcess pid
+                          reactivateProcess pid
               
               requestResource repairPerson
               repairTime <- liftIO $ exprnd repairRate
               holdProcess repairTime
-              liftDynamics $ modifyRef nUp $ \a -> a + 1
+              liftEvent $ modifyRef nUp $ \a -> a + 1
               releaseResource repairPerson
               
               machine pid
 
-     runDynamicsInStartTime $
-       do t0 <- starttime
-          runProcess (machine pid2) pid1 t0
-          runProcess (machine pid1) pid2 t0
+     runProcessInStartTime IncludingCurrentEvents
+       pid1 (machine pid2)
+
+     runProcessInStartTime IncludingCurrentEvents
+       pid2 (machine pid1)
      
      let result = 
            do x <- readRef totalUpTime
-              y <- time
+              y <- liftDynamics time
               return $ x / (2 * y)          
               
-     experimentDataInStartTime queue
+     experimentDataInStartTime
        [("x", seriesEntity "The proportion of up time" result),
         ("t", seriesEntity "Simulation time" time)]
 
