diff --git a/bash_it.sh b/bash_it.sh
index bfa6664..ee6957b 100644
--- a/bash_it.sh
+++ b/bash_it.sh
@@ -4,29 +4,17 @@
 # Reload Library
 alias reload='source ~/.bash_profile'
 
-# Load the framework
-
-# Load colors first so they can be use in base theme
-source "${BASH}/themes/colors.theme.bash"
-source "${BASH}/themes/base.theme.bash"
-
-# Library
-LIB="${BASH}/lib/*.bash"
-for config_file in $LIB
-do
-  if [ -e "${config_file}" ]; then
-    source $config_file
-  fi
-done
+# Only set $BASH_IT if it's not already set
+[ -z "$BASH_IT" ] && export BASH_IT=$HOME/.bash_it
 
 # Load enabled aliases, completion, plugins
 for file_type in "aliases" "completion" "plugins"
 do
-  if [ ! -d "${BASH}/${file_type}/enabled" ]
+  if [ ! -d "${BASH_IT}/${file_type}/enabled" ]
   then
-    continue 
+    continue
   fi
-  FILES="${BASH}/${file_type}/enabled/*.bash"
+  FILES="${BASH_IT}/${file_type}/enabled/*.bash"
   for config_file in $FILES
   do
     if [ -e "${config_file}" ]; then
@@ -36,13 +24,13 @@
 done
 
 # Load any custom aliases that the user has added
-if [ -e "${BASH}/aliases/custom.aliases.bash" ]
+if [ -e "${BASH_IT}/aliases/custom.aliases.bash" ]
 then
-  source "${BASH}/aliases/custom.aliases.bash"
+  source "${BASH_IT}/aliases/custom.aliases.bash"
 fi
 
 # Custom
-CUSTOM="${BASH}/custom/*.bash"
+CUSTOM="${BASH_IT}/custom/*.bash"
 for config_file in $CUSTOM
 do
   if [ -e "${config_file}" ]; then
@@ -50,6 +38,16 @@
   fi
 done
 
+# Load colors first so they can be use in base theme
+source "${BASH_IT}/themes/colors.theme.bash"
+source "${BASH_IT}/themes/base.theme.bash"
+
+# library
+LIB="${BASH_IT}/lib/*.bash"
+for config_file in $LIB
+do
+  source $config_file
+done
 
 unset config_file
 if [[ $PROMPT ]]; then
diff --git a/install.sh b/install.sh
index f84c097..a80a749 100755
--- a/install.sh
+++ b/install.sh
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
-BASH="$HOME/.bash_it"
+BASH_IT="$HOME/.bash_it"
 
 cp $HOME/.bash_profile $HOME/.bash_profile.bak
 
@@ -30,24 +30,24 @@
 
 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"
+  [ ! -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/${file_type}/available`
+    for file in `ls $BASH_IT/${file_type}/available`
     do
-      if [ ! -d "$BASH/$file_type/enabled" ]
+      if [ ! -d "$BASH_IT/$file_type/enabled" ]
       then
-        mkdir "$BASH/$file_type/enabled"
+        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/$file_type/available/$file" "$BASH/$file_type/enabled"
+          ln -s "$BASH_IT/$file_type/available/$file" "$BASH_IT/$file_type/enabled"
           break
           ;;
         [nN])
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/template/bash_profile.template.bash b/template/bash_profile.template.bash
index 95f481e..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'
@@ -40,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/themes/base.theme.bash b/themes/base.theme.bash
index feee64e..05db36e 100644
--- a/themes/base.theme.bash
+++ b/themes/base.theme.bash
@@ -6,15 +6,16 @@
 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=' |'
@@ -24,76 +25,85 @@
 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 [[ -n "$(hg root 2> /dev/null)" ]]; 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
-
-  [[ -z $ref ]] && return
-  echo -e "$prefix$ref$state$suffix"
+  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' )
 }
 
-function hg_prompt_info() {
+function hg_prompt_vars {
     if [[ -n $(hg status 2> /dev/null) ]]; then
-        state=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
+      SCM_DIRTY=1
+        SCM_STATE=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
     else
-        state=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+      SCM_DIRTY=0
+        SCM_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$branch:${changeset#*:}$state$suffix"
+    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 {
@@ -109,3 +119,28 @@
     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
+}
