   _clean: () =>
     Object.keys(@).forEach((key) =>
       if /^_/.test(key)
-        switch key
-          when '_runCallbacks'
-            null
-          when '_log'
-            null
-          when '_raw'
-            null
-          when '_cooked'
-            null
-          when '_eaten'
-            null
-          else
-            delete this[key])
+        [
+          '_runCallbacks',
+          '_log',
+          '_raw',
+          '_cooked',
+          '_eaten',
+          '_help'
+        ].forEach((target) =>
+          if key isnt target
+            delete @[key]))
     return @
 
   parse: () =>
+    @_makeHelp()
     @_gather()
     @_resolveOpts()
-    @_log(@)
-    @_runCallbacks()
+    #@_runCallbacks()
 
 module.exports = Bebopt

    @_parent = null
    return @

  printHelp: (fn) =>
    usage = if @usage is undefined then "Usage: #{@app}" else @usage
    if fn is undefined
      console.error(usage)
    else
      fn(usage)

    _long = Object.keys(@_long).map((key) ->
      
    _options = _long.concat(Object.keys(@_short))
    @_cooked.forEach((food) ->
      if food.list[0] isnt 'short'
        food.names = food.names.reverse()
        food.list = food.list.reverse()
      food.names = food.names.map((name, ind) ->
        dashes = if food.list[ind] is 'short' then '-' else '--'
        name = "#{dashes}#{clone(name)}"
        return name)
      names = food.names.join(', ')
      if fn is undefined
        console.error("  #{names}#{food.usage}")
      else
        fn("  #{names}#{food.usage}"))

  usage: (text) =>
    @usage = text

        return false

  _makeOpt: (name) ->
    new_op = name.replace(/^.*?([:]*)$/, '$1')
    name = name.replace(/^(.*?)[:]*$/, '$1')
    if new_op is '::'
      op = 'optarg'
    else if new_op is ':'
      op = 'arg'
    else
      op = 'flag'
