Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/CachedExternalEvaluator.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/CachedExternalEvaluator.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/CachedExternalEvaluator.cs	(revision 6618)
@@ -20,5 +20,4 @@
 #endregion
 
-
 using System.Threading;
 using HeuristicLab.Common;
@@ -27,4 +26,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Problems.ExternalEvaluation {
 
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationProcessChannel.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationProcessChannel.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationProcessChannel.cs	(revision 6618)
@@ -33,4 +33,5 @@
   public class EvaluationProcessChannel : EvaluationChannel {
 
+    #region Fields & Properties
     private Process process;
     [Storable]
@@ -40,7 +41,8 @@
       set {
         if (IsInitialized) throw new InvalidOperationException(Name + ": Cannot change the executable path as the process has already been started.");
-        string oldExecutable = executable;
+        if (value == executable) return;
         executable = value;
-        if (!oldExecutable.Equals(executable)) OnExecutableChanged();
+        UpdateName();
+        OnExecutableChanged();
       }
     }
@@ -51,11 +53,14 @@
       set {
         if (IsInitialized) throw new InvalidOperationException(Name + ": Cannot change the arguments as the process has already been started.");
-        string oldArguments = arguments;
+        if (value == arguments) return;
         arguments = value;
-        if (!oldArguments.Equals(arguments)) OnArgumentsChanged();
+        UpdateName();
+        OnArgumentsChanged();
       }
     }
     private EvaluationStreamChannel streamingChannel;
+    #endregion
 
+    #region Construction & Cloning
     [StorableConstructor]
     protected EvaluationProcessChannel(bool deserializing) : base(deserializing) { }
@@ -64,4 +69,5 @@
       executable = original.executable;
       arguments = original.arguments;
+      UpdateName();
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -74,8 +80,13 @@
       this.executable = executable;
       this.arguments = arguments;
+      UpdateName();
     }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      UpdateName();
+    }
+    #endregion
 
     #region IExternalEvaluationChannel Members
-
     public override void Open() {
       if (!String.IsNullOrEmpty(executable.Trim())) {
@@ -175,4 +186,11 @@
     }
     #endregion
+
+    #region Auxiliary Methods
+    private void UpdateName() {
+      name = string.Format("ProcessChannel {0} {1}", Path.GetFileNameWithoutExtension(executable), arguments);
+      OnNameChanged();
+    }
+    #endregion
   }
 }
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationServiceClient.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationServiceClient.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationServiceClient.cs	(revision 6618)
@@ -31,7 +31,9 @@
   [StorableClass]
   public class EvaluationServiceClient : ParameterizedNamedItem, IEvaluationServiceClient {
+
     public override bool CanChangeName { get { return false; } }
     public override bool CanChangeDescription { get { return false; } }
 
+    #region Parameters
     public IValueParameter<IEvaluationChannel> ChannelParameter {
       get { return (IValueParameter<IEvaluationChannel>)Parameters["Channel"]; }
@@ -44,11 +46,13 @@
       get { return ChannelParameter.Value; }
     }
+    #endregion
 
 
+    #region Construction & Cloning
     [StorableConstructor]
     protected EvaluationServiceClient(bool deserializing) : base(deserializing) { }
-    protected EvaluationServiceClient(EvaluationServiceClient original, Cloner cloner) : base(original, cloner) { }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new EvaluationServiceClient(this, cloner);
+    protected EvaluationServiceClient(EvaluationServiceClient original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEvents();
     }
     public EvaluationServiceClient()
@@ -56,8 +60,17 @@
       Parameters.Add(new ValueParameter<IEvaluationChannel>("Channel", "The channel over which to call the remote function."));
       Parameters.Add(new ValueParameter<IntValue>("Retry", "How many times the client should retry obtaining a quality in case there is an exception. Note that it immediately aborts when the channel cannot be opened.", new IntValue(10)));
+      RegisterEvents();
     }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EvaluationServiceClient(this, cloner);
+    }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      ChannelParameter_ValueChanged(this, EventArgs.Empty);
+      RegisterEvents();
+    }
+    #endregion
 
     #region IEvaluationServiceClient Members
-
     public QualityMessage Evaluate(SolutionMessage solution) {
       int tries = 0, maxTries = RetryParameter.Value.Value;
@@ -71,9 +84,7 @@
           result = (QualityMessage)Channel.Receive(QualityMessage.CreateBuilder());
           success = true;
-        }
-        catch (InvalidOperationException) {
+        } catch (InvalidOperationException) {
           throw;
-        }
-        catch {
+        } catch {
           if (tries >= maxTries)
             throw;
@@ -92,9 +103,7 @@
           Channel.Send(solution);
           success = true;
-        }
-        catch (InvalidOperationException) {
+        } catch (InvalidOperationException) {
           throw;
-        }
-        catch {
+        } catch {
           if (tries >= maxTries)
             throw;
@@ -103,7 +112,7 @@
       System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ReceiveAsync), callback);
     }
-
     #endregion
 
+    #region Auxiliary Methods
     private void CheckAndOpenChannel() {
       if (Channel == null) throw new InvalidOperationException(Name + ": The channel is not defined.");
@@ -111,6 +120,5 @@
         try {
           Channel.Open();
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
           throw new InvalidOperationException(Name + ": The channel could not be opened.", e);
         }
@@ -122,8 +130,20 @@
       try {
         message = (QualityMessage)Channel.Receive(QualityMessage.CreateBuilder());
-      }
-      catch { }
+      } catch { }
       ((Action<QualityMessage>)callback).Invoke(message);
     }
+
+    private void RegisterEvents() {
+      ChannelParameter.ValueChanged += new EventHandler(ChannelParameter_ValueChanged);
+    }
+
+    void ChannelParameter_ValueChanged(object sender, EventArgs e) {
+      if (ChannelParameter.Value == null)
+        name = "Empty EvaluationServiceClient";
+      else
+        name = String.Format("{0} ServiceClient", ChannelParameter.Value.Name);
+      OnNameChanged();
+    }
+    #endregion
   }
 }
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationTCPChannel.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationTCPChannel.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Drivers/EvaluationTCPChannel.cs	(revision 6618)
@@ -32,6 +32,8 @@
   [StorableClass]
   public class EvaluationTCPChannel : EvaluationChannel {
+
     public const int MAX_VARINT32_SIZE = 5;
 
+    #region Fields & Properties
     [Storable]
     private string ipAddress;
@@ -39,8 +41,8 @@
       get { return ipAddress; }
       set {
-        bool changed = !ipAddress.Equals(value);
+        if (value == ipAddress) return;
         ipAddress = value;
-        if (changed)
-          OnIpAddressChanged();
+        UpdateName();
+        OnIpAddressChanged();
       }
     }
@@ -50,12 +52,14 @@
       get { return port; }
       set {
-        bool changed = port != value;
+        if (value == port) return;
         port = value;
-        if (changed)
-          OnPortChanged();
+        UpdateName();
+        OnPortChanged();
       }
     }
     private Socket socket;
-
+    #endregion
+
+    #region Construction & Cloning
     [StorableConstructor]
     protected EvaluationTCPChannel(bool deserializing) : base(deserializing) { }
@@ -64,5 +68,7 @@
       ipAddress = original.ipAddress;
       port = original.port;
-    }
+      UpdateName();
+    }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new EvaluationTCPChannel(this, cloner);
@@ -74,5 +80,13 @@
       this.ipAddress = ip;
       this.port = port;
-    }
+      UpdateName();
+    }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      UpdateName();
+    }
+    #endregion
+
+    
 
     #region IExternalEvaluationChannel Members
@@ -183,4 +197,11 @@
     #endregion
 
+    #region Auxiliary Methods
+    private void UpdateName() {
+      name = string.Format("TCPChannel {0}:{1}", ipAddress, port);
+      OnNameChanged();
+    }
+    #endregion
+
     #region Events
     public event EventHandler IpAddressChanged;
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs	(revision 6618)
@@ -25,5 +25,8 @@
 using System;
 using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
 using System.Linq;
+using System.Text.RegularExpressions;
 using System.Threading;
 using HeuristicLab.Common;
@@ -33,8 +36,5 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Analysis;
-using System.IO;
-using System.Globalization;
-using System.Text.RegularExpressions;
+
 namespace HeuristicLab.Problems.ExternalEvaluation {
 
@@ -82,5 +82,5 @@
 
     private HashSet<string> activeEvaluations = new HashSet<string>();
-    private object cacheLock = new object();    
+    private object cacheLock = new object();
     #endregion
 
@@ -126,5 +126,5 @@
 
     #region Persistence
-    [Storable(Name="Cache")]
+    [Storable(Name = "Cache")]
     private IEnumerable<KeyValuePair<string, double>> Cache_Persistence {
       get {
@@ -194,5 +194,5 @@
       bool lockTaken = false;
       bool waited = false;
-      try {        
+      try {
         Monitor.Enter(cacheLock, ref lockTaken);
         while (true) {
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs	(revision 6618)
@@ -60,5 +60,4 @@
     protected HashSet<IEvaluationServiceClient> activeClients = new HashSet<IEvaluationServiceClient>();
     protected object clientLock = new object();
-    protected AutoResetEvent clientAvailable = new AutoResetEvent(false);
     #endregion
 
@@ -109,7 +108,5 @@
         client = Clients.CheckedItems.FirstOrDefault(c => !activeClients.Contains(c));
         while (client == null && Clients.Count > 0) {
-          Monitor.Exit(clientLock);
-          clientAvailable.WaitOne();
-          Monitor.Enter(clientLock);
+          Monitor.Wait(clientLock);
           client = Clients.CheckedItems.FirstOrDefault(c => !activeClients.Contains(c));
         }
@@ -122,5 +119,5 @@
         lock (clientLock) {
           activeClients.Remove(client);
-          clientAvailable.Set();
+          Monitor.PulseAll(clientLock);
         }
       }
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLabProblemsExternalEvaluationPlugin.cs.frame
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLabProblemsExternalEvaluationPlugin.cs.frame	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLabProblemsExternalEvaluationPlugin.cs.frame	(revision 6618)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.ExternalEvaluation {
-  [Plugin("HeuristicLab.Problems.ExternalEvaluation", "3.3.4.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ExternalEvaluation", "3.3.5.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ExternalEvaluation-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IEvaluationChannel.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IEvaluationChannel.cs	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IEvaluationChannel.cs	(revision 6618)
@@ -24,5 +24,5 @@
 
 namespace HeuristicLab.Problems.ExternalEvaluation {
-  public interface IEvaluationChannel : IItem {
+  public interface IEvaluationChannel : INamedItem {
     /// <summary>
     /// A flag that describes whether the channel has been initialized or not.
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Properties/AssemblyInfo.frame	(revision 6377)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.ExternalEvaluation/3.3/Properties/AssemblyInfo.frame	(revision 6618)
@@ -34,3 +34,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
