diff --git a/lib/locking.py b/lib/locking.py
index 733fa84514ed3958536a8886d9db9ba01305b928..2144735c73069198795273fb54a978093ea14442 100644
--- a/lib/locking.py
+++ b/lib/locking.py
@@ -670,12 +670,12 @@ class LockSet:
 #   If you need more than one node, or more than one instance, acquire them at
 #   the same time.
 LEVEL_CLUSTER = 0
-LEVEL_NODE = 1
-LEVEL_INSTANCE = 2
+LEVEL_INSTANCE = 1
+LEVEL_NODE = 2
 
 LEVELS = [LEVEL_CLUSTER,
-          LEVEL_NODE,
-          LEVEL_INSTANCE]
+          LEVEL_INSTANCE,
+          LEVEL_NODE]
 
 # Lock levels which are modifiable
 LEVELS_MOD = [LEVEL_NODE, LEVEL_INSTANCE]
diff --git a/lib/mcpu.py b/lib/mcpu.py
index f9e1d84bfeae79967af7552e1b6d6d1fa126bbfa..d78adb46d435c482aa21feb22c46d2feb258f286 100644
--- a/lib/mcpu.py
+++ b/lib/mcpu.py
@@ -176,7 +176,7 @@ class Processor(object):
       lu = lu_class(self, op, self.context, sstore)
       lu.ExpandNames()
       assert lu.needed_locks is not None, "needed_locks not set by LU"
-      result = self._LockAndExecLU(lu, locking.LEVEL_NODE)
+      result = self._LockAndExecLU(lu, locking.LEVEL_INSTANCE)
     finally:
       self.context.glm.release(locking.LEVEL_CLUSTER)
       self.exclusive_BGL = False
diff --git a/test/ganeti.locking_unittest.py b/test/ganeti.locking_unittest.py
index 195b27fb325718ff107932c2a69a836766cef61e..9da130300d17ed8f6a3c3a6963b4ed9e951e7e74 100755
--- a/test/ganeti.locking_unittest.py
+++ b/test/ganeti.locking_unittest.py
@@ -621,14 +621,14 @@ class TestGanetiLockManager(unittest.TestCase):
   def testAcquireRelease(self):
     self.GL.acquire(locking.LEVEL_CLUSTER, ['BGL'], shared=1)
     self.assertEquals(self.GL._list_owned(locking.LEVEL_CLUSTER), set(['BGL']))
+    self.GL.acquire(locking.LEVEL_INSTANCE, ['i1'])
     self.GL.acquire(locking.LEVEL_NODE, ['n1', 'n2'], shared=1)
-    self.GL.release(locking.LEVEL_NODE)
-    self.GL.acquire(locking.LEVEL_NODE, ['n1'])
+    self.GL.release(locking.LEVEL_NODE, ['n2'])
     self.assertEquals(self.GL._list_owned(locking.LEVEL_NODE), set(['n1']))
-    self.GL.acquire(locking.LEVEL_INSTANCE, ['i1', 'i2'])
-    self.GL.release(locking.LEVEL_INSTANCE, ['i2'])
     self.assertEquals(self.GL._list_owned(locking.LEVEL_INSTANCE), set(['i1']))
     self.GL.release(locking.LEVEL_NODE)
+    self.assertEquals(self.GL._list_owned(locking.LEVEL_NODE), set())
+    self.assertEquals(self.GL._list_owned(locking.LEVEL_INSTANCE), set(['i1']))
     self.GL.release(locking.LEVEL_INSTANCE)
     self.assertRaises(errors.LockError, self.GL.acquire,
                       locking.LEVEL_INSTANCE, ['i5'])
@@ -656,7 +656,7 @@ class TestGanetiLockManager(unittest.TestCase):
 
   def testWrongOrder(self):
     self.GL.acquire(locking.LEVEL_CLUSTER, ['BGL'], shared=1)
-    self.GL.acquire(locking.LEVEL_INSTANCE, ['i3'])
+    self.GL.acquire(locking.LEVEL_NODE, ['n2'])
     self.assertRaises(AssertionError, self.GL.acquire,
                       locking.LEVEL_NODE, ['n1'])
     self.assertRaises(AssertionError, self.GL.acquire,
@@ -678,7 +678,6 @@ class TestGanetiLockManager(unittest.TestCase):
     self.GL.acquire(locking.LEVEL_CLUSTER, ['BGL'], shared=1)
     Thread(target=self._doLock, args=(locking.LEVEL_INSTANCE, 'i1', 1)).start()
     self.assertEqual(self.done.get(True, 1), 'DONE')
-    self.GL.acquire(locking.LEVEL_NODE, ['n1'])
     self.GL.acquire(locking.LEVEL_INSTANCE, ['i3'])
     Thread(target=self._doLock, args=(locking.LEVEL_INSTANCE, 'i1', 1)).start()
     self.assertEqual(self.done.get(True, 1), 'DONE')