diff --git a/.gitignore b/.gitignore
index 33e5fca..32e62de 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
-aliases/enabled
-plugins/enabled
+*/enabled/*
 .DS_Store
 custom/*.bash
 !custom/example.bash
diff --git a/README.md b/README.md
index c8412c9..0c9c303 100644
--- a/README.md
+++ b/README.md
@@ -1,46 +1,53 @@
 # Bash it
 
-'Bash it' is a mash up of my own bash commands and scripts, other bash stuff I have found and a shameless ripoff of [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh). :)
+**Bash it** is a mash up of my own bash commands and scripts, other bash stuff I have found. 
 
-Includes some autocompletion tools, theming support, aliases, custom functions, a few stolen pieces from Steve Losh, and more.
+(And a shameless ripoff of [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh). :)
+
+Includes autocompletion, themes, aliases, custom functions, a few stolen pieces from Steve Losh, and more.
 
 ## Install
 
-Check a clone of this repo. You can view what a sample `~/.bash_profile` looks like in `template/bash_profile.template.bash`. If you wanted to use that template, make sure to make a backup of your current `~/.bash_profile` file.
+1. Check a clone of this repo: `git clone http://github.com/revans/bash-it.git ~/.bash_it`
+2. Run `~/.bash_it/install.sh` (it automatically backs up your `~/.bash_profile`)
+3. Edit your `~/.bash_profile` file in order to customize bash-it.
 
-	git clone http://github.com/revans/bash-it.git bash_it
-
-	cp ~/.bash_profile ~/.bash_profile_original
-	cp <path/to/cloned/repo>/template/bash_profile.template.bash ~/.bash_profile
+**NOTE:**
+The install script will also prompt you asking if you use [Jekyll](https://github.com/mojombo/jekyll). 
+This is to set up the `.jekyllconfig` file, which stores info necessary to use the Jekyll plugin.
 
 
 ## Help Screens
 
-	bash-it (will show all the help commands)
-	aliases-help
-	rails-help
-	git-help
-    plugins-help
+```
+bash-it (will show all the help commands)
+aliases-help
+rails-help
+git-help
+plugins-help
+```
 
 ## Your Custom scripts, aliases, and functions
 
-For custom scripts, and aliases, you can create the following files and they will be ignored by the git repo:
+For custom scripts, and aliases, just create the following files (they'll be ignored by the git repo):
 
 * `aliases/custom.aliases.bash`
 * `lib/custom.bash`
 * `plugins/custom.plugins.bash`
 
-and anything in the custom directory will be ignored with the exception of `custom/example.bash`.
+Anything in the custom directory will be ignored, with the exception of `custom/example.bash`.
 
 ## Themes
 
-There are a few bash-it themes, but I'm hoping the community will jump in and create their own custom prompts and share their creations with everyone else by submitting a pull request to me (revans).
+There are a few bash it themes.  If you've created your own custom prompts, I'd love it if you shared with everyone else!  Just submit a Pull Request to me (revans).
 
 ## Help out
 
-I think all of us have our own custom scripts that we have added over time and so following in the footsteps of oh-my-zsh, bash-it was created as a framework for those who choose to use bash as their shell. As a community, I'm excited to see what everyone else has in their custom toolbox and am hoping that they'll share it with everyone by submitting a pull request to bash-it.
+I think everyone has their own custom scripts accumulated over time.  And so, following in the footsteps of oh-my-zsh, bash it is a framework for easily customizing your bash shell. Everyone's got a custom toolbox, so let's start making them even better, **as a community!**
 
-So, if you have contributions to bash-it, please send me a pull request and I'll take a look at it and commit it to the repo as long as it looks good. If you do change an existing command, please give an explanation as to why. That will help a lot when I merge your changes in. Thanks, and happing bashing!
+Send me a pull request and I'll merge it as long as it looks good. If you change an existing command, please give an explanation why. That will help a lot when I merge your changes in. 
+
+Thanks, and happing bashing!
 
 
 ## Contributors
diff --git a/aliases/available/bundler.aliases.bash b/aliases/available/bundler.aliases.bash
new file mode 100644
index 0000000..12484f6
--- /dev/null
+++ b/aliases/available/bundler.aliases.bash
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Bundler Commands
+alias be="bundle exec"
+alias bi="bundle install"
+alias bl="bundle list"
+alias bu="bundle update"
+alias bp="bundle package"
+
+
+function bundler-help() {
+  echo "Bundler Aliases Usage"
+  echo
+  echo "  be          = bundle exec"
+  echo "  bi          = bundle install"
+  echo "  bl          = bundle list"
+  echo "  bu          = bundle update"
+  echo "  bp          = bundle package"
+  echo
+}
+
diff --git a/aliases/available/emacs.aliases.bash b/aliases/available/emacs.aliases.bash
index 5b32876..5042b17 100644
--- a/aliases/available/emacs.aliases.bash
+++ b/aliases/available/emacs.aliases.bash
@@ -1,3 +1,11 @@
 #!/bin/bash
 
-alias em="open -a emacs"
\ No newline at end of file
+case $OSTYPE in
+  linux*)
+    alias em='emacs'
+    alias e='emacsclient -n'
+    ;;
+  darwin*)
+    alias em="open -a emacs"
+    ;;
+esac
diff --git a/aliases/available/general.aliases.bash b/aliases/available/general.aliases.bash
index 79bd7aa..cfd456f 100644
--- a/aliases/available/general.aliases.bash
+++ b/aliases/available/general.aliases.bash
@@ -12,7 +12,12 @@
 
 if [ $(uname) = "Linux" ]
 then
-	alias ls="ls --color=always"
+  alias ls="ls --color=always"
+fi
+which gshuf &> /dev/null
+if [ $? -eq 1 ]
+then
+  alias shuf=gshuf
 fi
 
 alias c='clear'
@@ -32,42 +37,46 @@
 
 alias piano="pianobar"
 
-alias ..='cd ..'        # Go up one directory
-alias ...='cd ../..'    # Go up two directories
-alias -- -="cd -"       # Go back
+alias ..='cd ..'         # Go up one directory
+alias ...='cd ../..'     # Go up two directories
+alias ....='cd ../../..' # Go up two directories
+alias -- -="cd -"        # Go back
 
 # Shell History
 alias h='history'
 
 # Tree
-alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
+if [ ! -x "$(which tree)" ]
+then
+  alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
+fi
 
 # Directory
 alias	md='mkdir -p'
 alias	rd=rmdir
 
 function aliases-help() {
-  echo "Generic Alias Usage"
-  echo
-  echo "  sl      = ls"
-  echo "  ls      = ls -G"
-  echo "  la      = ls -AF"
-  echo "  ll      = ls -al"
-  echo "  l       = ls -a"
-  echo "  c/k/cls = clear"
-  echo "  ..      = cd .."
-  echo "  ...     = cd ../.."
-  echo "  -       = cd -"
-  echo "  h       = history"
-  echo "  md      = mkdir -p"
-  echo "  rd      = rmdir"
-  echo "  editor  = $EDITOR"
-  echo "  pager   = $PAGER"
-  echo "  piano   = pianobar"
-  echo "  q       = exit"
-  echo "  irc     = $IRC_CLIENT"
-  echo "  md      = mkdir -p"
-  echo "  rd      = rmdir"
-  echo "  rb      = ruby"
-  echo
+echo "Generic Alias Usage"
+echo
+echo "  sl      = ls"
+echo "  ls      = ls -G"
+echo "  la      = ls -AF"
+echo "  ll      = ls -al"
+echo "  l       = ls -a"
+echo "  c/k/cls = clear"
+echo "  ..      = cd .."
+echo "  ...     = cd ../.."
+echo "  -       = cd -"
+echo "  h       = history"
+echo "  md      = mkdir -p"
+echo "  rd      = rmdir"
+echo "  editor  = $EDITOR"
+echo "  pager   = $PAGER"
+echo "  piano   = pianobar"
+echo "  q       = exit"
+echo "  irc     = $IRC_CLIENT"
+echo "  md      = mkdir -p"
+echo "  rd      = rmdir"
+echo "  rb      = ruby"
+echo
 }
diff --git a/aliases/available/jekyll.aliases.bash b/aliases/available/jekyll.aliases.bash
deleted file mode 100644
index e52c035..0000000
--- a/aliases/available/jekyll.aliases.bash
+++ /dev/null
@@ -1,20 +0,0 @@
-# Open the root of your site in your vim or builtin cd to it
-
-if [[ $EDITOR = "vim" ]]
-then 
-	alias newentry="builtin cd $JEKYLL_LOCAL_ROOT && $EDITOR ."
-else 
-	alias newentry="builtin cd $JEKYLL_LOCAL_ROOT"
-fi
-
-# Build and locally serve the site
-
-alias testsite="builtin cd $JEKYLL_LOCAL_ROOT && jekyll --server --auto"
-
-# Build but don't locally serve the site
-
-alias buildsite="builtin cd $JEKYLL_LOCAL_ROOT && rm -rf _site/ && jekyll"
-
-# Rsync the site to the remote server
-
-alias deploysite="builtin cd $JEKYLL_LOCAL_ROOT && rsync -rz _site/ $JEKYLL_REMOTE_ROOT"
diff --git a/aliases/available/textmate.aliases.bash b/aliases/available/textmate.aliases.bash
index ecd616f..4e696a5 100644
--- a/aliases/available/textmate.aliases.bash
+++ b/aliases/available/textmate.aliases.bash
@@ -1,5 +1,9 @@
 #!/bin/bash
 
-# Textmate
-alias e='mate . &'
-alias et='mate app config db lib public script test spec config.ru Gemfile Rakefile README &'
\ No newline at end of file
+case $OSTYPE in
+  darwin*)
+    # Textmate
+    alias e='mate . &'
+    alias et='mate app config db lib public script test spec config.ru Gemfile Rakefile README &'
+    ;;
+esac
diff --git a/bash_it.sh b/bash_it.sh
index 3dd3d7a..7844f37 100644
--- a/bash_it.sh
+++ b/bash_it.sh
@@ -4,60 +4,65 @@
 # Reload Library
 alias reload='source ~/.bash_profile'
 
-# Load the framework
+# Only set $BASH_IT if it's not already set
+if [ -z "$BASH_IT" ];
+then
+    # Setting $BASH to maintain backwards compatibility
+    # TODO: warn users that they should upgrade their .bash_profile
+    export BASH_IT=$BASH
+    export BASH=`bash -c 'echo $BASH'`
+fi
+
+# For backwards compatibility, look in old BASH_THEME location
+if [ -z "$BASH_IT_THEME" ];
+then
+    # TODO: warn users that they should upgrade their .bash_profile
+    export BASH_IT_THEME="$BASH_THEME";
+    unset $BASH_THEME;
+fi
 
 # Load colors first so they can be use in base theme
-source "${BASH}/themes/colors.theme.bash"
-source "${BASH}/themes/base.theme.bash"
+source "${BASH_IT}/themes/colors.theme.bash"
+source "${BASH_IT}/themes/base.theme.bash"
 
-# Library
-LIB="${BASH}/lib/*.bash"
+# library
+LIB="${BASH_IT}/lib/*.bash"
 for config_file in $LIB
 do
   source $config_file
 done
 
-# Tab Completion
-COMPLETION="${BASH}/completion/*.bash"
-for config_file in $COMPLETION
+# Load enabled aliases, completion, plugins
+for file_type in "aliases" "completion" "plugins"
 do
-  source $config_file
+  if [ ! -d "${BASH_IT}/${file_type}/enabled" ]
+  then
+    continue
+  fi
+  FILES="${BASH_IT}/${file_type}/enabled/*.bash"
+  for config_file in $FILES
+  do
+    if [ -e "${config_file}" ]; then
+      source $config_file
+    fi
+  done
 done
 
-# Plugins
-if [ ! -d "${BASH}/plugins/enabled" ]
+# Load any custom aliases that the user has added
+if [ -e "${BASH_IT}/aliases/custom.aliases.bash" ]
 then
-  mkdir "${BASH}/plugins/enabled"
-  ln -s ${BASH}/plugins/available/* "${BASH}/plugins/enabled"
+  source "${BASH_IT}/aliases/custom.aliases.bash"
 fi
-PLUGINS="${BASH}/plugins/enabled/*.bash"
-for config_file in $PLUGINS
-do
-  source $config_file
-done
-
-# Aliases
-if [ ! -d "${BASH}/aliases/enabled" ]
-then
-  mkdir "${BASH}/aliases/enabled"
-  ln -s ${BASH}/aliases/available/* "${BASH}/aliases/enabled"
-fi
-FUNCTIONS="${BASH}/aliases/enabled/*.bash"
-for config_file in $FUNCTIONS
-do
-  source $config_file
-done
-
-source "${BASH}/aliases/custom.aliases.bash"
 
 # Custom
-CUSTOM="${BASH}/custom/*.bash"
+CUSTOM="${BASH_IT}/custom/*.bash"
 for config_file in $CUSTOM
 do
-  source $config_file
+  if [ -e "${config_file}" ]; then
+    source $config_file
+  fi
 done
 
-
 unset config_file
 if [[ $PROMPT ]]; then
     export PS1=$PROMPT
@@ -68,6 +73,13 @@
 [ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview"
 [ -s /Applications/Preview.app ] && PREVIEW="/Applications/Preview.app"
 
+# Load all the Jekyll stuff
+
+if [ -e $HOME/.jekyllconfig ]
+then
+  . $HOME/.jekyllconfig
+fi
+
 
 #
 # Custom Help
diff --git a/completion/brew.completion.bash b/completion/available/brew.completion.bash
similarity index 100%
rename from completion/brew.completion.bash
rename to completion/available/brew.completion.bash
diff --git a/completion/available/gem.completion.bash b/completion/available/gem.completion.bash
new file mode 100644
index 0000000..de986e0
--- /dev/null
+++ b/completion/available/gem.completion.bash
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+# Completion for gem
+
+_installcomp() {
+  if [ -z "$REMOTE_GEMS" ]
+  then
+    REMOTE_GEMS=( $(gem list --remote --no-versions | tr '\n' ' ') )
+  fi
+  
+  local cur=${COMP_WORDS[COMP_CWORD]}
+  COMPREPLY=( $(compgen -W "${REMOTE_GEMS[*]}" -- $cur) )
+}
+
+_uninstallcomp() {
+  if [ -z "$LOCAL_GEMS" ]
+  then
+    LOCAL_GEMS=( $(gem list --no-versions | sed 's/\*\*\* LOCAL GEMS \*\*\*//' | tr '\n' ' ') )
+  fi
+  
+  local cur=${COMP_WORDS[COMP_CWORD]}
+  COMPREPLY=( $(compgen -W "${LOCAL_GEMS[*]}" -- $cur) )
+}
+
+_gem() {
+  local cur=${COMP_WORDS[COMP_CWORD]}
+  local prev=${COMP_WORDS[COMP_CWORD-1]}
+  case $prev in
+    install)
+      _installcomp
+      return 0
+      ;;
+    uninstall)
+      _uninstallcomp
+      return 0
+      ;;
+  esac
+  local commands=(build cert check cleanup contents dependency environment fetch generate_index help install list lock outdated owner pristine push query rdoc search server sources specification stale uninstall unpack update which)
+  COMPREPLY=( $(compgen -W "${commands[*]}" -- $cur) )
+}
+
+complete -F _gem gem
diff --git a/completion/git.completion.bash b/completion/available/git.completion.bash
similarity index 100%
rename from completion/git.completion.bash
rename to completion/available/git.completion.bash
diff --git a/completion/git_flow.completion.bash b/completion/available/git_flow.completion.bash
similarity index 100%
rename from completion/git_flow.completion.bash
rename to completion/available/git_flow.completion.bash
diff --git a/completion/rake.completion.bash b/completion/available/rake.completion.bash
similarity index 100%
rename from completion/rake.completion.bash
rename to completion/available/rake.completion.bash
diff --git a/completion/ssh.completion.bash b/completion/available/ssh.completion.bash
similarity index 100%
rename from completion/ssh.completion.bash
rename to completion/available/ssh.completion.bash
diff --git a/completion/todo.completion.bash b/completion/available/todo.completion.bash
similarity index 100%
rename from completion/todo.completion.bash
rename to completion/available/todo.completion.bash
diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000..a80a749
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,88 @@
+#!/usr/bin/env bash
+BASH_IT="$HOME/.bash_it"
+
+cp $HOME/.bash_profile $HOME/.bash_profile.bak
+
+echo "Your original .bash_profile has been backed up to .bash_profile.bak"
+
+cp $HOME/.bash_it/template/bash_profile.template.bash $HOME/.bash_profile
+
+echo "Copied the template .bash_profile into ~/.bash_profile, edit this file to customize bash-it"
+
+while true
+do
+  read -p "Do you use Jekyll? (If you don't know what Jekyll is, answer 'n') [Y/N] " RESP
+
+  case $RESP
+    in
+    [yY])
+      cp $HOME/.bash_it/template/jekyllconfig.template.bash $HOME/.jekyllconfig
+      echo "Copied the template .jekyllconfig into your home directory. Edit this file to customize bash-it for using the Jekyll plugins"
+      break
+      ;;
+    [nN])
+      break
+      ;;
+    *)
+      echo "Please enter Y or N"
+  esac
+done
+
+function load_all() {
+  file_type=$1
+  [ ! -d "$BASH_IT/$file_type/enabled" ] && mkdir "$BASH_IT/${file_type}/enabled"
+  ln -s $BASH_IT/${file_type}/available/* "${BASH_IT}/${file_type}/enabled"
+}
+
+function load_some() {
+    file_type=$1
+    for file in `ls $BASH_IT/${file_type}/available`
+    do
+      if [ ! -d "$BASH_IT/$file_type/enabled" ]
+      then
+        mkdir "$BASH_IT/$file_type/enabled"
+      fi
+      while true
+      do
+        read -p "Would you like to enable the ${file%.*.*} $file_type? [Y/N] " RESP
+        case $RESP in
+        [yY])
+          ln -s "$BASH_IT/$file_type/available/$file" "$BASH_IT/$file_type/enabled"
+          break
+          ;;
+        [nN])
+          break
+          ;;
+        *)
+          echo "Please choose y or n."
+          ;;
+        esac
+      done
+    done
+}
+
+for type in "aliases" "plugins" "completion"
+do
+  while true
+  do
+    read -p "Would you like to enable all, some, or no $type? Some of these may make bash slower to start up (especially completion). (all/some/none) " RESP
+    case $RESP
+    in
+    some)
+      load_some $type
+      break
+      ;;
+    all)
+      load_all $type
+      break
+      ;;
+    none)
+      break
+      ;;
+    *)
+      echo "Unknown choice. Please enter some, all, or none"
+      continue
+      ;;
+    esac
+  done
+done
diff --git a/lib/appearance.bash b/lib/appearance.bash
index f723511..28a131a 100644
--- a/lib/appearance.bash
+++ b/lib/appearance.bash
@@ -8,6 +8,6 @@
 export LSCOLORS='Gxfxcxdxdxegedabagacad'
 
 # Load the theme
-if [[ $BASH_THEME ]]; then
-    source "$BASH/themes/$BASH_THEME/$BASH_THEME.theme.bash"
-fi
\ No newline at end of file
+if [[ $BASH_IT_THEME ]]; then
+    source "$BASH_IT/themes/$BASH_IT_THEME/$BASH_IT_THEME.theme.bash"
+fi
diff --git a/plugins/available/base.plugin.bash b/plugins/available/base.plugin.bash
index e361e04..7a6dc80 100644
--- a/plugins/available/base.plugin.bash
+++ b/plugins/available/base.plugin.bash
@@ -15,6 +15,19 @@
   echo "Your public IP is: ${bold_green} $res ${normal}"
 }
 
+pass() {
+  which gshuf &> /dev/null
+  if [ $? -eq 1 ]
+  then
+    echo "Error: shuf isn't installed!"
+    return 1
+  fi
+
+  pass=$(shuf -n4 /usr/share/dict/words | tr '\n' ' ')
+  echo "With spaces (easier to memorize): $pass"
+  echo "Without (use this as the pass): $(echo $pass | tr -d ' ')"
+}
+
 # Function for previewing markdown files in the browser
 
 function pmdown() {
diff --git a/plugins/available/battery.plugin.bash b/plugins/available/battery.plugin.bash
index 4946c2c..7c15812 100644
--- a/plugins/available/battery.plugin.bash
+++ b/plugins/available/battery.plugin.bash
@@ -69,11 +69,11 @@
   local F_C='▸'
   # Depleted char
   local D_C='▹'
-  local DEPLETED_COLOR='\[${normal}\]'
-  local FULL_COLOR='\[${green}\]'
-  local HALF_COLOR='\[${yellow}\]'
-  local DANGER_COLOR='\[${red}\]'
-  local BATTERY_OUTPUT='${DEPLETED_COLOR}${D_C}${D_C}${D_C}${D_C}${D_C}'
+  local DEPLETED_COLOR="${normal}"
+  local FULL_COLOR="${green}"
+  local HALF_COLOR="${yellow}"
+  local DANGER_COLOR="${red}"
+  local BATTERY_OUTPUT="${DEPLETED_COLOR}${D_C}${D_C}${D_C}${D_C}${D_C}"
   local BATTERY_PERC=$(battery_percentage)
 
   case $BATTERY_PERC in
@@ -123,7 +123,7 @@
       echo "${HALF_COLOR}${F_C}${DEPLETED_COLOR}${D_C}${D_C}${D_C}${D_C}${normal}"
       ;;
     *)
-      echo "${DANGER_COLOR}UNPLG\[${normal}\]"
+      echo "${DANGER_COLOR}UNPLG${normal}"
       ;;
   esac
 }
diff --git a/plugins/available/dirs.plugins.bash b/plugins/available/dirs.plugins.bash
old mode 100644
new mode 100755
index dfa9a32..9353c5b
--- a/plugins/available/dirs.plugins.bash
+++ b/plugins/available/dirs.plugins.bash
@@ -50,3 +50,35 @@
   echo "8	: Chance to stack location 8."
   echo "9	: Chance to stack location 9."
 }
+
+
+# ADD BOOKMARKing functionality
+# usage:
+
+if [ ! -f ~/.dirs ]; then  # if doesn't exist, create it
+    touch ~/.dirs
+else
+    source ~/.dirs
+fi
+
+alias L='cat ~/.dirs'
+
+G () {				# goes to distination dir otherwise , stay in the dir
+    cd ${1:-$(pwd)} ;
+}
+
+S () {				# SAVE a BOOKMARK
+    sed "/$@/d" ~/.dirs > ~/.dirs1;
+    \mv ~/.dirs1 ~/.dirs;
+    echo "$@"=\"`pwd`\" >> ~/.dirs;
+    source ~/.dirs ;
+}
+
+R () {				# remove a BOOKMARK
+    sed "/$@/d" ~/.dirs > ~/.dirs1;
+    \mv ~/.dirs1 ~/.dirs;
+}
+
+alias U='source ~/.dirs' 	# Update BOOKMARK stack
+# set the bash option so that no '$' is required when using the above facility
+shopt -s cdable_vars
diff --git a/plugins/available/extract.plugin.bash b/plugins/available/extract.plugin.bash
new file mode 100644
index 0000000..1c3e9b1
--- /dev/null
+++ b/plugins/available/extract.plugin.bash
@@ -0,0 +1,25 @@
+extract () {
+  if [ $# -ne 1 ]
+  then
+    echo "Error: No file specified."
+    return 1
+  fi
+	if [ -f $1 ] ; then
+		case $1 in
+			*.tar.bz2) tar xvjf $1   ;;
+			*.tar.gz)  tar xvzf $1   ;;
+			*.bz2)     bunzip2 $1    ;;
+			*.rar)     unrar x $1    ;;
+			*.gz)      gunzip $1     ;;
+			*.tar)     tar xvf $1    ;;
+			*.tbz2)    tar xvjf $1   ;;
+			*.tgz)     tar xvzf $1   ;;
+			*.zip)     unzip $1      ;;
+			*.Z)       uncompress $1 ;;
+			*.7z)      7z x $1       ;;
+			*)         echo "'$1' cannot be extracted via extract" ;;
+		esac
+	else
+		echo "'$1' is not a valid file"
+	fi
+}
diff --git a/plugins/available/jekyll.plugins.bash b/plugins/available/jekyll.plugins.bash
index aebe69b..eff85ce 100644
--- a/plugins/available/jekyll.plugins.bash
+++ b/plugins/available/jekyll.plugins.bash
@@ -1,208 +1,346 @@
 #!/bin/bash
 
 editpost() {
-	builtin cd "$JEKYLL_LOCAL_ROOT/_posts"
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
 
-	COUNTER=1
-	NUMBER="$RANDOM"
-	TMPFILE="/tmp/editpost-$NUMBER"
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      break
+    fi
+  done
 
-	for POST in *
-	do
-		DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"`
-		TITLE=`cat $POST | grep -oE "title: (.+)"`
-		TITLE=`echo $TITLE | sed 's/title: //'`
-		echo "$COUNTER) 	$DATE	$TITLE" >> "$TMPFILE"	
-		POSTS[$COUNTER]=$POST
-		COUNTER=`expr $COUNTER + 1`
-	done
-	less $TMPFILE	
-	read -p "Number of post to edit: " POST_TO_EDIT
-	if [ -z "$EDITOR" ]
-	then
-		nano "${POSTS[$POST_TO_EDIT]}"
-	else
-		"$EDITOR" "${POSTS[$POST_TO_EDIT]}"
-	fi
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd "$SITE/_posts"
+
+  COUNTER=1
+  NUMBER="$RANDOM"
+  TMPFILE="/tmp/editpost-$NUMBER"
+
+  for POST in *
+  do
+    DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"`
+    TITLE=`cat $POST | grep -oE "title: (.+)"`
+    TITLE=`echo $TITLE | sed 's/title: //'`
+    echo "$COUNTER) 	$DATE	$TITLE" >> "$TMPFILE"	
+    POSTS[$COUNTER]=$POST
+    COUNTER=`expr $COUNTER + 1`
+  done
+  less $TMPFILE	
+  read -p "Number of post to edit: " POST_TO_EDIT
+  if [ -z "$JEKYLL_EDITOR" ]
+  then
+    nano "${POSTS[$POST_TO_EDIT]}"
+  else
+    "$JEKYLL_EDITOR" "${POSTS[$POST_TO_EDIT]}"
+  fi
 }
 
 newpost() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
 
-	# 'builtin cd' into the local jekyll root
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
 
-	builtin cd "$JEKYLL_LOCAL_ROOT/_posts"
+  loc=0
 
-	# Get the date for the new post's filename
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      JEKYLL_FORMATTING=${MARKUPS[$loc]}
+      break
+    fi
+    loc=$(($loc+1))
+  done
 
-	FNAME_DATE=$(date "+%Y-%m-%d")
+  # 'builtin cd' into the local jekyll root
 
-	# If the user is using markdown formatting, let them choose what type of post they want. Sort of like Tumblr. 
+  builtin cd "$SITE/_posts"
 
-	OPTIONS="Text Quote Image Audio Video Link"
-	
-	if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
-	then
-		select OPTION in $OPTIONS
-		do
-			if [[ $OPTION = "Text" ]] 
-			then
-				POST_TYPE="Text"
-				break
-			fi
+  # Get the date for the new post's filename
 
-			if [[ $OPTION = "Quote" ]]
-			then
-				POST_TYPE="Quote"
-				break
-			fi
-		
-			if [[ $OPTION = "Image" ]]
-			then
-				POST_TYPE="Image"
-				break
-			fi
+  FNAME_DATE=$(date "+%Y-%m-%d")
 
-			if [[ $OPTION = "Audio" ]]
-			then
-				POST_TYPE="Audio"
-				break
-			fi
+  # If the user is using markdown or textile formatting, let them choose what type of post they want. Sort of like Tumblr.
 
-			if [[ $OPTION = "Video" ]]
-			then
-				POST_TYPE="Video"
-				break
-			fi
+  OPTIONS="Text Quote Image Audio Video Link"
 
-			if [[ $OPTION = "Link" ]]
-			then
-				POST_TYPE="Link"
-				break
-			fi
-		done
-	fi
+  if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
+  then
+    select OPTION in $OPTIONS
+    do
+      if [[ $OPTION = "Text" ]] 
+      then
+        POST_TYPE="Text"
+        break
+      fi
 
-	# Get the title for the new post
+      if [[ $OPTION = "Quote" ]]
+      then
+        POST_TYPE="Quote"
+        break
+      fi
 
-	read -p "Enter title of the new post: " POST_TITLE
+      if [[ $OPTION = "Image" ]]
+      then
+        POST_TYPE="Image"
+        break
+      fi
 
-	# Convert the spaces in the title to hyphens for use in the filename
+      if [[ $OPTION = "Audio" ]]
+      then
+        POST_TYPE="Audio"
+        break
+      fi
 
-	FNAME_POST_TITLE=`echo $POST_TITLE | tr ' ' "-"`
+      if [[ $OPTION = "Video" ]]
+      then
+        POST_TYPE="Video"
+        break
+      fi
 
-	# Now, put it all together for the full filename
+      if [[ $OPTION = "Link" ]]
+      then
+        POST_TYPE="Link"
+        break
+      fi
+    done
+  fi
 
-	FNAME="$FNAME_DATE-$FNAME_POST_TITLE.$JEKYLL_FORMATTING"
+  # Get the title for the new post
 
-	# And, finally, create the actual post file. But we're not done yet...
+  read -p "Enter title of the new post: " POST_TITLE
 
-	touch "$FNAME"
+  # Convert the spaces in the title to hyphens for use in the filename
 
-	# Write a little stuff to the file for the YAML Front Matter
+  FNAME_POST_TITLE=`echo $POST_TITLE | tr ' ' "-"`
 
-	echo "---" >> $FNAME
+  # Now, put it all together for the full filename
 
-	# Now we have to get the date, again. But this time for in the header (YAML Front Matter) of
-	# the file
+  FNAME="$FNAME_DATE-$FNAME_POST_TITLE.$JEKYLL_FORMATTING"
 
-	YAML_DATE=$(date "+%B %d %Y %X")
+  # And, finally, create the actual post file. But we're not done yet...
 
-	# Echo the YAML Formatted date to the post file
+  touch "$FNAME"
 
-	echo "date: $YAML_DATE" >> $FNAME
+  # Write a little stuff to the file for the YAML Front Matter
 
-	# Echo the original post title to the YAML Front Matter header
+  echo "---" >> $FNAME
 
-	echo "title: $POST_TITLE" >> $FNAME
+  # Now we have to get the date, again. But this time for in the header (YAML Front Matter) of
+  # the file
 
-	# And, now, echo the "post" layout to the YAML Front Matter header
+  YAML_DATE=$(date "+%B %d %Y %X")
 
-	echo "layout: post" >> $FNAME
+  # Echo the YAML Formatted date to the post file
 
-	# Close the YAML Front Matter Header
+  echo "date: $YAML_DATE" >> $FNAME
 
-	echo "---" >> $FNAME
-	echo >> $FNAME
+  # Echo the original post title to the YAML Front Matter header
 
-	# Generate template text based on the post type
+  echo "title: $POST_TITLE" >> $FNAME
 
-	if [[ $JEKYLL_FORMATTING = "markdown" ]]
-	then
-		if [[ $POST_TYPE = "Text" ]]
-		then
-			true
-		fi
+  # And, now, echo the "post" layout to the YAML Front Matter header
 
-		if [[ $POST_TYPE = "Quote" ]]
-		then
-			echo "> Quote" >> $FNAME
-			echo >> $FNAME
-			echo "&mdash; Author" >> $FNAME
-		fi
+  echo "layout: post" >> $FNAME
 
-		if [[ $POST_TYPE = "Image" ]]
-		then
-			echo "![Alternate Text](/path/to/image/or/url)" >> $FNAME
-		fi
+  # Close the YAML Front Matter Header
 
-		if [[ $POST_TYPE = "Audio" ]]
-		then
-			echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
-		fi
+  echo "---" >> $FNAME
+  echo >> $FNAME
 
-		if [[ $POST_TYPE = "Video" ]]
-		then
-			echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
-		fi
-	
-		if [[ $POST_TYPE = "Link" ]]
-		then
-			echo "[link][1]" >> $FNAME
-			echo >> $FNAME
-			echo "> Quote" >> $FNAME
-			echo >> $FNAME
-			echo "[1]: url" >> $FNAME
-		fi
-	fi
+  # Generate template text based on the post type
 
-	if [[ $JEKYLL_FORMATTING = "textile" ]]
-	then
-		if [[ $POST_TYPE = "Text" ]]
-		then
-			true
-		fi
+  if [[ $JEKYLL_FORMATTING = "markdown" ]]
+  then
+    if [[ $POST_TYPE = "Text" ]]
+    then
+      true
+    fi
 
-		if [[ $POST_TYPE = "Quote" ]]
-		then
-			echo "bq. Quote" >> $FNAME
-			echo >> $FNAME
-			echo "&mdash; Author" >> $FNAME
-		fi
+    if [[ $POST_TYPE = "Quote" ]]
+    then
+      echo "> Quote" >> $FNAME
+      echo >> $FNAME
+      echo "&mdash; Author" >> $FNAME
+    fi
 
-		if [[ $POST_TYPE = "Image" ]]
-		then
-			echo "!url(alt text)" >> $FNAME
-		fi
+    if [[ $POST_TYPE = "Image" ]]
+    then
+      echo "![Alternate Text](/path/to/image/or/url)" >> $FNAME
+    fi
 
-		if [[ $POST_TYPE = "Audio" ]]
-		then
-			echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
-		fi
+    if [[ $POST_TYPE = "Audio" ]]
+    then
+      echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
+    fi
 
-		if [[ $POST_TYPE = "Video" ]]
-		then
-			echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
-		fi
+    if [[ $POST_TYPE = "Video" ]]
+    then
+      echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
+    fi
 
-		if [[ $POST_TYPE = "Link" ]]
-		then
-			echo "\"Site\":url" >> $FNAME
-			echo >> $FNAME
-			echo "bq. Quote" >> $FNAME
-		fi
-	fi
+    if [[ $POST_TYPE = "Link" ]]
+    then
+      echo "[link][1]" >> $FNAME
+      echo >> $FNAME
+      echo "> Quote" >> $FNAME
+      echo >> $FNAME
+      echo "[1]: url" >> $FNAME
+    fi
+  fi
 
-	# Open the file in your favorite editor
+  if [[ $JEKYLL_FORMATTING = "textile" ]]
+  then
+    if [[ $POST_TYPE = "Text" ]]
+    then
+      true
+    fi
 
-	"$EDITOR" $FNAME
+    if [[ $POST_TYPE = "Quote" ]]
+    then
+      echo "bq. Quote" >> $FNAME
+      echo >> $FNAME
+      echo "&mdash; Author" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Image" ]]
+    then
+      echo "!url(alt text)" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Audio" ]]
+    then
+      echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Video" ]]
+    then
+      echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Link" ]]
+    then
+      echo "\"Site\":url" >> $FNAME
+      echo >> $FNAME
+      echo "bq. Quote" >> $FNAME
+    fi
+  fi
+
+  # Open the file in your favorite editor
+
+  "$JEKYLL_EDITOR" $FNAME
+}
+
+function testsite() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      break
+    fi
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd $SITE
+  jekyll --server --auto
+}
+
+function buildsite() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      break
+    fi
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd $SITE
+  rm -rf _site
+  jekyll --no-server
+}
+
+function deploysite() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  loc=0
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      REMOTE=${REMOTES[$loc]}
+      break
+    fi
+    loc=$(($loc+1))
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd $SITE
+  rsync -rz $REMOTE
 }
diff --git a/plugins/available/nvm.plugin.bash b/plugins/available/nvm.plugin.bash
new file mode 100644
index 0000000..a5145ec
--- /dev/null
+++ b/plugins/available/nvm.plugin.bash
@@ -0,0 +1,307 @@
+# Node Version Manager
+# Implemented as a bash function
+# To use source this file from your bash profile
+#
+# Implemented by Tim Caswell <tim@creationix.com>
+# with much bash help from Matthew Ranney
+
+export NVM_DIR=$HOME/.nvm
+
+if [ ! -d "$NVM_DIR" ]; then
+    mkdir $NVM_DIR
+fi
+
+# Auto detect the NVM_DIR
+if [ ! -d "$NVM_DIR" ]; then
+    export NVM_DIR=$(cd $(dirname ${BASH_SOURCE[0]:-$0}); pwd)
+fi
+
+# Emulate curl with wget, if necessary
+if [ ! `which curl` ]; then
+    if [ `which wget` ]; then
+        curl() {
+            ARGS="$* "
+            ARGS=${ARGS/-s /-q }
+            ARGS=${ARGS/-\# /}
+            ARGS=${ARGS/-C - /-c }
+            ARGS=${ARGS/-o /-O }
+
+            wget $ARGS
+        }
+    else
+        NOCURL='nocurl'
+        curl() { echo 'Need curl or wget to proceed.' >&2; }
+    fi
+fi
+
+# Expand a version using the version cache
+nvm_version()
+{
+    PATTERN=$1
+    VERSION=''
+    if [ -f "$NVM_DIR/alias/$PATTERN" ]; then
+        nvm_version `cat $NVM_DIR/alias/$PATTERN`
+        return
+    fi
+    # If it looks like an explicit version, don't do anything funny
+    if [[ "$PATTERN" == v*.*.* ]]; then
+        VERSION="$PATTERN"
+    fi
+    # The default version is the current one
+    if [ ! "$PATTERN" -o "$PATTERN" = 'current' ]; then
+        VERSION=`node -v 2>/dev/null`
+    fi
+    if [ "$PATTERN" = 'stable' ]; then
+        PATTERN='*.*[02468].'
+    fi
+    if [ "$PATTERN" = 'latest' ]; then
+        PATTERN='*.*.'
+    fi
+    if [ "$PATTERN" = 'all' ]; then
+        (cd $NVM_DIR; \ls -dG v* 2>/dev/null || echo "N/A")
+        return
+    fi
+    if [ ! "$VERSION" ]; then
+        VERSION=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 2,1n -k 2,2n -k 3,3n | tail -n1`
+    fi
+    if [ ! "$VERSION" ]; then
+        echo "N/A"
+        return 13
+    elif [ -e "$NVM_DIR/$VERSION" ]; then
+        (cd $NVM_DIR; \ls -dG "$VERSION")
+    else
+        echo "$VERSION"
+    fi
+}
+
+nvm()
+{
+  if [ $# -lt 1 ]; then
+    nvm help
+    return
+  fi
+  case $1 in
+    "help" )
+      echo
+      echo "Node Version Manager"
+      echo
+      echo "Usage:"
+      echo "    nvm help                    Show this message"
+      echo "    nvm install <version>       Download and install a <version>"
+      echo "    nvm uninstall <version>     Uninstall a version"
+      echo "    nvm use <version>           Modify PATH to use <version>"
+      echo "    nvm ls                      List versions (installed versions are blue)"
+      echo "    nvm ls <version>            List versions matching a given description"
+      echo "    nvm deactivate              Undo effects of NVM on current shell"
+      echo "    nvm sync                    Update the local cache of available versions"
+      echo "    nvm alias [<pattern>]       Show all aliases beginning with <pattern>"
+      echo "    nvm alias <name> <version>  Set an alias named <name> pointing to <version>"
+      echo "    nvm unalias <name>          Deletes the alias named <name>"
+      echo "    nvm copy-packages <version> Install global NPM packages contained in <version> to current version"
+      echo
+      echo "Example:"
+      echo "    nvm install v0.4.0          Install a specific version number"
+      echo "    nvm use stable              Use the stable release"
+      echo "    nvm install latest          Install the latest, possibly unstable version"
+      echo "    nvm use 0.2                 Use the latest available 0.2.x release"
+      echo "    nvm alias default v0.4.0    Set v0.4.0 as the default"
+      echo
+    ;;
+    "install" )
+      if [ $# -ne 2 ]; then
+        nvm help
+        return
+      fi
+      [ "$NOCURL" ] && curl && return
+      VERSION=`nvm_version $2`
+      tarball=''
+      if [ "`curl -Is "http://nodejs.org/dist/$VERSION/node-$VERSION.tar.gz" | grep '200 OK'`" != '' ]; then
+        tarball="http://nodejs.org/dist/$VERSION/node-$VERSION.tar.gz"
+      elif [ "`curl -Is "http://nodejs.org/dist/node-$VERSION.tar.gz" | grep '200 OK'`" != '' ]; then
+        tarball="http://nodejs.org/dist/node-$VERSION.tar.gz"
+      fi
+      if (
+        [ ! -z $tarball ] && \
+        mkdir -p "$NVM_DIR/src" && \
+        cd "$NVM_DIR/src" && \
+        curl -C - -# $tarball -o "node-$VERSION.tar.gz" && \
+        tar -xzf "node-$VERSION.tar.gz" && \
+        cd "node-$VERSION" && \
+        ./configure --prefix="$NVM_DIR/$VERSION" && \
+        make && \
+        rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \
+        make install
+        )
+      then
+        nvm use $VERSION
+        if ! which npm ; then
+          echo "Installing npm..."
+          # TODO: if node version 0.2.x add npm_install=0.2.19 before sh
+          curl http://npmjs.org/install.sh | clean=yes sh
+        fi
+      else
+        echo "nvm: install $VERSION failed!"
+      fi
+    ;;
+    "uninstall" )
+      [ $# -ne 2 ] && nvm help && return
+      if [[ $2 == `nvm_version` ]]; then
+        echo "nvm: Cannot uninstall currently-active node version, $2."
+        return
+      fi
+      VERSION=`nvm_version $2`
+      if [ ! -d $NVM_DIR/$VERSION ]; then
+        echo "$VERSION version is not installed yet"
+        return;
+      fi
+
+      # Delete all files related to target version.
+      (cd "$NVM_DIR" && \
+          rm -rf "node-$VERSION" 2>/dev/null && \
+          mkdir -p "$NVM_DIR/src" && \
+          cd "$NVM_DIR/src" && \
+          rm -f "node-$VERSION.tar.gz" 2>/dev/null && \
+          rm -rf "$NVM_DIR/$VERSION" 2>/dev/null)
+      echo "Uninstalled node $VERSION"
+
+      # Rm any aliases that point to uninstalled version.
+      for A in `grep -l $VERSION $NVM_DIR/alias/*`
+      do
+        nvm unalias `basename $A`
+      done
+
+      # Run sync in order to restore version stub file in $NVM_DIR.
+      nvm sync 1>/dev/null
+    ;;
+    "deactivate" )
+      if [[ $PATH == *$NVM_DIR/*/bin* ]]; then
+        export PATH=${PATH%$NVM_DIR/*/bin*}${PATH#*$NVM_DIR/*/bin:}
+        hash -r
+        echo "$NVM_DIR/*/bin removed from \$PATH"
+      else
+        echo "Could not find $NVM_DIR/*/bin in \$PATH"
+      fi
+      if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then
+        export MANPATH=${MANPATH%$NVM_DIR/*/share/man*}${MANPATH#*$NVM_DIR/*/share/man:}
+        echo "$NVM_DIR/*/share/man removed from \$MANPATH"
+      else
+        echo "Could not find $NVM_DIR/*/share/man in \$MANPATH"
+      fi
+    ;;
+    "use" )
+      if [ $# -ne 2 ]; then
+        nvm help
+        return
+      fi
+      VERSION=`nvm_version $2`
+      if [ ! -d $NVM_DIR/$VERSION ]; then
+        echo "$VERSION version is not installed yet"
+        return;
+      fi
+      if [[ $PATH == *$NVM_DIR/*/bin* ]]; then
+        PATH=${PATH%$NVM_DIR/*/bin*}$NVM_DIR/$VERSION/bin${PATH#*$NVM_DIR/*/bin}
+      else
+        PATH="$NVM_DIR/$VERSION/bin:$PATH"
+      fi
+      if [[ $MANPATH == *$NVM_DIR/*/share/man* ]]; then
+        MANPATH=${MANPATH%$NVM_DIR/*/share/man*}$NVM_DIR/$VERSION/share/man${MANPATH#*$NVM_DIR/*/share/man}
+      else
+        MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH"
+      fi
+      export PATH
+      hash -r
+      export MANPATH
+      export NVM_PATH="$NVM_DIR/$VERSION/lib/node"
+      export NVM_BIN="$NVM_DIR/$VERSION/bin"
+      echo "Now using node $VERSION"
+    ;;
+    "ls" )
+      if [ $# -ne 1 ]; then
+        nvm_version $2
+        return
+      fi
+      nvm_version all
+      for P in {stable,latest,current}; do
+          echo -ne "$P: \t"; nvm_version $P
+      done
+      nvm alias
+      echo "# use 'nvm sync' to update from nodejs.org"
+    ;;
+    "alias" )
+      mkdir -p $NVM_DIR/alias
+      if [ $# -le 2 ]; then
+        (cd $NVM_DIR/alias && for ALIAS in `\ls $2* 2>/dev/null`; do
+            DEST=`cat $ALIAS`
+            VERSION=`nvm_version $DEST`
+            if [ "$DEST" = "$VERSION" ]; then
+                echo "$ALIAS -> $DEST"
+            else
+                echo "$ALIAS -> $DEST (-> $VERSION)"
+            fi
+        done)
+        return
+      fi
+      if [ ! "$3" ]; then
+          rm -f $NVM_DIR/alias/$2
+          echo "$2 -> *poof*"
+          return
+      fi
+      mkdir -p $NVM_DIR/alias
+      VERSION=`nvm_version $3`
+      if [ $? -ne 0 ]; then
+        echo "! WARNING: Version '$3' does not exist." >&2
+      fi
+      echo $3 > "$NVM_DIR/alias/$2"
+      if [ ! "$3" = "$VERSION" ]; then
+          echo "$2 -> $3 (-> $VERSION)"
+          echo "! WARNING: Moving target. Aliases to implicit versions may change without warning."
+      else
+        echo "$2 -> $3"
+      fi
+    ;;
+    "unalias" )
+      mkdir -p $NVM_DIR/alias
+      [ $# -ne 2 ] && nvm help && return
+      [ ! -f $NVM_DIR/alias/$2 ] && echo "Alias $2 doesn't exist!" && return
+      rm -f $NVM_DIR/alias/$2
+      echo "Deleted alias $2"
+    ;;
+    "sync" )
+        [ "$NOCURL" ] && curl && return
+        LATEST=`nvm_version latest`
+        STABLE=`nvm_version stable`
+        (cd $NVM_DIR
+        rm -f v* 2>/dev/null
+        printf "# syncing with nodejs.org..."
+        for VER in `curl -s http://nodejs.org/dist/ -o - | grep 'v[0-9].*' | sed -e 's/.*node-//' -e 's/\.tar\.gz.*//' -e 's/<[^>]*>//' -e 's/\/<[^>]*>.*//'`; do
+            touch $VER
+        done
+        echo " done."
+        )
+        [ "$STABLE" = `nvm_version stable` ] || echo "NEW stable: `nvm_version stable`"
+        [ "$LATEST" = `nvm_version latest` ] || echo "NEW latest: `nvm_version latest`"
+    ;;
+    "copy-packages" )
+        if [ $# -ne 2 ]; then
+          nvm help
+          return
+        fi
+        VERSION=`nvm_version $2`
+        ROOT=`nvm use $VERSION && npm -g root`
+        INSTALLS=`nvm use $VERSION > /dev/null && npm -g -p ll | grep "$ROOT\/[^/]\+$" | cut -d '/' -f 8 | cut -d ":" -f 2 | grep -v npm | tr "\n" " "`
+        npm install -g $INSTALLS
+    ;;
+    "clear-cache" )
+        rm -f $NVM_DIR/v* 2>/dev/null
+        echo "Cache cleared."
+    ;;
+    "version" )
+        nvm_version $2
+    ;;
+    * )
+      nvm help
+    ;;
+  esac
+}
+
+nvm ls default >/dev/null 2>&1 && nvm use default >/dev/null
diff --git a/plugins/available/osx.plugin.bash b/plugins/available/osx.plugin.bash
index e6271bd..cf55377 100644
--- a/plugins/available/osx.plugin.bash
+++ b/plugins/available/osx.plugin.bash
@@ -17,7 +17,7 @@
 function dock-switch() {
 
     if [ $(uname) = "Darwin" ]; then
-        
+
         if [ $1 = 3d ] ; then
             defaults write com.apple.dock no-glass -boolean NO
             killall Dock
@@ -28,10 +28,21 @@
 
         else
             echo "usage:"
-            echo "dock-switch 2d" 
+            echo "dock-switch 2d"
             echo "dock-switch 3d."
         fi
     else
-        echo "sorry. you're currently not using os x"
+        echo "Sorry, this only works on Mac OS X"
     fi
 }
+
+# Download a file and open it in Preview
+
+function prevcurl() {
+  if [ ! $(uname) = "Darwin" ]
+  then
+    echo "This function only works with Mac OS X"
+    return 1
+  fi
+  curl "$*" | open -fa "Preview"
+}
diff --git a/plugins/available/tmuxinator.plugin.bash b/plugins/available/tmuxinator.plugin.bash
new file mode 100644
index 0000000..d8236fc
--- /dev/null
+++ b/plugins/available/tmuxinator.plugin.bash
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+[[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && . $HOME/.tmuxinator/scripts/tmuxinator
diff --git a/template/bash_profile.template.bash b/template/bash_profile.template.bash
index 30ab0fc..34d99ac 100644
--- a/template/bash_profile.template.bash
+++ b/template/bash_profile.template.bash
@@ -7,11 +7,11 @@
 export PATH=$PATH:~/.gem/ruby/1.8/bin:/opt/nginx/sbin
 
 # Path to the bash it configuration
-export BASH=$HOME/.bash_it
+export BASH_IT=$HOME/.bash_it
 
 # Lock and Load a custom theme file
 # location /.bash_it/themes/
-export BASH_THEME='bobby'
+export BASH_IT_THEME='bobby'
 
 # Your place for hosting Git repos. I use this for private repos.
 export GIT_HOSTING='git@git.domain.com'
@@ -26,18 +26,6 @@
 # Don't check mail when opening terminal.
 unset MAILCHECK
 
-# Change this to the path of your local jekyll root to use the jekyll aliases
-
-export JEKYLL_LOCAL_ROOT="$HOME/Sites/jekyllsite"
-
-# And change this to the remote server and root
-
-export JEKYLL_REMOTE_ROOT="user@server:/path/to/jekyll/root"
-
-# And, for the last of the jekyll variables, this is the formatting you use, eg: markdown,
-# textile, etc. Basically whatever you use as the extension for posts, without the preceding dot
-
-export JEKYLL_FORMATTING="markdown"
 
 # Change this to your console based IRC client of choice.
 
@@ -52,4 +40,4 @@
 #export VCPROMPT_EXECUTABLE=~/.vcprompt/bin/vcprompt
 
 # Load Bash It
-source $BASH/bash_it.sh
+source $BASH_IT/bash_it.sh
diff --git a/template/jekyllconfig.template.bash b/template/jekyllconfig.template.bash
new file mode 100644
index 0000000..291bf85
--- /dev/null
+++ b/template/jekyllconfig.template.bash
@@ -0,0 +1,21 @@
+# This is a space-delimited list of your Jekyll project paths
+
+SITES="$HOME/sites/project_1 $HOME/sites/project_2"
+
+# This is another space-delimited list.
+# This one is of the remote user@host:path location of your jekyll site
+# NOTE: The locations of these must correspond to the locations
+# of the sites in the first list
+# For instance, the host for the first Jekyll site
+# must be first in this list, the second second, etc.
+
+REMOTES="user@host_1:path user@host_2:path"
+
+# list of markup syntaxes to use for the sites,
+# Same rules as above. Can be HTML, textile, or markdown
+
+MARKUPS="markdown textile"
+
+# If you want to use a different editor for Jekyll, change the value of this variable
+
+JEKYLL_EDITOR="$EDITOR"
diff --git a/themes/base.theme.bash b/themes/base.theme.bash
index 7087662..05db36e 100644
--- a/themes/base.theme.bash
+++ b/themes/base.theme.bash
@@ -6,76 +6,104 @@
 SCM_THEME_PROMPT_PREFIX=' |'
 SCM_THEME_PROMPT_SUFFIX='|'
 
-GIT='git'
+SCM_GIT='git'
 SCM_GIT_CHAR='±'
 
-HG='hg'
+SCM_HG='hg'
 SCM_HG_CHAR='☿'
 
-SVN='svn'
+SCM_SVN='svn'
 SCM_SVN_CHAR='⑆'
 
+SCM_NONE='NONE'
 SCM_NONE_CHAR='○'
 
 RVM_THEME_PROMPT_PREFIX=' |'
 RVM_THEME_PROMPT_SUFFIX='|'
 
+VIRTUALENV_THEME_PROMPT_PREFIX=' |'
+VIRTUALENV_THEME_PROMPT_SUFFIX='|'
+
 function scm {
-  if [[ -d .git ]]; then SCM=$GIT
-  elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$GIT
-  elif [[ -d .hg ]]; then SCM=$HG
-  elif [[ -d .svn ]]; then SCM=$SVN
-  else SCM='NONE'
+  if [[ -d .git ]]; then SCM=$SCM_GIT
+  elif [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$SCM_GIT
+  elif [[ -d .hg ]]; then SCM=$SCM_HG
+  elif [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$SCM_HG
+  elif [[ -d .svn ]]; then SCM=$SCM_SVN
+  else SCM=$SCM_NONE
   fi
 }
 
-function scm_char {
+function scm_prompt_char {
   if [[ -z $SCM ]]; then scm; fi
-  [[ $SCM == $GIT ]] && echo $SCM_GIT_CHAR && return
-  [[ $SCM == $HG ]] && echo $SCM_HG_CHAR && return
-  [[ $SCM == $SVN ]] && echo $SCM_SVN_CHAR && return
-  echo $SCM_NONE_CHAR
+  if [[ $SCM == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR
+  elif [[ $SCM == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR
+  elif [[ $SCM == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR
+  else SCM_CHAR=$SCM_NONE_CHAR
+  fi
+}
+
+function scm_prompt_vars {
+  scm
+  scm_prompt_char
+  SCM_DIRTY=0
+  SCM_STATE=''
+  [[ $SCM == $SCM_GIT ]] && git_prompt_vars && return
+  [[ $SCM == $SCM_HG ]] && hg_prompt_vars && return
+  [[ $SCM == $SCM_SVN ]] && svn_prompt_vars && return
 }
 
 function scm_prompt_info {
-  if [[ -z $SCM ]]; then scm; fi
-  [[ $SCM == $GIT ]] && git_prompt_info && return
-  [[ $SCM == $HG ]] && hg_prompt_info && return
-  [[ $SCM == $SVN ]] && svn_prompt_info && return
+  scm
+  scm_prompt_char
+  SCM_DIRTY=0
+  SCM_STATE=''
+  [[ $SCM == $SCM_GIT ]] && git_prompt_info && return
+  [[ $SCM == $SCM_HG ]] && hg_prompt_info && return
+  [[ $SCM == $SCM_SVN ]] && svn_prompt_info && return
 }
 
-# Stolen from Steve Losh
-# left in for backwards-compatibility
-function prompt_char {
-    char=$(scm_char);
-    echo -e "$char"
-}
-
-function git_prompt_info {
+function git_prompt_vars {
   if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
-      state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+    SCM_DIRTY=1
+     SCM_STATE=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
   else
-      state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+    SCM_DIRTY=0
+     SCM_STATE=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
   fi
-  prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
-  suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
-  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
-
-  echo -e "$prefix${ref#refs/heads/}$state$suffix"
+  SCM_PREFIX=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
+  SCM_SUFFIX=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
+  local ref=$(git symbolic-ref HEAD 2> /dev/null)
+  SCM_BRANCH=${ref#refs/heads/}
+  SCM_CHANGE=$(git rev-parse HEAD 2>/dev/null)
 }
 
-function svn_prompt_info {
+function svn_prompt_vars {
   if [[ -n $(svn status 2> /dev/null) ]]; then
-      state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+    SCM_DIRTY=1
+      SCM_STATE=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
   else
-      state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+    SCM_DIRTY=0
+      SCM_STATE=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
   fi
-  prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
-  suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
-  ref=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
+  SCM_PREFIX=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
+  SCM_SUFFIX=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
+  SCM_BRANCH=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
+  SCM_CHANGE=$(svn info 2> /dev/null | sed -ne 's#^Revision: ##p' )
+}
 
-  [[ -z $ref ]] && return
-  echo -e "$prefix$ref$state$suffix"
+function hg_prompt_vars {
+    if [[ -n $(hg status 2> /dev/null) ]]; then
+      SCM_DIRTY=1
+        SCM_STATE=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+    else
+      SCM_DIRTY=0
+        SCM_STATE=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+    fi
+    SCM_PREFIX=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
+    SCM_SUFFIX=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
+    SCM_BRANCH=$(hg summary 2> /dev/null | grep branch | awk '{print $2}')
+    SCM_CHANGE=$(hg summary 2> /dev/null | grep parent | awk '{print $2}')
 }
 
 function rvm_version_prompt {
@@ -84,3 +112,35 @@
     echo -e "$RVM_THEME_PROMPT_PREFIX$rvm$RVM_THEME_PROMPT_SUFFIX"
   fi
 }
+
+function virtualenv_prompt {
+  if which virtualenv &> /dev/null; then
+    virtualenv=$([ ! -z "$VIRTUAL_ENV" ] && echo "`basename $VIRTUAL_ENV`") || return
+    echo -e "$VIRTUALENV_THEME_PROMPT_PREFIX$virtualenv$VIRTUALENV_THEME_PROMPT_SUFFIX"
+  fi
+}
+
+# backwards-compatibility
+function git_prompt_info {
+  git_prompt_vars
+  echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
+}
+
+function svn_prompt_info {
+  svn_prompt_vars
+  echo -e "$SCM_PREFIX$SCM_BRANCH$SCM_STATE$SCM_SUFFIX"
+}
+
+function hg_prompt_info() {
+  hg_prompt_vars
+  echo -e "$SCM_PREFIX$SCM_BRANCH:${SCM_CHANGE#*:}$SCM_STATE$SCM_SUFFIX"
+}
+
+function scm_char {
+  scm_prompt_char
+  echo -e "$SCM_CHAR"
+}
+
+function prompt_char {
+    scm_char
+}
diff --git a/themes/bobby/bobby.theme.bash b/themes/bobby/bobby.theme.bash
index 8b48ddd..cb51fb8 100644
--- a/themes/bobby/bobby.theme.bash
+++ b/themes/bobby/bobby.theme.bash
@@ -4,15 +4,6 @@
 SCM_THEME_PROMPT_PREFIX=" |"
 SCM_THEME_PROMPT_SUFFIX="${green}|"
 
-
-# PROMPT="\[${bold_cyan}\]\[\$(scm_char)\]\[${green}\]\[\$(scm_prompt_info)\]\[${purple}\]\[\$(rvm_version_prompt)\] \[${yellow}\]\h \[${reset_color}\]in \[${green}\]\w \[${reset_color}\]\[\n\[${green}\]→\[${reset_color}\] "
-
-
-PROMPT="\n\[${yellow}\]\[\$(rvm_version_prompt)\] \[${purple}\]\h \[${reset_color}\]in \[${green}\]\w\n\[${bold_cyan}\]\[\$(scm_char)\]\[${green}\]\[\$(scm_prompt_info)\] \[\[${green}\]→\[${reset_color}\] "
-
-
-
-# git theming
 GIT_THEME_PROMPT_DIRTY=" ${red}✗"
 GIT_THEME_PROMPT_CLEAN=" ${bold_green}✓"
 GIT_THEME_PROMPT_PREFIX=" ${green}|"
@@ -21,3 +12,9 @@
 RVM_THEME_PROMPT_PREFIX="|"
 RVM_THEME_PROMPT_SUFFIX="|"
 
+function prompt_command() {
+    #PS1="${bold_cyan}$(scm_char)${green}$(scm_prompt_info)${purple}$(rvm_version_prompt) ${yellow}\h ${reset_color}in ${green}\w ${reset_color}\n${green}→${reset_color} "
+    PS1="\n${yellow}$(rvm_version_prompt) ${purple}\h ${reset_color}in ${green}\w\n${bold_cyan}$(scm_char)${green}$(scm_prompt_info) ${green}→${reset_color} "
+}
+
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/candy/candy.theme.bash b/themes/candy/candy.theme.bash
index ef0ba26..64d31b8 100644
--- a/themes/candy/candy.theme.bash
+++ b/themes/candy/candy.theme.bash
@@ -1,2 +1,6 @@
 #!/bin/bash
-PROMPT="${green}\u@\h ${blue}\T ${reset_color}${white}\w${reset_color}\[\$(scm_prompt_info)\]${blue} →${bold_blue} \$${reset_color} "
\ No newline at end of file
+function prompt_command() {
+    PS1="${green}\u@\h ${blue}\T ${reset_color}${white}\w${reset_color}$(scm_prompt_info)\]${blue} →${bold_blue} ${reset_color} ";
+}
+
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/clean/clean.theme.bash b/themes/clean/clean.theme.bash
index 2fc418f..9998d65 100644
--- a/themes/clean/clean.theme.bash
+++ b/themes/clean/clean.theme.bash
@@ -1,9 +1,3 @@
-if [ "$(whoami)" = root ]; then no_color=$red; else no_color=$white; fi
-
-PROMPT="${no_color}\u${reset_color}:${blue}\W/${reset_color} \[\$(scm_prompt_info)\]$ "
-RPROMPT='[\t]'
-
-
 # git theming
 ZSH_THEME_GIT_PROMPT_PREFIX="${bold_blue}(${yellow}%B"
 ZSH_THEME_GIT_PROMPT_SUFFIX="%b${bold_blue})${reset_color} "
@@ -13,4 +7,14 @@
 
 # LS colors, made with http://geoff.greer.fm/lscolors/
 export LSCOLORS="Gxfxcxdxbxegedabagacad"
-export LS_COLORS='no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:'
\ No newline at end of file
+export LS_COLORS='no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:'
+
+function prompt_command() {
+
+    if [ "$(whoami)" = root ]; then no_color=$red; else no_color=$white; fi
+
+    PS1="${no_color}\u${reset_color}:${blue}\W/${reset_color} \[\$(scm_prompt_info)\]$ "
+    RPROMPT='[\t]'
+}
+
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/colors.theme.bash b/themes/colors.theme.bash
index 9aa253f..ff8776d 100644
--- a/themes/colors.theme.bash
+++ b/themes/colors.theme.bash
@@ -1,44 +1,44 @@
 #!/bin/bash
 
-black=$'\e[0;30m'
-red=$'\e[0;31m'
-green=$'\e[0;32m'
-yellow=$'\e[0;33m'
-blue=$'\e[0;34m'
-purple=$'\e[0;35m'
-cyan=$'\e[0;36m'
-white=$'\e[1;37m'
-orange=$'\e[33;40m'
+black="\[\e[0;30m\]"
+red="\[\e[0;31m\]"
+green="\[\e[0;32m\]"
+yellow="\[\e[0;33m\]"
+blue="\[\e[0;34m\]"
+purple="\[\e[0;35m\]"
+cyan="\[\e[0;36m\]"
+white="\[\e[1;37m\]"
+orange="\[\e[33;40m\]"
 
-bold_black=$'\e[1;30m'
-bold_red=$'\e[1;31m'
-bold_green=$'\e[1;32m'
-bold_yellow=$'\e[1;33m'
-bold_blue=$'\e[1;34m'
-bold_purple=$'\e[1;35m'
-bold_cyan=$'\e[1;36m'
-bold_white=$'\e[1;37m'
-bold_orange=$'\e[1;33;40m'
+bold_black="\[\e[1;30m\]"
+bold_red="\[\e[1;31m\]"
+bold_green="\[\e[1;32m\]"
+bold_yellow="\[\e[1;33m\]"
+bold_blue="\[\e[1;34m\]"
+bold_purple="\[\e[1;35m\]"
+bold_cyan="\[\e[1;36m\]"
+bold_white="\[\e[1;37m\]"
+bold_orange="\[\e[1;33;40m\]"
 
-underline_black=$'\e[4;30m'
-underline_red=$'\e[4;31m'
-underline_green=$'\e[4;32m'
-underline_yellow=$'\e[4;33m'
-underline_blue=$'\e[4;34m'
-underline_purple=$'\e[4;35m'
-underline_cyan=$'\e[4;36m'
-underline_white=$'\e[4;37m'
-underline_orange=$'\e[4;33;40m'
+underline_black="\[\e[4;30m\]"
+underline_red="\[\e[4;31m\]"
+underline_green="\[\e[4;32m\]"
+underline_yellow="\[\e[4;33m\]"
+underline_blue="\[\e[4;34m\]"
+underline_purple="\[\e[4;35m\]"
+underline_cyan="\[\e[4;36m\]"
+underline_white="\[\e[4;37m\]"
+underline_orange="\[\e[4;33;40m\]"
 
-background_black=$'\e[40m'
-background_red=$'\e[41m'
-background_green=$'\e[42m'
-background_yellow=$'\e[43m'
-background_blue=$'\e[44m'
-background_purple=$'\e[45m'
-background_cyan=$'\e[46m'
-background_white=$'\e[47m'
+background_black="\[\e[40m\]"
+background_red="\[\e[41m\]"
+background_green="\[\e[42m\]"
+background_yellow="\[\e[43m\]"
+background_blue="\[\e[44m\]"
+background_purple="\[\e[45m\]"
+background_cyan="\[\e[46m\]"
+background_white="\[\e[47m\]"
 
 
-normal=$'\e[00m'
-reset_color=$'\e[39m'
\ No newline at end of file
+normal="\[\e[00m\]"
+reset_color="\[\e[39m\]"
diff --git a/themes/demula/demula.theme.bash b/themes/demula/demula.theme.bash
index 0e6744a..bd48e12 100644
--- a/themes/demula/demula.theme.bash
+++ b/themes/demula/demula.theme.bash
@@ -33,22 +33,22 @@
 #*color7: #E5E5E5
 
 # ----------------------------------------------------------------- COLOR CONF
-D_DEFAULT_COLOR='\[${normal}\]'
-D_INTERMEDIATE_COLOR='\[${white}\]'
-D_USER_COLOR='\[${purple}\]'
-D_SUPERUSER_COLOR='\[${red}\]'
-D_MACHINE_COLOR='\[${cyan}\]'
-D_DIR_COLOR='\[${green}\]'
-D_SCM_COLOR='\[${yellow}\]'
-D_BRANCH_COLOR='\[${yellow}\]'
-D_CHANGES_COLOR='\[${white}\]'
-D_CMDFAIL_COLOR='\[${red}\]'
-D_VIMSHELL_COLOR='\[${cyan}\]'
+D_DEFAULT_COLOR="${normal}"
+D_INTERMEDIATE_COLOR="${white}"
+D_USER_COLOR="${purple}"
+D_SUPERUSER_COLOR="${red}"
+D_MACHINE_COLOR="${cyan}"
+D_DIR_COLOR="${green}"
+D_SCM_COLOR="${yellow}"
+D_BRANCH_COLOR="${yellow}"
+D_CHANGES_COLOR="${white}"
+D_CMDFAIL_COLOR="${red}"
+D_VIMSHELL_COLOR="${cyan}"
 
 # ------------------------------------------------------------------ FUNCTIONS
 case $TERM in
   xterm*)
-      TITLEBAR="\[\033]0;\w\007\]"
+      TITLEBAR="\033]0;\w\007"
       ;;
   *)
       TITLEBAR=""
@@ -84,10 +84,10 @@
 
 # -------------------------------------------------------------- PROMPT OUTPUT
 prompt() {
-  local SAVE_CURSOR='\[\033[s\]'
-  local RESTORE_CURSOR='\[\033[u\]'
-  local MOVE_CURSOR_RIGHTMOST='\[\033[500C\]'
-  local MOVE_CURSOR_5_LEFT='\[\033[5D\]'
+  local SAVE_CURSOR='\033[s'
+  local RESTORE_CURSOR='\033[u'
+  local MOVE_CURSOR_RIGHTMOST='\033[500C'
+  local MOVE_CURSOR_5_LEFT='\033[5D'
 
   if [ $(uname) = "Linux" ];
   then
diff --git a/themes/doubletime/doubletime.theme.bash b/themes/doubletime/doubletime.theme.bash
index 91844f0..c3bf453 100644
--- a/themes/doubletime/doubletime.theme.bash
+++ b/themes/doubletime/doubletime.theme.bash
@@ -1,13 +1,25 @@
 #!/bin/bash
 SCM_THEME_PROMPT_DIRTY=''
 SCM_THEME_PROMPT_CLEAN=''
-SCM_GIT_CHAR='${bold_cyan}±${normal}'
-SCM_SVN_CHAR='${bold_cyan}⑆${normal}'
-SCM_HG_CHAR='${bold_red}☿${normal}'
+SCM_GIT_CHAR="${bold_cyan}±${normal}"
+SCM_SVN_CHAR="${bold_cyan}⑆${normal}"
+SCM_HG_CHAR="${bold_red}☿${normal}"
 SCM_THEME_PROMPT_PREFIX=""
 SCM_THEME_PROMPT_SUFFIX=""
-RVM_THEME_PROMPT_PREFIX=" ("
-RVM_THEME_PROMPT_SUFFIX=")"
+if [ ! -z $RVM_THEME_PROMPT_COLOR ]; then
+    RVM_THEME_PROMPT_COLOR=$(eval echo $`echo ${RVM_THEME_PROMPT_COLOR}`);
+else
+    RVM_THEME_PROMPT_COLOR="${red}"
+fi
+RVM_THEME_PROMPT_PREFIX="(${RVM_THEME_PROMPT_COLOR}rb${normal}: "
+RVM_THEME_PROMPT_SUFFIX=") "
+if [ ! -z $VIRTUALENV_THEME_PROMPT_COLOR ]; then
+    VIRTUALENV_THEME_PROMPT_COLOR=$(eval echo $`echo ${VIRTUALENV_THEME_PROMPT_COLOR}`);
+else
+    VIRTUALENV_THEME_PROMPT_COLOR="${green}"
+fi
+VIRTUALENV_THEME_PROMPT_PREFIX="(${VIRTUALENV_THEME_PROMPT_COLOR}py${normal}: "
+VIRTUALENV_THEME_PROMPT_SUFFIX=") "
 
 if [ ! -z $THEME_PROMPT_HOST_COLOR ]; then
     THEME_PROMPT_HOST_COLOR=$(eval echo $`echo ${THEME_PROMPT_HOST_COLOR}`);
@@ -17,22 +29,16 @@
 
 doubletime_scm_prompt() {
   CHAR=$(scm_char)
-  if [ $CHAR = $SCM_NONE_CHAR ]
-  then
+  if [ $CHAR = $SCM_NONE_CHAR ]; then
     return
-  else
+  elif [ $CHAR = $SCM_GIT_CHAR ]; then
     echo "$(git_prompt_status)"
+  else
+    echo "[$(scm_prompt_info)]"
   fi
 }
 
-virtualenv_prompt() {
-  if [ ! -z "$VIRTUAL_ENV" ]
-  then
-    echo "(`basename $VIRTUAL_ENV`) "
-  fi
-}
-
-prompt_setter() {
+function prompt_setter() {
   # Save history
   history -a
   history -c
@@ -44,8 +50,8 @@
       clock=$THEME_PROMPT_CLOCK_FORMAT
   fi
   PS1="
-$clock $(scm_char) [\[$THEME_PROMPT_HOST_COLOR\]\u@${THEME_PROMPT_HOST}\[$reset_color\]] $(virtualenv_prompt)\w
-$(doubletime_scm_prompt)\[$reset_color\] $ "
+$clock $(scm_char) [$THEME_PROMPT_HOST_COLOR\u@${THEME_PROMPT_HOST}$reset_color] $(virtualenv_prompt)$(rvm_version_prompt)\w
+$(doubletime_scm_prompt)$reset_color $ "
   PS2='> '
   PS4='+ '
 }
diff --git a/themes/hawaii50/hawaii50.theme.bash b/themes/hawaii50/hawaii50.theme.bash
new file mode 100644
index 0000000..93cef46
--- /dev/null
+++ b/themes/hawaii50/hawaii50.theme.bash
@@ -0,0 +1,200 @@
+#!/bin/bash
+#
+# This theme was obviously inspired a lot by 
+#
+# - Demula theme
+#
+# which in itself was inspired by :
+#
+# - Ronacher's dotfiles (mitsuhikos) - http://github.com/mitsuhiko/dotfiles/tree/master/bash/
+# - Glenbot - http://theglenbot.com/custom-bash-shell-for-development/
+# - My extravagant zsh - http://stevelosh.com/blog/2010/02/my-extravagant-zsh-prompt/
+# - Monokai colors - http://monokai.nl/blog/2006/07/15/textmate-color-theme/
+# - Bash_it modern theme
+#
+# Hawaii50 theme supports :
+#
+# - configurable directory length
+# - hg, svn, git detection (I work in all of them)
+# - virtualenv, rvm + gemsets
+# 
+# Screenshot: http://i.imgur.com/4IAMJ.png 
+#
+# by Ryan Kanno <ryankanno@localkinegrinds.com>
+#
+# And yes, we code out in Hawaii. :D
+#
+# Note: I also am really new to this bash scripting game, so if you see things
+# that are flat out wrong, or if you think of something neat, just send a pull
+# request.  This probably only works on a Mac - as some functions are OS 
+# specific like getting ip, etc.
+#
+
+# IMPORTANT THINGS TO CHANGE ==================================================
+
+# Show IP in prompt
+# One thing to be weary about if you have slow Internets
+IP_ENABLED=1
+
+# virtual prompts
+VIRTUAL_PROMPT_ENABLED=1
+
+# COLORS ======================================================================
+ORANGE='\[\e[0;33m\]'
+
+DEFAULT_COLOR="${white}"
+
+USER_COLOR="${purple}"
+SUPERUSER_COLOR="${red}"
+MACHINE_COLOR=$ORANGE
+IP_COLOR=$ORANGE
+DIRECTORY_COLOR="${green}"
+
+VE_COLOR="${cyan}"
+RVM_COLOR="${cyan}"
+
+REF_COLOR="${purple}"
+
+# SCM prompts
+SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗${normal}"
+SCM_THEME_PROMPT_CLEAN=" ${bold_green}✓${normal}"
+SCM_THEME_PROMPT_PREFIX=' on '
+SCM_THEME_PROMPT_SUFFIX=''
+
+# rvm prompts
+RVM_THEME_PROMPT_PREFIX=''
+RVM_THEME_PROMPT_SUFFIX=''
+
+# virtualenv prompts
+VIRTUALENV_THEME_PROMPT_PREFIX=''
+VIRTUALENV_THEME_PROMPT_SUFFIX=''
+
+VIRTUAL_THEME_PROMPT_PREFIX=' using '
+VIRTUAL_THEME_PROMPT_SUFFIX=''
+
+# Max length of PWD to display
+MAX_PWD_LENGTH=20
+
+# Max length of Git Hex to display
+MAX_GIT_HEX_LENGTH=5
+
+# IP address
+IP_SEPARATOR=', '
+
+# FUNCS =======================================================================
+
+function ip {
+    myip=$(curl -s checkip.dyndns.org | grep -Eo '[0-9\.]+')
+    echo -e "$(ips | sed -e :a -e '$!N;s/\n/${IP_SEPARATOR}/;ta' | sed -e 's/127\.0\.0\.1\${IP_SEPARATOR}//g'), ${myip}"
+}
+
+# Displays ip prompt 
+function ip_prompt_info() {
+    if [[ $IP_ENABLED == 1 ]]; then
+        echo -e " ${DEFAULT_COLOR}(${IP_COLOR}$(ip)${DEFAULT_COLOR})"
+    fi 
+}
+
+# Displays virtual info prompt (virtualenv/rvm)
+function virtual_prompt_info() {
+    local virtual_env_info=$(virtualenv_prompt)
+    local rvm_info=$(rvm_version_prompt)
+    local virtual_prompt=""
+
+    local prefix=${VIRTUAL_THEME_PROMPT_PREFIX}
+    local suffix=${VIRTUAL_THEME_PROMPT_SUFFIX}
+
+    # If no virtual info, just return
+    [[ -z "$virtual_env_info" && -z "$rvm_info" ]] && return
+
+    # If virtual_env info present, append to prompt
+    [[ -n "$virtual_env_info" ]] && virtual_prompt="virtualenv: ${VE_COLOR}$virtual_env_info${DEFAULT_COLOR}"
+
+    if [[ -n "$rvm_info" ]]
+    then
+        [[ -n "$virtual_env_info" ]] && virtual_prompt="$virtual_prompt, "
+        virtual_prompt="${virtual_prompt}rvm: ${RVM_COLOR}$rvm_info${DEFAULT_COLOR}"
+    fi
+    echo -e "$prefix$virtual_prompt$suffix"
+}
+
+# Parse git info
+function git_prompt_info() {
+    if [[ -n $(git status -s 2> /dev/null |grep -v ^# |grep -v "working directory clean") ]]; then
+        state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+    else
+        state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+    fi
+    prefix=${GIT_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
+    suffix=${GIT_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
+    ref=$(git symbolic-ref HEAD 2> /dev/null) || return
+    commit_id=$(git rev-parse HEAD 2>/dev/null) || return
+
+    echo -e "$prefix${REF_COLOR}${ref#refs/heads/}${DEFAULT_COLOR}:${commit_id:0:$MAX_GIT_HEX_LENGTH}$state$suffix"
+}
+
+# Parse hg info
+function hg_prompt_info() {
+    if [[ -n $(hg status 2> /dev/null) ]]; then
+        state=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+    else
+        state=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+    fi
+    prefix=${HG_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
+    suffix=${HG_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
+    branch=$(hg summary 2> /dev/null | grep branch | awk '{print $2}')
+    changeset=$(hg summary 2> /dev/null | grep parent | awk '{print $2}')
+
+    echo -e "$prefix${REF_COLOR}${branch}${DEFAULT_COLOR}:${changeset#*:}$state$suffix"
+}
+
+# Parse svn info
+function svn_prompt_info() {
+    if [[ -n $(svn status --ignore-externals -q 2> /dev/null) ]]; then
+        state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+    else
+        state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+    fi
+    prefix=${SVN_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX}
+    suffix=${SVN_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX}
+    ref=$(svn info 2> /dev/null | awk -F/ '/^URL:/ { for (i=0; i<=NF; i++) { if ($i == "branches" || $i == "tags" ) { print $(i+1); break }; if ($i == "trunk") { print $i; break } } }') || return
+    [[ -z $ref ]] && return
+
+    revision=$(svn info 2> /dev/null | sed -ne 's#^Revision: ##p' )
+
+    echo -e "$prefix${REF_COLOR}$ref${DEFAULT_COLOR}:$revision$state$suffix"
+}
+
+# Displays last X characters of pwd 
+function limited_pwd() {
+
+    # Replace $HOME with ~ if possible 
+    RELATIVE_PWD=${PWD/#$HOME/\~}
+
+    local offset=$((${#RELATIVE_PWD}-$MAX_PWD_LENGTH))
+
+    if [ $offset -gt "0" ]
+    then
+        local truncated_symbol="..."
+        TRUNCATED_PWD=${RELATIVE_PWD:$offset:$MAX_PWD_LENGTH}
+        echo -e "${truncated_symbol}/${TRUNCATED_PWD#*/}"
+    else
+        echo -e "${RELATIVE_PWD}"
+    fi
+}
+
+# Displays the current prompt
+function prompt() {
+    local UC=$USER_COLOR
+    [ $UID -eq "0" ] && UC=$SUPERUSER_COLOR
+
+    if [[ $VIRTUAL_PROMPT_ENABLED == 1 ]]; then
+        PS1="$(scm_char) ${UC}\u ${DEFAULT_COLOR}at ${MACHINE_COLOR}\h$(ip_prompt_info) ${DEFAULT_COLOR}in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(virtual_prompt_info)$(scm_prompt_info)${reset_color} \$ "
+    else
+        PS1="$(scm_char) ${UC}\u ${DEFAULT_COLOR}at ${MACHINE_COLOR}\h$(ip_prompt_info) ${DEFAULT_COLOR}in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(scm_prompt_info)${reset_color} \$ "
+    fi
+    PS2='> '
+    PS4='+ '
+}
+
+PROMPT_COMMAND=prompt
diff --git a/themes/minimal/minimal.theme.bash b/themes/minimal/minimal.theme.bash
index 8de4a6c..76cb24d 100644
--- a/themes/minimal/minimal.theme.bash
+++ b/themes/minimal/minimal.theme.bash
@@ -1,7 +1,12 @@
-prompt_setter() {
-  PS1="${cyan}\W${normal} "
+#!/usr/bin/env bash
+
+SCM_THEME_PROMPT_PREFIX="${cyan}(${green}"
+SCM_THEME_PROMPT_SUFFIX="${cyan})"
+SCM_THEME_PROMPT_DIRTY=" ${red}✗"
+SCM_THEME_PROMPT_CLEAN=" ${green}✓"
+
+prompt() {
+  PS1="$(scm_prompt_info)${reset_color} ${cyan}\W${reset_color} "
 }
 
-PROMPT_COMMAND=prompt_setter
-
-export PS3=">> "
+PROMPT_COMMAND=prompt
diff --git a/themes/modern-t/modern-t.theme.bash b/themes/modern-t/modern-t.theme.bash
index 55da6e1..12e5b04 100644
--- a/themes/modern-t/modern-t.theme.bash
+++ b/themes/modern-t/modern-t.theme.bash
@@ -1,11 +1,11 @@
 SCM_THEME_PROMPT_PREFIX=""
 SCM_THEME_PROMPT_SUFFIX=""
 
-SCM_THEME_PROMPT_DIRTY=' ${bold_red}✗${normal}'
-SCM_THEME_PROMPT_CLEAN=' ${bold_green}✓${normal}'
-SCM_GIT_CHAR='${bold_green}±${normal}'
-SCM_SVN_CHAR='${bold_cyan}⑆${normal}'
-SCM_HG_CHAR='${bold_red}☿${normal}'
+SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗${normal}"
+SCM_THEME_PROMPT_CLEAN=" ${bold_green}✓${normal}"
+SCM_GIT_CHAR="${bold_green}±${normal}"
+SCM_SVN_CHAR="${bold_cyan}⑆${normal}"
+SCM_HG_CHAR="${bold_red}☿${normal}"
 
 case $TERM in
 	xterm*)
diff --git a/themes/modern/modern.theme.bash b/themes/modern/modern.theme.bash
index 3efe9ff..32c7cab 100644
--- a/themes/modern/modern.theme.bash
+++ b/themes/modern/modern.theme.bash
@@ -1,11 +1,11 @@
 SCM_THEME_PROMPT_PREFIX=""
 SCM_THEME_PROMPT_SUFFIX=""
 
-SCM_THEME_PROMPT_DIRTY=' ${bold_red}✗${normal}'
-SCM_THEME_PROMPT_CLEAN=' ${bold_green}✓${normal}'
-SCM_GIT_CHAR='${bold_green}±${normal}'
-SCM_SVN_CHAR='${bold_cyan}⑆${normal}'
-SCM_HG_CHAR='${bold_red}☿${normal}'
+SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗${normal}"
+SCM_THEME_PROMPT_CLEAN=" ${bold_green}✓${normal}"
+SCM_GIT_CHAR="${bold_green}±${normal}"
+SCM_SVN_CHAR="${bold_cyan}⑆${normal}"
+SCM_HG_CHAR="${bold_red}☿${normal}"
 
 case $TERM in
 	xterm*)
diff --git a/themes/n0qorg/n0qorg.theme.bash b/themes/n0qorg/n0qorg.theme.bash
index fcaca43..2b9def6 100644
--- a/themes/n0qorg/n0qorg.theme.bash
+++ b/themes/n0qorg/n0qorg.theme.bash
@@ -5,7 +5,11 @@
 # host directory (branch*)»
 # for example:
 # ananas ~/Code/bash-it/themes (master*)»
-PROMPT="${bold_blue}\[\$(hostname)\]${normal} \w${normal} ${bold_white}\[\$(git_prompt_info)\]${normal}» "
+function prompt_command() {
+    PS1="${bold_blue}[$(hostname)]${normal} \w${normal} ${bold_white}[$(git_prompt_info)]${normal}» "
+}
+
+PROMPT_COMMAND=prompt_command;
 
 ## git-theme
 # feel free to change git chars.
diff --git a/themes/pete/pete.theme.bash b/themes/pete/pete.theme.bash
index 95f243a..7b6702c 100644
--- a/themes/pete/pete.theme.bash
+++ b/themes/pete/pete.theme.bash
@@ -5,7 +5,7 @@
   history -a
   history -c
   history -r
-  PS1="(\t) $(scm_char) [\[$blue\]\u\[$reset_color\]@\[$green\]\H\[$reset_color\]] \[$yellow\]\w\[$reset_color\]$(scm_prompt_info)$(rvm_version_prompt) $\[$reset_color\] "
+  PS1="(\t) $(scm_char) [$blue\u$reset_color@$green\H$reset_color] $yellow\w${reset_color}$(scm_prompt_info)$(rvm_version_prompt) $reset_color "
   PS2='> '
   PS4='+ '
 }
diff --git a/themes/rainbowbrite/rainbowbrite.theme.bash b/themes/rainbowbrite/rainbowbrite.theme.bash
new file mode 100644
index 0000000..e4424bb
--- /dev/null
+++ b/themes/rainbowbrite/rainbowbrite.theme.bash
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# based off of n0qorg
+# looks like, if you're in a git repo:
+# ± ~/path/to (branch ✓) $
+# in glorious red / blue / yellow color scheme
+
+prompt_setter() {
+  # Save history
+  history -a
+  history -c
+  history -r
+  # displays user@server in purple
+  # PS1="$red$(scm_char) $purple\u@\h$reset_color:$blue\w$yellow$(scm_prompt_info)$(rvm_version_prompt) $black\$$reset_color "
+  # no user@server
+  PS1="$red$(scm_char) $blue\w$yellow$(scm_prompt_info)$(rvm_version_prompt) $black\$$reset_color "
+  PS2='> '
+  PS4='+ '
+}
+
+PROMPT_COMMAND=prompt_setter
+
+SCM_NONE_CHAR='·'
+SCM_THEME_PROMPT_DIRTY=" ${red}✗"
+SCM_THEME_PROMPT_CLEAN=" ${green}✓"
+SCM_THEME_PROMPT_PREFIX=" ("
+SCM_THEME_PROMPT_SUFFIX="${yellow})"
+RVM_THEME_PROMPT_PREFIX=" ("
+RVM_THEME_PROMPT_SUFFIX=")"
diff --git a/themes/sirup/sirup.theme.bash b/themes/sirup/sirup.theme.bash
index 5066587..146cc35 100644
--- a/themes/sirup/sirup.theme.bash
+++ b/themes/sirup/sirup.theme.bash
@@ -13,6 +13,10 @@
 
   [ "$full" != "" ] && echo "$full"
 }
+ 
+function prompt_command() {
+    # Check http://github.com/Sirupsen/dotfiles for screenshot
+    PS1="$blue\W/$bold_blue$(rvm_version_prompt)$bold_green$(__git_ps1 " (%s)") ${normal}$ "
+}
 
-# Check http://github.com/Sirupsen/dotfiles for screenshot
-PS1='\[$blue\]\W/\[$bold_blue\]$(rvm_version_prompt)\[$bold_green\]$(__git_ps1 " (%s)") \[${normal}\]$ '
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/standard/standard.theme.bash b/themes/standard/standard.theme.bash
index 5ba288c..87402c7 100644
--- a/themes/standard/standard.theme.bash
+++ b/themes/standard/standard.theme.bash
@@ -1,7 +1,3 @@
-PROMPT='\[${green}\]\u\[${normal}\]@\[${green}\]\h\[${normal}\]:\[${blue}\]\w\[${normal}\]\[${red}\]$(prompt_char)$(git_prompt_info)\[${normal}\]\$ '
-
-
-
 # scm themeing
 SCM_THEME_PROMPT_DIRTY="×"
 SCM_THEME_PROMPT_CLEAN="✓"
@@ -19,4 +15,10 @@
 	*)
 	TITLEBAR=""
 	;;
-esac
\ No newline at end of file
+esac
+
+function prompt_command() {
+    PROMPT='${green}\u${normal}@${green}\h${normal}:${blue}\w${normal}${red}$(prompt_char)$(git_prompt_info)${normal}\$ '
+}
+
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/tylenol/tylenol.theme.bash b/themes/tylenol/tylenol.theme.bash
new file mode 100644
index 0000000..c915f56
--- /dev/null
+++ b/themes/tylenol/tylenol.theme.bash
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# Based on 'bobby' theme with the addition of virtualenv_prompt
+#
+
+SCM_THEME_PROMPT_DIRTY=" ${red}✗"
+SCM_THEME_PROMPT_CLEAN=" ${green}✓"
+SCM_THEME_PROMPT_PREFIX=" ${yellow}|${reset_color}"
+SCM_THEME_PROMPT_SUFFIX="${yellow}|"
+
+RVM_THEME_PROMPT_PREFIX="|"
+RVM_THEME_PROMPT_SUFFIX="|"
+VIRTUALENV_THEME_PROMPT_PREFIX='|'
+VIRTUALENV_THEME_PROMPT_SUFFIX='|'
+
+function prompt_command() {
+    PS1="\n${green}$(virtualenv_prompt)${red}$(rvm_version_prompt) ${reset_color}\h ${orange}in ${reset_color}\w\n${yellow}$(scm_char)$(scm_prompt_info) ${yellow}→${white} "
+}
+
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/zitron/zitron.theme.bash b/themes/zitron/zitron.theme.bash
index c072686..3ec4d97 100644
--- a/themes/zitron/zitron.theme.bash
+++ b/themes/zitron/zitron.theme.bash
@@ -1,12 +1,6 @@
 #!/bin/bash
 # zitron theme by Florian Baumann <flo@noqqe.de>
 
-## look-a-like
-# user:host:pwd git-branch(*)$
-# for example:
-# noqqe:deathstar:themes master*$
-PROMPT="${no_color}\u:\[\$(hostname)\]${normal}:${bold_yellow}\W/${normal} \[\$(git_prompt_info)\]${reset_color}$ "
-
 ## git-theme
 # feel free to change git chars.
 GIT_THEME_PROMPT_DIRTY="${bold_yellow}*${normal}"
@@ -18,3 +12,13 @@
 # thanks a lot to http://geoff.greer.fm/lscolors/
 export LSCOLORS="Gxfxcxdxbxegedabagacad"
 export LS_COLORS="no=00:fi=00:di=01;33:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;34:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:"
+
+function prompt_command() {
+    ## look-a-like
+    # user:host:pwd git-branch(*)$
+    # for example:
+    # noqqe:deathstar:themes master*$
+    PS1="${no_color}\u:$(hostname)${normal}:${bold_yellow}\W/${normal} $(git_prompt_info)${reset_color}$ "
+}
+
+PROMPT_COMMAND=prompt_command;
diff --git a/themes/zork/zork.theme.bash b/themes/zork/zork.theme.bash
index 54615d7..f541c0d 100644
--- a/themes/zork/zork.theme.bash
+++ b/themes/zork/zork.theme.bash
@@ -1,11 +1,11 @@
 SCM_THEME_PROMPT_PREFIX=""
 SCM_THEME_PROMPT_SUFFIX=""
 
-SCM_THEME_PROMPT_DIRTY=' ${bold_red}✗${normal}'
-SCM_THEME_PROMPT_CLEAN=' ${bold_green}✓${normal}'
-SCM_GIT_CHAR='${bold_green}±${normal}'
-SCM_SVN_CHAR='${bold_cyan}⑆${normal}'
-SCM_HG_CHAR='${bold_red}☿${normal}'
+SCM_THEME_PROMPT_DIRTY=" ${bold_red}✗${normal}"
+SCM_THEME_PROMPT_CLEAN=" ${bold_green}✓${normal}"
+SCM_GIT_CHAR="${bold_green}±${normal}"
+SCM_SVN_CHAR="${bold_cyan}⑆${normal}"
+SCM_HG_CHAR="${bold_red}☿${normal}"
 
 #Mysql Prompt
 export MYSQL_PS1="(\u@\h) [\d]> "
