Index: /branches/SimulationCore/HeuristicLab.SimulationCore.Samples/3.3/GameOfLifeDiscreteEventSimulation.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore.Samples/3.3/GameOfLifeDiscreteEventSimulation.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore.Samples/3.3/GameOfLifeDiscreteEventSimulation.cs	(revision 10450)
@@ -0,0 +1,197 @@
+﻿using System;
+using System.Collections.Generic;
+using HeuristicLab.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore.Samples {
+  [Item("Game of Life (discrete event)", "A discrete event based implementation of the game of life simulation.")]
+  [Creatable("Simulations")]
+  public class GameOfLifeDiscreteEventSimulation : DiscreteEventSimulation<GameOfLifeModel> {
+    private GameOfLifeScenario Scenario {
+      get { return Problem as GameOfLifeScenario; }
+      set { Problem = value; }
+    }
+
+    private GameOfLifeDiscreteEventSimulation(GameOfLifeDiscreteEventSimulation original, Cloner cloner)
+      : base(original, cloner) { }
+    public GameOfLifeDiscreteEventSimulation() {
+      Scenario = new GameOfLifeScenario();
+      InitialAction = new InitializeGameOfLifeBoardAction() { AliveRate = Scenario.AliveRateParameter.Value.Value };
+      Activities = new IActivity<GameOfLifeModel>[] { new CurrentTimeMonitor() };
+      Reporters = new IReporter<GameOfLifeModel>[] { new GameOfLifeStateReporter() };
+      Initialize();
+    }
+
+    private void Initialize() {
+      Scenario.WidthParameter.ValueChanged += ValueChanged;
+      if (Scenario.WidthParameter.Value != null) Scenario.WidthParameter.Value.ValueChanged += ParametersChanged;
+      Scenario.HeightParameter.ValueChanged += ValueChanged;
+      if (Scenario.HeightParameter.Value != null) Scenario.HeightParameter.Value.ValueChanged += ParametersChanged;
+      Scenario.AliveRateParameter.ValueChanged += ValueChanged;
+      if (Scenario.AliveRateParameter.Value != null) Scenario.AliveRateParameter.Value.ValueChanged += ParametersChanged;
+    }
+
+
+    private void ValueChanged(object sender, EventArgs e) {
+      if (Scenario.WidthParameter.Value != null) Scenario.WidthParameter.Value.ValueChanged += ParametersChanged;
+      if (Scenario.HeightParameter.Value != null) Scenario.HeightParameter.Value.ValueChanged += ParametersChanged;
+      if (Scenario.AliveRateParameter.Value != null) Scenario.AliveRateParameter.Value.ValueChanged += ParametersChanged;
+      ParametersChanged(sender, e);
+    }
+
+    private void ParametersChanged(object sender, EventArgs e) {
+      Model = new GameOfLifeModel(Scenario.WidthParameter.Value.Value, Scenario.HeightParameter.Value.Value);
+      ((InitializeGameOfLifeBoardAction)InitialAction).AliveRate = Scenario.AliveRateParameter.Value.Value;
+    }
+
+    protected override void OnPrepared() {
+      Model = new GameOfLifeModel(Scenario.WidthParameter.Value.Value, Scenario.HeightParameter.Value.Value);
+      base.OnPrepared();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GameOfLifeDiscreteEventSimulation(this, cloner);
+    }
+  }
+
+  [StorableClass]
+  public sealed class GameOfLifeModel : IModel {
+    [Storable]
+    public double CurrentTime { get; set; }
+    [Storable]
+    public bool[,] Grid { get; set; }
+
+    private GameOfLifeModel(GameOfLifeModel original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      CurrentTime = original.CurrentTime;
+      Grid = (bool[,])original.Grid.Clone();
+    }
+    public GameOfLifeModel(int width, int height) {
+      Grid = new bool[height, width];
+    }
+
+    public object Clone() { return Clone(new Cloner()); }
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new GameOfLifeModel(this, cloner);
+    }
+  }
+
+  [StorableClass]
+  sealed class CurrentTimeMonitor : Activity<GameOfLifeModel> {
+    public override IEnumerable<Guid> MonitoredActionIds {
+      get { return new[] { InitializeGameOfLifeBoardAction.Id, ModelTimeUpdateAction<GameOfLifeModel>.Id }; }
+    }
+
+    [StorableConstructor]
+    private CurrentTimeMonitor(bool deserializing) : base(deserializing) { }
+    private CurrentTimeMonitor(CurrentTimeMonitor original, Cloner cloner) : base(original, cloner) { }
+    public CurrentTimeMonitor() : base(new SortedListEventQueue<GameOfLifeModel>()) { }
+
+    public override void ManageEvents(GameOfLifeModel model, IAction<GameOfLifeModel> lastAction) {
+      EventQueue.Push(new Event<GameOfLifeModel>(model.CurrentTime + 1, new UpdateGameOfLifeBoardAction()));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CurrentTimeMonitor(this, cloner);
+    }
+  }
+
+  [StorableClass]
+  sealed class GameOfLifeStateReporter : Reporter<GameOfLifeModel> {
+
+    [StorableConstructor]
+    private GameOfLifeStateReporter(bool deserializing) : base(deserializing) { }
+    private GameOfLifeStateReporter(GameOfLifeStateReporter original, Cloner cloner) : base(original, cloner) { }
+    public GameOfLifeStateReporter() { }
+
+    public override void UpdateReporting(GameOfLifeModel model, ResultCollection results) {
+      var heatmap = new HeatMap(model.Grid.GetLength(0), model.Grid.GetLength(1));
+      for (var i = 0; i < heatmap.Rows; i++)
+        for (var j = 0; j < heatmap.Columns; j++)
+          heatmap[i, j] = model.Grid[i, j] ? 1 : 0;
+
+      if (!results.ContainsKey("Visualization"))
+        results.Add(new Result("Visualization", heatmap));
+      else results["Visualization"].Value = heatmap;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GameOfLifeStateReporter(this, cloner);
+    }
+  }
+
+  [StorableClass]
+  sealed class InitializeGameOfLifeBoardAction : Action<GameOfLifeModel> {
+    public static readonly Guid Id = new Guid("a6d37f71-ccef-4c2a-b11b-793fda0f9f4f");
+    public override Guid ActionId {
+      get { return Id; }
+    }
+
+    [Storable]
+    public double AliveRate { get; set; }
+
+    [StorableConstructor]
+    private InitializeGameOfLifeBoardAction(bool deserializing) : base(deserializing) { }
+    private InitializeGameOfLifeBoardAction(InitializeGameOfLifeBoardAction original, Cloner cloner)
+      : base(original, cloner) {
+      AliveRate = original.AliveRate;
+    }
+    public InitializeGameOfLifeBoardAction() {
+      AliveRate = 0.2;
+    }
+
+    public override void Execute(GameOfLifeModel model) {
+      var random = new Random();
+      var rows = model.Grid.GetLength(0);
+      var cols = model.Grid.GetLength(1);
+      for (var i = 0; i < rows; i++)
+        for (var j = 0; j < cols; j++) {
+          if (random.NextDouble() < AliveRate) model.Grid[i, j] = true;
+        }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new InitializeGameOfLifeBoardAction(this, cloner);
+    }
+  }
+
+  [StorableClass]
+  sealed class UpdateGameOfLifeBoardAction : Action<GameOfLifeModel> {
+    public static readonly Guid Id = new Guid("323bb2ef-bc66-488f-ac88-798b91565e62");
+    public override Guid ActionId {
+      get { return Id; }
+    }
+
+    [StorableConstructor]
+    private UpdateGameOfLifeBoardAction(bool deserializing) : base(deserializing) { }
+    private UpdateGameOfLifeBoardAction(UpdateGameOfLifeBoardAction original, Cloner cloner) : base(original, cloner) { }
+    public UpdateGameOfLifeBoardAction() { }
+
+    public override void Execute(GameOfLifeModel model) {
+      var rows = model.Grid.GetLength(0);
+      var cols = model.Grid.GetLength(1);
+      var newGrid = new bool[rows, cols];
+      for (var i = 0; i < rows; i++)
+        for (var j = 0; j < cols; j++) {
+          var neighbors = 0;
+          if (i > 0 && j > 0 && model.Grid[i - 1, j - 1]) neighbors++;
+          if (i > 0 && model.Grid[i - 1, j]) neighbors++;
+          if (i > 0 && j < cols - 1 && model.Grid[i - 1, j + 1]) neighbors++;
+          if (j > 0 && model.Grid[i, j - 1]) neighbors++;
+          if (j < cols - 1 && model.Grid[i, j + 1]) neighbors++;
+          if (i < rows - 1 && j > 0 && model.Grid[i + 1, j - 1]) neighbors++;
+          if (i < rows - 1 && model.Grid[i + 1, j]) neighbors++;
+          if (i < rows - 1 && j < cols - 1 && model.Grid[i + 1, j + 1]) neighbors++;
+          if ((model.Grid[i, j] && neighbors == 2) || neighbors == 3) newGrid[i, j] = true;
+        }
+      model.Grid = newGrid;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new UpdateGameOfLifeBoardAction(this, cloner);
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore.Samples/3.3/HeuristicLab.SimulationCore.Samples-3.3.csproj
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore.Samples/3.3/HeuristicLab.SimulationCore.Samples-3.3.csproj	(revision 10449)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore.Samples/3.3/HeuristicLab.SimulationCore.Samples-3.3.csproj	(revision 10450)
@@ -157,4 +157,5 @@
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -164,4 +165,5 @@
   <ItemGroup>
     <Compile Include="GameOfLifeAgent.cs" />
+    <Compile Include="GameOfLifeDiscreteEventSimulation.cs" />
     <Compile Include="GameOfLifeScenario.cs" />
     <Compile Include="GameOfLifeSimulation.cs" />
Index: /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/EventQueueTest.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/EventQueueTest.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/EventQueueTest.cs	(revision 10450)
@@ -0,0 +1,49 @@
+﻿using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.SimulationCore.Tests {
+  /// <summary>
+  /// Summary description for FibonacciHeapTest
+  /// </summary>
+  [TestClass]
+  public class EventQueueTest {
+    private class DummyAction : IAction<IModel> {
+      public System.Guid ActionId {
+        get { throw new System.NotImplementedException(); }
+      }
+
+      public IActivity<IModel> Mandate {
+        get { throw new System.NotImplementedException(); }
+      }
+
+      public void Execute(IModel model) {
+        throw new System.NotImplementedException();
+      }
+
+      public Common.IDeepCloneable Clone(Common.Cloner cloner) {
+        throw new System.NotImplementedException();
+      }
+
+      public object Clone() {
+        throw new System.NotImplementedException();
+      }
+    }
+
+    [TestMethod]
+    public void EventQueueCreateTest() {
+      var queue = new SortedListEventQueue<IModel>();
+      queue.Push(new Event<IModel>(5, new DummyAction()));
+      Assert.IsTrue(queue.Count == 1);
+      queue.Push(new Event<IModel>(2, new DummyAction()));
+      Assert.IsTrue(queue.Peek().Time == 2);
+      Assert.IsTrue(queue.Count == 2);
+      queue.Push(new Event<IModel>(3, new DummyAction()));
+      Assert.IsTrue(queue.Peek().Time == 2);
+      Assert.IsTrue(queue.Count == 3);
+      for (var i = 10; i < 50; i++)
+        queue.Push(new Event<IModel>(i, new DummyAction()));
+      Assert.IsTrue(queue.Peek().Time == 2);
+      Assert.IsTrue(queue.Count == 43);
+      queue.Push(new Event<IModel>(2, new DummyAction()));
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/HeuristicLab.SimulationCore.Tests.csproj
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/HeuristicLab.SimulationCore.Tests.csproj	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/HeuristicLab.SimulationCore.Tests.csproj	(revision 10450)
@@ -0,0 +1,101 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.SimulationCore.Tests</RootNamespace>
+    <AssemblyName>HeuristicLab.SimulationCore.Tests</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
+    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
+    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
+    <IsCodedUITest>False</IsCodedUITest>
+    <TestProjectType>UnitTest</TestProjectType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+  </ItemGroup>
+  <Choose>
+    <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
+      <ItemGroup>
+        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+      </ItemGroup>
+    </When>
+    <Otherwise>
+      <ItemGroup>
+        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
+      </ItemGroup>
+    </Otherwise>
+  </Choose>
+  <ItemGroup>
+    <Compile Include="EventQueueTest.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.SimulationCore\3.3\HeuristicLab.SimulationCore-3.3.csproj">
+      <Project>{7b1579f2-6efc-4c48-b41c-c3292639ff5b}</Project>
+      <Name>HeuristicLab.SimulationCore-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Choose>
+    <When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
+      <ItemGroup>
+        <Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+        <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+        <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+        <Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+          <Private>False</Private>
+        </Reference>
+      </ItemGroup>
+    </When>
+  </Choose>
+  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/Properties/AssemblyInfo.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/Properties/AssemblyInfo.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore.Tests/Properties/AssemblyInfo.cs	(revision 10450)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.SimulationCore.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("FH-Hagenberg")]
+[assembly: AssemblyProduct("HeuristicLab.SimulationCore.Tests")]
+[assembly: AssemblyCopyright("Copyright © FH-Hagenberg 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4e773241-447f-4a31-82e9-176de9ebd03f")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/SimulationCore/HeuristicLab.SimulationCore.sln
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore.sln	(revision 10449)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore.sln	(revision 10450)
@@ -1,5 +1,5 @@
 ﻿
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{EA53A5B2-BFCF-4D7E-AFAA-4A2916D2A548}"
 	ProjectSection(SolutionItems) = preProject
@@ -13,4 +13,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.SimulationCore.Samples-3.3", "HeuristicLab.SimulationCore.Samples\3.3\HeuristicLab.SimulationCore.Samples-3.3.csproj", "{71537847-8B2D-4016-B6BF-DF0931024AC8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.SimulationCore.Tests", "HeuristicLab.SimulationCore.Tests\HeuristicLab.SimulationCore.Tests.csproj", "{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}"
 EndProject
 Global
@@ -60,7 +62,18 @@
 		{71537847-8B2D-4016-B6BF-DF0931024AC8}.Release|x86.ActiveCfg = Release|x86
 		{71537847-8B2D-4016-B6BF-DF0931024AC8}.Release|x86.Build.0 = Release|x86
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Release|x64.ActiveCfg = Release|Any CPU
+		{173B1CAE-271F-47BA-9448-8A85BA9CAEAC}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(Performance) = preSolution
+		HasPerformanceSessions = true
+	EndGlobalSection
 EndGlobal
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Action.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Action.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Action.cs	(revision 10450)
@@ -0,0 +1,33 @@
+﻿using System;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public abstract class Action<TModel> : IAction<TModel> where TModel : IModel {
+    public abstract Guid ActionId { get; }
+    public IActivity<TModel> Mandate { get; protected set; }
+
+    [Storable]
+    private IActivity<TModel> StorableMandate {
+      get { return Mandate; }
+      set { Mandate = value; }
+    }
+
+    [StorableConstructor]
+    protected Action(bool deserializing) { }
+    protected Action(Action<TModel> original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      Mandate = cloner.Clone(original.Mandate);
+    }
+    protected Action() { }
+    protected Action(IActivity<TModel> mandate) {
+      Mandate = mandate;
+    }
+
+    public abstract void Execute(TModel model);
+
+    public object Clone() { return Clone(new Cloner()); }
+    public abstract IDeepCloneable Clone(Cloner cloner);
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Activity.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Activity.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Activity.cs	(revision 10450)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public abstract class Activity<TModel> : IActivity<TModel> where TModel : IModel {
+    private IEventQueue<TModel> eventQueue;
+
+    [Storable]
+    public IEventQueue<TModel> EventQueue {
+      get { return eventQueue; }
+      protected set { eventQueue = value; }
+    }
+
+    public virtual IEnumerable<Guid> MonitoredActionIds {
+      get { return new Guid[0]; }
+    }
+
+    [StorableConstructor]
+    protected Activity(bool deserializing) { }
+    protected Activity(Activity<TModel> original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      eventQueue = cloner.Clone(original.eventQueue);
+    }
+    protected Activity(IEventQueue<TModel> queue) {
+      eventQueue = queue;
+    }
+
+    public abstract void ManageEvents(TModel model, IAction<TModel> lastAction);
+
+    public object Clone() { return Clone(new Cloner()); }
+    public abstract IDeepCloneable Clone(Cloner cloner);
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/CompositeEventQueue.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/CompositeEventQueue.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/CompositeEventQueue.cs	(revision 10450)
@@ -0,0 +1,57 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public sealed class CompositeEventQueue<TModel> : Item where TModel : IModel {
+    [Storable]
+    private List<IEventQueue<TModel>> queues;
+
+    public bool Empty {
+      get { return queues.All(x => x.Empty); }
+    }
+
+    public int Count {
+      get { return queues.Sum(x => x.Count); }
+    }
+
+    public IEvent<TModel> Peek() {
+      IEvent<TModel> nextEvent = null;
+      foreach (var queue in queues) {
+        if (!queue.Empty && (nextEvent == null || queue.Peek().Time < nextEvent.Time)) {
+          nextEvent = queue.Peek();
+        }
+      }
+      return nextEvent;
+    }
+
+    public IEvent<TModel> Pop() {
+      IEvent<TModel> nextEvent = null;
+      IEventQueue<TModel> minEventQueue = null;
+      foreach (var queue in queues) {
+        if (!queue.Empty && (nextEvent == null || queue.Peek().Time < nextEvent.Time)) {
+          nextEvent = queue.Peek();
+          minEventQueue = queue;
+        }
+      }
+      return minEventQueue.Pop();
+    }
+
+    [StorableConstructor]
+    private CompositeEventQueue(bool deserializing) : base(deserializing) { }
+    private CompositeEventQueue(CompositeEventQueue<TModel> original, Cloner cloner)
+      : base(original, cloner) {
+      this.queues = original.queues.Select(cloner.Clone).ToList();
+    }
+    public CompositeEventQueue(IEnumerable<IEventQueue<TModel>> queues) {
+      this.queues = new List<IEventQueue<TModel>>(queues);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CompositeEventQueue<TModel>(this, cloner);
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/DiscreteEventSimulation.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/DiscreteEventSimulation.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/DiscreteEventSimulation.cs	(revision 10450)
@@ -0,0 +1,92 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public abstract class DiscreteEventSimulation<TModel> : Simulation, IDiscreteEventSimulation<TModel> where TModel : class, IModel {
+    [Storable]
+    public IAction<TModel> InitialAction { get; protected set; }
+    [Storable]
+    public IEnumerable<IActivity<TModel>> Activities { get; protected set; }
+    [Storable]
+    public IEnumerable<IReporter<TModel>> Reporters { get; protected set; }
+    [Storable]
+    public TModel Model { get; protected set; }
+
+    protected CompositeEventQueue<TModel> CompositeEventQueue { get; private set; }
+
+    protected IFixedValueParameter<DoubleValue> MaximumTimeParameter {
+      get { return (IFixedValueParameter<DoubleValue>)Parameters["MaximumTime"]; }
+    }
+
+    public double MaximumTime {
+      get { return MaximumTimeParameter.Value.Value; }
+      set { MaximumTimeParameter.Value.Value = value; }
+    }
+
+    protected DiscreteEventSimulation(DiscreteEventSimulation<TModel> original, Cloner cloner)
+      : base(original, cloner) {
+      InitialAction = cloner.Clone(original.InitialAction);
+      Activities = original.Activities.Select(cloner.Clone).ToList();
+      Reporters = original.Reporters.Select(cloner.Clone).ToList();
+      Model = cloner.Clone(original.Model);
+    }
+
+    protected DiscreteEventSimulation() {
+      Parameters.Add(new FixedValueParameter<DoubleValue>("MaximumTime", "The simulation stops after reaching this time.", new DoubleValue(1000)));
+    }
+
+    protected override void Run(CancellationToken cancellationToken) {
+      CompositeEventQueue = new CompositeEventQueue<TModel>(Activities.Select(x => x.EventQueue));
+
+      var actionMonitor = new Dictionary<Guid, List<IActivity<TModel>>>();
+      foreach (var activity in Activities) {
+        foreach (var actionId in activity.MonitoredActionIds) {
+          if (!actionMonitor.ContainsKey(actionId)) actionMonitor[actionId] = new List<IActivity<TModel>>();
+          actionMonitor[actionId].Add(activity);
+        }
+      }
+
+      if (InitialAction != null) {
+        InitialAction.Execute(Model);
+        CallActivities(actionMonitor, InitialAction);
+      }
+
+      while (!CompositeEventQueue.Empty && Model.CurrentTime < MaximumTime) {
+        var @event = CompositeEventQueue.Pop();
+        var nextEvent = CompositeEventQueue.Empty ? null : CompositeEventQueue.Peek();
+        var action = @event.Action;
+
+        action.Execute(Model);
+        CallActivities(actionMonitor, action);
+
+        if (@event.Time > Model.CurrentTime && (nextEvent == null || @event.Time < nextEvent.Time)) {
+          var timeUpdateAction = new ModelTimeUpdateAction<TModel>(null, @event.Time);
+          timeUpdateAction.Execute(Model);
+
+          if (actionMonitor.ContainsKey(timeUpdateAction.ActionId))
+            foreach (var activity in actionMonitor[timeUpdateAction.ActionId])
+              activity.ManageEvents(Model, timeUpdateAction);
+
+          foreach (var reporter in Reporters)
+            reporter.UpdateReporting(Model, Results);
+        }
+        cancellationToken.ThrowIfCancellationRequested();
+      };
+    }
+
+    private void CallActivities(Dictionary<Guid, List<IActivity<TModel>>> actionMonitor, IAction<TModel> action) {
+      if (actionMonitor.ContainsKey(action.ActionId)) {
+        foreach (var activity in actionMonitor[action.ActionId])
+          activity.ManageEvents(Model, action);
+      }
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Event.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Event.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Event.cs	(revision 10450)
@@ -0,0 +1,49 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public sealed class Event<TModel> : IEvent<TModel> where TModel : IModel {
+    private double time;
+    public double Time { get { return time; } }
+
+    public IAction<TModel> Action { get; private set; }
+
+    #region Storable Properties
+    [Storable]
+    // ReSharper disable UnusedMember.Local
+    // ReSharper disable UnusedParameter.Local
+    private double StorableTime {
+      get { return time; }
+      set { time = value; }
+    }
+    [Storable]
+    private IAction<TModel> StorableActions {
+      get { return Action; }
+      set { Action = value; }
+    }
+    [StorableConstructor]
+    private Event(bool deserializing) { }
+    // ReSharper restore UnusedParameter.Local
+    // ReSharper restore UnusedMember.Local
+    #endregion
+
+    private Event(Event<TModel> original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+      time = original.time;
+      Action = cloner.Clone(original.Action);
+    }
+    public Event(double time) {
+      this.time = time;
+    }
+    public Event(double time, IAction<TModel> action) {
+      this.time = time;
+      this.Action = action;
+    }
+
+    public object Clone() { return Clone(new Cloner()); }
+    public IDeepCloneable Clone(Cloner cloner) {
+      return new Event<TModel>(this, cloner);
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IAction.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IAction.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IAction.cs	(revision 10450)
@@ -0,0 +1,11 @@
+﻿using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IAction<TModel> : IDeepCloneable, IContent where TModel : IModel {
+    Guid ActionId { get; }
+    IActivity<TModel> Mandate { get; }
+
+    void Execute(TModel model);
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IActivity.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IActivity.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IActivity.cs	(revision 10450)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IActivity<TModel> : IDeepCloneable, IContent
+    where TModel : IModel {
+    IEventQueue<TModel> EventQueue { get; }
+    IEnumerable<Guid> MonitoredActionIds { get; }
+
+    void ManageEvents(TModel model, IAction<TModel> lastAction);
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IDiscreteEventSimulation.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IDiscreteEventSimulation.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IDiscreteEventSimulation.cs	(revision 10450)
@@ -0,0 +1,10 @@
+﻿using System.Collections.Generic;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IDiscreteEventSimulation<TModel> : ISimulation where TModel : class, IModel {
+    IAction<TModel> InitialAction { get; }
+    IEnumerable<IActivity<TModel>> Activities { get; }
+    IEnumerable<IReporter<TModel>> Reporters { get; }
+    TModel Model { get; }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IEvent.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IEvent.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IEvent.cs	(revision 10450)
@@ -0,0 +1,8 @@
+﻿using HeuristicLab.Common;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IEvent<TModel> : IDeepCloneable where TModel : IModel {
+    double Time { get; }
+    IAction<TModel> Action { get; }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IEventQueue.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IEventQueue.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IEventQueue.cs	(revision 10450)
@@ -0,0 +1,17 @@
+﻿using HeuristicLab.Common;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IEventQueue<TModel> : IDeepCloneable, IContent where TModel : IModel {
+    bool Empty { get; }
+    int Count { get; }
+
+    IEvent<TModel> Peek();
+    IEvent<TModel> Pop();
+    void Push(IEvent<TModel> @event);
+
+    IEvent<TModel> ChangeTime(IEvent<TModel> @event, double newTime);
+    void Delete(IEvent<TModel> @event);
+
+    void Clear();
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IModel.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IModel.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IModel.cs	(revision 10450)
@@ -0,0 +1,7 @@
+﻿using HeuristicLab.Common;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IModel : IContent, IDeepCloneable {
+    double CurrentTime { get; set; }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IReporter.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IReporter.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Interfaces/IReporter.cs	(revision 10450)
@@ -0,0 +1,8 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.SimulationCore {
+  public interface IReporter<TModel> : IDeepCloneable where TModel : IModel {
+    void UpdateReporting(TModel model, ResultCollection results);
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/ModelTimeUpdateAction.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/ModelTimeUpdateAction.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/ModelTimeUpdateAction.cs	(revision 10450)
@@ -0,0 +1,31 @@
+﻿using System;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public sealed class ModelTimeUpdateAction<TModel> : Action<TModel> where TModel : IModel {
+    public static readonly Guid Id = new Guid("1dd664ec-809d-494b-a96b-567696a59a5b");
+    public override Guid ActionId {
+      get { return Id; }
+    }
+
+    public double NextTime { get; private set; }
+
+    [StorableConstructor]
+    private ModelTimeUpdateAction(bool deserializing) : base(deserializing) { }
+    private ModelTimeUpdateAction(Action<TModel> original, Cloner cloner) : base(original, cloner) { }
+    public ModelTimeUpdateAction(IActivity<TModel> mandate, double nextTime)
+      : base(mandate) {
+      NextTime = nextTime;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ModelTimeUpdateAction<TModel>(this, cloner);
+    }
+
+    public override void Execute(TModel model) {
+      model.CurrentTime = NextTime;
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Reporter.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Reporter.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/Reporter.cs	(revision 10450)
@@ -0,0 +1,21 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [StorableClass]
+  public abstract class Reporter<TModel> : IReporter<TModel> where TModel : IModel {
+
+    [StorableConstructor]
+    protected Reporter(bool deserializing) { }
+    protected Reporter(Reporter<TModel> original, Cloner cloner) {
+      cloner.RegisterClonedObject(original, this);
+    }
+    protected Reporter() { }
+
+    public abstract void UpdateReporting(TModel model, ResultCollection results);
+
+    public object Clone() { return Clone(new Cloner()); }
+    public abstract IDeepCloneable Clone(Cloner cloner);
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/SortedListEventQueue.cs
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/SortedListEventQueue.cs	(revision 10450)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/DiscreteEvent/SortedListEventQueue.cs	(revision 10450)
@@ -0,0 +1,69 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.SimulationCore {
+  [Item("SortedListEventQueue", "")]
+  [StorableClass]
+  public sealed class SortedListEventQueue<TModel> : Item, IEventQueue<TModel> where TModel : class, IModel {
+    [Storable]
+    private readonly SortedList<double, List<IEvent<TModel>>> queue = new SortedList<double, List<IEvent<TModel>>>();
+
+    public bool Empty { get { return queue.Count == 0; } }
+    public int Count { get { return queue.Count; } }
+
+    public IEvent<TModel> Peek() {
+      return queue.First().Value.First();
+    }
+
+    public IEvent<TModel> Pop() {
+      var @event = queue.First().Value.First();
+      Remove(@event);
+      return @event;
+    }
+
+    public void Push(IEvent<TModel> @event) {
+      if (queue.ContainsKey(@event.Time))
+        queue[@event.Time].Add(@event);
+      else queue.Add(@event.Time, new List<IEvent<TModel>>() { @event });
+    }
+
+    public IEvent<TModel> ChangeTime(IEvent<TModel> @event, double newTime) {
+      Remove(@event);
+      var newEvent = new Event<TModel>(newTime, @event.Action);
+      Push(newEvent);
+      return newEvent;
+    }
+
+    public void Delete(IEvent<TModel> @event) {
+      Remove(@event);
+    }
+
+    private void Remove(IEvent<TModel> @event) {
+      if (!queue[@event.Time].Remove(@event)) throw new InvalidOperationException("Event is not in queue.");
+      if (queue[@event.Time].Count == 0) queue.Remove(@event.Time);
+    }
+
+    public void Clear() {
+      queue.Clear();
+    }
+
+    [StorableConstructor]
+    private SortedListEventQueue(bool deserializing) : base(deserializing) { }
+    private SortedListEventQueue(SortedListEventQueue<TModel> original, Cloner cloner)
+      : base(original, cloner) {
+      queue = new SortedList<double, List<IEvent<TModel>>>(
+        original.queue
+        .Select(x => new KeyValuePair<double, List<IEvent<TModel>>>(x.Key, x.Value.Select(cloner.Clone).ToList()))
+        .ToDictionary(x => x.Key, x => x.Value));
+    }
+    public SortedListEventQueue() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SortedListEventQueue<TModel>(this, cloner);
+    }
+  }
+}
Index: /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/HeuristicLab.SimulationCore-3.3.csproj
===================================================================
--- /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/HeuristicLab.SimulationCore-3.3.csproj	(revision 10449)
+++ /branches/SimulationCore/HeuristicLab.SimulationCore/3.3/HeuristicLab.SimulationCore-3.3.csproj	(revision 10450)
@@ -120,6 +120,16 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="HeuristicLab.Optimization-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -143,4 +153,19 @@
     <Compile Include="AgentBased\AgentBasedSimulation.cs" />
     <Compile Include="AgentBased\IAgent.cs" />
+    <Compile Include="DiscreteEvent\Action.cs" />
+    <Compile Include="DiscreteEvent\Activity.cs" />
+    <Compile Include="DiscreteEvent\CompositeEventQueue.cs" />
+    <Compile Include="DiscreteEvent\DiscreteEventSimulation.cs" />
+    <Compile Include="DiscreteEvent\Event.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IReporter.cs" />
+    <Compile Include="DiscreteEvent\ModelTimeUpdateAction.cs" />
+    <Compile Include="DiscreteEvent\Reporter.cs" />
+    <Compile Include="DiscreteEvent\SortedListEventQueue.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IActivity.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IDiscreteEventSimulation.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IAction.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IEvent.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IEventQueue.cs" />
+    <Compile Include="DiscreteEvent\Interfaces\IModel.cs" />
     <Compile Include="IScenario.cs" />
     <Compile Include="ISimulation.cs" />
