Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 5702)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 5744)
@@ -278,17 +278,16 @@
     protected virtual void problemTabPage_DragEnterOver(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (Content.ProblemType.IsAssignableFrom(type))) {
+      if (!ReadOnly && (e.Data.GetData("HeuristicLab") != null) && Content.ProblemType.IsAssignableFrom(e.Data.GetData("HeuristicLab").GetType())) {
         if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
         else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
-        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
-        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
       }
     }
     protected virtual void problemTabPage_DragDrop(object sender, DragEventArgs e) {
       if (e.Effect != DragDropEffects.None) {
-        IProblem problem = e.Data.GetData("Value") as IProblem;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) problem = (IProblem)problem.Clone();
+        IProblem problem = e.Data.GetData("HeuristicLab") as IProblem;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) problem = (IProblem)problem.Clone();
         Content.Problem = problem;
       }
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 5702)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 5744)
@@ -253,19 +253,16 @@
     private void optimizerTabPage_DragEnterOver(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
-      if (ReadOnly)
-        return;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (typeof(IOptimizer).IsAssignableFrom(type))) {
+      if (!ReadOnly && (e.Data.GetData("HeuristicLab") is IOptimizer)) {
         if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
         else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
-        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
-        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
       }
     }
     private void optimizerTabPage_DragDrop(object sender, DragEventArgs e) {
       if (e.Effect != DragDropEffects.None) {
-        IOptimizer optimizer = e.Data.GetData("Value") as IOptimizer;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) optimizer = (IOptimizer)optimizer.Clone();
+        IOptimizer optimizer = e.Data.GetData("HeuristicLab") as IOptimizer;
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) optimizer = (IOptimizer)optimizer.Clone();
         Content.Optimizer = optimizer;
       }
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 5702)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 5744)
@@ -452,6 +452,5 @@
         if (this.draggedRun != null && h.ChartElementType != ChartElementType.DataPoint) {
           DataObject data = new DataObject();
-          data.SetData("Type", draggedRun.GetType());
-          data.SetData("Value", draggedRun);
+          data.SetData("HeuristicLab", draggedRun);
           if (ReadOnly)
             DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs	(revision 5702)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs	(revision 5744)
@@ -170,6 +170,6 @@
       this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
       this.itemsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragDrop);
-      this.itemsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
-      this.itemsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
+      this.itemsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnter);
+      this.itemsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragOver);
       this.itemsListView.DoubleClick += new System.EventHandler(this.itemsListView_DoubleClick);
       this.itemsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.itemsListView_KeyDown);
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 5702)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 5744)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Drawing;
@@ -37,4 +38,5 @@
   public sealed partial class RunCollectionView : ItemView {
     private Dictionary<IRun, List<ListViewItem>> itemListViewItemMapping;
+    private bool validDragOperation;
 
     public new IItemCollection<IRun> Content {
@@ -271,16 +273,11 @@
         if (items.Count > 0) {
           DataObject data = new DataObject();
-          if (items.Count == 1) {
-            data.SetData("Type", items[0].GetType());
-            data.SetData("Value", items[0]);
-          } else {
-            data.SetData("Type", typeof(IEnumerable<IRun>));
-            data.SetData("Value", items);
-          }
+          if (items.Count == 1) data.SetData("HeuristicLab", items[0]);
+          else data.SetData("HeuristicLab", items);
           if (Content.IsReadOnly || ReadOnly) {
             DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
           } else {
             DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
-            if ((result & DragDropEffects.Move) == DragDropEffects.Move) {
+            if (result.HasFlag(DragDropEffects.Move)) {
               foreach (IRun item in items) Content.Remove(item);
             }
@@ -289,27 +286,35 @@
       }
     }
-    private void itemsListView_DragEnterOver(object sender, DragEventArgs e) {
+    private void itemsListView_DragEnter(object sender, DragEventArgs e) {
+      validDragOperation = false;
+      if (e.Data.GetData("HeuristicLab") is IRun) {
+        validDragOperation = true;
+      } else if (e.Data.GetData("HeuristicLab") is IEnumerable) {
+        validDragOperation = true;
+        IEnumerable items = (IEnumerable)e.Data.GetData("HeuristicLab");
+        foreach (object item in items)
+          validDragOperation = validDragOperation && (item is IRun);
+      }
+      validDragOperation = validDragOperation && !Content.IsReadOnly && !ReadOnly;
+    }
+    private void itemsListView_DragOver(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
-      Type type = e.Data.GetData("Type") as Type;
-      if (!Content.IsReadOnly && !ReadOnly && (type != null) && (typeof(IRun).IsAssignableFrom(type) || typeof(IEnumerable<IRun>).IsAssignableFrom(type))) {
+      if (validDragOperation) {
         if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
         else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
-        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
-        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
       }
     }
     private void itemsListView_DragDrop(object sender, DragEventArgs e) {
       if (e.Effect != DragDropEffects.None) {
-        object value = e.Data.GetData("Value");
-        IEnumerable<IRun> items = Enumerable.Empty<IRun>();
-        if (value is IRun)
-          items = new IRun[] { (IRun)value };
-        else if (value is IEnumerable<IRun>)
-          items = (IEnumerable<IRun>)value;
-
-        foreach (IRun item in items) {
-          if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) Content.Add((IRun)item.Clone());
-          else Content.Add(item);
+        if (e.Data.GetData("HeuristicLab") is IRun) {
+          IRun item = (IRun)e.Data.GetData("HeuristicLab");
+          Content.Add(e.Effect.HasFlag(DragDropEffects.Copy) ? (IRun)item.Clone() : item);
+        } else if (e.Data.GetData("HeuristicLab") is IEnumerable) {
+          IEnumerable<IRun> items = ((IEnumerable)e.Data.GetData("HeuristicLab")).Cast<IRun>();
+          foreach (IRun item in items)
+            Content.Add(e.Effect.HasFlag(DragDropEffects.Copy) ? (IRun)item.Clone() : item);
         }
       }
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs	(revision 5702)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs	(revision 5744)
@@ -149,6 +149,5 @@
         if (item != null) {
           DataObject data = new DataObject();
-          data.SetData("Type", item.GetType());
-          data.SetData("Value", item);
+          data.SetData("HeuristicLab", item);
           DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy);
         }
