diff --git a/monkeysign/cli.py b/monkeysign/cli.py
index 88b4f3917b7e2eaeb0fa2099b4181098a1ed6c70..2a5c7acd5c27e0a4cacd21ed7b4332a5fa33c425 100644
--- a/monkeysign/cli.py
+++ b/monkeysign/cli.py
@@ -32,15 +32,19 @@ script assumes you have gpg-agent configure to prompt for passwords."""
     usage = usage='%prog [options] <keyid>'
     epilog='<keyid>: a GPG fingerprint or key id'
 
+    def parse_args(self, args):
+        """override main parsing: we absolutely need an argument"""
+        parser = MonkeysignUi.parse_args(self, args)
+        if self.pattern is None:
+            parser.print_usage()
+            sys.exit('wrong number of arguments, use -h for full help')
+
     def main(self):
         """main code execution loop
 
         we expect to have the commandline parsed for us
         """
 
-        if self.pattern is None:
-            sys.exit('wrong number of arguments')
-
         MonkeysignUi.main(self)
 
         # 1. fetch the key into a temporary keyring
diff --git a/monkeysign/ui.py b/monkeysign/ui.py
index b06bb9264bc0b6276bb1928a88be75f253b45eb1..e8186226b09499d48a0eb595a8ae3395eef021a4 100644
--- a/monkeysign/ui.py
+++ b/monkeysign/ui.py
@@ -109,7 +109,10 @@ Regards,
         elif len(self.pattern) < 1:
             self.pattern = None
         else:
-            sys.exit('wrong number of arguments')
+            parser.print_usage()
+            sys.exit('wrong number of arguments, use -h for full help')
+        # make sure parser can be accessed outside of this function
+        return parser
 
     def __init__(self, args = None):
         # the options that determine how we operate, from the parse_args()