diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php
index 68163430186b91e752dfe977f6674586aa22aa8c..102c04705a43ea4ba7b26add9c3f1290bf74f3c3 100644
--- a/apps/contacts/appinfo/app.php
+++ b/apps/contacts/appinfo/app.php
@@ -5,8 +5,12 @@ OC::$CLASSPATH['OC_Contacts_VCard'] = 'apps/contacts/lib/vcard.php';
 OC::$CLASSPATH['OC_Contacts_Hooks'] = 'apps/contacts/lib/hooks.php';
 OC::$CLASSPATH['OC_Share_Backend_Contact'] = 'apps/contacts/lib/share/contact.php';
 OC::$CLASSPATH['OC_Share_Backend_Addressbook'] = 'apps/contacts/lib/share/addressbook.php';
-OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/connector_sabre.php';
-OC::$CLASSPATH['Sabre_CardDAV_VCFExportPlugin'] = 'apps/contacts/lib/VCFExportPlugin.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/sabre/backend.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBookRoot'] = 'apps/contacts/lib/sabre/addressbookroot.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_UserAddressBooks'] = 'apps/contacts/lib/sabre/useraddressbooks.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBook'] = 'apps/contacts/lib/sabre/addressbook.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_Card'] = 'apps/contacts/lib/sabre/card.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_VCFExportPlugin'] = 'apps/contacts/lib/sabre/vcfexportplugin.php';
 OC::$CLASSPATH['OC_Search_Provider_Contacts'] = 'apps/contacts/lib/search.php';
 OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Contacts_Hooks', 'createUser');
 OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser');
diff --git a/apps/contacts/appinfo/remote.php b/apps/contacts/appinfo/remote.php
index 6cb5b59525cbceef6e854501a6792b67c9f543c4..00851037a6cfaeb0cf3d2341beb4d3d3fb901d58 100644
--- a/apps/contacts/appinfo/remote.php
+++ b/apps/contacts/appinfo/remote.php
@@ -36,15 +36,15 @@ $principalBackend = new OC_Connector_Sabre_Principal();
 $carddavBackend   = new OC_Connector_Sabre_CardDAV();
 
 // Root nodes
-$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend); 
-$Sabre_CalDAV_Principal_Collection->disableListing = true; // Disable listening
+$principalCollection = new Sabre_CalDAV_Principal_Collection($principalBackend);
+$principalCollection->disableListing = true; // Disable listening
 
-$Sabre_CardDAV_AddressBookRoot = new Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend);
-$Sabre_CardDAV_AddressBookRoot->disableListing = true; // Disable listening
+$addressBookRoot = new OC_Connector_Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend);
+$addressBookRoot->disableListing = true; // Disable listening
 
-$nodes = array( 
-	$Sabre_CalDAV_Principal_Collection, 
-	$Sabre_CardDAV_AddressBookRoot,
+$nodes = array(
+	$principalCollection,
+	$addressBookRoot,
 	);
 
 // Fire up server
@@ -55,7 +55,7 @@ $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
 $server->addPlugin(new Sabre_CardDAV_Plugin());
 $server->addPlugin(new Sabre_DAVACL_Plugin());
 $server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
-$server->addPlugin(new Sabre_CardDAV_VCFExportPlugin());
+//$server->addPlugin(new OC_Connector_Sabre_CardDAV_VCFExportPlugin());
 
 // And off we go!
 $server->exec();
diff --git a/apps/contacts/lib/sabre/addressbook.php b/apps/contacts/lib/sabre/addressbook.php
new file mode 100644
index 0000000000000000000000000000000000000000..daaaa94339861fe28db48b3575da49a1f28d1a40
--- /dev/null
+++ b/apps/contacts/lib/sabre/addressbook.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * This class overrides __construct to get access to $addressBookInfo and
+ * $carddavBackend, Sabre_CardDAV_AddressBook::getACL() to return read/write
+ * permissions based on user and shared state and it overrides
+ * Sabre_CardDAV_AddressBook::getChild() and Sabre_CardDAV_AddressBook::getChildren()
+ * to instantiate OC_Connector_Sabre_CardDAV_Cards.
+*/
+class OC_Connector_Sabre_CardDAV_AddressBook extends Sabre_CardDAV_AddressBook {
+
+    /**
+     * CardDAV backend
+     *
+     * @var Sabre_CardDAV_Backend_Abstract
+     */
+    private $carddavBackend;
+
+    /**
+     * Constructor
+     *
+     * @param Sabre_CardDAV_Backend_Abstract $carddavBackend
+     * @param array $addressBookInfo
+     */
+    public function __construct(Sabre_CardDAV_Backend_Abstract $carddavBackend, array $addressBookInfo) {
+
+        $this->carddavBackend = $carddavBackend;
+        $this->addressBookInfo = $addressBookInfo;
+		parent::__construct($carddavBackend, $addressBookInfo);
+
+    }
+	/**
+	* Returns a list of ACE's for this node.
+	*
+	* Each ACE has the following properties:
+	*   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+	*     currently the only supported privileges
+	*   * 'principal', a url to the principal who owns the node
+	*   * 'protected' (optional), indicating that this ACE is not allowed to
+	*      be updated.
+	*
+	* @return array
+	*/
+	public function getACL() {
+
+		$readprincipal = $this->getOwner();
+		$writeprincipal = $this->getOwner();
+		$uid = OC_Contacts_Addressbook::extractUserID($this->getOwner());
+
+		if($uid != OCP\USER::getUser()) {
+			$sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $this->addressBookInfo['id']);
+			if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
+				$readprincipal = 'principals/' . OCP\USER::getUser();
+			}
+			if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+				$writeprincipal = 'principals/' . OCP\USER::getUser();
+			}
+		}
+
+		return array(
+			array(
+				'privilege' => '{DAV:}read',
+				'principal' => $readprincipal,
+				'protected' => true,
+			),
+			array(
+				'privilege' => '{DAV:}write',
+				'principal' => $writeprincipal,
+				'protected' => true,
+			),
+
+		);
+
+	}
+
+    /**
+     * Returns a card
+     *
+     * @param string $name
+     * @return OC_Connector_Sabre_DAV_Card
+     */
+    public function getChild($name) {
+
+        $obj = $this->carddavBackend->getCard($this->addressBookInfo['id'],$name);
+        if (!$obj) throw new Sabre_DAV_Exception_NotFound('Card not found');
+        return new OC_Connector_Sabre_CardDAV_Card($this->carddavBackend,$this->addressBookInfo,$obj);
+
+    }
+
+	/**
+	* Returns the full list of cards
+	*
+	* @return array
+	*/
+	public function getChildren() {
+
+		$objs = $this->carddavBackend->getCards($this->addressBookInfo['id']);
+		$children = array();
+		foreach($objs as $obj) {
+			$children[] = new OC_Connector_Sabre_CardDAV_Card($this->carddavBackend,$this->addressBookInfo,$obj);
+		}
+		return $children;
+
+	}
+}
\ No newline at end of file
diff --git a/apps/contacts/lib/sabre/addressbookroot.php b/apps/contacts/lib/sabre/addressbookroot.php
new file mode 100644
index 0000000000000000000000000000000000000000..69cd6021284121059cad177a08c6b7a4e37c126d
--- /dev/null
+++ b/apps/contacts/lib/sabre/addressbookroot.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CardDAV_AddressBookRoot::getChildForPrincipal()
+ * to instantiate OC_Connector_CardDAV_UserAddressBooks.
+*/
+class OC_Connector_Sabre_CardDAV_AddressBookRoot extends Sabre_CardDAV_AddressBookRoot {
+
+	/**
+	* This method returns a node for a principal.
+	*
+	* The passed array contains principal information, and is guaranteed to
+	* at least contain a uri item. Other properties may or may not be
+	* supplied by the authentication backend.
+	*
+	* @param array $principal
+	* @return Sabre_DAV_INode
+	*/
+	public function getChildForPrincipal(array $principal) {
+
+		return new OC_Connector_Sabre_CardDAV_UserAddressBooks($this->carddavBackend, $principal['uri']);
+
+	}
+
+}
\ No newline at end of file
diff --git a/apps/contacts/lib/connector_sabre.php b/apps/contacts/lib/sabre/backend.php
similarity index 98%
rename from apps/contacts/lib/connector_sabre.php
rename to apps/contacts/lib/sabre/backend.php
index 2bc6c9a28ca9de4d9cf6d294312366adc03c6379..04737eb3ab4b9bb30b4c8eddadc504d2d48b55b0 100644
--- a/apps/contacts/lib/connector_sabre.php
+++ b/apps/contacts/lib/sabre/backend.php
@@ -145,6 +145,7 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
 		$data = OC_Contacts_VCard::all($addressbookid);
 		$cards = array();
 		foreach($data as $i){
+			//OCP\Util::writeLog('contacts', __METHOD__.', uri: ' . $i['uri'], OCP\Util::DEBUG);
 			$cards[] = array(
 				'id' => $i['id'],
 				//'carddata' => $i['carddata'],
diff --git a/apps/contacts/lib/sabre/card.php b/apps/contacts/lib/sabre/card.php
new file mode 100644
index 0000000000000000000000000000000000000000..f4414a25f7cbfc617bed19f21a0c621f9d1bf742
--- /dev/null
+++ b/apps/contacts/lib/sabre/card.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CardDAV_Card::getACL()
+ * to return read/write permissions based on user and shared state.
+*/
+class OC_Connector_Sabre_CardDAV_Card extends Sabre_CardDAV_Card {
+
+    /**
+     * Array with information about the containing addressbook
+     *
+     * @var array
+     */
+    private $addressBookInfo;
+
+    /**
+     * Constructor
+     *
+     * @param Sabre_CardDAV_Backend_Abstract $carddavBackend
+     * @param array $addressBookInfo
+     * @param array $cardData
+     */
+    public function __construct(Sabre_CardDAV_Backend_Abstract $carddavBackend, array $addressBookInfo, array $cardData) {
+
+        $this->addressBookInfo = $addressBookInfo;
+		parent::__construct($carddavBackend, $addressBookInfo, $cardData);
+
+    }
+
+	/**
+	* Returns a list of ACE's for this node.
+	*
+	* Each ACE has the following properties:
+	*   * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+	*     currently the only supported privileges
+	*   * 'principal', a url to the principal who owns the node
+	*   * 'protected' (optional), indicating that this ACE is not allowed to
+	*      be updated.
+	*
+	* @return array
+	*/
+	public function getACL() {
+
+		$readprincipal = $this->getOwner();
+		$writeprincipal = $this->getOwner();
+		$uid = OC_Contacts_Addressbook::extractUserID($this->getOwner());
+
+		if($uid != OCP\USER::getUser()) {
+			$sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $this->addressBookInfo['id']);
+			if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
+				$readprincipal = 'principals/' . OCP\USER::getUser();
+			}
+			if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+				$writeprincipal = 'principals/' . OCP\USER::getUser();
+			}
+		}
+
+		return array(
+			array(
+				'privilege' => '{DAV:}read',
+				'principal' => $readprincipal,
+				'protected' => true,
+			),
+			array(
+				'privilege' => '{DAV:}write',
+				'principal' => $writeprincipal,
+				'protected' => true,
+			),
+
+		);
+
+	}
+
+}
\ No newline at end of file
diff --git a/apps/contacts/lib/sabre/useraddressbooks.php b/apps/contacts/lib/sabre/useraddressbooks.php
new file mode 100644
index 0000000000000000000000000000000000000000..328b433bd6ee68d1a497656036db5099012a3797
--- /dev/null
+++ b/apps/contacts/lib/sabre/useraddressbooks.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CardDAV_UserAddressBooks::getChildren()
+ * to instantiate OC_Connector_Sabre_CardDAV_AddressBooks.
+*/
+class OC_Connector_Sabre_CardDAV_UserAddressBooks extends Sabre_CardDAV_UserAddressBooks {
+
+	/**
+	* Returns a list of addressbooks
+	*
+	* @return array
+	*/
+	public function getChildren() {
+
+		$addressbooks = $this->carddavBackend->getAddressbooksForUser($this->principalUri);
+		$objs = array();
+		foreach($addressbooks as $addressbook) {
+			$objs[] = new OC_Connector_Sabre_CardDAV_AddressBook($this->carddavBackend, $addressbook);
+		}
+		return $objs;
+
+	}
+
+}
\ No newline at end of file
diff --git a/apps/contacts/lib/VCFExportPlugin.php b/apps/contacts/lib/sabre/vcfexportplugin.php
similarity index 100%
rename from apps/contacts/lib/VCFExportPlugin.php
rename to apps/contacts/lib/sabre/vcfexportplugin.php
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index cee9c640cf60487d59496f86880e9eee5fb8d6e6..4c66a538a27e981427037337f92ec301a191e536 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -38,7 +38,7 @@
 /**
  * This class manages our vCards
  */
-class OC_Contacts_VCard{
+class OC_Contacts_VCard {
 	/**
 	 * @brief Returns all cards of an address book
 	 * @param integer $id