diff --git a/tools/move-instance b/tools/move-instance
index ef3dd8d37e0f50540baadb8138c8aadf4d2cadc6..05b3b24d782dc318db4aba38766d9dd32cbed84c 100755
--- a/tools/move-instance
+++ b/tools/move-instance
@@ -290,7 +290,6 @@ class InstanceMove(object):
     self.dest_snode = dest_snode
     self.dest_iallocator = dest_iallocator
 
-    self.success = None
     self.error_message = None
 
 
@@ -311,17 +310,12 @@ class MoveRuntime(object):
     self.source_to_dest = threading.Condition(self.lock)
     self.dest_to_source = threading.Condition(self.lock)
 
-    # Set when threads should abort
-    self.abort = None
-
     # Source information
-    self.src_success = None
     self.src_error_message = None
     self.src_expinfo = None
     self.src_instinfo = None
 
     # Destination information
-    self.dest_success = None
     self.dest_error_message = None
     self.dest_impinfo = None
 
@@ -340,35 +334,30 @@ class MoveRuntime(object):
       # Call inner function
       fn(*args)
 
-      success = True
       errmsg = None
     except Abort:
-      success = False
       errmsg = "Aborted"
     except Exception, err:
       logging.exception("Caught unhandled exception")
-      success = False
       errmsg = str(err)
 
+    setattr(self, "%s_error_message" % prefix, errmsg)
+
     self.lock.acquire()
     try:
-      # Tell all threads to abort
-      self.abort = True
       self.source_to_dest.notifyAll()
       self.dest_to_source.notifyAll()
     finally:
       self.lock.release()
 
-    setattr(self, "%s_success" % prefix, success)
-    setattr(self, "%s_error_message" % prefix, errmsg)
-
   def CheckAbort(self):
     """Check whether thread should be aborted.
 
     @raise Abort: When thread should be aborted
 
     """
-    if self.abort:
+    if not (self.src_error_message is None and
+            self.dest_error_message is None):
       logging.info("Aborting")
       raise Abort()
 
@@ -652,7 +641,6 @@ class MoveSourceWorker(workerpool.BaseWorker):
       finally:
         dest_thread.join()
 
-      move.success = (mrt.src_success and mrt.dest_success)
       if mrt.src_error_message or mrt.dest_error_message:
         move.error_message = ("Source error: %s, destination error: %s" %
                               (mrt.src_error_message, mrt.dest_error_message))
@@ -660,7 +648,6 @@ class MoveSourceWorker(workerpool.BaseWorker):
         move.error_message = None
     except Exception, err: # pylint: disable-msg=W0703
       logging.exception("Caught unhandled exception")
-      move.success = False
       move.error_message = str(err)
 
 
@@ -850,17 +837,17 @@ def main():
     else:
       name = "%s as %s" % (move.src_instance_name, move.dest_instance_name)
 
-    if move.success and not move.error_message:
-      msg = "Success"
-    else:
+    if move.error_message:
       msg = "Failed (%s)" % move.error_message
+    else:
+      msg = "Success"
 
     logging.info("%s: %s", name, msg)
 
-  if compat.all(move.success for move in moves):
-    sys.exit(constants.EXIT_SUCCESS)
+  if compat.any(move.error_message for move in moves):
+    sys.exit(constants.EXIT_FAILURE)
 
-  sys.exit(constants.EXIT_FAILURE)
+  sys.exit(constants.EXIT_SUCCESS)
 
 
 if __name__ == "__main__":