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 a030069..fd7b546 100644
--- a/bash_it.sh
+++ b/bash_it.sh
@@ -22,8 +22,7 @@
 do
   if [ ! -d "${BASH}/${file_type}/enabled" ]
   then
-    mkdir "${BASH}/${file_type}/enabled"
-    ln -s ${BASH}/${file_type}/available/* "${BASH}/${file_type}/enabled"
+    continue 
   fi
   FILES="${BASH}/${file_type}/enabled/*.bash"
   for config_file in $FILES
@@ -56,6 +55,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/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/install.sh b/install.sh
new file mode 100755
index 0000000..f84c097
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,88 @@
+#!/usr/bin/env bash
+BASH="$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/$file_type/enabled" ] && mkdir "$BASH/${file_type}/enabled"
+  ln -s $BASH/${file_type}/available/* "${BASH}/${file_type}/enabled"
+}
+
+function load_some() {
+    file_type=$1
+    for file in `ls $BASH/${file_type}/available`
+    do
+      if [ ! -d "$BASH/$file_type/enabled" ]
+      then
+        mkdir "$BASH/$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/$file_type/available/$file" "$BASH/$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/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/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..95f481e 100644
--- a/template/bash_profile.template.bash
+++ b/template/bash_profile.template.bash
@@ -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.
 
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/doubletime/doubletime.theme.bash b/themes/doubletime/doubletime.theme.bash
index 1237f80..c3bf453 100644
--- a/themes/doubletime/doubletime.theme.bash
+++ b/themes/doubletime/doubletime.theme.bash
@@ -6,8 +6,20 @@
 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,18 +29,12 @@
 
 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)"
-  fi
-}
-
-virtualenv_prompt() {
-  if [ ! -z "$VIRTUAL_ENV" ]
-  then
-    echo "(`basename $VIRTUAL_ENV`) "
+  else
+    echo "[$(scm_prompt_info)]"
   fi
 }
 
@@ -44,7 +50,7 @@
       clock=$THEME_PROMPT_CLOCK_FORMAT
   fi
   PS1="
-$clock $(scm_char) [$THEME_PROMPT_HOST_COLOR\u@${THEME_PROMPT_HOST}$reset_color] $(virtualenv_prompt)\w
+$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
index 21c0b41..93cef46 100644
--- a/themes/hawaii50/hawaii50.theme.bash
+++ b/themes/hawaii50/hawaii50.theme.bash
@@ -30,6 +30,15 @@
 # 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\]'
 
@@ -60,9 +69,6 @@
 VIRTUALENV_THEME_PROMPT_PREFIX=''
 VIRTUALENV_THEME_PROMPT_SUFFIX=''
 
-# virtual prompts
-VIRTUAL_PROMPT_ENABLED=1
-
 VIRTUAL_THEME_PROMPT_PREFIX=' using '
 VIRTUAL_THEME_PROMPT_SUFFIX=''
 
@@ -82,6 +88,13 @@
     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)
@@ -176,9 +189,9 @@
     [ $UID -eq "0" ] && UC=$SUPERUSER_COLOR
 
     if [[ $VIRTUAL_PROMPT_ENABLED == 1 ]]; then
-        PS1="$(scm_char) ${UC}\u ${DEFAULT_COLOR}at ${MACHINE_COLOR}\h ${DEFAULT_COLOR}(${IP_COLOR}$(ip)${DEFAULT_COLOR}) in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(virtual_prompt_info)$(scm_prompt_info)${reset_color} \$ "
+        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 ${DEFAULT_COLOR}(${IP_COLOR}$(ip)${DEFAULT_COLOR}) in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(scm_prompt_info)${reset_color} \$ "
+        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='+ '
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/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;
