Index: branches/OaaS/HeuristicLab.Core/3.3/Collections/ReadOnlyItemList.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Collections/ReadOnlyItemList.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/Collections/ReadOnlyItemList.cs	(revision 9363)
@@ -48,8 +48,7 @@
     [StorableConstructor]
     protected ReadOnlyItemList(bool deserializing) : base(deserializing) { }
-    protected ReadOnlyItemList(ReadOnlyItemList<T> original, Cloner cloner) {
+    protected ReadOnlyItemList(ReadOnlyItemList<T> original, Cloner cloner)
+      : base(cloner.Clone((IItemList<T>)original.list)) {
       cloner.RegisterClonedObject(original, this);
-      list = cloner.Clone((IItemList<T>)original.list);
-      RegisterEvents();
     }
     public ReadOnlyItemList() : base(new ItemList<T>()) { }
Index: branches/OaaS/HeuristicLab.Core/3.3/Engine.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Engine.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/Engine.cs	(revision 9363)
@@ -145,5 +145,5 @@
 
       OnStarted();
-      lastUpdateTime = DateTime.Now;
+      lastUpdateTime = DateTime.UtcNow;
       System.Timers.Timer timer = new System.Timers.Timer(250);
       timer.AutoReset = true;
@@ -156,5 +156,5 @@
         timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
         timer.Stop();
-        ExecutionTime += DateTime.Now - lastUpdateTime;
+        ExecutionTime += DateTime.UtcNow - lastUpdateTime;
       }
 
@@ -166,5 +166,5 @@
       System.Timers.Timer timer = (System.Timers.Timer)sender;
       timer.Enabled = false;
-      DateTime now = DateTime.Now;
+      DateTime now = DateTime.UtcNow;
       ExecutionTime += now - lastUpdateTime;
       lastUpdateTime = now;
Index: branches/OaaS/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 9363)
@@ -148,7 +148,9 @@
     <Compile Include="Constraints\IConstraint.cs" />
     <Compile Include="Constraints\TypeCompatibilityConstraint.cs" />
+    <Compile Include="Interfaces\ICheckedMultiOperator.cs" />
     <Compile Include="Interfaces\IConstrainedValueParameter.cs" />
     <Compile Include="Interfaces\IMultiOperator.cs" />
     <Compile Include="Interfaces\IFixedValueParameter.cs" />
+    <Compile Include="Interfaces\IOperatorGraphOperator.cs" />
     <Compile Include="Interfaces\IStatefulItem.cs" />
     <Compile Include="OperatorExecutionException.cs" />
@@ -265,5 +267,5 @@
   -->
   <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -272,4 +274,10 @@
 call PreBuildEvent.cmd
 </PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+</PreBuildEvent>
   </PropertyGroup>
 </Project>
Index: branches/OaaS/HeuristicLab.Core/3.3/Interfaces/ICheckedMultiOperator.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Interfaces/ICheckedMultiOperator.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Core/3.3/Interfaces/ICheckedMultiOperator.cs	(revision 9363)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Core {
+  public interface ICheckedMultiOperator<T> : IMultiOperator<T> where T : class,IOperator {
+    new ICheckedItemList<T> Operators { get; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs	(revision 9363)
@@ -26,4 +26,5 @@
     string ActualName { get; set; }
     string TranslatedName { get; }
+    IExecutionContext ExecutionContext { get; set; }
     event EventHandler ActualNameChanged;
   }
Index: branches/OaaS/HeuristicLab.Core/3.3/Interfaces/IOperatorGraphOperator.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Interfaces/IOperatorGraphOperator.cs	(revision 9363)
+++ branches/OaaS/HeuristicLab.Core/3.3/Interfaces/IOperatorGraphOperator.cs	(revision 9363)
@@ -0,0 +1,28 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+namespace HeuristicLab.Core {
+  public interface IOperatorGraphOperator : IOperator {
+    OperatorGraph OperatorGraph { get; }
+  }
+}
Index: branches/OaaS/HeuristicLab.Core/3.3/Interfaces/IParameter.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Interfaces/IParameter.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/Interfaces/IParameter.cs	(revision 9363)
@@ -27,5 +27,4 @@
     bool Hidden { get; set; }
     IItem ActualValue { get; set; }
-    IExecutionContext ExecutionContext { get; set; }
 
     event EventHandler HiddenChanged;
Index: branches/OaaS/HeuristicLab.Core/3.3/OperatorExecutionException.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/OperatorExecutionException.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/OperatorExecutionException.cs	(revision 9363)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Diagnostics;
 
 namespace HeuristicLab.Core {
@@ -32,5 +33,8 @@
         string name = "\"" + op.Name + "\"";
         if (!op.Name.Equals(op.ItemName)) name += " (" + op.ItemName + ")";
-
+        if (!string.IsNullOrEmpty(op.GetType().Assembly.Location)) {
+          var fvi = FileVersionInfo.GetVersionInfo(op.GetType().Assembly.Location);
+          name += " [" + fvi.FileName + ": " + fvi.FileVersion + "]";
+        }
         if (InnerException == null)
           return base.Message + name + ".";
Index: branches/OaaS/HeuristicLab.Core/3.3/OperatorGraph.cs
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 9363)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Collections;
@@ -244,4 +245,35 @@
     }
     #endregion
+
+    // <summary>
+    /// Iterates an operator graph so that it jumps from the intial operator to all other operators and yields each operator it touches.
+    /// Cycles are detected and not iterated twice.
+    /// </summary>
+    /// <returns>An enumeration of all the operators that could be found.</returns>
+    public virtual IEnumerable<IOperator> Iterate() {
+      if (InitialOperator == null) yield break;
+
+      var open = new Stack<IOperator>();
+      var visited = new HashSet<IOperator>();
+      open.Push(InitialOperator);
+
+      while (open.Any()) {
+        IOperator current = open.Pop();
+        if (visited.Contains(current)) continue;
+        visited.Add(current);
+
+        IOperatorGraphOperator operatorGraphOperator = current as IOperatorGraphOperator;
+        if (operatorGraphOperator != null) open.Push(operatorGraphOperator.OperatorGraph.InitialOperator);
+
+        foreach (var parameter in current.Parameters.OfType<IValueParameter>()) {
+          if (!typeof(IOperator).IsAssignableFrom(parameter.DataType)) continue;
+          if (parameter.Value == null) continue;
+
+          open.Push((IOperator)parameter.Value);
+        }
+
+        yield return current;
+      }
+    }
   }
 }
Index: branches/OaaS/HeuristicLab.Core/3.3/Plugin.cs.frame
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Plugin.cs.frame	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/Plugin.cs.frame	(revision 9363)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.Core plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Core", "3.3.6.$WCREV$")]
+  [Plugin("HeuristicLab.Core", "3.3.7.$WCREV$")]
   [PluginFile("HeuristicLab.Core-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/OaaS/HeuristicLab.Core/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/OaaS/HeuristicLab.Core/3.3/Properties/AssemblyInfo.cs.frame	(revision 8228)
+++ branches/OaaS/HeuristicLab.Core/3.3/Properties/AssemblyInfo.cs.frame	(revision 9363)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.7.$WCREV$")]
