diff --git a/lib/config.py b/lib/config.py
index f4e1ab2a14d213e318c850613e6c87ee235f974c..b5d16bcc9fc53f4b2c769e4b580a68ffb012e153 100644
--- a/lib/config.py
+++ b/lib/config.py
@@ -43,23 +43,6 @@ from ganeti import rpc
 from ganeti import objects
 
 
-def _my_uuidgen():
-  """Poor-man's uuidgen using the uuidgen binary.
-
-  """
-  result = utils.RunCmd(["uuidgen", "-r"])
-  if result.failed:
-    return None
-  return result.stdout.rstrip('\n')
-
-
-try:
-  import uuid
-  _uuidgen = uuid.uuid4
-except ImportError:
-  _uuidgen = _my_uuidgen
-
-
 class ConfigWriter:
   """The interface to the cluster configuration.
 
@@ -149,7 +132,7 @@ class ConfigWriter:
       existing.update(exceptions)
     retries = 64
     while retries > 0:
-      unique_id = _uuidgen()
+      unique_id = utils.GetUUID()
       if unique_id not in existing and unique_id is not None:
         break
     else:
diff --git a/lib/utils.py b/lib/utils.py
index 7038ac78066dd6a4a7ad8990fad16de915ab4d92..fc7dcdbe9598d1e393bac2a18dfa1563a4faa941 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -834,3 +834,14 @@ def GetHomeDir(uid, default=None):
   except KeyError:
     return default
   return result.pw_dir
+
+
+def GetUUID():
+  """Returns a random UUID.
+
+  """
+  f = open("/proc/sys/kernel/random/uuid", "r")
+  try:
+    return f.read(128).rstrip("\n")
+  finally:
+    f.close()
diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py
index 40e9d79874c6c938dc110e3103c7ee20a6cc617f..4de493a32a0a183259b0d7422e1a1ced230c3d99 100755
--- a/test/ganeti.utils_unittest.py
+++ b/test/ganeti.utils_unittest.py
@@ -29,9 +29,11 @@ import os.path
 import md5
 import socket
 import shutil
+import re
 
 import ganeti
 from ganeti import constants
+from ganeti import utils
 from ganeti.utils import IsProcessAlive, Lock, Unlock, RunCmd, \
      RemoveFile, CheckDict, MatchNameComponent, FormatUnit, \
      ParseUnit, AddAuthorizedKey, RemoveAuthorizedKey, \
@@ -539,5 +541,15 @@ class TestListVisibleFiles(unittest.TestCase):
     self._test(files, expected)
 
 
+class TestGetUUID(unittest.TestCase):
+  """Test case for GetUUID"""
+
+  _re_uuid = re.compile('^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-'
+                        '[a-f0-9]{4}-[a-f0-9]{12}$')
+
+  def runTest(self):
+    self.failUnless(self._re_uuid.match(utils.GetUUID()))
+
+
 if __name__ == '__main__':
   unittest.main()