Index: branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 13435)
@@ -63,5 +63,5 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance."));
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the JSSP - Instance."));
-      ScheduleEncodingParameter.ActualName = "Schedule";
+      ScheduleParameter.ActualName = "Schedule";
     }
 
@@ -82,5 +82,5 @@
 
 
-    protected override IScheduleEncoding CreateSolution() {
+    protected override ISchedule CreateSolution() {
       try {
         var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs	(revision 13435)
@@ -31,5 +31,5 @@
   [Item("Job", "Represents a composition of tasks that require processing in a scheduling problem.")]
   [StorableClass]
-  public class Job : Item, INotifyPropertyChanged {
+  public sealed class Job : Item, INotifyPropertyChanged {
 
     [Storable(Name = "DueDate")]
@@ -38,10 +38,8 @@
       get { return dueDate; }
       set {
-        bool changed = dueDate != value;
+        if (dueDate == value) return;
         dueDate = value;
-        if (changed) {
-          OnPropertyChanged("DueDate");
-          OnToStringChanged();
-        }
+        OnPropertyChanged("DueDate");
+        OnToStringChanged();
       }
     }
@@ -52,10 +50,8 @@
       get { return index; }
       set {
-        bool changed = index != value;
+        if (index == value) return;
         index = value;
-        if (changed) {
-          OnPropertyChanged("Index");
-          OnToStringChanged();
-        }
+        OnPropertyChanged("Index");
+        OnToStringChanged();
       }
     }
@@ -65,14 +61,13 @@
     public ItemList<Task> Tasks {
       get { return tasks; }
-      set {
-        bool changed = tasks != value;
+      private set {
         tasks = value;
-        if (changed) OnPropertyChanged("Tasks");
+        OnPropertyChanged("Tasks");
       }
     }
 
     [StorableConstructor]
-    protected Job(bool deserializing) : base(deserializing) { }
-    protected Job(Job original, Cloner cloner)
+    private Job(bool deserializing) : base(deserializing) { }
+    private Job(Job original, Cloner cloner)
       : base(original, cloner) {
       this.dueDate = original.DueDate;
@@ -151,11 +146,6 @@
     }
 
-    internal Task GetPreviousTask(Task t) {
-      if (t.TaskNr == 0) return null;
-      return Tasks[t.TaskNr - 1];
-    }
-
     public event EventHandler TasksChanged;
-    protected virtual void OnTasksChanged() {
+    private void OnTasksChanged() {
       var handler = TasksChanged;
       if (handler != null) handler(this, EventArgs.Empty);
@@ -163,5 +153,5 @@
 
     public event PropertyChangedEventHandler PropertyChanged;
-    protected virtual void OnPropertyChanged(string propertyName) {
+    private void OnPropertyChanged(string propertyName) {
       var handler = PropertyChanged;
       if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/DirectScheduleManipulator.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/DirectScheduleManipulator.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/DirectScheduleManipulator.cs	(revision 13435)
@@ -35,5 +35,5 @@
     public DirectScheduleManipulator()
       : base() {
-      ScheduleEncodingParameter.ActualName = "Schedule";
+      ScheduleParameter.ActualName = "Schedule";
     }
 
@@ -41,5 +41,5 @@
 
     public override IOperation InstrumentedApply() {
-      var schedule = ScheduleEncodingParameter.ActualValue as Schedule;
+      var schedule = ScheduleParameter.ActualValue as Schedule;
       if (schedule == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type Schedule.");
       Manipulate(RandomParameter.ActualValue, schedule);
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs	(revision 13435)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using System.Text;
 using HeuristicLab.Common;
@@ -28,20 +29,22 @@
   [Item("ResourceClass", "Represents a resource used in scheduling problems.")]
   [StorableClass]
-  public class Resource : Item {
+  public sealed class Resource : Item {
 
     [Storable]
-    public int Index {
-      get;
-      set;
-    }
+    public int Index { get; private set; }
     [Storable]
-    public ItemList<ScheduledTask> Tasks {
-      get;
-      set;
+    public ItemList<ScheduledTask> Tasks { get; private set; }
+
+    //TODO why does a Ressource has a duration?
+    public double TotalDuration {
+      get {
+        if (Tasks.Count == 0) return 0.0;
+        return Tasks.Max(t => t.EndTime);
+      }
     }
 
     [StorableConstructor]
-    protected Resource(bool deserializing) : base(deserializing) { }
-    protected Resource(Resource original, Cloner cloner)
+    private Resource(bool deserializing) : base(deserializing) { }
+    private Resource(Resource original, Cloner cloner)
       : base(original, cloner) {
       this.Index = original.Index;
@@ -58,20 +61,9 @@
     }
 
-    public double TotalDuration {
-      get {
-        double result = 0;
-        foreach (ScheduledTask t in Tasks) {
-          if (t.EndTime > result)
-            result = t.EndTime;
-        }
-        return result;
-      }
-    }
-
     public override string ToString() {
       StringBuilder sb = new StringBuilder();
       sb.Append("Resource#" + Index + " [ ");
       foreach (ScheduledTask t in Tasks) {
-        sb.Append(t+ " ");
+        sb.Append(t + " ");
       }
       sb.Append("]");
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 13401)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 13435)
@@ -25,5 +25,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -31,5 +30,5 @@
   [Item("Schedule", "Represents the general solution for scheduling problems.")]
   [StorableClass]
-  public class Schedule : NamedItem, IScheduleEncoding {
+  public class Schedule : NamedItem, ISchedule {
 
     #region Properties
@@ -38,22 +37,13 @@
     public ItemList<Resource> Resources {
       get { return resources; }
-      set {
-        if (resources != null) DeregisterResourcesEvents();
-        resources = value;
-        if (resources != null) RegisterResourcesEvents();
-        OnResourcesChanged();
-      }
     }
     [Storable]
-    private DoubleValue quality;
-    public DoubleValue Quality {
+    private double quality;
+    public double Quality {
       get { return quality; }
       set {
-        if (quality != value) {
-          if (quality != null) DeregisterQualityEvents();
-          quality = value;
-          if (quality != null) RegisterQualityEvents();
-          OnQualityChanged();
-        }
+        if (quality == value) return;
+        quality = value;
+        OnQualityChanged();
       }
     }
@@ -66,14 +56,19 @@
     protected Schedule(Schedule original, Cloner cloner)
       : base(original, cloner) {
-      this.Resources = cloner.Clone(original.Resources);
-      this.Quality = cloner.Clone(original.Quality);
+      this.resources = cloner.Clone(original.Resources);
+      this.quality = original.Quality;
+      //TODO clone
       this.lastScheduledTaskOfJob = new Dictionary<int, ScheduledTask>(original.lastScheduledTaskOfJob);
+
+      RegisterResourcesEvents();
     }
     public Schedule(int nrOfResources) {
-      Resources = new ItemList<Resource>();
+      resources = new ItemList<Resource>();
       for (int i = 0; i < nrOfResources; i++) {
         Resources.Add(new Resource(i));
       }
       lastScheduledTaskOfJob = new Dictionary<int, ScheduledTask>();
+
+      RegisterResourcesEvents();
     }
 
@@ -89,13 +84,4 @@
         changed(this, EventArgs.Empty);
     }
-    private void RegisterQualityEvents() {
-      Quality.ValueChanged += new EventHandler(Quality_ValueChanged);
-    }
-    private void DeregisterQualityEvents() {
-      Quality.ValueChanged -= new EventHandler(Quality_ValueChanged);
-    }
-    private void Quality_ValueChanged(object sender, EventArgs e) {
-      OnQualityChanged();
-    }
 
     public event EventHandler ResourcesChanged;
@@ -107,7 +93,4 @@
     private void RegisterResourcesEvents() {
       Resources.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Resources_PropertyChanged);
-    }
-    private void DeregisterResourcesEvents() {
-      Resources.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(Resources_PropertyChanged);
     }
     private void Resources_PropertyChanged(object sender, EventArgs e) {
@@ -154,14 +137,4 @@
       return sb.ToString();
     }
-
-    public double CalculateMakespan() {
-      double quality = 0;
-      foreach (Resource r in Resources) {
-        if (r.TotalDuration > quality) {
-          quality = r.TotalDuration;
-        }
-      }
-      return quality;
-    }
   }
 }
