diff --git a/common/dlist.cpp b/common/dlist.cpp
index 976ff414d9..43b8ce779b 100644
--- a/common/dlist.cpp
+++ b/common/dlist.cpp
@@ -135,7 +135,7 @@ void DHEAD::remove( EDA_BaseStruct* aElement )
     {
         aElement->Next()->SetBack( aElement->Back() );
     }
-    else
+    else  // element being removed is last
     {
         wxASSERT( last == aElement );
         last = aElement->Back();
@@ -143,9 +143,9 @@ void DHEAD::remove( EDA_BaseStruct* aElement )
 
     if( aElement->Back() )
     {
-        aElement->Back()->SetNext( aElement->Back() );
+        aElement->Back()->SetNext( aElement->Next() );
     }
-    else
+    else    // element being removed is first
     {
         wxASSERT( first == aElement );
         first = aElement->Next();
@@ -156,5 +156,42 @@ void DHEAD::remove( EDA_BaseStruct* aElement )
     aElement->SetList( 0 );
 
     --count;
+
+    D( VerifyListIntegrity(); );
 }
 
+#if defined(DEBUG)
+
+void DHEAD::VerifyListIntegrity()
+{
+    EDA_BaseStruct* item;
+    unsigned i = 0;
+
+    for( item = first;  item && i<count;  ++i, item = item->Next() )
+    {
+        if( i < count-1 )
+        {
+            wxASSERT( item->Next() );
+        }
+
+        wxASSERT( item->GetList() == this );
+    }
+
+    wxASSERT( item == NULL );
+    wxASSERT( i == count );
+
+    i = 0;
+    for( item = last;  item && i<count;  ++i, item = item->Back() )
+    {
+        if( i < count-1 )
+        {
+            wxASSERT( item->Back() );
+        }
+    }
+
+    wxASSERT( item == NULL );
+    wxASSERT( i == count );
+}
+
+#endif
+
diff --git a/include/dlist.h b/include/dlist.h
index f9879b9ed1..c17017639d 100644
--- a/include/dlist.h
+++ b/include/dlist.h
@@ -108,6 +108,10 @@ public:
      * returns the number of elements in the list.
      */
     unsigned GetCount() { return count; }
+
+#if defined(DEBUG)
+    void VerifyListIntegrity();
+#endif
 };
 
 
@@ -179,7 +183,6 @@ public:
         return aElement;
     }
 
-
     //-----< STL like functions >---------------------------------------
     T* begin() const { return GetFirst(); }
     T* end() const { return NULL; }