diff --git a/novaclient/tests/v1_1/test_shell.py b/novaclient/tests/v1_1/test_shell.py
index 32218ee54..699e4674f 100644
--- a/novaclient/tests/v1_1/test_shell.py
+++ b/novaclient/tests/v1_1/test_shell.py
@@ -338,6 +338,21 @@ class ShellTest(utils.TestCase):
             },
         )
 
+    def tets_boot_nics_no_value(self):
+        cmd = ('boot --image 1 --flavor 1 '
+               '--nic net-id some-server')
+        self.assertRaises(exceptions.CommandError, self.run_command, cmd)
+
+    def test_boot_nics_random_key(self):
+        cmd = ('boot --image 1 --flavor 1 '
+               '--nic net-id=a=c,v4-fixed-ip=10.0.0.1,foo=bar some-server')
+        self.assertRaises(exceptions.CommandError, self.run_command, cmd)
+
+    def test_boot_nics_no_netid_or_portid(self):
+        cmd = ('boot --image 1 --flavor 1 '
+               '--nic v4-fixed-ip=10.0.0.1 some-server')
+        self.assertRaises(exceptions.CommandError, self.run_command, cmd)
+
     def test_boot_files(self):
         testfile = os.path.join(os.path.dirname(__file__), 'testfile.txt')
         expected_file_data = open(testfile).read().encode('base64')
diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py
index 13f25abc4..c7912cdbb 100644
--- a/novaclient/v1_1/shell.py
+++ b/novaclient/v1_1/shell.py
@@ -141,16 +141,26 @@ def _boot(cs, args, reservation_id=None, min_count=None, max_count=None):
 
     nics = []
     for nic_str in args.nics:
+        err_msg = ("Invalid nic argument '%s'. Nic arguments must be of the "
+                   "form --nic <net-id=net-uuid,v4-fixed-ip=ip-addr,"
+                   "port-id=port-uuid>, with at minimum net-id or port-id "
+                   "specified." % nic_str)
         nic_info = {"net-id": "", "v4-fixed-ip": "", "port-id": ""}
+
         for kv_str in nic_str.split(","):
             try:
                 k, v = kv_str.split("=", 1)
-                nic_info[k] = v
             except ValueError as e:
-                raise exceptions.CommandError(
-                    "Invalid nic argument '%s'. Nic arguments must be of the "
-                    "form --nic <net-id=net-uuid[,v4-fixed-ip=ip-addr]"
-                    "[,port-id=port-uuid]>" % nic_str)
+                raise exceptions.CommandError(err_msg)
+
+            if k in nic_info:
+                nic_info[k] = v
+            else:
+                raise exceptions.CommandError(err_msg)
+
+        if not nic_info['net-id'] and not nic_info['port-id']:
+            raise exceptions.CommandError(err_msg)
+
         nics.append(nic_info)
 
     hints = {}
@@ -269,11 +279,13 @@ def _boot(cs, args, reservation_id=None, min_count=None, max_count=None):
      action='append',
      dest='nics',
      default=[],
-     help="Create a NIC on the server.\n"
-           "Specify option multiple times to create multiple NICs.\n"
-           "net-id: attach NIC to network with this UUID (optional)\n"
-           "v4-fixed-ip: IPv4 fixed address for NIC (optional).\n"
-           "port-id: attach NIC to port with this UUID (optional)")
+     help="Create a NIC on the server. "
+           "Specify option multiple times to create multiple NICs. "
+           "net-id: attach NIC to network with this UUID "
+           "(required if no port-id), "
+           "v4-fixed-ip: IPv4 fixed address for NIC (optional), "
+           "port-id: attach NIC to port with this UUID "
+           "(required if no net-id)")
 @utils.arg('--config-drive',
      metavar="<value>",
      dest='config_drive',