diff --git a/lib/backend.py b/lib/backend.py
index 7d92afba2fdae0df1e83b12a4ca6eb7aef3cd6f7..479cea256ad8f4ef9219296b510b3ce8ac35259b 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -807,12 +807,20 @@ def MirrorRemoveChildren(parent_cdev, new_cdevs):
   if parent_bdev is None:
     logger.Error("Can't find parent in remove children: %s" % parent_cdev)
     return False
-  new_bdevs = [_RecursiveFindBD(disk) for disk in new_cdevs]
-  if new_bdevs.count(None) > 0:
-    logger.Error("Can't find some devices while removing children: %s %s" %
-                 (new_cdevs, new_bdevs))
-    return False
-  parent_bdev.RemoveChildren(new_bdevs)
+  devs = []
+  for disk in new_cdevs:
+    rpath = disk.StaticDevPath()
+    if rpath is None:
+      bd = _RecursiveFindBD(disk)
+      if bd is None:
+        logger.Error("Can't find dynamic device %s while removing children" %
+                     disk)
+        return False
+      else:
+        devs.append(bd.dev_path)
+    else:
+      devs.append(rpath)
+  parent_bdev.RemoveChildren(devs)
   return True
 
 
diff --git a/lib/bdev.py b/lib/bdev.py
index bfa333b7b055cf4fad1595471c7c6da9e0dd8600..8dfa18e2c17f5cf1434ec46a9839401a3290d761 100644
--- a/lib/bdev.py
+++ b/lib/bdev.py
@@ -744,9 +744,9 @@ class MDRaid1(BlockDev):
     args = ["mdadm", "-f", self.dev_path]
     orig_devs = []
     for dev in devices:
-      args.append(dev.dev_path)
+      args.append(dev)
       for c in self._children:
-        if c.dev_path == dev.dev_path:
+        if c.dev_path == dev:
           orig_devs.append(c)
           break
       else:
@@ -1878,13 +1878,16 @@ class DRBD8(BaseDRBD):
     if len(self._children) != 2:
       raise errors.BlockDeviceError("We don't have two children: %s" %
                                     self._children)
-
+    if self._children.count(None) == 2: # we don't actually have children :)
+      logger.Error("Requested detach while detached")
+      return
     if len(devices) != 2:
       raise errors.BlockDeviceError("We need two children in RemoveChildren")
-    for idx, dev in enumerate(devices):
-      if dev.dev_path != self._children[idx].dev_path:
-        raise errors.BlockDeviceError("Mismatch in local storage (%d) in"
-                                      " RemoveChildren" % idx)
+    for child, dev in zip(self._children, devices):
+      if dev != child.dev_path:
+        raise errors.BlockDeviceError("Mismatch in local storage"
+                                      " (%s != %s) in RemoveChildren" %
+                                      (dev, child.dev_path))
 
     if not self._ShutdownLocal(self.minor):
       raise errors.BlockDeviceError("Can't detach from local storage")