diff --git a/lib/compat.py b/lib/compat.py
index 692ab246f9845ec7f48379049e2e835a8b325c2d..013206f21bc3711abf8e68949b60375970e92382 100644
--- a/lib/compat.py
+++ b/lib/compat.py
@@ -30,6 +30,11 @@ try:
 except ImportError:
   functools = None
 
+try:
+  import roman
+except ImportError:
+  roman = None
+
 
 def all(seq, pred=bool): # pylint: disable-msg=W0622
   """Returns True if pred(x) is True for every element in the iterable.
@@ -82,6 +87,29 @@ def _partial(func, *args, **keywords): # pylint: disable-msg=W0622
   return newfunc
 
 
+def TryToRoman(val, convert=True):
+  """Try to convert a value to roman numerals
+
+  If the roman module could be loaded convert the given value to a roman
+  numeral. Gracefully fail back to leaving the value untouched.
+
+  @type val: integer
+  @param val: value to convert
+  @type convert: boolean
+  @param convert: if False, don't try conversion at all
+  @rtype: string or typeof(val)
+  @return: roman numeral for val, or val if conversion didn't succeed
+
+  """
+  if roman is not None and convert:
+    try:
+      return roman.toRoman(val)
+    except roman.RomanError:
+      return val
+  else:
+    return val
+
+
 if functools is None:
   partial = _partial
 else:
diff --git a/scripts/gnt-node b/scripts/gnt-node
index 8ca09e41bca52b9a1daa412b3f0f9af4b9a196b0..182ddc537f7907638d2a2f01dacc5bbfcabda592 100755
--- a/scripts/gnt-node
+++ b/scripts/gnt-node
@@ -28,15 +28,11 @@
 
 import sys
 
-try:
-  import roman
-except ImportError:
-  roman = None
-
 from ganeti.cli import *
 from ganeti import opcodes
 from ganeti import utils
 from ganeti import constants
+from ganeti import compat
 from ganeti import errors
 from ganeti import bootstrap
 
@@ -232,12 +228,8 @@ def ListNodes(opts, args):
         val = utils.FormatTime(val)
       elif val is None:
         val = "?"
-      elif (roman is not None and opts.roman_integers
-            and field in latinfriendlyfields):
-        try:
-          val = roman.toRoman(val)
-        except roman.RomanError:
-          pass
+      elif opts.roman_integers and field in latinfriendlyfields:
+        val = compat.TryToRoman(val)
       row[idx] = str(val)
 
   data = GenerateTable(separator=opts.separator, headers=headers,
diff --git a/test/ganeti.compat_unittest.py b/test/ganeti.compat_unittest.py
index 19f82b7a8f26b8d225aea2c3dc8364afcc630719..dbe9940e71403666d44c1d7f94f216a50b01172b 100755
--- a/test/ganeti.compat_unittest.py
+++ b/test/ganeti.compat_unittest.py
@@ -58,5 +58,26 @@ class TestPartial(testutils.GanetiTestCase):
                            (("Foo", ), {"xyz": 999,}))
 
 
+class TestTryToRoman(testutils.GanetiTestCase):
+  """test the compat.TryToRoman function"""
+
+  def testAFewIntegers(self):
+    self.assertEquals(compat.TryToRoman(0), 0)
+    self.assertEquals(compat.TryToRoman(1), "I")
+    self.assertEquals(compat.TryToRoman(4), "IV")
+    self.assertEquals(compat.TryToRoman(5), "V")
+
+  def testStrings(self):
+    self.assertEquals(compat.TryToRoman("astring"), "astring")
+    self.assertEquals(compat.TryToRoman("5"), "5")
+
+  def testDontConvert(self):
+    self.assertEquals(compat.TryToRoman(0, convert=False), 0)
+    self.assertEquals(compat.TryToRoman(1, convert=False), 1)
+    self.assertEquals(compat.TryToRoman(7, convert=False), 7)
+    self.assertEquals(compat.TryToRoman("astring", convert=False), "astring")
+    self.assertEquals(compat.TryToRoman("19", convert=False), "19")
+
+
 if __name__ == "__main__":
   testutils.GanetiTestProgram()