diff --git a/themes/hawaii50/hawaii50.theme.bash b/themes/hawaii50/hawaii50.theme.bash
index 946b808..6202eb4 100644
--- a/themes/hawaii50/hawaii50.theme.bash
+++ b/themes/hawaii50/hawaii50.theme.bash
@@ -53,12 +53,20 @@
 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 prompts
+VIRTUAL_PROMPT_ENABLED=1
+
+VIRTUAL_THEME_PROMPT_PREFIX=' using '
+VIRTUAL_THEME_PROMPT_SUFFIX=''
+
 # Max length of PWD to display
 MAX_PWD_LENGTH=20
 
@@ -69,72 +77,76 @@
 
 # TODO: Should check with `uname` and use ip addr 
 function ip {
-    echo $(ifconfig en1 | grep "inet " | awk '{ print $2 }')
+    echo -e $(ifconfig en1 | grep "inet " | awk '{ print $2 }')
 }
 
-# Displays using ...
-function virtual_info() {
+# 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
-    [ "$virtual_env_info" == "" -a "$rvm_info" == "" ] && return
-
-    local prompt=" using"
+    [[ -z "$virtual_env_info" && -z "$rvm_info" ]] && return
 
     # If virtual_env info present, append to prompt
-    [ "$virtual_env_info" != "" ] && prompt="$prompt virtualenv: ${VE_COLOR}$virtual_env_info${DEFAULT_COLOR}"
+    [[ -n "$virtual_env_info" ]] && virtual_prompt="virtualenv: ${VE_COLOR}$virtual_env_info${DEFAULT_COLOR}"
 
-    if [ "$rvm_info" != "" ]
+    if [[ -n "$rvm_info" ]]
     then
-        [ "$virtual_env_info" != "" ] && prompt="$prompt,"
-        prompt="$prompt rvm: ${RVM_COLOR}$rvm_info${DEFAULT_COLOR}"
+        [[ -n "$virtual_env_info" ]] && virtual_prompt="$virtual_prompt, "
+        virtual_prompt="${virtual_prompt}rvm: ${RVM_COLOR}$rvm_info${DEFAULT_COLOR}"
     fi
-    echo "$prompt"
+    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}
+        state=${GIT_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
     else
-      state=${GIT_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+        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
-    rawhex=$(git rev-parse HEAD 2>/dev/null) || return
+    commit_id=$(git rev-parse HEAD 2>/dev/null) || return
 
-    echo "$prefix${REF_COLOR}${ref#refs/heads/}${DEFAULT_COLOR}:${rawhex:0:$MAX_GIT_HEX_LENGTH}$state$suffix"
+    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}
+        state=${HG_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
     else
-      state=${HG_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+        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 "$prefix${REF_COLOR}${branch}${DEFAULT_COLOR}:${changeset#*:}$state$suffix"
+    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}
+        state=${SVN_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY}
     else
-      state=${SVN_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN}
+        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
-    revision=$(svn info 2> /dev/null | sed -ne 's#^Revision: ##p' )
     [[ -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"
 }
 
@@ -150,21 +162,24 @@
     then
         local truncated_symbol="..."
         TRUNCATED_PWD=${RELATIVE_PWD:$offset:$MAX_PWD_LENGTH}
-        echo "${truncated_symbol}/${TRUNCATED_PWD#*/}"
+        echo -e "${truncated_symbol}/${TRUNCATED_PWD#*/}"
     else
-        echo "${RELATIVE_PWD}"
+        echo -e "${RELATIVE_PWD}"
     fi
 }
 
 # Displays the current prompt
 function prompt() {
+    local UC=$USER_COLOR
+    [ $UID -eq "0" ] && UC=$SUPERUSER_COLOR
 
-  local UC=$USER_COLOR
-  [ $UID -eq "0" ] && UC=$SUPERUSER_COLOR
-    
-  PS1="$(scm_char) ${UC}\u ${DEFAULT_COLOR}at ${MACHINE_COLOR}\h ${DEFAULT_COLOR}(${IP_COLOR}$(ip)${DEFAULT_COLOR})${DEFAULT_COLOR} in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(virtual_info)$(scm_prompt_info) \$ "
-  PS2='> '
-  PS4='+ '
+    if [[ $VIRTUAL_PROMPT_ENABLED == 1 ]]; then
+        PS1="$(scm_char) ${UC}\u ${DEFAULT_COLOR}at ${MACHINE_COLOR}\h ${DEFAULT_COLOR}(${IP_COLOR}$(ip)${DEFAULT_COLOR})${DEFAULT_COLOR} in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(virtual_prompt_info)$(scm_prompt_info) \$ "
+    else
+        PS1="$(scm_char) ${UC}\u ${DEFAULT_COLOR}at ${MACHINE_COLOR}\h ${DEFAULT_COLOR}(${IP_COLOR}$(ip)${DEFAULT_COLOR})${DEFAULT_COLOR} in ${DIRECTORY_COLOR}$(limited_pwd)${DEFAULT_COLOR}$(scm_prompt_info) \$ "
+    fi
+    PS2='> '
+    PS4='+ '
 }
 
 PROMPT_COMMAND=prompt
