diff --git a/lib/helpers.bash b/lib/helpers.bash
index 2530d7f..e1787fe 100644
--- a/lib/helpers.bash
+++ b/lib/helpers.bash
@@ -29,33 +29,86 @@
   _load_bash_it_files "plugins"
 }
 
-bash-it-aliases ()
+bash-it ()
 {
-    about 'summarizes available bash_it aliases'
-    group 'lib'
+    about 'bash-it help and maintenance'
+    param '1: verb [one of: help | show | enable | disable ]'
+    param '2: component type [one of: alias(es) | completion(s) | plugin(s) ]'
+    param '3: specific component [optional]'
+    example '$ bash-it show plugins'
+    example '$ bash-it help aliases'
+    example '$ bash-it enable plugin git'
+    example '$ bash-it disable alias hg'
+    typeset verb=${1:-}
+    shift
+    typeset component=${1:-}
+    shift
+    typeset func
+    case $verb in
+         show)
+             func=_bash-it-$component;;
+         enable)
+             func=_enable-$component;;
+         disable)
+             func=_disable-$component;;
+         help)
+             func=_help-$component;;
+         *)
+             reference bash-it
+             return;;
+    esac
+
+    # pluralize component if necessary
+    if ! _is_function $func; then
+        if _is_function ${func}s; then
+            func=${func}s
+        else
+            if _is_function ${func}es; then
+                func=${func}es
+            else
+                echo "oops! $component is not a valid option!"
+                reference bash-it
+                return
+            fi
+        fi
+    fi
+    $func $*
+}
+
+_is_function ()
+{
+    _about 'sets $? to true if parameter is the name of a function'
+    _param '1: name of alleged function'
+    _group 'lib'
+    [ -n "$(type -a $1 2>/dev/null | grep 'is a function')" ]
+}
+
+_bash-it-aliases ()
+{
+    _about 'summarizes available bash_it aliases'
+    _group 'lib'
 
     _bash-it-describe "aliases" "an" "alias" "Alias"
 }
 
-bash-it-completions ()
+_bash-it-completions ()
 {
-    about 'summarizes available bash_it completions'
-    group 'lib'
+    _about 'summarizes available bash_it completions'
+    _group 'lib'
 
     _bash-it-describe "completion" "a" "completion" "Completion"
 }
 
-bash-it-plugins ()
+_bash-it-plugins ()
 {
-    about 'summarizes available bash_it plugins'
-    group 'lib'
+    _about 'summarizes available bash_it plugins'
+    _group 'lib'
 
     _bash-it-describe "plugins" "a" "plugin" "Plugin"
 }
 
 _bash-it-describe ()
 {
-    cite _about _param _example
     _about 'summarizes available bash_it components'
     _param '1: subdirectory'
     _param '2: preposition'
@@ -86,39 +139,38 @@
     printf '%s\n' "$ bash-it disable $file_type <$file_type name> -or- $ bash-it disable $file_type all"
 }
 
-disable-plugin ()
+_disable-plugin ()
 {
-    about 'disables bash_it plugin'
-    param '1: plugin name'
-    example '$ disable-plugin rvm'
-    group 'lib'
+    _about 'disables bash_it plugin'
+    _param '1: plugin name'
+    _example '$ disable-plugin rvm'
+    _group 'lib'
 
     _disable-thing "plugins" "plugin" $1
 }
 
-disable-alias ()
+_disable-alias ()
 {
-    about 'disables bash_it alias'
-    param '1: alias name'
-    example '$ disable-alias git'
-    group 'lib'
+    _about 'disables bash_it alias'
+    _param '1: alias name'
+    _example '$ disable-alias git'
+    _group 'lib'
 
     _disable-thing "aliases" "alias" $1
 }
 
-disable-completion ()
+_disable-completion ()
 {
-    about 'disables bash_it completion'
-    param '1: completion name'
-    example '$ disable-completion git'
-    group 'lib'
+    _about 'disables bash_it completion'
+    _param '1: completion name'
+    _example '$ disable-completion git'
+    _group 'lib'
 
     _disable-thing "completion" "completion" $1
 }
 
 _disable-thing ()
 {
-    cite _about _param _example
     _about 'disables a bash_it component'
     _param '1: subdirectory'
     _param '2: file_type'
@@ -155,32 +207,32 @@
     printf '%s\n' "$file_entity disabled."
 }
 
-enable-plugin ()
+_enable-plugin ()
 {
-    about 'enables bash_it plugin'
-    param '1: plugin name'
-    example '$ enable-plugin rvm'
-    group 'lib'
+    _about 'enables bash_it plugin'
+    _param '1: plugin name'
+    _example '$ enable-plugin rvm'
+    _group 'lib'
 
     _enable-thing "plugins" "plugin" $1
 }
 
-enable-alias ()
+_enable-alias ()
 {
-    about 'enables bash_it alias'
-    param '1: alias name'
-    example '$ enable-alias git'
-    group 'lib'
+    _about 'enables bash_it alias'
+    _param '1: alias name'
+    _example '$ enable-alias git'
+    _group 'lib'
 
     _enable-thing "aliases" "alias" $1
 }
 
-enable-completion ()
+_enable-completion ()
 {
-    about 'enables bash_it completion'
-    param '1: completion name'
-    example '$ enable-completion git'
-    group 'lib'
+    _about 'enables bash_it completion'
+    _param '1: completion name'
+    _example '$ enable-completion git'
+    _group 'lib'
 
     _enable-thing "completion" "completion" $1
 }
@@ -231,15 +283,15 @@
     printf '%s\n' "$file_entity enabled."
 }
 
-alias-help ()
+_help-aliases()
 {
-    about 'shows help for all aliases, or a specific alias group'
-    param '1: optional alias group'
-    example '$ alias-help'
-    example '$ alias-help git'
+    _about 'shows help for all aliases, or a specific alias group'
+    _param '1: optional alias group'
+    _example '$ alias-help'
+    _example '$ alias-help git'
 
     if [ -n "$1" ]; then
-        cat $BASH_IT/aliases/enabled/$1.aliases.bash | metafor alias | sed "s/$/'/"
+        cat $BASH_IT/aliases/available/$1.aliases.bash | metafor alias | sed "s/$/'/"
     else
         typeset f
         for f in $BASH_IT/aliases/enabled/*
@@ -252,10 +304,10 @@
     fi
 }
 
-plugins-help ()
+_help-plugins()
 {
-    about 'summarize all functions defined by enabled bash-it plugins'
-    group 'lib'
+    _about 'summarize all functions defined by enabled bash-it plugins'
+    _group 'lib'
 
     # display a brief progress message...
     printf '%s' 'please wait, building help...'
