diff --git a/replicate.sh b/replicate.sh
index 27ecc77..41f1bfa 100755
--- a/replicate.sh
+++ b/replicate.sh
@@ -9,7 +9,12 @@
 ## Helper functions
 log() {
 	[ -z ${1+x} ] && return 1
-	printf "\e[94m${name}\e[0m: $1\n"
+	out=1
+	[ -z ${2+x} ] || out="$2"
+	col_message="\e[39m"
+	[ "$out" -gt "1" ] && col_message="\e[31m"
+	[ "$out" -lt "1" ] && out=1 && col_message="\e[37m"
+	printf "\e[94m${name}\e[0m: $col_message$1\e[0m\n" >&${out}
 }
 validatedep() {
 	if ! which $1 > /dev/null 2>&1; then
@@ -45,7 +50,7 @@ step_validate_deps() {
 	log "Validating dependencies"
 	for dep in $deps; do
 		if ! validatedep "$dep"; then
-			log "Could not find critical dependency \"$dep\""
+			log "Could not find critical dependency \"$dep\"" 2
 			return 1
 		fi
 	done
@@ -54,7 +59,7 @@ step_make_skeleton() {
 	# Build Home folder skeleton
 	log "Building skeleton folder layout"
 	if ! mkdir Desktop Documents Downloads Games Music Pictures Projects Public ROMs System Templates Videos > /dev/null 2>&1; then
-		log "Failed to build skeleton layout"
+		log "Failed to build skeleton layout" 2
 		return 1
 	fi
 	return 0
@@ -65,7 +70,7 @@ step_repo_clone() {
 	git clone --recursive --depth 100 --separate-git-dir="$gitdir" "$repo" "$tmpdir" >> "$logfile" 2>&1
 	error="$?"
 	if ! [ "$error" -eq "0" ]; then
-		log "Failed cloning repository \"$repo\": git returned $error"
+		log "Failed cloning repository \"$repo\": git returned $error" 2
 		log "See $logfile for details"
 		log "Do you have the appropriate permissions? Does the remote host know your key?"
 		return 1
@@ -75,7 +80,7 @@ step_repo_move() {
 	# Move them to where they should be
 	log "Moving cloned repo from \"$tmpdir\" into \"$bootstrapdir\""
 	if ! rsync -rvl --exclude ".git" "$tmpdir/" "$bootstrapdir/" >> "$logfile"; then
-		log "Failed to move from temp directory to bootstrap directory"
+		log "Failed to move from temp directory to bootstrap directory" 2
 		return 1
 	fi
 }
@@ -100,21 +105,21 @@ main() {
 		case $opt in
 			d)
 				if [ "$OPTARG" == "" ]; then
-					log "Option -d requires an argument"
+					log "Option -d requires an argument" 2
 					exit 1
 				fi
 				bootstrapdir="$OPTARG"
 				;;
 			r)
 				if [ "$OPTARG" == "" ]; then
-					log "Option -r requires an argument"
+					log "Option -r requires an argument" 2
 					exit 1
 				fi
 				repo="$OPTARG"
 				;;
 			l)
 				if [ "$OPTARG" == "" ]; then
-					log "Option -l requires an argument"
+					log "Option -l requires an argument" 2
 					exit 1
 				fi
 				logfile="$OPTARG"
@@ -123,7 +128,7 @@ main() {
 				help
 				;;
 			*)
-				log "Invalid option: \"$opt\""
+				log "Invalid option: \"$opt\"" 2
 				exit 1
 				;;
 		esac