diff --git a/README.markdown b/README.markdown
index f93f8f7..3ed58d8 100644
--- a/README.markdown
+++ b/README.markdown
@@ -6,7 +6,7 @@
 
 ### Install script
 
-To install you could use the [install script](https://github.com/creationix/nvm/blob/v0.3.0/install.sh) (requires Git) using cURL:
+To install you could use the [install script](https://github.com/creationix/nvm/blob/v0.3.0/install.sh) using cURL:
 
     curl https://raw.github.com/creationix/nvm/v0.3.0/install.sh | sh
 
@@ -14,8 +14,11 @@
 
     wget -qO- https://raw.github.com/creationix/nvm/v0.3.0/install.sh | sh
 
-<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile` or `~/.profile`).</sub>
+<sub>The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`).</sub>
 
+You can customize the install source, directory and profile using the `NVM_SOURCE`, `NVM_DIR` and `NVM_PROFILE` variables. Eg: `curl ... | NVM_DIR=/usr/local/nvm sh` for a global install.
+
+<sub>*NB. The installer can use Git, cURL or Wget to download NVM, whatever is available.*</sub>
 
 ### Manual install
 
diff --git a/install-gitless.sh b/install-gitless.sh
deleted file mode 100755
index d4b96b4..0000000
--- a/install-gitless.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/bash
-
-fatalExit (){
-  echo "$@" && exit 1;
-}
-
-# an alternative URL that could be used: https://github.com/creationix/nvm/tarball/master
-if [ "$NVM_SOURCE" = "" ]; then
-  NVM_SOURCE="https://raw.github.com/creationix/nvm/master/nvm.sh"
-fi
-
-if [ "$NVM_DIR" = "" ]; then
-  NVM_DIR="$HOME/.nvm"
-fi
-
-# Downloading to $NVM_DIR
-mkdir -p "$NVM_DIR"
-pushd "$NVM_DIR" > /dev/null
-echo -ne "=> Downloading... "
-
-# Detect if curl or wget is installed to download NVM_SOURCE
-if type curl > /dev/null 2>&1; then
-  curl --silent "$NVM_SOURCE" -o nvm.sh || fatalExit "Failed";
-elif type wget > /dev/null 2>&1; then 
-  wget --quiet "$NVM_SOURCE" -O nvm.sh || fatalExit "Failed";
-else
-  fatalExit "Must have curl or wget to install nvm";
-fi
-
-echo "Downloaded"
-popd > /dev/null
-
-# Detect profile file, .bash_profile has precedence over .profile
-if [ ! -z "$1" ]; then
-  PROFILE="$1"
-else
-  if [ -f "$HOME/.bash_profile" ]; then
-    PROFILE="$HOME/.bash_profile"
-  elif [ -f "$HOME/.profile" ]; then
-    PROFILE="$HOME/.profile"
-  fi
-fi
-
-SOURCE_STR="[[ -s "$NVM_DIR/nvm.sh" ]] && . "$NVM_DIR/nvm.sh"  # This loads NVM"
-
-if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then
-  if [ -z $PROFILE ]; then
-    echo "=> Profile not found"
-  else
-    echo "=> Profile $PROFILE not found"
-  fi
-  echo "=> Append the following line to the correct file yourself"
-  echo
-  echo "\t$SOURCE_STR"
-  echo
-  echo "=> Close and reopen your terminal to start using NVM"
-  exit
-fi
-
-if ! grep -qc 'nvm.sh' $PROFILE; then
-  echo "=> Appending source string to $PROFILE"
-  echo "" >> "$PROFILE"
-  echo $SOURCE_STR >> "$PROFILE"
-else
-  echo "=> Source string already in $PROFILE"
-fi
-
-echo "=> Close and reopen your terminal to start using NVM"
-
diff --git a/install.sh b/install.sh
index e76fcd5..17b97bb 100755
--- a/install.sh
+++ b/install.sh
@@ -1,66 +1,130 @@
 #!/bin/bash
 
-NVM_DIR="$HOME/.nvm"
+set -e
 
-if ! hash git 2>/dev/null; then
-  echo >&2 "You need to install git - visit http://git-scm.com/downloads"
-  echo >&2 "or, use install-gitless.sh instead."
-  exit 1
+has() {
+  type "$1" > /dev/null 2>&1
+  return $?
+}
+
+if [ -z "$NVM_DIR" ]; then
+  NVM_DIR="$HOME/.nvm"
 fi
 
-if [ -d "$NVM_DIR" ]; then
-  echo "=> NVM is already installed in $NVM_DIR, trying to update"
-  echo -ne "\r=> "
-  cd $NVM_DIR && git pull
+if ! has "curl"; then
+  if has "wget"; then
+    # Emulate curl with wget
+    curl() {
+      ARGS="$* "
+      ARGS=${ARGS/-s /-q }
+      ARGS=${ARGS/-o /-O }
+      wget $ARGS
+    }
+  fi
+fi
+
+install_from_git() {
+  if [ -z "$NVM_SOURCE" ]; then
+    NVM_SOURCE="https://github.com/creationix/nvm.git"
+  fi
+
+  if [ -d "$NVM_DIR/.git" ]; then
+    echo "=> nvm is already installed in $NVM_DIR, trying to update"
+    echo -e "\r=> \c"
+    cd "$NVM_DIR" && git pull 2> /dev/null || {
+      echo >&2 "Failed to update nvm, run 'git pull' in $NVM_DIR yourself.."
+    }
+  else
+    # Cloning to $NVM_DIR
+    echo "=> Downloading nvm from git to '$NVM_DIR'"
+    echo -e "\r=> \c"
+    mkdir -p "$NVM_DIR"
+    git clone "$NVM_SOURCE" "$NVM_DIR"
+  fi
+}
+
+install_as_script() {
+  if [ -z "$NVM_SOURCE" ]; then
+    NVM_SOURCE="https://raw.github.com/creationix/nvm/master/nvm.sh"
+  fi
+
+  # Downloading to $NVM_DIR
+  mkdir -p "$NVM_DIR"
+  if [ -d "$NVM_DIR/nvm.sh" ]; then
+    echo "=> nvm is already installed in $NVM_DIR, trying to update"
+  else
+    echo "=> Downloading nvm as script to '$NVM_DIR'"
+  fi
+  curl -s "$NVM_SOURCE" -o "$NVM_DIR/nvm.sh" || {
+    echo >&2 "Failed to download '$NVM_SOURCE'.."
+    return 1
+  }
+}
+
+if [ -z "$METHOD" ]; then
+  # Autodetect install method
+  if has "git"; then
+    install_from_git
+  elif has "curl"; then
+    install_as_script
+  else
+    echo >&2 "You need git, curl or wget to install nvm"
+    exit 1
+  fi
 else
-  # Cloning to $NVM_DIR
-  git clone https://github.com/creationix/nvm.git $NVM_DIR  
+  if [ "$METHOD" = "git" ]; then
+    if ! has "git"; then
+      echo >&2 "You need git to install nvm"
+      exit 1
+    fi
+    install_from_git
+  fi
+  if [ "$METHOD" = "script" ]; then
+    if ! has "curl"; then
+      echo >&2 "You need curl or wget to install nvm"
+      exit 1
+    fi
+    install_as_script
+  fi
 fi
 
 echo
 
-# Detect profile file, .bash_profile has precedence over .profile
-if [ ! -z "$1" ]; then
-  PROFILE="$1"
-else
+# Detect profile file if not specified as environment variable (eg: PROFILE=~/.myprofile).
+if [ -z "$PROFILE" ]; then
   if [ -f "$HOME/.bash_profile" ]; then
-	PROFILE="$HOME/.bash_profile"
+    PROFILE="$HOME/.bash_profile"
   elif [ -f "$HOME/.zshrc" ]; then
-  	PROFILE="$HOME/.zshrc"
+    PROFILE="$HOME/.zshrc"
   elif [ -f "$HOME/.profile" ]; then
-	PROFILE="$HOME/.profile"
+    PROFILE="$HOME/.profile"
   fi
 fi
 
-SOURCE_STR="[[ -s \$HOME/.nvm/nvm.sh ]] && . \$HOME/.nvm/nvm.sh  # This loads NVM"
+SOURCE_STR="[ -s \"$NVM_DIR/nvm.sh\" ] && . \"$NVM_DIR/nvm.sh\"  # This loads nvm"
 
 if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then
   if [ -z $PROFILE ]; then
-	echo "=> Profile not found. Tried $HOME/.bash_profile and $HOME/.profile"
+    echo "=> Profile not found. Tried ~/.bash_profile ~/.zshrc and ~/.profile."
+    echo "=> Create one of them and run this script again"
   else
-	echo "=> Profile $PROFILE not found"
+    echo "=> Profile $PROFILE not found"
+    echo "=> Create it (touch $PROFILE) and run this script again"
   fi
-  echo "=> Run this script again after running the following:"
+  echo "   OR"
+  echo "=> Append the following line to the correct file yourself:"
   echo
-  echo "\ttouch $HOME/.profile"
+  echo "   $SOURCE_STR"
   echo
-  echo "-- OR --"
-  echo
-  echo "=> Append the following line to the correct file yourself"
-  echo
-  echo "\t$SOURCE_STR"
-  echo
-  echo "=> Close and reopen your terminal afterwards to start using NVM"
-  exit
-fi
-
-if ! grep -qc 'nvm.sh' $PROFILE; then
-  echo "=> Appending source string to $PROFILE"
-  echo "" >> "$PROFILE"
-  echo $SOURCE_STR >> "$PROFILE"
 else
-  echo "=> Source string already in $PROFILE"
+  if ! grep -qc 'nvm.sh' $PROFILE; then
+    echo "=> Appending source string to $PROFILE"
+    echo "" >> "$PROFILE"
+    echo $SOURCE_STR >> "$PROFILE"
+  else
+    echo "=> Source string already in $PROFILE"
+  fi
 fi
 
-echo "=> Close and reopen your terminal to start using NVM"
+echo "=> Close and reopen your terminal to start using nvm"
 
