Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/AboutView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/AboutView.cs	(revision 6229)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/AboutView.cs	(revision 6230)
@@ -28,5 +28,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
   [View("AboutView: Show some information about HeursticLab Hive")]
-  [Content(typeof(Item), IsDefaultView = true)]
+  [Content(typeof(Item), IsDefaultView = false)]
   public partial class AboutView : ItemView {
     public new Item Content {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/LogView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/LogView.cs	(revision 6229)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/LogView.cs	(revision 6230)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore.Views {
   [View("LogView: Displays logged messages from the slave core.")]
-  [Content(typeof(SlaveItem), IsDefaultView = true)]
+  [Content(typeof(SlaveItem), IsDefaultView = false)]
   public partial class LogView : ItemView {
     public new SlaveItem Content {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/PluginCache.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/PluginCache.cs	(revision 6229)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/PluginCache.cs	(revision 6230)
@@ -25,5 +25,4 @@
 using System.Linq;
 using System.Reflection;
-using System.Runtime.CompilerServices;
 using System.Runtime.Serialization;
 using System.Runtime.Serialization.Formatters.Binary;
@@ -74,41 +73,42 @@
     private void DoUpdateRun() {
       SafelyCreateDirectory(PluginCacheDir);
-      foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
-        cachedPluginsGuids.Add(Guid.Parse(GetFilenameFromPath(dir)));
-      }
-    }
-
-    [MethodImpl(MethodImplOptions.Synchronized)]
+      lock (cachedPluginsGuids) {
+        cachedPluginsGuids.Clear();
+        foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
+          cachedPluginsGuids.Add(Guid.Parse(GetFilenameFromPath(dir)));
+        }
+      }
+    }
+
     public void CopyPluginsForJob(List<Plugin> requests, Guid jobId, out string configFileName) {
-      lock (locker) {
-        configFileName = string.Empty;
-        String targetDir = Path.Combine(PluginTempBaseDir, jobId.ToString());
-
-        RecreateDirectory(targetDir);
-
-        foreach (Plugin requestedPlugin in requests) {
-          var filePaths = GetPluginFilePaths(requestedPlugin.Id);
-          foreach (string filePath in filePaths) {
-            File.Copy(filePath, Path.Combine(targetDir, Path.GetFileName(filePath)));
-          }
-
-          if (requestedPlugin.Name == "Configuration") {
-            configFileName = Path.Combine(targetDir, Path.GetFileName(filePaths.SingleOrDefault())); // configuration plugin consists only of 1 file (usually the "HeuristicLab X.X.exe.config")
-          }
-        }
-
-        // copy files from PluginInfrastructure (which are not declared in any plugins)
-        string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
-        CopyFile(baseDir, targetDir, "HeuristicLab.PluginInfrastructure-3.3.dll");
-        CopyFile(baseDir, targetDir, "ICSharpCode.SharpZipLib.dll");
-        CopyFile(baseDir, targetDir, "ICSharpCode.SharpZipLib License.txt");
-
-        // copy slave plugins, otherwise its not possible to register the UnhandledException handler to the appdomain        
-        CopyFile(baseDir, targetDir, "HeuristicLab.Clients.Hive.SlaveCore-3.4.dll");
-        CopyFile(baseDir, targetDir, "HeuristicLab.Clients.Hive-3.4.dll");
-        //CopyFile(baseDir, targetDir, "HeuristicLab.Services.Hive.Common-3.4.dll");
-        CopyFile(baseDir, targetDir, "HeuristicLab.Hive-3.4.dll");
-        CopyFile(baseDir, targetDir, "HeuristicLab.Clients.Common-3.3.dll");
-      }
+      configFileName = string.Empty;
+      String targetDir = Path.Combine(PluginTempBaseDir, jobId.ToString());
+
+      RecreateDirectory(targetDir);
+
+      foreach (Plugin requestedPlugin in requests) {
+        var filePaths = GetPluginFilePaths(requestedPlugin.Id);
+        foreach (string filePath in filePaths) {
+          File.Copy(filePath, Path.Combine(targetDir, Path.GetFileName(filePath)));
+        }
+
+        if (requestedPlugin.Name == "Configuration") {
+          configFileName = Path.Combine(targetDir, Path.GetFileName(filePaths.SingleOrDefault())); // configuration plugin consists only of 1 file (usually the "HeuristicLab X.X.exe.config")
+        }
+      }
+
+      // copy files from PluginInfrastructure (which are not declared in any plugins)
+      string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+      CopyFile(baseDir, targetDir, "HeuristicLab.PluginInfrastructure-3.3.dll");
+      CopyFile(baseDir, targetDir, "ICSharpCode.SharpZipLib.dll");
+      CopyFile(baseDir, targetDir, "ICSharpCode.SharpZipLib License.txt");
+
+      // copy slave plugins, otherwise its not possible to register the UnhandledException handler to the appdomain        
+      CopyFile(baseDir, targetDir, "HeuristicLab.Clients.Hive.SlaveCore-3.4.dll");
+      CopyFile(baseDir, targetDir, "HeuristicLab.Clients.Hive-3.4.dll");
+      //CopyFile(baseDir, targetDir, "HeuristicLab.Services.Hive.Common-3.4.dll");
+      CopyFile(baseDir, targetDir, "HeuristicLab.Hive-3.4.dll");
+      CopyFile(baseDir, targetDir, "HeuristicLab.Clients.Common-3.3.dll");
+
     }
 
@@ -150,12 +150,14 @@
         List<Guid> missingGuids = new List<Guid>();
         List<Plugin> neededPlugins = new List<Plugin>();
-        foreach (Guid pluginId in myJob.PluginsNeededIds) {
-          Plugin plugin = WcfService.Instance.GetPlugin(pluginId);
-          if (plugin != null) {
-            neededPlugins.Add(plugin);
-          }
-
-          if (!cachedPluginsGuids.Contains(pluginId)) {
-            missingGuids.Add(pluginId);
+        lock (cachedPluginsGuids) {
+          foreach (Guid pluginId in myJob.PluginsNeededIds) {
+            Plugin plugin = WcfService.Instance.GetPlugin(pluginId);
+            if (plugin != null) {
+              neededPlugins.Add(plugin);
+            }
+
+            if (!cachedPluginsGuids.Contains(pluginId)) {
+              missingGuids.Add(pluginId);
+            }
           }
         }
@@ -172,10 +174,11 @@
           }
 
-          DoUpdateRun();
+          if (missingGuids.Count > 0) {
+            DoUpdateRun();
+          }
           CopyPluginsForJob(neededPlugins, myJob.Id, out configFileName);
         } else {
           configFileName = "";
         }
-
         SlaveClientCom.Instance.ClientCom.LogMessage("Fetched " + missingGuids.Count + " plugins for job " + myJob.Id);
       }
@@ -203,9 +206,12 @@
     /// </summary>    
     private void WriteDateLastUsed(string path) {
-      FileStream fs = new FileStream(Path.Combine(path, lastUsedFileName), FileMode.Create);
-      BinaryFormatter formatter = new BinaryFormatter();
-
+      FileStream fs = null;
       try {
+        fs = new FileStream(Path.Combine(path, lastUsedFileName), FileMode.Create);
+        BinaryFormatter formatter = new BinaryFormatter();
         formatter.Serialize(fs, DateTime.Now);
+      }
+      catch (IOException) {
+        SlaveClientCom.Instance.ClientCom.LogMessage(string.Format("No used date written in path {0}.", path));
       }
       catch (SerializationException) {
@@ -214,5 +220,7 @@
       }
       finally {
-        fs.Close();
+        if (fs != null) {
+          fs.Close();
+        }
       }
     }
@@ -245,34 +253,35 @@
 
       if (Directory.Exists(PluginCacheDir)) {
-        foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
-          try {
-            fs = new FileStream(Path.Combine(dir, lastUsedFileName), FileMode.Open);
-            BinaryFormatter formatter = new BinaryFormatter();
-            luDate = (DateTime)formatter.Deserialize(fs);
-            fs.Close();
-
-            if (luDate.AddDays(maxAge) < DateTime.Now) {
+        lock (locker) {
+          foreach (string dir in Directory.EnumerateDirectories(PluginCacheDir)) {
+            try {
+              fs = new FileStream(Path.Combine(dir, lastUsedFileName), FileMode.Open);
+              BinaryFormatter formatter = new BinaryFormatter();
+              luDate = (DateTime)formatter.Deserialize(fs);
+              fs.Close();
+
+              if (luDate.AddDays(maxAge) < DateTime.Now) {
+                Directory.Delete(dir, true);
+                changed = true;
+              }
+            }
+            catch (FileNotFoundException) {
+              //nerver used
               Directory.Delete(dir, true);
               changed = true;
             }
-          }
-          catch (SerializationException) {
-            fs.Close();
-            throw;
-          }
-          catch (System.IO.FileNotFoundException) {
-            //nerver used
-            Directory.Delete(dir, true);
-            changed = true;
-          }
-          catch (Exception) {
-            throw;
-          }
-        }
-      }
-      if (changed)
-        DoUpdateRun();
-    }
-
+            catch (Exception ex) {
+              if (fs != null) {
+                fs.Close();
+              }
+              SlaveClientCom.Instance.ClientCom.LogMessage(string.Format("CleanPluginCache threw exception: {0}", ex.ToString()));
+            }
+          }
+
+          if (changed)
+            DoUpdateRun();
+        }
+      }
+    }
 
     internal void DeletePluginsForJob(Guid id) {
@@ -288,5 +297,5 @@
             Thread.Sleep(1000);
             tries--;
-            if (tries == 0) throw;// TODO: don't know what do do
+            if (tries == 0) throw;// TODO: don't know what to do
           }
         }
