       elem.arg = elem.arg.replace(/^--?(.*)/, '$1')
       if dashes is 2
         if @_takesArg(elem, 'long')
-          elem = @_catchSpaceDelimArgs(elem, @_long)
+          elem = @_catchSpaceDelimArgs(elem, 'long')
         @_bindOptToList(elem, 'long')
-        food = clone(@_long[elem.arg])
-        @_cooked.push(food)
+        option = @_getOption(elem, 'long')
+        @_cooked.push(option)
       else
         if @_takesArg(elem, 'short')
-          elem = @_catchSpaceDelimArgs(elem, @_short)
+          elem = @_catchSpaceDelimArgs(elem, 'short')
         @_bindOptToList(elem, 'short')
-        food = clone(@_short[elem.arg])
-        @_cooked.push(food))
+        option = @_getOption(elem, 'short')
+        @_cooked.push(option))
 
   _bindOptToList: (opt, listName) =>
-    list = @["_#{listName}"]
-    type = list[opt.arg].type
+    type = @_getOption(opt, listName).type
     if type is 'arg'
       if opt.optarg is undefined
         err = "#{@app}: "

        ++child.index # increment child.index again to set it to its own index
        child.name = name
        child.list = listName
        # give parent a pointer to its child
        self._parent.child = child
        self._options.push(child)

          list: listName
          child: null
          parent: null
          arg: undefined
        self._options.push(option)
        index = self._options.length - 1
        option = self._options.pop()
