Index: trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs
===================================================================
--- trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs	(revision 7192)
+++ trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemCollectionView.cs	(revision 7195)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using System.Drawing;
 using System.Windows.Forms;
@@ -85,4 +86,37 @@
         doubleClick = true;
     }
+
+    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
+      validDragOperation = false;
+      if (Locked || ReadOnly) return;
+
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as ICheckedItemCollection<T>;
+      if (data != null)
+        validDragOperation = Content.Select(x => x.ToString()).SequenceEqual(data.Select(x => x.ToString()));
+      else
+        base.itemsListView_DragEnter(sender, e);
+    }
+
+    protected override void itemsListView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (!validDragOperation) return;
+
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as ICheckedItemCollection<T>;
+      if (data != null)
+        e.Effect = DragDropEffects.Copy;
+      else
+        base.itemsListView_DragOver(sender, e);
+    }
+
+    protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect == DragDropEffects.None) return;
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as ICheckedItemCollection<T>;
+      if (data != null) {
+        for (int i = 0; i < Content.Count; i++) {
+          Content.SetItemCheckedState(Content.ElementAt(i), data.ItemChecked(data.ElementAt(i)));
+        }
+      } else
+        base.itemsListView_DragDrop(sender, e);
+    }
     #endregion
 
Index: trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs
===================================================================
--- trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 7192)
+++ trunk/sources/HeuristicLab.Core.Views/3.3/CheckedItemListView.cs	(revision 7195)
@@ -20,4 +20,5 @@
 #endregion
 
+using System.Linq;
 using System.Drawing;
 using System.Windows.Forms;
@@ -54,5 +55,5 @@
     private Color backupColor = Color.Empty;
     protected override void SetEnabledStateOfControls() {
-      if(backupColor == Color.Empty) backupColor = base.itemsListView.BackColor;
+      if (backupColor == Color.Empty) backupColor = base.itemsListView.BackColor;
       base.SetEnabledStateOfControls();
       if (ReadOnly || Locked)
@@ -88,4 +89,37 @@
         doubleClick = true;
     }
+
+    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
+      validDragOperation = false;
+      if (Locked || ReadOnly) return;
+
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as ICheckedItemList<T>;
+      if (data != null)
+        validDragOperation = Content.Select(x => x.ToString()).SequenceEqual(data.Select(x => x.ToString()));
+      else
+        base.itemsListView_DragEnter(sender, e);
+    }
+
+    protected override void itemsListView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (!validDragOperation) return;
+
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as ICheckedItemList<T>;
+      if (data != null)
+        e.Effect = DragDropEffects.Copy;
+      else
+        base.itemsListView_DragOver(sender, e);
+    }
+
+    protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect == DragDropEffects.None) return;
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) as ICheckedItemList<T>;
+      if (data != null) {
+        for (int i = 0; i < Content.Count; i++) {
+          Content.SetItemCheckedState(Content[i], data.ItemChecked(data[i]));
+        }
+      } else
+        base.itemsListView_DragDrop(sender, e);
+    }
     #endregion
 
