diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index ecd4dae04849a19dccd316bb0f11d0e1f9411b78..c464fa9107a79e59ff8b30b26dedc11aec9cc99e 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -47,8 +47,13 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
 
 	public function constructUrl($path) {
 		if (substr($path, -1)=='/') {
-			$path=substr($path, 0, -1);
+			$path = substr($path, 0, -1);
 		}
+		if (substr($path, 0, 1)=='/') {
+			$path = substr($path, 1);
+		}
+		// remove trailing dots which some versions of samba don't seem to like
+		$path = rtrim($path, '.');
 		$path = urlencode($path);
 		$user = urlencode($this->user);
 		$pass = urlencode($this->password);
diff --git a/apps/files_external/tests/smbfunctions.php b/apps/files_external/tests/smbfunctions.php
new file mode 100644
index 0000000000000000000000000000000000000000..749906d01364e37b734b728ce6ce792fc8e86568
--- /dev/null
+++ b/apps/files_external/tests/smbfunctions.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage;
+
+class SMBFunctions extends \PHPUnit_Framework_TestCase {
+
+	public function setUp() {
+		$id = uniqid();
+		// dummy config
+		$this->config = array(
+			'run'=>false,
+			'user'=>'test',
+			'password'=>'testpassword',
+			'host'=>'smbhost',
+			'share'=>'/sharename',
+			'root'=>'/rootdir/',
+		);
+
+		$this->instance = new \OC\Files\Storage\SMB($this->config);
+	}
+
+	public function tearDown() {
+	}
+
+	public function testGetId() {
+		$this->assertEquals('smb::test@smbhost//sharename//rootdir/', $this->instance->getId());
+	}
+
+	public function testConstructUrl() {
+		$this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc", $this->instance->constructUrl('/abc'));
+		$this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc", $this->instance->constructUrl('/abc/'));
+		$this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc%2F", $this->instance->constructUrl('/abc/.'));
+		$this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc%2Fdef", $this->instance->constructUrl('/abc/def'));
+	}
+}