diff --git a/git-flow b/git-flow
new file mode 100755
index 0000000..7f065e1
--- /dev/null
+++ b/git-flow
@@ -0,0 +1,149 @@
+#!/bin/bash
+#
+# gitflow -- A collection of Git wrapper scripts to provide high-level
+# repository operations for Vincent Driessen's branching model:
+#
+# Original blog post presenting this model is found at:
+#    http://nvie.com/archives/323
+#
+# Feel free to contribute to this project at:
+#    http://github.com/nvie/gitflow
+#
+# Copyright (c) 2010 by Vincent Driessen
+# Copyright (c) 2010 by Benedikt Böhm
+#
+
+warn() { echo "$@" >&2; }
+die() { warn "$@"; exit 1; }
+has() { [[ " ${*:2} " == *" $1 "* ]]; }
+
+usage() {
+	echo "usage: git flow <cmd> <btype> <args>"
+	echo
+	echo "<btype> can be any of: feature, release, hotfix, support"
+	echo
+	echo "Try 'git flow help <btype>' for details."
+}
+
+main() {
+	if [ $# -lt 2 ]; then
+		usage
+		exit 1
+	fi
+
+	export GITFLOW_DIR=$(dirname "$0")
+
+	# sanity checks
+	ACTION="$1"
+	BTYPE="$2"
+	shift 2
+
+	if [ ! -e "$GITFLOW_DIR/git-flow-$BTYPE" ]; then
+		usage
+		exit 1
+	fi
+
+	if ! git rev-parse --git-dir &>/dev/null; then
+		die "Not a git repository"
+	fi
+
+	# get all available branches
+	LOCAL_BRANCHES=$(git branch | sed 's/^[* ] //')
+	REMOTE_BRANCHES=$(git branch -r | sed 's/^[* ] //')
+	ALL_BRANCHES="$LOCAL_BRANCHES $REMOTE_BRANCHES"
+
+	# run command
+	. "$GITFLOW_DIR/git-flow-$BTYPE"
+
+	if ! declare -f cmd_$ACTION >/dev/null; then
+		usage
+		exit 1
+	fi
+
+	# fail if a command failes
+	set -e
+
+	# run command
+	cmd_$ACTION "$@"
+}
+
+gitflow_check_clean_working_tree() {
+	if ! git diff --no-ext-diff --ignore-submodules --quiet --exit-code; then
+		die "Working tree contains unstaged changes. Aborting ..."
+	fi
+	if ! git diff-index --cached --quiet --ignore-submodules HEAD --; then
+		die "Index contains uncommited changes. Aborting ..."
+	fi
+}
+
+gitflow_require_local_branch() {
+	if ! has $1 $LOCAL_BRANCHES; then
+		die "Local branch '$1' does not exist and is required."
+	fi
+}
+
+gitflow_require_remote_branch() {
+	if ! has $1 $REMOTE_BRANCHES; then
+		die "Remote branch '$1' does not exist and is required."
+	fi
+}
+
+gitflow_require_branch() {
+	if ! has $1 $ALL_BRANCHES; then
+		die "Branch '$1' does not exist and is required."
+	fi
+}
+
+gitflow_require_branch_absent() {
+	if has $1 $ALL_BRANCHES; then
+		die "Branch '$1' already exists. Pick another name."
+	fi
+}
+
+#
+# gitflow_test_branches_equal()
+#
+# Tests whether branches and their "origin" counterparts have diverged and need
+# merging first. It returns error codes to provide more detail, like so:
+#
+# 0    Branch heads point to the same commit
+# 1    First given branch needs fast-forwarding
+# 2    Second given branch needs fast-forwarding
+# 3    Branch needs a real merge
+#
+gitflow_test_branches_equal() {
+	commit1=$(git rev-parse "$1")
+	commit2=$(git rev-parse "$2")
+	if [ "$commit1" != "$commit2" ]; then
+		base=$(git merge-base "$commit1" "$commit2")
+		if [ "$commit1" = "$base" ]; then
+			return 1
+		elif [ "$commit2" = "$base" ]; then
+			return 2
+		else
+			return 3
+		fi
+	else
+		return 0
+	fi
+}
+
+gitflow_require_branches_equal() {
+	gitflow_require_local_branch "$1"
+	gitflow_require_remote_branch "$2"
+	gitflow_test_branches_equal "$1" "$2"
+	status=$?
+	if [ $status -gt 0 ]; then
+		warn "Branches '$1' and '$2' have diverged."
+		if [ $status -eq 1 ]; then
+			die "And branch '$1' may be fast-forwarded."
+		elif [ $status -eq 2 ]; then
+			# Warn here, since there is no harm in being ahead
+			warn "And local branch '$1' is ahead of '$2'."
+		else
+			die "Branches need merging first."
+		fi
+	fi
+}
+
+main "$@"
diff --git a/git-flow-feature b/git-flow-feature
new file mode 100755
index 0000000..fc7a794
--- /dev/null
+++ b/git-flow-feature
@@ -0,0 +1,155 @@
+#
+# gitflow -- A collection of Git wrapper scripts to provide high-level
+# repository operations for Vincent Driessen's branching model:
+#
+# Original blog post presenting this model is found at:
+#    http://nvie.com/archives/323
+#
+# Feel free to contribute to this project at:
+#    http://github.com/nvie/gitflow
+#
+# Copyright (c) 2010 by Vincent Driessen
+# Copyright (c) 2010 by Benedikt Böhm
+#
+
+usage() {
+	echo "usage: git flow start feature <name> [<base>]"
+	echo "       git flow finish feature <name> [<base>]"
+	echo "       git flow publish feature <name>"
+	echo "       git flow track feature <name>"
+	# TODO
+	#echo ""
+	#echo "options:"
+	#echo "--option    Explanation"
+	#echo ""
+	#echo "start-only options:"
+	#echo "--option    Explanation"
+	#echo ""
+	#echo "finish-only options:"
+	#echo "--rebase    Rebases the feature branch on top of develop, instead of merging"
+	#echo "--squash    Squashes all commits of the feature branch into a single commit"
+	#echo "            on develop"
+	#echo "--push      Push to the origin repo when finished"
+}
+
+parse_args() {
+	NAME="$1"
+	BASE="${2:-develop}"
+	if [ "$NAME" = "" ]; then
+		echo "Missing argument <name>."
+		usage
+		exit 1
+	fi
+	BRANCH=feature/$NAME
+}
+
+cmd_help() {
+	usage
+	exit 0
+}
+
+cmd_start() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	gitflow_require_branch_absent $BRANCH
+	if [ "$BASE" = "develop" ]; then
+		git fetch origin develop
+		gitflow_require_branches_equal develop origin/develop
+	fi
+
+	# create branch
+	git checkout -b $BRANCH $BASE
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new branch '$BRANCH' was created, based on '$BASE'"
+	echo "- You are now on branch '$BRANCH'"
+	echo ""
+	echo "Now, start committing on your feature. When done, use:"
+	echo ""
+	echo "     git flow finish feature $NAME"
+	echo
+}
+
+cmd_finish() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	gitflow_require_branch $BRANCH
+	git fetch origin
+	if has origin/$BRANCH $REMOTE_BRANCHES; then
+		gitflow_require_branches_equal $BRANCH origin/$BRANCH
+	fi
+	if [ "$BASE" = "develop" ]; then
+		gitflow_require_branches_equal develop origin/develop
+	fi
+
+	# merge into BASE
+	git checkout $BASE
+	if [ "$(git rev-list -n2 $BASE..$BRANCH | wc -l)" = "1" ]; then
+		git merge --ff $BRANCH
+	else
+		git merge --no-ff $BRANCH
+	fi
+
+	# delete branch
+	# TODO: How do we handle merge conflicts here??
+	git push origin :refs/heads/$BRANCH
+	git branch -d $BRANCH
+
+	echo
+	echo "Summary of actions:"
+	echo "- The feature branch '$BRANCH' was merged into '$BASE'"
+	#echo "- Merge conflicts were resolved"		# TODO: Add this line when it's supported
+	echo "- Feature branch '$BRANCH' has been removed"
+	echo "- You are now on branch '$BASE'"
+	echo
+}
+
+cmd_publish() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	gitflow_require_branch $BRANCH
+	git fetch origin
+	gitflow_require_branch_absent origin/$BRANCH
+
+	# create remote branch
+	git push origin $BRANCH:refs/heads/$BRANCH
+	git fetch origin
+
+	# configure remote tracking
+	git config branch.$BRANCH.remote origin
+	git config branch.$BRANCH.merge refs/heads/$BRANCH
+	git checkout $BRANCH
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new remote branch '$BRANCH' was created"
+	echo "- The local branch '$BRANCH' was configured to track the remote branch"
+	echo "- You are now on branch '$BRANCH'"
+	echo
+}
+
+cmd_track() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	gitflow_require_branch_absent $BRANCH
+	git fetch origin
+	gitflow_require_branch origin/$BRANCH
+
+	# create tracking branch
+	git checkout -b $BRANCH origin/$BRANCH
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new remote tracking branch '$BRANCH' was created"
+	echo "- You are now on branch '$BRANCH'"
+	echo
+}
diff --git a/git-flow-hotfix b/git-flow-hotfix
new file mode 100755
index 0000000..cf4e008
--- /dev/null
+++ b/git-flow-hotfix
@@ -0,0 +1,110 @@
+#
+# gitflow -- A collection of Git wrapper scripts to provide high-level
+# repository operations for Vincent Driessen's branching model:
+#
+# Original blog post presenting this model is found at:
+#    http://nvie.com/archives/323
+#
+# Feel free to contribute to this project at:
+#    http://github.com/nvie/gitflow
+#
+# Copyright (c) 2010 by Vincent Driessen
+# Copyright (c) 2010 by Benedikt Böhm
+#
+
+usage() {
+	echo "usage: git flow start hotfix <version> [<base>]"
+	echo "       git flow finish hotfix <version> [<base>]"
+	# TODO
+	#echo ""
+	#echo "options:"
+	#echo "--option    Explanation"
+	#echo ""
+	#echo "start-only options:"
+	#echo "--option    Explanation"
+	#echo ""
+	#echo "finish-only options:"
+	#echo "--push      Push to the origin repo when finished"
+}
+
+parse_args() {
+	VERSION="$1"
+	BASE="${2:-master}"
+	if [ "$VERSION" = "" ]; then
+		echo "Missing argument <version>."
+		usage
+		exit 1
+	fi
+	BRANCH=hotfix/$VERSION
+}
+
+cmd_help() {
+	usage
+	exit 0
+}
+
+cmd_start() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	git fetch origin
+	gitflow_require_branches_equal master origin/master
+	gitflow_require_branch_absent $BRANCH
+
+	# create branch
+	git checkout -b $BRANCH $BASE
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new branch '$BRANCH' was created, based on '$BASE'"
+	echo "- You are now on branch '$BRANCH'"
+	echo
+	echo "Follow-up actions:"
+	echo "- Bump the version number now!"
+	echo "- Start committing your hot fixes"
+	echo "- When done, run:"
+	echo
+	echo "     git flow finish hotfix '$HOTFIX_BRANCH'"
+	echo
+}
+
+cmd_finish() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	git fetch origin master
+	git fetch origin develop
+	gitflow_require_branches_equal master origin/master
+	gitflow_require_branches_equal develop origin/develop
+
+	# merge into BASE
+	git checkout $BASE
+	git merge --no-ff $BRANCH
+	git tag v$VERSION
+
+	# merge into develop if we fixed a master issue
+	# TODO: merge into support branch
+	if [ "$BASE" = "master" ]; then
+		git checkout develop
+		git merge --no-ff $BRANCH
+	fi
+
+	# delete branch
+	git branch -d $BRANCH
+
+	# TODO: Implement an optional push to master
+	# git push origin develop; git push origin master; git push --tags origin
+
+	echo
+	echo "Summary of actions:"
+	echo "- Latest objects have been fetched from 'origin'"
+	echo "- Hotfix branch has been merged into '$BASE'"
+	echo "- The hotfix was tagged 'v$VERSION'"
+	if [ "$BASE" = "master" ]; then
+		echo "- Hotfix branch has been back-merged into 'develop'"
+	fi
+	echo "- Hotfix branch '$BRANCH' has been deleted"
+	echo
+}
diff --git a/git-flow-release b/git-flow-release
new file mode 100755
index 0000000..3f5683e
--- /dev/null
+++ b/git-flow-release
@@ -0,0 +1,104 @@
+#
+# gitflow -- A collection of Git wrapper scripts to provide high-level
+# repository operations for Vincent Driessen's branching model:
+#
+# Original blog post presenting this model is found at:
+#    http://nvie.com/archives/323
+#
+# Feel free to contribute to this project at:
+#    http://github.com/nvie/gitflow
+#
+# Copyright (c) 2010 by Vincent Driessen
+# Copyright (c) 2010 by Benedikt Böhm
+#
+
+usage() {
+	echo "usage: git flow start release <version>"
+	echo "       git flow finish release <version>"
+	# TODO
+	#echo ""
+	#echo "options:"
+	#echo "--option    Explanation"
+	#echo ""
+	#echo "start-only options:"
+	#echo "--bump <script>"
+	#echo "            Run the given script to auto-update the version number"
+	#echo ""
+	#echo "finish-only options:"
+	#echo "--push      Push to the origin repo when finished"
+}
+
+parse_args() {
+	VERSION="$1"
+	if [ "$VERSION" = "" ]; then
+		echo "Missing argument <version>."
+		usage
+		exit 1
+	fi
+	BRANCH=release/$VERSION
+}
+
+cmd_help() {
+	usage
+	exit 0
+}
+
+cmd_start() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	git fetch origin
+	gitflow_require_branches_equal develop origin/develop
+	gitflow_require_branch_absent $BRANCH
+
+	# create branch
+	git checkout -b $BRANCH develop
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new branch '$BRANCH' was created, based on 'develop'"
+	echo "- You are now on branch '$BRANCH'"
+	echo
+	echo "Follow-up actions:"
+	echo "- Bump the version number now!"
+	echo "- Start committing last-minute fixes in preparing your release"
+	echo "- When done, run:"
+	echo
+	echo "     git flow finish release '$VERSION'"
+	echo
+}
+
+cmd_finish() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+	git fetch origin
+	gitflow_require_branches_equal master origin/master
+	gitflow_require_branches_equal develop origin/develop
+
+	# merge into master
+	git checkout master
+	git merge --no-ff $BRANCH
+	git tag v$VERSION
+
+	# merge into develop
+	git checkout develop
+	git merge --no-ff $BRANCH
+
+	# delete branch
+	git branch -d $BRANCH
+
+	# TODO: Implement an optional push to master
+	# git push origin develop; git push origin master; git push --tags origin
+
+	echo
+	echo "Summary of actions:"
+	echo "- Latest objects have been fetched from 'origin'"
+	echo "- Release branch has been merged into 'master'"
+	echo "- The release was tagged 'v$VERSION'"
+	echo "- Release branch has been back-merged into 'develop'"
+	echo "- Release branch '$BRANCH' has been deleted"
+	echo
+}
diff --git a/git-flow-support b/git-flow-support
new file mode 100644
index 0000000..a3fc91e
--- /dev/null
+++ b/git-flow-support
@@ -0,0 +1,57 @@
+#
+# gitflow -- A collection of Git wrapper scripts to provide high-level
+# repository operations for Vincent Driessen's branching model:
+#
+# Original blog post presenting this model is found at:
+#    http://nvie.com/archives/323
+#
+# Feel free to contribute to this project at:
+#    http://github.com/nvie/gitflow
+#
+# Copyright (c) 2010 by Vincent Driessen
+# Copyright (c) 2010 by Benedikt Böhm
+#
+
+usage() {
+	echo "usage: git flow start support <version> [<base>]"
+}
+
+parse_args() {
+	VERSION="$1"
+	BASE="${2:-v${VERSION}}"
+	if [ "$VERSION" = "" ]; then
+		echo "Missing argument <version>."
+		usage
+		exit 1
+	fi
+	BRANCH=support/$VERSION
+}
+
+cmd_help() {
+	usage
+	exit 0
+}
+
+cmd_start() {
+	parse_args "$@"
+
+	# sanity checks
+	gitflow_check_clean_working_tree
+
+	# create branch
+	git checkout -b $BRANCH $BASE
+
+	# publish branch
+	git push origin $BRANCH:refs/heads/$BRANCH
+	git fetch origin
+	git config branch.$BRANCH.remote origin
+	git config branch.$BRANCH.merge refs/heads/$BRANCH
+	git co $BRANCH
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new remote branch '$BRANCH' was created, based on '$BASE'"
+	echo "- A new tracking branch '$BRANCH' was created"
+	echo "- You are now on branch '$BRANCH'"
+	echo
+}
diff --git a/gitflow b/gitflow
deleted file mode 100755
index 8d6e9ac..0000000
--- a/gitflow
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-#
-# gitflow -- A collection of Git wrapper scripts to provide high-level
-# repository operations for Vincent Driessen's branching model:
-# 
-# Original blog post presenting this model is found at:
-#    http://nvie.com/archives/323
-# 
-# Feel free to contribute to this project at:
-#    http://github.com/nvie/gitflow
-#
-# Copyright (c) 2010 by Vincent Driessen
-#
-
-usage() {
-	echo "usage: gitflow <start|finish> <btype> <args>"
-	echo ""
-	echo "btype can be any of: \"feature\", \"release\", \"hotfix\""
-	echo ""
-}
-
-check_incoming() {
-	if [ "$ACTION" != "start" -a "$ACTION" != "finish" ]; then
-		usage
-		exit 1
-	fi
-	
-	if [ "$BTYPE" != "feature" -a "$BTYPE" != "release" -a "$BTYPE" != "hotfix" ]; then
-		usage
-		exit 1
-	fi
-}
-
-if [ $# -lt 2 ]; then
-	usage
-	exit 1
-fi
-
-# Set & check arguments
-export GITFLOW_DIR=$(dirname "$0")
-ACTION="$1"
-BTYPE="$2"
-shift 2
-check_incoming
-
-# Now, $ACTION and $BTYPE are set
-# It's time to call the appropriate subcommand
-. "$GITFLOW_DIR/gitflow-sh-setup"
-. "$GITFLOW_DIR/gitflow-$BTYPE"
-
-if [ "$ACTION" = "start" ]; then
-	start "$@"
-elif [ "$ACTION" = "finish" ]; then
-	finish "$@"
-else
-	usage
-fi
diff --git a/gitflow-feature b/gitflow-feature
deleted file mode 100755
index 90c9f4c..0000000
--- a/gitflow-feature
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-#
-# gitflow -- A collection of Git wrapper scripts to provide high-level
-# repository operations for Vincent Driessen's branching model:
-# 
-# Original blog post presenting this model is found at:
-#    http://nvie.com/archives/323
-# 
-# Feel free to contribute to this project at:
-#    http://github.com/nvie/gitflow
-#
-# Copyright (c) 2010 by Vincent Driessen
-#
-
-usage() {
-	echo "usage: gitflow start feature [<options>] <name> [<base>]"
-	echo "       gitflow finish feature [<options>] <name>"
-	# TODO
-	#echo ""
-	#echo "options:"
-	#echo "--option    Explanation"
-	#echo ""
-	#echo "start-only options:"
-	#echo "--option    Explanation"
-	#echo ""
-	#echo "finish-only options:"
-	#echo "--rebase    Rebases the feature branch on top of develop, instead of merging"
-	#echo "--squash    Squashes all commits of the feature branch into a single commit"
-	#echo "            on develop"
-	#echo "--push      Push to the origin repo when finished"
-}
-
-parse_args() {
-	FEATURE="$1"
-    if [ $# -eq 2 ]; then
-        BASE="$2"
-    else
-        BASE="develop"
-    fi
-	if [ "$FEATURE" = "" ]; then
-		echo "Missing argument <release>"
-		usage
-		exit 1
-	fi
-}
-
-start() {
-	parse_args "$@"
-
-	# Checks
-	gitflow_check_clean_working_tree
-	gitflow_require_branch_absent "$FEATURE"
-	if [ "$BASE" = "develop" ]; then
-		gitflow_require_branches_equal 'develop' 'origin/develop'
-	fi
-
-	# All checks passed, ready to roll
-	git checkout -b "$FEATURE" "$BASE"
-
-	echo ""
-	echo "Summary of actions:"
-	echo "- A new branch '$FEATURE' was created, based on '$BASE'"
-	echo "- You are now on branch '$FEATURE'"
-	echo ""
-	echo "Now, start committing on your feature. When done, use:"
-	echo ""
-	echo "     gitflow finish feature '$FEATURE'"
-}
-
-finish() {
-	parse_args "$@"
-
-	# Checks
-	gitflow_check_clean_working_tree
-	gitflow_require_branch "$FEATURE"
-	gitflow_require_branches_equal 'develop' 'origin/develop'
-
-	# All checks passed, ready to roll
-	git checkout develop
-
-	# In case there has been only a single commit in the feature branch, don't
-	# use --no-ff, since it has no extra advantages
-	FF_FLAG="--no-ff"
-	if [ "$(git rev-list develop.."$FEATURE" | wc -l)" -eq 1 ]; then
-		FF_FLAG="--ff"
-	fi
-	git merge "$FF_FLAG" "$FEATURE"
-	# TODO: How do we handle merge conflicts here??
-	git branch -d "$FEATURE"
-
-	echo ""
-	echo "Summary of actions:"
-	echo "- The feature branch '$FEATURE' was merged into 'develop'"
-	#echo "- Merge conflicts were resolved"		# TODO: Add this line when it's supported
-	echo "- Feature branch '$FEATURE' has been removed"
-	echo "- You are now on branch 'develop'"
-	echo ""
-}
-
diff --git a/gitflow-hotfix b/gitflow-hotfix
deleted file mode 100755
index b1e8834..0000000
--- a/gitflow-hotfix
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/sh
-#
-# gitflow -- A collection of Git wrapper scripts to provide high-level
-# repository operations for Vincent Driessen's branching model:
-# 
-# Original blog post presenting this model is found at:
-#    http://nvie.com/archives/323
-# 
-# Feel free to contribute to this project at:
-#    http://github.com/nvie/gitflow
-#
-# Copyright (c) 2010 by Vincent Driessen
-#
-
-usage() {
-	echo "usage: gitflow start hotfix <release>"
-	echo "       gitflow finish hotfix <release>"
-	# TODO
-	#echo ""
-	#echo "options:"
-	#echo "--option    Explanation"
-	#echo ""
-	#echo "start-only options:"
-	#echo "--option    Explanation"
-	#echo ""
-	#echo "finish-only options:"
-	#echo "--push      Push to the origin repo when finished"
-}
-
-parse_args() {
-	RELEASE="$1"
-	if [ "$RELEASE" = "" ]; then
-		echo "Missing argument <release>"
-		usage
-		exit 1
-	fi
-	HOTFIX_BRANCH="hotfix-$RELEASE"
-}
-
-start() {
-	parse_args "$@"
-
-	# Checks
-	gitflow_check_clean_working_tree
-	gitflow_require_branches_equal 'master' 'origin/master'
-	gitflow_require_branch_absent "$HOTFIX_BRANCH"
-
-	# All checks passed, ready to roll
-	git checkout -b "$HOTFIX_BRANCH" master
-
-	echo ""
-	echo "Summary of actions:"
-	echo "- A new branch '$HOTFIX_BRANCH' was created, based on 'master'"
-	echo "- You are now on branch '$HOTFIX_BRANCH'"
-	echo ""
-	echo "Follow-up actions:"
-	echo "- Bump the version number now!"
-	echo "- Start committing your hot fixes"
-	echo "- When done, run:"
-	echo ""
-	echo "     gitflow finish hotfix '$HOTFIX_BRANCH'"
-}
-
-finish() {
-	parse_args "$@"
-
-	# Checks
-	gitflow_check_clean_working_tree
-
-	git fetch origin develop	# TODO: Make a flag to skip these fetches
-	git fetch origin master		# TODO: Make a flag to skip these fetches
-	gitflow_require_branches_equal 'master' 'origin/master'
-	gitflow_require_branches_equal 'develop' 'origin/develop'
-
-	# All checks passed, ready to roll
-	git checkout master
-	git merge --no-ff "$HOTFIX_BRANCH"
-	git tag "$RELEASE"
-	git checkout develop
-	git merge --no-ff "$HOTFIX_BRANCH"
-	git branch -d "$HOTFIX_BRANCH"
-
-	# TODO: Implement an optional push to master
-	# git push origin develop; git push origin master; git push --tags origin
-
-	echo ""
-	echo "Summary of actions:"
-	echo "- Latest objects have been fetched from 'origin'"
-	echo "- Hotfix branch has been merged into 'master'"
-	echo "- The hotfix was tagged '$RELEASE'"
-	echo "- Hotfix branch has been back-merged into 'develop'"
-	echo "- Hotfix branch '$HOTFIX_BRANCH' has been deleted"
-	echo ""
-}
-
diff --git a/gitflow-release b/gitflow-release
deleted file mode 100755
index b4f2424..0000000
--- a/gitflow-release
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh
-#
-# gitflow -- A collection of Git wrapper scripts to provide high-level
-# repository operations for Vincent Driessen's branching model:
-# 
-# Original blog post presenting this model is found at:
-#    http://nvie.com/archives/323
-# 
-# Feel free to contribute to this project at:
-#    http://github.com/nvie/gitflow
-#
-# Copyright (c) 2010 by Vincent Driessen
-#
-
-usage() {
-	echo "usage: gitflow start release <release>"
-	echo "       gitflow finish release <release>"
-	# TODO
-	#echo ""
-	#echo "options:"
-	#echo "--option    Explanation"
-	#echo ""
-	#echo "start-only options:"
-	#echo "--bump <script>"
-	#echo "            Run the given script to auto-update the version number"
-	#echo ""
-	#echo "finish-only options:"
-	#echo "--push      Push to the origin repo when finished"
-}
-
-parse_args() {
-	RELEASE="$1"
-	if [ "$RELEASE" = "" ]; then
-		echo "Missing argument <release>"
-		usage
-		exit 1
-	fi
-	RELEASE_BRANCH="release-$RELEASE"
-}
-
-start() {
-	parse_args "$@"
-
-	# Checks
-	gitflow_check_clean_working_tree
-	gitflow_require_branches_equal 'develop' 'origin/develop'
-	gitflow_require_branch_absent "$RELEASE_BRANCH"
-
-	# All checks passed, ready to roll
-	git checkout -b "$RELEASE_BRANCH" develop
-
-	echo ""
-	echo "Summary of actions:"
-	echo "- A new branch '$RELEASE_BRANCH' was created, based on 'develop'"
-	echo "- You are now on branch '$RELEASE_BRANCH'"
-	echo ""
-	echo "Follow-up actions:"
-	echo "- Bump the version number now!"
-	echo "- Start committing last-minute fixes in preparing your release"
-	echo "- When done, run:"
-	echo ""
-	echo "     gitflow finish release '$RELEASE_BRANCH'"
-}
-
-finish() {
-	parse_args "$@"
-
-	# Checks
-	gitflow_check_clean_working_tree
-
-	git fetch origin develop	# TODO: Make a flag to skip these fetches
-	git fetch origin master		# TODO: Make a flag to skip these fetches
-	gitflow_require_branches_equal 'master' 'origin/master'
-	gitflow_require_branches_equal 'develop' 'origin/develop'
-
-	# All checks passed, ready to roll
-	git checkout master
-	git merge --no-ff "$RELEASE_BRANCH"
-	git tag "$RELEASE"
-	git checkout develop
-	git merge --no-ff "$RELEASE_BRANCH"
-	git branch -d "$RELEASE_BRANCH"
-
-	# TODO: Implement an optional push to master
-	# git push origin develop; git push origin master; git push --tags origin
-
-	echo ""
-	echo "Summary of actions:"
-	echo "- Latest objects have been fetched from 'origin'"
-	echo "- Release branch has been merged into 'master'"
-	echo "- The release was tagged '$RELEASE'"
-	echo "- Release branch has been back-merged into 'develop'"
-	echo "- Release branch '$RELEASE_BRANCH' has been deleted"
-	echo ""
-}
-
diff --git a/gitflow-sh-setup b/gitflow-sh-setup
deleted file mode 100755
index 0826758..0000000
--- a/gitflow-sh-setup
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/bin/sh
-#
-# gitflow -- A collection of Git wrapper scripts to provide high-level
-# repository operations for Vincent Driessen's branching model:
-# 
-# Original blog post presenting this model is found at:
-#    http://nvie.com/archives/323
-# 
-# Feel free to contribute to this project at:
-#    http://github.com/nvie/gitflow
-#
-# Copyright (c) 2010 by Vincent Driessen
-#
-
-# Get the git dir
-GIT_DIR=$(git rev-parse --git-dir)
-
-# Get all available branches
-LOCAL_BRANCHES=$(git branch | sed 's/^[* ] //')
-REMOTE_BRANCHES=$(git branch -r | sed 's/^[* ] //')
-ALL_BRANCHES="$LOCAL_BRANCHES\n$REMOTE_BRANCHES"
-
-warn() { echo "$@" >&2; }
-die() { warn "$@"; exit 1; }
-
-gitflow_check_clean_working_tree() {
-	if [ "$(git status 2>/dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]; then
-		die "Working directory is dirty. Only use gitflow in clean working directories for your own safety."
-	fi
-}
-
-gitflow_require_local_branch() {
-	echo "$LOCAL_BRANCHES" | grep "^$1\$" 2>&1 >/dev/null
-	if [ $? -ne 0 ]; then
-		die "Local branch '$1' does not exist and is required."
-	fi
-}
-
-gitflow_require_remote_branch() {
-	echo "$REMOTE_BRANCHES" | grep "^$1\$" 2>&1 >/dev/null
-	if [ $? -ne 0 ]; then
-		die "Remote branch '$1' does not exist and is required."
-	fi
-}
-
-gitflow_require_branch() {
-	echo "$ALL_BRANCHES" | grep "^$1\$" 2>&1 >/dev/null
-	if [ $? -ne 0 ]; then
-		die "Branch '$1' does not exist and is required."
-	fi
-}
-
-gitflow_require_branch_absent() {
-	echo "$ALL_BRANCHES" | grep "^$1\$" 2>&1 >/dev/null
-	if [ $? -eq 0 ]; then
-		die "Branch '$1' already exists. Pick another name."
-	fi
-}
-
-#
-# gitflow_test_branches_equal()
-# 
-# Tests whether branches and their "origin" counterparts have diverged and need
-# merging first. It returns error codes to provide more detail, like so:
-# 
-# 0		Branch heads point to the same commit
-# 1		First given branch needs fast-forwarding
-# 2		Second given branch needs fast-forwarding
-# 3		Branch needs a real merge
-#
-gitflow_test_branches_equal() {
-	commit1=$(git rev-parse "$1")
-	commit2=$(git rev-parse "$2")
-	if [ "$commit1" != "$commit2" ]; then
-		base=$(git merge-base "$commit1" "$commit2")
-		short_base=$(git rev-parse --short "$base")
-
-		if [ "$commit1" = "$base" ]; then
-			return 1
-		elif [ "$commit2" = "$base" ]; then
-			return 2
-		else
-			return 3
-		fi
-	else
-		return 0
-	fi
-}
-
-gitflow_require_branches_equal() {
-	gitflow_require_local_branch "$1"
-	gitflow_require_remote_branch "$2"
-	gitflow_test_branches_equal "$1" "$2"
-	status=$?
-	if [ $status -gt 0 ]; then
-		warn "Branches '$1' and '$2' have diverged."
-
-		if [ $status -eq 1 ]; then
-			die "And branch '$1' may be fast-forwarded."
-		elif [ $status -eq 2 ]; then
-			# Warn here, since there is no harm in being ahead
-			warn "And local branch '$1' is ahead of '$2'."
-		else
-			die "Branches need merging first."
-		fi
-	fi
-}
-
