diff --git a/lib/cli.py b/lib/cli.py
index 2d42863394663e891f0a207418213bf1cf267bcf..a92f7931c19471238eb4669b28db8ae6ae09950a 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -1801,6 +1801,30 @@ def GenericMain(commands, override=None, aliases=None):
   return result
 
 
+def ParseNicOption(optvalue):
+  """Parses the value of the --net option(s).
+
+  """
+  try:
+    nic_max = max(int(nidx[0]) + 1 for nidx in optvalue)
+  except (TypeError, ValueError), err:
+    raise errors.OpPrereqError("Invalid NIC index passed: %s" % str(err))
+
+  nics = [{}] * nic_max
+  for nidx, ndict in optvalue:
+    nidx = int(nidx)
+
+    if not isinstance(ndict, dict):
+      raise errors.OpPrereqError("Invalid nic/%d value: expected dict,"
+                                 " got %s" % (nidx, ndict))
+
+    utils.ForceDictType(ndict, constants.INIC_PARAMS_TYPES)
+
+    nics[nidx] = ndict
+
+  return nics
+
+
 def GenericInstanceCreate(mode, opts, args):
   """Add an instance to the cluster via either creation or import.
 
@@ -1822,17 +1846,7 @@ def GenericInstanceCreate(mode, opts, args):
     hypervisor, hvparams = opts.hypervisor
 
   if opts.nics:
-    try:
-      nic_max = max(int(nidx[0]) + 1 for nidx in opts.nics)
-    except ValueError, err:
-      raise errors.OpPrereqError("Invalid NIC index passed: %s" % str(err))
-    nics = [{}] * nic_max
-    for nidx, ndict in opts.nics:
-      nidx = int(nidx)
-      if not isinstance(ndict, dict):
-        msg = "Invalid nic/%d value: expected dict, got %s" % (nidx, ndict)
-        raise errors.OpPrereqError(msg)
-      nics[nidx] = ndict
+    nics = ParseNicOption(opts.nics)
   elif opts.no_nics:
     # no nics
     nics = []
diff --git a/test/ganeti.cli_unittest.py b/test/ganeti.cli_unittest.py
index 77ad4c16e5322d03d7f2ee031004d63aaa19b730..0f352ac2218f10031bb6ee1e8f945516cf653fd2 100755
--- a/test/ganeti.cli_unittest.py
+++ b/test/ganeti.cli_unittest.py
@@ -442,5 +442,26 @@ class TestParseFields(unittest.TestCase):
                      ["def", "ault", "name", "foo"])
 
 
+class TestParseNicOption(unittest.TestCase):
+  def test(self):
+    self.assertEqual(cli.ParseNicOption([("0", { "link": "eth0", })]),
+                     [{ "link": "eth0", }])
+    self.assertEqual(cli.ParseNicOption([("5", { "ip": "192.0.2.7", })]),
+                     [{}, {}, {}, {}, {}, { "ip": "192.0.2.7", }])
+
+  def testErrors(self):
+    for i in [None, "", "abc", "zero", "Hello World", "\0", []]:
+      self.assertRaises(errors.OpPrereqError, cli.ParseNicOption,
+                        [(i, { "link": "eth0", })])
+      self.assertRaises(errors.OpPrereqError, cli.ParseNicOption,
+                        [("0", i)])
+
+    self.assertRaises(errors.TypeEnforcementError, cli.ParseNicOption,
+                      [(0, { True: False, })])
+
+    self.assertRaises(errors.TypeEnforcementError, cli.ParseNicOption,
+                      [(3, { "mode": [], })])
+
+
 if __name__ == '__main__':
   testutils.GanetiTestProgram()