diff --git a/TODO.mdown b/TODO.mdown
index 0bb08db..9516b0a 100644
--- a/TODO.mdown
+++ b/TODO.mdown
@@ -3,9 +3,6 @@
 
 General configuration
 ---------------------
-- Support configurable naming for fixed branch names 'master' and 'develop'
-- Support configurable naming conventions (i.e. name prefixes) for supporting
-  branches, instead of fixed 'release-\*' and 'hotfix-\*'
 
 Release branch support
 ----------------------
diff --git a/git-flow b/git-flow
new file mode 100755
index 0000000..c85625d
--- /dev/null
+++ b/git-flow
@@ -0,0 +1,157 @@
+#!/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
+#
+
+# enable debug mode
+if [ "$DEBUG" = "yes" ]; then
+	set -x
+fi
+
+export GITFLOW_DIR=$(dirname "$0")
+export MASTER_BRANCH=$(git config --get gitflow.branch.master || echo master)
+export DEVELOP_BRANCH=$(git config --get gitflow.branch.develop || echo develop)
+export ORIGIN=$(git config --get gitflow.origin || echo origin)
+
+warn() { echo "$@" >&2; }
+die() { warn "$@"; exit 1; }
+has() { [[ " ${*:2} " == *" $1 "* ]]; }
+
+usage() {
+	. "$GITFLOW_DIR/git-flow-version"
+	echo "gitflow, version $GITFLOW_VERSION"
+	echo
+	echo "usage: git flow <cmd> <type> <args>"
+	echo
+	echo "<type> can be any of: feature, release, hotfix, support"
+	echo
+	echo "Try 'git flow help <type>' for details."
+}
+
+main() {
+	if [ $# -lt 2 ]; then
+		usage
+		exit 1
+	fi
+
+	# 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
+
+	# 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..6ba664f
--- /dev/null
+++ b/git-flow-feature
@@ -0,0 +1,156 @@
+#
+# 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_BRANCH}"
+	if [ "$NAME" = "" ]; then
+		echo "Missing argument <name>."
+		usage
+		exit 1
+	fi
+	PREFIX=$(git config --get gitflow.prefix.feature || echo feature/)
+	BRANCH=$PREFIX$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_BRANCH" ]; then
+		git fetch $ORIGIN $DEVELOP_BRANCH
+		gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
+	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_BRANCH" ]; then
+		gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
+	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..14ac662
--- /dev/null
+++ b/git-flow-hotfix
@@ -0,0 +1,111 @@
+#
+# 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_BRANCH}"
+	if [ "$VERSION" = "" ]; then
+		echo "Missing argument <version>."
+		usage
+		exit 1
+	fi
+	PREFIX=$(git config --get gitflow.prefix.hotfix || echo hotfix/)
+	BRANCH=$PREFIX$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_BRANCH $ORIGIN/$MASTER_BRANCH
+	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_BRANCH
+	git fetch $ORIGIN $DEVELOP_BRANCH
+	gitflow_require_branches_equal $MASTER_BRANCH $ORIGIN/$MASTER_BRANCH
+	gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
+
+	# 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_BRANCH" ]; then
+		git checkout $DEVELOP_BRANCH
+		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_BRANCH" ]; then
+		echo "- Hotfix branch has been back-merged into '$DEVELOP_BRANCH'"
+	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..d42287d
--- /dev/null
+++ b/git-flow-release
@@ -0,0 +1,105 @@
+#
+# 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
+	PREFIX=$(git config --get gitflow.prefix.release || echo release/)
+	BRANCH=$PREFIX$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_BRANCH $ORIGIN/$DEVELOP_BRANCH
+	gitflow_require_branch_absent $BRANCH
+
+	# create branch
+	git checkout -b $BRANCH $DEVELOP_BRANCH
+
+	echo
+	echo "Summary of actions:"
+	echo "- A new branch '$BRANCH' was created, based on '$DEVELOP_BRANCH'"
+	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_BRANCH $ORIGIN/$MASTER_BRANCH
+	gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
+
+	# merge into master
+	git checkout $MASTER_BRANCH
+	git merge --no-ff $BRANCH
+	git tag v$VERSION
+
+	# merge into develop
+	git checkout $DEVELOP_BRANCH
+	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_BRANCH'"
+	echo "- The release was tagged 'v$VERSION'"
+	echo "- Release branch has been back-merged into '$DEVELOP_BRANCH'"
+	echo "- Release branch '$BRANCH' has been deleted"
+	echo
+}
diff --git a/git-flow-support b/git-flow-support
new file mode 100644
index 0000000..55f595e
--- /dev/null
+++ b/git-flow-support
@@ -0,0 +1,58 @@
+#
+# 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
+	PREFIX=$(git config --get gitflow.prefix.support || echo support/)
+	BRANCH=$PREFIX$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-version b/git-flow-version
similarity index 100%
rename from gitflow-version
rename to git-flow-version
diff --git a/gitflow b/gitflow
deleted file mode 100755
index 28da0af..0000000
--- a/gitflow
+++ /dev/null
@@ -1,62 +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
-#
-
-export GITFLOW_DIR=$(dirname "$0")
-
-usage() {
-	. "$GITFLOW_DIR/gitflow-version"
-	echo "gitflow, version $GITFLOW_VERSION"
-	echo ""
-	echo "usage: gitflow <start|finish> <type> <args>"
-	echo ""
-	echo "arguments:"
-	echo "type 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
-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
-}
-
