diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index f78f3abf0fa25f54a1e8cc349d93232a7399fc92..5b1cd86a1709e75f30022413003ca84a48b1f2ef 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -9,6 +9,7 @@
 OC::$CLASSPATH['OC\Files\Storage\StreamWrapper'] = 'files_external/lib/streamwrapper.php';
 OC::$CLASSPATH['OC\Files\Storage\FTP'] = 'files_external/lib/ftp.php';
 OC::$CLASSPATH['OC\Files\Storage\DAV'] = 'files_external/lib/webdav.php';
+OC::$CLASSPATH['OC\Files\Storage\OwnCloud'] = 'files_external/lib/owncloud.php';
 OC::$CLASSPATH['OC\Files\Storage\Google'] = 'files_external/lib/google.php';
 OC::$CLASSPATH['OC\Files\Storage\Swift'] = 'files_external/lib/swift.php';
 OC::$CLASSPATH['OC\Files\Storage\SMB'] = 'files_external/lib/smb.php';
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 122cc57debc9f607d37edf491f20893004568dd1..2abf7acb91e611a96addc2e71a143a3def2f89e6 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -114,14 +114,24 @@ class OC_Mount_Config {
 			}
 		}
 
-		if(OC_Mount_Config::checkcurl()) $backends['\OC\Files\Storage\DAV']=array(
-			'backend' => 'ownCloud / WebDAV',
-			'configuration' => array(
-				'host' => 'URL',
-				'user' => 'Username',
-				'password' => '*Password',
-				'root' => '&Root',
-				'secure' => '!Secure https://'));
+		if(OC_Mount_Config::checkcurl()){
+		   	$backends['\OC\Files\Storage\DAV']=array(
+				'backend' => 'WebDAV',
+				'configuration' => array(
+					'host' => 'URL',
+					'user' => 'Username',
+					'password' => '*Password',
+					'root' => '&Root',
+					'secure' => '!Secure https://'));
+		   	$backends['\OC\Files\Storage\OwnCloud']=array(
+				'backend' => 'ownCloud',
+				'configuration' => array(
+					'host' => 'URL',
+					'user' => 'Username',
+					'password' => '*Password',
+					'root' => '&Remote subfolder',
+					'secure' => '!Secure https://'));
+		}
 
 		$backends['\OC\Files\Storage\SFTP']=array(
 			'backend' => 'SFTP',
diff --git a/apps/files_external/lib/owncloud.php b/apps/files_external/lib/owncloud.php
new file mode 100644
index 0000000000000000000000000000000000000000..98314102a64dec5f5115ed7948d95587e2341283
--- /dev/null
+++ b/apps/files_external/lib/owncloud.php
@@ -0,0 +1,51 @@
+<?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 OC\Files\Storage;
+
+/**
+ * ownCloud backend for external storage based on DAV backend.
+ *
+ * The ownCloud URL consists of three parts:
+ * http://%host/%context/remote.php/webdav/%root
+ *
+ */
+class OwnCloud extends \OC\Files\Storage\DAV{
+	const OC_URL_SUFFIX = 'remote.php/webdav';
+
+	public function __construct($params) {
+		// extract context path from host if specified
+		// (owncloud install path on host)
+		$host = $params['host'];
+		$contextPath = '';
+		$hostSlashPos = strpos($host, '/');
+		if ($hostSlashPos !== false){
+			$contextPath = substr($host, $hostSlashPos);
+			$host = substr($host, 0, $hostSlashPos);
+		}
+
+		if (substr($contextPath , 1) !== '/'){
+			$contextPath .= '/';
+		}
+
+		if (isset($params['root'])){
+			$root = $params['root'];
+			if (substr($root, 1) !== '/'){
+				$root = '/' . $root;
+			}
+		}
+		else{
+			$root = '/';
+		}
+
+		$params['host'] = $host;
+		$params['root'] = $contextPath . self::OC_URL_SUFFIX . $root;
+
+		parent::__construct($params);
+	}
+}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 02f6cb5fc4f73720f1dca49f87ca4b0c2d2fb48f..cc7f3a5c9e2de71c0333dceac970966ddd4d7f2c 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -79,7 +79,7 @@ class DAV extends \OC\Files\Storage\Common{
 		return 'webdav::' . $this->user . '@' . $this->host . '/' . $this->root;
 	}
 
-	private function createBaseUri() {
+	protected function createBaseUri() {
 		$baseUri='http';
 		if ($this->secure) {
 			$baseUri.='s';
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index a523809e2f9b51a8dde5f513a689824f619907a4..e296bfcb5b243d199ceb8f5475711c4f77e62821 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -23,6 +23,13 @@ return array(
 		'password'=>'test',
 		'root'=>'/owncloud/files/webdav.php',
 	),
+	'owncloud'=>array(
+		'run'=>true,
+		'host'=>'localhost/owncloud',
+		'user'=>'test',
+		'password'=>'test',
+		'root'=>'',
+	),
 	'google'=>array(
 		'run'=> false,
 		'configured' => 'true',
diff --git a/apps/files_external/tests/owncloud.php b/apps/files_external/tests/owncloud.php
new file mode 100644
index 0000000000000000000000000000000000000000..408a55864f29cb0cfa80a27817a2d0e3ef9146af
--- /dev/null
+++ b/apps/files_external/tests/owncloud.php
@@ -0,0 +1,31 @@
+<?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 OwnCloud extends Storage {
+
+	private $config;
+
+	public function setUp() {
+		$id = uniqid();
+		$this->config = include('files_external/tests/config.php');
+		if ( ! is_array($this->config) or ! isset($this->config['owncloud']) or ! $this->config['owncloud']['run']) {
+			$this->markTestSkipped('ownCloud backend not configured');
+		}
+		$this->config['owncloud']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+		$this->instance = new \OC\Files\Storage\OwnCloud($this->config['owncloud']);
+		$this->instance->mkdir('/');
+	}
+
+	public function tearDown() {
+		if ($this->instance) {
+			$this->instance->rmdir('/');
+		}
+	}
+}