Index: trunk/sources/HeuristicLab.BackgroundProcessing/DispatchedView.cs
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/DispatchedView.cs	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/DispatchedView.cs	(revision 2399)
@@ -0,0 +1,63 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Threading;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Threading;
+
+namespace HeuristicLab.BackgroundProcessing {
+
+  /// <summary>
+  /// Takes an <code>ObservableEnumerable</code> and transfers all events to the
+  /// specified Dispatcher. It also keeps a cache of the collection to ensure
+  /// the Dispatcher sees a consistent state.
+  /// </summary>
+  /// <typeparam name="T"></typeparam>
+  public class DispatchedView<T> : ObservableEnumerable<T> where T : class {
+
+    private List<T> cache;
+    private ObservableEnumerable<T> source;
+    private Dispatcher Dispatcher;
+    private DispatcherPriority Priority;
+
+    public event NotifyCollectionChangedEventHandler CollectionChanged;
+
+    public DispatchedView(ObservableEnumerable<T> source, Dispatcher dispatcher, DispatcherPriority priority) {
+      cache = source.ToList();
+      source.CollectionChanged += source_CollectionChanged;
+      this.source = source;
+      Dispatcher = dispatcher;
+      Priority = priority;
+    }
+
+    void source_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) {
+      Dispatcher.BeginInvoke(new Action(() => {
+        if (e.Action == NotifyCollectionChangedAction.Add) {
+          cache.InsertRange(e.NewStartingIndex, e.NewItems.Cast<T>());
+        } else if (e.Action == NotifyCollectionChangedAction.Remove) {
+          cache.RemoveRange(e.OldStartingIndex, e.OldItems.Count);
+        } else {
+          cache = source.ToList();
+        }
+        OnCollectionChanged(e);
+      }), Priority, null);
+    }
+
+    protected void OnCollectionChanged(NotifyCollectionChangedEventArgs args) {
+      if (CollectionChanged != null)
+        CollectionChanged(this, args);
+    }    
+
+    public IEnumerator<T> GetEnumerator() {
+      return cache.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.BackgroundProcessing/HeuristicLab.BackgroundProcessing-3.2.csproj
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/HeuristicLab.BackgroundProcessing-3.2.csproj	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/HeuristicLab.BackgroundProcessing-3.2.csproj	(revision 2399)
@@ -0,0 +1,98 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{589BECAE-69B0-4EB1-8C06-C073531762B7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.BackgroundProcessing</RootNamespace>
+    <AssemblyName>HeuristicLab.BackgroundProcessing-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </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>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure, Version=3.2.0.2234, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.0\HeuristicLab.PluginInfrastructure.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabBackgroundProcessingPlugin.cs" />
+    <Compile Include="ObservableEnumerable.cs" />
+    <Compile Include="DispatchedView.cs" />
+    <Compile Include="ObservableBackgroundWorker.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="WorkerMonitor.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <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>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: trunk/sources/HeuristicLab.BackgroundProcessing/HeuristicLabBackgroundProcessingPlugin.cs
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/HeuristicLabBackgroundProcessingPlugin.cs	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/HeuristicLabBackgroundProcessingPlugin.cs	(revision 2399)
@@ -0,0 +1,8 @@
+﻿using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.BackgroundProcessing {
+
+  [ClassInfo(Name = "HeuristicLab.BackgroundProcessing-3.2")]
+  [PluginFile(Filename = "HeuristicLab.BackgroundProcessing-3.2.dll", Filetype = PluginFileType.Assembly)]  
+  public class HeuristicLabBackgroundProcessingPlugin : PluginBase {}
+}
Index: trunk/sources/HeuristicLab.BackgroundProcessing/ObservableBackgroundWorker.cs
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/ObservableBackgroundWorker.cs	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/ObservableBackgroundWorker.cs	(revision 2399)
@@ -0,0 +1,86 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel;
+using System.Threading;
+using System.Collections.ObjectModel;
+
+namespace HeuristicLab.BackgroundProcessing {
+
+  /// <summary>
+  /// Extends the BackgroundWorker to make it easier to follow progress and automatically
+  /// registers with the WorkerMonitor.
+  /// </summary>
+  public class ObservableBackgroundWorker : BackgroundWorker, INotifyPropertyChanged {
+
+    public string Name { get; private set; }
+    public int Progress { get; private set; }
+
+    /// <summary>
+    /// Indicate whether the worker is actually doing something. In contrast
+    /// to IsBusy this shows that the worker is about to execute or leave DoWork
+    /// while IsBusy shows wheter the worker has been "started" with this.RunWorkerAsync.
+    /// </summary>
+    public bool IsRunning { get; private set; }
+
+    /// <summary>
+    /// Notification about worker has actually started working i.e.
+    /// has been assigned a ThreadPool thread.
+    /// </summary>
+    public event EventHandler WorkerStarted;
+
+    /// <summary>
+    /// Unsynchronized version of RunWorkerCompleted so you don't
+    /// have to wait for the GUI thread to be notified.
+    /// </summary>
+    public event EventHandler WorkerStopped;
+
+    public event PropertyChangedEventHandler PropertyChanged;
+
+    public ObservableBackgroundWorker(string name) {
+      Name = name;
+      WorkerMonitor.Default.RegisterWorker(this);
+      IsRunning = false;
+    }
+
+    protected override void OnProgressChanged(ProgressChangedEventArgs e) {
+      Progress = e.ProgressPercentage;
+      base.OnProgressChanged(e);
+      OnPropertyChanged("Progress");
+    }
+
+    protected override void OnDoWork(DoWorkEventArgs e) {
+      IsRunning = true;
+      try {
+        OnPropertyChanged("IsRunning");
+        OnWorkerStarted();
+        base.OnDoWork(e);
+      } finally {
+        IsRunning = false;
+        OnWorkerStopped();
+        OnPropertyChanged("IsRunning");
+      }
+    }
+    
+    protected void OnWorkerStarted() {
+      if (WorkerStarted != null)
+        WorkerStarted(this, new EventArgs());
+    }
+
+    protected void OnWorkerStopped() {
+      if (WorkerStopped != null)
+        WorkerStopped(this, new EventArgs());
+    }
+
+    protected void OnPropertyChanged(string name) {
+      if (PropertyChanged != null)
+        PropertyChanged(this, new PropertyChangedEventArgs(name));
+    }
+
+    public new void CancelAsync() {
+      base.CancelAsync();
+      OnPropertyChanged("CancellationPending");
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.BackgroundProcessing/ObservableEnumerable.cs
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/ObservableEnumerable.cs	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/ObservableEnumerable.cs	(revision 2399)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Collections;
+
+namespace HeuristicLab.BackgroundProcessing {
+
+  /// <summary>
+  /// Combines <code>IEnumerable&gt;T&lt;"/></code> and <code>INotifyCollectionChanged</code> into
+  /// a single interface
+  /// </summary>
+  /// <typeparam name="T"></typeparam>
+  public interface ObservableEnumerable<T> : IEnumerable<T>, INotifyCollectionChanged where T : class { }
+    
+}
Index: trunk/sources/HeuristicLab.BackgroundProcessing/Properties/AssemblyInfo.frame
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/Properties/AssemblyInfo.frame	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/Properties/AssemblyInfo.frame	(revision 2399)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// 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.BackgroundProcessing")]
+[assembly: AssemblyDescription("General facitlities for running and monitoring background tasks.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2009 HEAL")]
+[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)]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: trunk/sources/HeuristicLab.BackgroundProcessing/WorkerMonitor.cs
===================================================================
--- trunk/sources/HeuristicLab.BackgroundProcessing/WorkerMonitor.cs	(revision 2399)
+++ trunk/sources/HeuristicLab.BackgroundProcessing/WorkerMonitor.cs	(revision 2399)
@@ -0,0 +1,128 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel;
+using System.Threading;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Collections;
+
+namespace HeuristicLab.BackgroundProcessing {
+
+
+  /// <summary>
+  /// Provides a list of all currently running or pending ObservableBackgroundWorkers.
+  /// </summary>
+  public class WorkerMonitor : ObservableEnumerable<ObservableBackgroundWorker> {
+
+    public static WorkerMonitor Default = new WorkerMonitor();
+
+    public event ThreadExceptionEventHandler ThreadException;
+    public event NotifyCollectionChangedEventHandler CollectionChanged;
+
+    private List<ObservableBackgroundWorker> BackgroundWorkers;
+    private ReaderWriterLockSlim workerLock;
+
+    public WorkerMonitor() {
+      BackgroundWorkers = new List<ObservableBackgroundWorker>();
+      workerLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
+    }
+
+    internal void RegisterWorker(ObservableBackgroundWorker worker) {
+      worker.RunWorkerCompleted += worker_RunWorkerCompleted;
+      worker.WorkerStopped += worker_WorkerStopped;
+      try {
+        workerLock.EnterUpgradeableReadLock();
+        try {
+          workerLock.EnterWriteLock();
+          BackgroundWorkers.Add(worker);
+        } finally {
+          workerLock.ExitWriteLock();
+        }
+        int index = BackgroundWorkers.Count - 1;
+        OnCollectionChanged(new NotifyCollectionChangedEventArgs(
+          NotifyCollectionChangedAction.Add, worker, index));
+      } finally {
+        workerLock.ExitUpgradeableReadLock();
+      }
+    }
+
+    void worker_WorkerStopped(object sender, EventArgs e) {
+      ObservableBackgroundWorker worker = sender as ObservableBackgroundWorker;
+      try {
+        workerLock.EnterUpgradeableReadLock();
+        int index = BackgroundWorkers.IndexOf(worker);
+        try {
+          workerLock.EnterWriteLock();
+          BackgroundWorkers.RemoveAt(index);
+        } finally {
+          workerLock.ExitWriteLock();
+        }
+        OnCollectionChanged(new NotifyCollectionChangedEventArgs(
+          NotifyCollectionChangedAction.Remove, worker, index));
+      } finally {
+        workerLock.ExitUpgradeableReadLock();
+      }
+    }
+
+    private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      ObservableBackgroundWorker worker = sender as ObservableBackgroundWorker;
+      if (e.Error != null) {
+        OnThreadException(new Exception(worker.Name, e.Error));
+      }
+    }
+
+    protected void OnThreadException(Exception x) {
+      if (ThreadException != null)
+        ThreadException(this, new ThreadExceptionEventArgs(x));
+    }
+
+    public IEnumerator<ObservableBackgroundWorker> GetEnumerator() {
+      try {
+        workerLock.EnterReadLock();
+        IList<ObservableBackgroundWorker> copy = BackgroundWorkers.ToList();
+        return copy.GetEnumerator();
+      } finally {
+        workerLock.ExitReadLock();
+      }
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    protected void OnCollectionChanged(NotifyCollectionChangedEventArgs args) {
+      if (CollectionChanged != null)
+        CollectionChanged(this, args);
+    }
+
+    public void CancelAll() {
+      List<ObservableBackgroundWorker> cancelableWorkers = GetCancelableWorkers();
+      lock (cancelableWorkers) {
+        foreach (var worker in cancelableWorkers.ToList()) {
+          worker.WorkerStopped += (sender, args) => {
+            lock (cancelableWorkers) {
+              cancelableWorkers.Remove((ObservableBackgroundWorker)sender);
+              Monitor.Pulse(cancelableWorkers);
+            }
+          };
+          worker.CancelAsync();
+          if (!worker.IsRunning)
+            cancelableWorkers.Remove(worker);
+        }
+        while (cancelableWorkers.Count > 0)
+          Monitor.Wait(cancelableWorkers);
+      }
+    }
+
+    private List<ObservableBackgroundWorker> GetCancelableWorkers() {
+      try {
+        workerLock.EnterReadLock();
+        return BackgroundWorkers.Where(w => w.WorkerSupportsCancellation).ToList();
+      } finally {
+        workerLock.ExitReadLock();
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.sln
===================================================================
--- trunk/sources/HeuristicLab.sln	(revision 2398)
+++ trunk/sources/HeuristicLab.sln	(revision 2399)
@@ -251,4 +251,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP.Algorithms-3.2", "HeuristicLab.GP.Algorithms\3.2\HeuristicLab.GP.Algorithms-3.2.csproj", "{3127719F-110E-4558-8845-98559DBB422D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.BackgroundProcessing-3.2", "HeuristicLab.BackgroundProcessing\HeuristicLab.BackgroundProcessing-3.2.csproj", "{589BECAE-69B0-4EB1-8C06-C073531762B7}"
 EndProject
 Global
@@ -4024,4 +4026,29 @@
 		{3127719F-110E-4558-8845-98559DBB422D}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
 		{3127719F-110E-4558-8845-98559DBB422D}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.CEDMA Debug|x64.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Debug|x86.ActiveCfg = Debug|x86
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Debug|x86.Build.0 = Debug|x86
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Modeling Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Release|x64.ActiveCfg = Release|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Release|x86.ActiveCfg = Release|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.v3.2 Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.v3.2 Debug|Any CPU.Build.0 = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.v3.2 Debug|x64.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.v3.2 Debug|x86.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
+		{589BECAE-69B0-4EB1-8C06-C073531762B7}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
@@ -4118,4 +4145,5 @@
 		{1FC004FC-59AF-4249-B1B6-FF25873A20E4} = {410732DB-725A-4824-896B-C298978343C0}
 		{3127719F-110E-4558-8845-98559DBB422D} = {410732DB-725A-4824-896B-C298978343C0}
+		{589BECAE-69B0-4EB1-8C06-C073531762B7} = {410732DB-725A-4824-896B-C298978343C0}
 		{A9E282EA-180F-4233-B809-AEDF0787545C} = {78982D7C-D63D-4A3D-AE1F-F58AC007603B}
 		{BF7D9494-A586-457B-8DF9-ED599F9E6A71} = {78982D7C-D63D-4A3D-AE1F-F58AC007603B}
Index: trunk/sources/HeuristicLab/CopyAssemblies.cmd
===================================================================
--- trunk/sources/HeuristicLab/CopyAssemblies.cmd	(revision 2398)
+++ trunk/sources/HeuristicLab/CopyAssemblies.cmd	(revision 2399)
@@ -13,4 +13,5 @@
 copy "%SolutionDir%\HeuristicLab.Assignment.QAP\3.2\%Outdir%\HeuristicLab.Assignment.QAP-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.BitVector\3.2\%Outdir%\HeuristicLab.BitVector-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.BackgroundProcessing\%Outdir%\HeuristicLab.BackgroundProcessing-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.CEDMA.Charting\3.3\%Outdir%\HeuristicLab.CEDMA.Charting-3.3.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.CEDMA.Server\3.3\%Outdir%\HeuristicLab.CEDMA.Server-3.3.dll" .\plugins
