diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index bd93e1a68a898a29560ab8ea488d9c267a351545..cb7eb3b2ba2490937a74969e4390ef508708d5d1 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1164,10 +1164,29 @@ void DeleteShape(int Type, int Num)
     DeleteVolume(Num);
     break;
   case MSH_POINT_FROM_GMODEL:
+    {
+      GVertex *gv = GModel::current()->getVertexByTag(Num);
+      if(gv) GModel::current()->remove(gv);
+    }
+    break;
   case MSH_SEGM_FROM_GMODEL:
+    {
+      GEdge *ge = GModel::current()->getEdgeByTag(Num);
+      if(ge) GModel::current()->remove(ge);
+    }
+    break;
   case MSH_SURF_FROM_GMODEL:
+    {
+      GFace *gf = GModel::current()->getFaceByTag(Num);
+      if(gf) GModel::current()->remove(gf);
+    }
+    break;
+
   case MSH_VOLUME_FROM_GMODEL:
-    Msg::Error("Deletion of external CAD entities is not implemented yet");
+    {
+      GRegion *gr = GModel::current()->getRegionByTag(Num);
+      if(gr) GModel::current()->remove(gr);
+    }
     break;
   default:
     Msg::Error("Impossible to delete entity %d (of type %d)", Num, Type);