diff --git a/client.go b/client.go
index 40a4bd2..693e4e6 100644
--- a/client.go
+++ b/client.go
@@ -185,7 +185,7 @@
 
 	go func() {
 		defer wg.Done()
-		err := a.Session.Run(fmt.Sprintf("%s -qt %s", a.RemoteBinary, remotePath))
+		err := a.Session.Run(fmt.Sprintf("%s -qt %q", a.RemoteBinary, remotePath))
 		if err != nil {
 			errCh <- err
 			return
@@ -244,7 +244,7 @@
 		}
 		defer in.Close()
 
-		err = a.Session.Start(fmt.Sprintf("%s -f %s", a.RemoteBinary, remotePath))
+		err = a.Session.Start(fmt.Sprintf("%s -f %q", a.RemoteBinary, remotePath))
 		if err != nil {
 			errCh <- err
 			return
diff --git a/tests/basic_test.go b/tests/basic_test.go
index 18fce6a..93c1895 100644
--- a/tests/basic_test.go
+++ b/tests/basic_test.go
@@ -1,109 +1,108 @@
 package tests
 
 import (
-	scp "github.com/bramvdbogaerde/go-scp"
-	"github.com/bramvdbogaerde/go-scp/auth"
-	"golang.org/x/crypto/ssh"
 	"io/ioutil"
 	"os"
 	"strings"
 	"testing"
+
+	scp "github.com/bramvdbogaerde/go-scp"
+	"github.com/bramvdbogaerde/go-scp/auth"
+	"golang.org/x/crypto/ssh"
 )
 
-// This test, tests the basic functionality of the library: copying files
-// it assumes that a docker container is running an SSH server at port
-// 2244 using password authentication.
-//
-// It also assumes that the directory /results is writable within that container
-// and is mapped to the tmp/ directory within this directory.
-func TestCopy(t *testing.T) {
-	// Use SSH key authentication from the auth package
-	// we ignore the host key in this example, please change this if you use this library
+func establishConnection(t *testing.T) scp.Client {
+	// Use SSH key authentication from the auth package.
+	// During testing we ignore the host key, don't to that when you use this.
 	clientConfig, _ := auth.PasswordKey("bram", "test", ssh.InsecureIgnoreHostKey())
 
-	// For other authentication methods see ssh.ClientConfig and ssh.AuthMethod
-
-	// Create a new SCP client
+	// Create a new SCP client.
 	client := scp.NewClient("127.0.0.1:2244", &clientConfig)
 
-	// Connect to the remote server
+	// Connect to the remote server.
 	err := client.Connect()
 	if err != nil {
-		t.Errorf("Couldn't establish a connection to the remote server %s", err)
-		return
+		t.Fatalf("Couldn't establish a connection to the remote server: %s", err)
 	}
+	return client
+}
 
-	// Open a file
-	f, _ := os.Open("./input.txt")
-
-	// Close client connection after the file has been copied
+// TestCopy tests the basic functionality of copying a file to the remote
+// destination.
+//
+// It assumes that a Docker container is running an SSH server at port 2244
+// that is using password authentication. It also assumes that the directory
+// /data is writable within that container and is mapped to ./tmp/ within the
+// directory the test is run from.
+func TestCopy(t *testing.T) {
+	client := establishConnection(t)
 	defer client.Close()
 
-	// Close the file after it has been copied
+	// Open a file we can transfer to the remote container.
+	f, _ := os.Open("./data/upload_file.txt")
 	defer f.Close()
 
-	// Finaly, copy the file over
-	// Usage: CopyFile(fileReader, remotePath, permission)
+	// Create a file name with exotic characters and spaces in them.
+	// If this test works for this, simpler files should not be a problem.
+	filename := "Exöt1ç uploaded file.txt"
 
-	err = client.CopyFile(f, "/data/output.txt", "0655")
-
+	// Finaly, copy the file over.
+	// Usage: CopyFile(fileReader, remotePath, permission).
+	err := client.CopyFile(f, "/data/"+filename, "0777")
 	if err != nil {
-		t.Errorf("Error while copying file %s", err)
+		t.Errorf("Error while copying file: %s", err)
 	}
 
-	content, err := ioutil.ReadFile("./tmp/output.txt")
+	// Read what the receiver have written to disk.
+	content, err := ioutil.ReadFile("./tmp/" + filename)
 	if err != nil {
-		t.Errorf("Test has failed, file could not be opened")
+		t.Errorf("Result file could not be read: %s", err)
 	}
 
 	text := string(content)
 	expected := "It Works\n"
 	if strings.Compare(text, expected) != 0 {
-		t.Errorf("Got different text than expected, expected \"%s\" got, \"%s\"", expected, text)
+		t.Errorf("Got different text than expected, expected %q got, %q", expected, text)
 	}
 }
 
-// This test assumes that a Docker container is running that has the SCP binary available
-// and exposes an SSH server on port 2244 using password authentication.
+// TestDownloadFile tests the basic functionality of copying a file from the
+// remote destination.
 //
-// The test checks whether it can retrieve a file from the remote and checks the file against the expected file
+// It assumes that a Docker container is running an SSH server at port 2244
+// that is using password authentication. It also assumes that the directory
+// /data is writable within that container and is mapped to ./tmp/ within the
+// directory the test is run from.
 func TestDownloadFile(t *testing.T) {
-	// Use SSH key authentication from the auth package
-	// we ignore the host key in this example, please change this if you use this library
-	clientConfig, _ := auth.PasswordKey("bram", "test", ssh.InsecureIgnoreHostKey())
+	client := establishConnection(t)
+	defer client.Close()
 
-	// For other authentication methods see ssh.ClientConfig and ssh.AuthMethod
+	// Open a file we can transfer to the remote container.
+	f, _ := os.Open("./data/input.txt")
+	defer f.Close()
 
-	// Create a new SCP client
-	client := scp.NewClient("127.0.0.1:2244", &clientConfig)
-
-	// Connect to the remote server
-	err := client.Connect()
-	if err != nil {
-		t.Errorf("Couldn't establish a connection to the remote server %s", err)
-		return
-	}
-
-	f, err := os.OpenFile("./tmp/output.txt", os.O_RDWR|os.O_CREATE, 0755)
+	// Create a local file to write to.
+	f, err := os.OpenFile("./tmp/output.txt", os.O_RDWR|os.O_CREATE, 0777)
 	if err != nil {
 		t.Errorf("Couldn't open the output file")
 	}
-
-	// Close client connection after the file has been copied
-	defer client.Close()
-
-	// Close the file after it has been copied
 	defer f.Close()
 
-	err = client.CopyFromRemote(f, "/input/test_download.txt")
+	// Use a file name with exotic characters and spaces in them.
+	// If this test works for this, simpler files should not be a problem.
+	err = client.CopyFromRemote(f, "/input/Exöt1ç download file.txt.txt")
 	if err != nil {
 		t.Errorf("Copy failed from remote")
 	}
 
 	content, err := ioutil.ReadFile("./tmp/output.txt")
+	if err != nil {
+		t.Errorf("Result file could not be read: %s", err)
+	}
+
 	text := string(content)
 	expected := "It works for download!\n"
 	if strings.Compare(text, expected) != 0 {
-		t.Errorf("Got different text than expected, expected \"%s\" got, \"%s\"", expected, text)
+		t.Errorf("Got different text than expected, expected %q got, %q", expected, text)
 	}
 }
diff --git a/tests/data/test_download.txt "b/tests/data/Ex\303\266t1\303\247 download file.txt.txt"
similarity index 100%
rename from tests/data/test_download.txt
rename to "tests/data/Ex\303\266t1\303\247 download file.txt.txt"
diff --git a/tests/input.txt b/tests/data/upload_file.txt
similarity index 100%
rename from tests/input.txt
rename to tests/data/upload_file.txt
diff --git a/tests/run_all.sh b/tests/run_all.sh
index fa0593a..0219fa3 100755
--- a/tests/run_all.sh
+++ b/tests/run_all.sh
@@ -4,7 +4,7 @@
 
 echo "Running from $(pwd)"
 
-echo "Starting docker containers" 
+echo "Starting docker containers"
 
 docker run -d \
    --name go-scp-test \
diff --git a/tests/tmp/.gitkeep b/tests/tmp/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/tmp/.gitkeep
