diff --git a/git-flow b/git-flow
index f7a826d..573aa25 100755
--- a/git-flow
+++ b/git-flow
@@ -18,21 +18,13 @@
 	set -x
 fi
 
-export GIT_DIR=$(git rev-parse --git-dir)
 export GITFLOW_DIR=$(dirname "$0")
+export GIT_DIR=$(git rev-parse --git-dir)
 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)
 export README=$(git config --get gitflow.readme || echo README)
 
-warn() { echo "$@" >&2; }
-die() { warn "$@"; exit 1; }
-
-has() {
-	local item=$1; shift
-	echo " $@ " | grep -q " $item "
-}
-
 usage() {
 	echo "usage: git flow <subcommand>"
 	echo
@@ -53,11 +45,12 @@
 		exit 1
 	fi
 
+	# load common functionality
+	. "$GITFLOW_DIR/gitflow-common"
+
 	# use the shFlags project to parse the command line arguments
-	. "$GITFLOW_DIR/shFlags.sh"
+	. "$GITFLOW_DIR/gitflow-shFlags"
 	FLAGS_PARENT="git flow"
-	#DEFINE_boolean quiet 0 'run without output' q
-	#DEFINE_boolean verbose 0 'run verbose (more output)' v
 	FLAGS "$@" || exit $?
 	eval set -- "${FLAGS_ARGV}"
 
@@ -73,11 +66,6 @@
 		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-$SUBCOMMAND"
 	FLAGS_PARENT="git flow $SUBCOMMAND"
@@ -99,109 +87,6 @@
 	cmd_$SUBACTION "$@"
 }
 
-gitflow_test_clean_working_tree() {
-	if ! git diff --no-ext-diff --ignore-submodules --quiet --exit-code; then
-		return 1
-	elif ! git diff-index --cached --quiet --ignore-submodules HEAD --; then
-		return 2
-	else
-		return 0
-	fi
-}
-
-gitflow_require_clean_working_tree() {
-	gitflow_test_clean_working_tree
-	result=$?
-	if [ $result -eq 1 ]; then
-		die "fatal: Working tree contains unstaged changes. Aborting."
-	fi
-	if [ $result -eq 2 ]; then
-		die "fatal: Index contains uncommited changes. Aborting."
-	fi
-}
-
-gitflow_require_local_branch() {
-	if ! has $1 $LOCAL_BRANCHES; then
-		die "fatal: 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
-}
-
-#
-# gitflow_is_branch_merged_into()
-#
-# Checks whether branch $1 is succesfully merged into $2
-#
-gitflow_is_branch_merged_into() {
-	local SUBJECT=$1
-	local BASE=$2
-	ALL_MERGES=$(git branch --contains $SUBJECT | sed 's/^[* ] //')
-	has $BASE $ALL_MERGES
-}
-
 # helper functions for common reuse
 max() { if [ "$1" -gt "$2" ]; then echo "$1"; else echo "$2"; fi; }
 
