diff --git a/CHANGELOG b/CHANGELOG
index bb3a73a1cf..603b7dc653 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -31,6 +31,9 @@ git-annex (6.20170521) UNRELEASED; urgency=medium
     the filename parameter to the TRANSFER command could not contain
     spaces. It can in fact contain spaces. Special remotes implementors
     that relied on that may need to fix bugs in their special remotes.
+  * Fix the external special remotes git-annex-remote-ipfs, 
+    git-annex-remote-torrent and the example.sh template to correctly
+    support filenames with spaces.
 
  -- Joey Hess <id@joeyh.name>  Sat, 17 Jun 2017 13:02:24 -0400
 
diff --git a/doc/special_remotes/external/example.sh b/doc/special_remotes/external/example.sh
index 8fed9f4aa3..ed37ad9ecd 100755
--- a/doc/special_remotes/external/example.sh
+++ b/doc/special_remotes/external/example.sh
@@ -122,9 +122,11 @@ while read line; do
 			fi
 		;;
 		TRANSFER)
+			op="$2"
 			key="$3"
-			file="$4"
-			case "$2" in
+			shift 3
+			file="$@"
+			case "$op" in
 				STORE)
 					# Store the file to a location
 					# based on the key.
diff --git a/doc/special_remotes/external/git-annex-remote-ipfs b/doc/special_remotes/external/git-annex-remote-ipfs
index c8d97ef5c8..f255f9bc59 100755
--- a/doc/special_remotes/external/git-annex-remote-ipfs
+++ b/doc/special_remotes/external/git-annex-remote-ipfs
@@ -81,9 +81,11 @@ while read line; do
 			echo CHECKURL-CONTENTS UNKNOWN "$(urltoaddress "$url")"
 		;;
 		TRANSFER)
+			op="$2"
 			key="$3"
-			file="$4"
-			case "$2" in
+			shift 3
+			file="$@"
+			case "$op" in
 				STORE)
 					addr=$(ipfs add -q "$file" </dev/null) || true
 					if [ -z "$addr" ]; then
diff --git a/doc/special_remotes/external/git-annex-remote-torrent b/doc/special_remotes/external/git-annex-remote-torrent
index 4df1f81546..d7897d7726 100755
--- a/doc/special_remotes/external/git-annex-remote-torrent
+++ b/doc/special_remotes/external/git-annex-remote-torrent
@@ -149,9 +149,11 @@ while read line; do
 			rm -f "$tmp"
 		;;
 		TRANSFER)
+			op="$2"
 			key="$3"
-			file="$4"
-			case "$2" in
+			shift 3
+			file="$@"
+			case "$op" in
 				STORE)
 					echo TRANSFER-FAILURE STORE "$key" "upload not supported"
 				;;