diff --git a/lib/public/contacts.php b/lib/public/contacts.php
index 36195ef9c243ef6ead06a6cc0d6c7d1f573620bf..d14806bd0c4841ecc3dd916ae32435512436b8db 100644
--- a/lib/public/contacts.php
+++ b/lib/public/contacts.php
@@ -67,7 +67,7 @@ namespace OC {
 		/**
 		 * @return mixed
 		 */
-		public function isReadOnly();
+		public function getPermissions();
 
 		/**
 		 * @param $id
@@ -129,7 +129,7 @@ namespace OCP {
 				return null;
 
 			$address_book = self::$address_books[$address_book_key];
-			if ($address_book->isReadOnly())
+			if ($address_book->getPermissions() & \OCP\PERMISSION_DELETE)
 				return null;
 
 			return $address_book->delete($id);
@@ -149,7 +149,7 @@ namespace OCP {
 				return null;
 
 			$address_book = self::$address_books[$address_book_key];
-			if ($address_book->isReadOnly())
+			if ($address_book->getPermissions() & \OCP\PERMISSION_CREATE)
 				return null;
 
 			return $address_book->createOrUpdate($properties);
@@ -190,9 +190,16 @@ namespace OCP {
 			return $result;
 		}
 
+		/**
+		 * removes all registered address book instances
+		 */
+		public static function clear() {
+			self::$address_books = array();
+		}
+
 		/**
 		 * @var \OC\IAddressBook[] which holds all registered address books
 		 */
 		private static $address_books = array();
 	}
-}
\ No newline at end of file
+}
diff --git a/tests/lib/public/contacts.php b/tests/lib/public/contacts.php
new file mode 100644
index 0000000000000000000000000000000000000000..abe0e1f625038663ee0869aa9e0c82debc172f30
--- /dev/null
+++ b/tests/lib/public/contacts.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2012 Thomas Müller thomas.mueller@tmit.eu
+ *
+ * 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/>.
+ */
+
+OC::autoload('OCP\Contacts');
+
+class Test_Contacts extends PHPUnit_Framework_TestCase
+{
+
+	public function setUp() {
+
+		OCP\Contacts::clear();
+	}
+
+	public function tearDown() {
+	}
+
+	public function testDisabledIfEmpty() {
+		// pretty simple
+		$this->assertFalse(OCP\Contacts::isEnabled());
+	}
+
+	public function testEnabledAfterRegister() {
+		// create mock for the addressbook
+		$stub = $this->getMock("SimpleAddressBook", array('getKey'));
+
+		// we expect getKey to be called once
+		$stub->expects($this->once())
+			->method('getKey');
+
+		// not enabled before register
+		$this->assertFalse(OCP\Contacts::isEnabled());
+
+		// register the address book
+		OCP\Contacts::registerAddressBook($stub);
+
+		// contacts api shall be enabled
+		$this->assertTrue(OCP\Contacts::isEnabled());
+	}
+
+	//
+	// TODO: test unregister
+	//
+
+	public function testAddressBookEnumeration() {
+		// create mock for the addressbook
+		$stub = $this->getMock("SimpleAddressBook", array('getKey', 'getDisplayName'));
+
+		// setup return for method calls
+		$stub->expects($this->any())
+			->method('getKey')
+			->will($this->returnValue('SIMPLE_ADDRESS_BOOK'));
+		$stub->expects($this->any())
+			->method('getDisplayName')
+			->will($this->returnValue('A very simple Addressbook'));
+
+		// register the address book
+		OCP\Contacts::registerAddressBook($stub);
+		$all_books = OCP\Contacts::getAddressBooks();
+
+		$this->assertEquals(1, count($all_books));
+	}
+}