diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php
index d33545222b0b61dc0fd43ab0c07147a44438fd39..a38bee9824a26d7f8014628b964074727b10ee22 100644
--- a/apps/dav/appinfo/app.php
+++ b/apps/dav/appinfo/app.php
@@ -28,6 +28,18 @@ $app->registerHooks();
 	return $app->getSyncService();
 });
 
+$eventDispatcher = \OC::$server->getEventDispatcher();
+
+$eventDispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
+	function(\Symfony\Component\EventDispatcher\GenericEvent $event) use ($app) {
+		/** @var \OCA\DAV\CardDAV\CardDavBackend $cardDavBackend */
+		$cardDavBackend = $app->getContainer()->query('CardDavBackend');
+		$addressBookUri = $event->getSubject();
+		$addressBook = $cardDavBackend->getAddressBooksByUri('principals/system/system', $addressBookUri);
+		$cardDavBackend->deleteAddressBook($addressBook['id']);
+	}
+);
+
 $cm = \OC::$server->getContactsManager();
 $cm->register(function() use ($cm, $app) {
 	$userId = \OC::$server->getUserSession()->getUser()->getUID();
diff --git a/apps/federation/appinfo/application.php b/apps/federation/appinfo/application.php
index 0d033f449820f017af43318fcfb6445c00bcc947..93897d211c34b382565b341680de20a25281e7a3 100644
--- a/apps/federation/appinfo/application.php
+++ b/apps/federation/appinfo/application.php
@@ -75,13 +75,15 @@ class Application extends \OCP\AppFramework\App {
 		});
 
 		$container->registerService('TrustedServers', function(IAppContainer $c) {
+			$server = $c->getServer();
 			return new TrustedServers(
 				$c->query('DbHandler'),
-				\OC::$server->getHTTPClientService(),
-				\OC::$server->getLogger(),
-				\OC::$server->getJobList(),
-				\OC::$server->getSecureRandom(),
-				\OC::$server->getConfig()
+				$server->getHTTPClientService(),
+				$server->getLogger(),
+				$server->getJobList(),
+				$server->getSecureRandom(),
+				$server->getConfig(),
+				$server->getEventDispatcher()
 			);
 		});
 
@@ -94,6 +96,7 @@ class Application extends \OCP\AppFramework\App {
 				$c->query('TrustedServers')
 			);
 		});
+
 	}
 
 	private function registerMiddleware() {
diff --git a/apps/federation/backgroundjob/getsharedsecret.php b/apps/federation/backgroundjob/getsharedsecret.php
index ebc106ba94e9001786a2c4e0a43a47146a72f21b..f896076139d7ab1ca827bb71795313265ba0523e 100644
--- a/apps/federation/backgroundjob/getsharedsecret.php
+++ b/apps/federation/backgroundjob/getsharedsecret.php
@@ -91,12 +91,13 @@ class GetSharedSecret extends QueuedJob{
 			$this->trustedServers = $trustedServers;
 		} else {
 			$this->trustedServers = new TrustedServers(
-					$this->dbHandler,
-					\OC::$server->getHTTPClientService(),
-					$this->logger,
-					$this->jobList,
-					\OC::$server->getSecureRandom(),
-					\OC::$server->getConfig()
+				$this->dbHandler,
+				\OC::$server->getHTTPClientService(),
+				$this->logger,
+				$this->jobList,
+				\OC::$server->getSecureRandom(),
+				\OC::$server->getConfig(),
+				\OC::$server->getEventDispatcher()
 			);
 		}
 	}
diff --git a/apps/federation/backgroundjob/requestsharedsecret.php b/apps/federation/backgroundjob/requestsharedsecret.php
index 302711af27fba104fe4ee96a1219a4cccddae6ab..79b55fe4ee485b21d7f8558357c81ef1450e87d9 100644
--- a/apps/federation/backgroundjob/requestsharedsecret.php
+++ b/apps/federation/backgroundjob/requestsharedsecret.php
@@ -95,7 +95,8 @@ class RequestSharedSecret extends QueuedJob {
 				$this->logger,
 				$this->jobList,
 				\OC::$server->getSecureRandom(),
-				\OC::$server->getConfig()
+				\OC::$server->getConfig(),
+				\OC::$server->getEventDispatcher()
 			);
 		}
 	}
diff --git a/apps/federation/lib/dbhandler.php b/apps/federation/lib/dbhandler.php
index df36228c760ea2dd23d0c5e82c5970e951bf2458..8720560efc6c69e69842f39d2e84c0c6302fc911 100644
--- a/apps/federation/lib/dbhandler.php
+++ b/apps/federation/lib/dbhandler.php
@@ -105,6 +105,28 @@ class DbHandler {
 		$query->execute();
 	}
 
+	/**
+	 * get trusted server with given ID
+	 *
+	 * @param int $id
+	 * @return array
+	 * @throws \Exception
+	 */
+	public function getServerById($id) {
+		$query = $this->connection->getQueryBuilder();
+		$query->select('*')->from($this->dbTable)
+			->where($query->expr()->eq('id', $query->createParameter('id')))
+			->setParameter('id', $id);
+		$query->execute();
+		$result = $query->execute()->fetchAll();
+
+		if (empty($result)) {
+			throw new \Exception('No Server found with ID: ' . $id);
+		}
+
+		return $result[0];
+	}
+
 	/**
 	 * get all trusted servers
 	 *
diff --git a/apps/federation/lib/trustedservers.php b/apps/federation/lib/trustedservers.php
index 340accfdbdfb27f88c76af7a7cd8a96dd275e362..fed6b0944a8b348ec0ee1c8df50ef3849c08af6b 100644
--- a/apps/federation/lib/trustedservers.php
+++ b/apps/federation/lib/trustedservers.php
@@ -30,6 +30,8 @@ use OCP\Http\Client\IClientService;
 use OCP\IConfig;
 use OCP\ILogger;
 use OCP\Security\ISecureRandom;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\EventDispatcher\GenericEvent;
 
 class TrustedServers {
 
@@ -58,6 +60,9 @@ class TrustedServers {
 	/** @var IConfig */
 	private $config;
 
+	/** @var EventDispatcherInterface */
+	private $dispatcher;
+
 	/**
 	 * @param DbHandler $dbHandler
 	 * @param IClientService $httpClientService
@@ -65,6 +70,7 @@ class TrustedServers {
 	 * @param IJobList $jobList
 	 * @param ISecureRandom $secureRandom
 	 * @param IConfig $config
+	 * @param EventDispatcherInterface $dispatcher
 	 */
 	public function __construct(
 		DbHandler $dbHandler,
@@ -72,7 +78,8 @@ class TrustedServers {
 		ILogger $logger,
 		IJobList $jobList,
 		ISecureRandom $secureRandom,
-		IConfig $config
+		IConfig $config,
+		EventDispatcherInterface $dispatcher
 	) {
 		$this->dbHandler = $dbHandler;
 		$this->httpClientService = $httpClientService;
@@ -80,6 +87,7 @@ class TrustedServers {
 		$this->jobList = $jobList;
 		$this->secureRandom = $secureRandom;
 		$this->config = $config;
+		$this->dispatcher = $dispatcher;
 	}
 
 	/**
@@ -154,7 +162,10 @@ class TrustedServers {
 	 * @param int $id
 	 */
 	public function removeServer($id) {
+		$server = $this->dbHandler->getServerById($id);
 		$this->dbHandler->removeServer($id);
+		$event = new GenericEvent($server['url_hash']);
+		$this->dispatcher->dispatch('OCP\Federation\TrustedServerEvent::remove', $event);
 	}
 
 	/**
diff --git a/apps/federation/settings/settings-admin.php b/apps/federation/settings/settings-admin.php
index 8c6bfe6bbbbac20b0a112759077b7f7c0aa44e07..a41d815feb80bd04210de9962c2b3feb8c6649bc 100644
--- a/apps/federation/settings/settings-admin.php
+++ b/apps/federation/settings/settings-admin.php
@@ -34,7 +34,8 @@ $trustedServers = new \OCA\Federation\TrustedServers(
 	\OC::$server->getLogger(),
 	\OC::$server->getJobList(),
 	\OC::$server->getSecureRandom(),
-	\OC::$server->getConfig()
+	\OC::$server->getConfig(),
+	\OC::$server->getEventDispatcher()
 );
 
 $template->assign('trustedServers', $trustedServers->getServers());
diff --git a/apps/federation/tests/lib/dbhandlertest.php b/apps/federation/tests/lib/dbhandlertest.php
index ee28da8e02aadcee51bc0c41b0adba4da8834fd2..28f76dbb22ec3fbd3a395419e717c013403cb34b 100644
--- a/apps/federation/tests/lib/dbhandlertest.php
+++ b/apps/federation/tests/lib/dbhandlertest.php
@@ -115,6 +115,15 @@ class DbHandlerTest extends TestCase {
 		$this->assertSame($id1, (int)$result[0]['id']);
 	}
 
+
+	public function testGetServerById() {
+		$this->dbHandler->addServer('server1');
+		$id = $this->dbHandler->addServer('server2');
+
+		$result = $this->dbHandler->getServerById($id);
+		$this->assertSame('server2', $result['url']);
+	}
+
 	public function testGetAll() {
 		$id1 = $this->dbHandler->addServer('server1');
 		$id2 = $this->dbHandler->addServer('server2');
diff --git a/apps/federation/tests/lib/trustedserverstest.php b/apps/federation/tests/lib/trustedserverstest.php
index 130a0e3bb22e40b5b5771757e49dc3ab64e521ea..80f7843d818ea2a9ab0428890a406cf2bd33061a 100644
--- a/apps/federation/tests/lib/trustedserverstest.php
+++ b/apps/federation/tests/lib/trustedserverstest.php
@@ -23,7 +23,6 @@
 namespace OCA\Federation\Tests\lib;
 
 
-use OC\HintException;
 use OCA\Federation\DbHandler;
 use OCA\Federation\TrustedServers;
 use OCP\BackgroundJob\IJobList;
@@ -33,6 +32,7 @@ use OCP\Http\Client\IResponse;
 use OCP\IConfig;
 use OCP\ILogger;
 use OCP\Security\ISecureRandom;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Test\TestCase;
 
 class TrustedServersTest extends TestCase {
@@ -64,11 +64,16 @@ class TrustedServersTest extends TestCase {
 	/** @var  \PHPUnit_Framework_MockObject_MockObject | IConfig */
 	private $config;
 
+	/** @var  \PHPUnit_Framework_MockObject_MockObject | EventDispatcherInterface */
+	private $dispatcher;
+
 	public function setUp() {
 		parent::setUp();
 
 		$this->dbHandler = $this->getMockBuilder('\OCA\Federation\DbHandler')
 			->disableOriginalConstructor()->getMock();
+		$this->dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')
+			->disableOriginalConstructor()->getMock();
 		$this->httpClientService = $this->getMock('OCP\Http\Client\IClientService');
 		$this->httpClient = $this->getMock('OCP\Http\Client\IClient');
 		$this->response = $this->getMock('OCP\Http\Client\IResponse');
@@ -83,7 +88,8 @@ class TrustedServersTest extends TestCase {
 			$this->logger,
 			$this->jobList,
 			$this->secureRandom,
-			$this->config
+			$this->config,
+			$this->dispatcher
 		);
 
 	}
@@ -103,7 +109,8 @@ class TrustedServersTest extends TestCase {
 					$this->logger,
 					$this->jobList,
 					$this->secureRandom,
-					$this->config
+					$this->config,
+					$this->dispatcher
 				]
 			)
 			->setMethods(['normalizeUrl', 'updateProtocol'])
@@ -191,7 +198,18 @@ class TrustedServersTest extends TestCase {
 
 	public function testRemoveServer() {
 		$id = 42;
+		$server = ['url_hash' => 'url_hash'];
 		$this->dbHandler->expects($this->once())->method('removeServer')->with($id);
+		$this->dbHandler->expects($this->once())->method('getServerById')->with($id)
+			->willReturn($server);
+		$this->dispatcher->expects($this->once())->method('dispatch')
+			->willReturnCallback(
+				function($eventId, $event) {
+					$this->assertSame($eventId, 'OCP\Federation\TrustedServerEvent::remove');
+					$this->assertInstanceOf('Symfony\Component\EventDispatcher\GenericEvent', $event);
+					$this->assertSame('url_hash', $event->getSubject());
+				}
+			);
 		$this->trustedServers->removeServer($id);
 	}
 
@@ -247,7 +265,8 @@ class TrustedServersTest extends TestCase {
 					$this->logger,
 					$this->jobList,
 					$this->secureRandom,
-					$this->config
+					$this->config,
+					$this->dispatcher
 				]
 			)
 			->setMethods(['checkOwnCloudVersion'])