diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php
index 55a187d9654a2ab054e137ba98302d7c1df1b6ae..314c73e6c4a619ecfd54f0dfeed7333d6798c1b2 100644
--- a/apps/user_ldap/appinfo/register_command.php
+++ b/apps/user_ldap/appinfo/register_command.php
@@ -9,6 +9,7 @@
 use OCA\user_ldap\lib\Helper;
 use OCA\user_ldap\lib\LDAP;
 use OCA\user_ldap\User_Proxy;
+use OCA\User_LDAP\Mapping\UserMapping;
 
 $application->add(new OCA\user_ldap\Command\ShowConfig());
 $application->add(new OCA\user_ldap\Command\SetConfig());
@@ -16,11 +17,12 @@ $application->add(new OCA\user_ldap\Command\TestConfig());
 $application->add(new OCA\user_ldap\Command\CreateEmptyConfig());
 $application->add(new OCA\user_ldap\Command\DeleteConfig());
 $application->add(new OCA\user_ldap\Command\Search());
-$application->add(new OCA\user_ldap\Command\ShowRemnants());
-$helper = new OCA\user_ldap\lib\Helper();
-$uBackend = new OCA\user_ldap\User_Proxy(
+$userMapping = new UserMapping(\OC::$server->getDatabaseConnection());
+$application->add(new OCA\user_ldap\Command\ShowRemnants($userMapping));
+$helper = new Helper();
+$uBackend = new User_Proxy(
 	$helper->getServerConfigurationPrefixes(true),
-	new OCA\user_ldap\lib\LDAP()
+	new LDAP()
 );
 $application->add(new OCA\user_ldap\Command\CheckUser(
 	$uBackend, $helper, \OC::$server->getConfig()
diff --git a/apps/user_ldap/command/showremnants.php b/apps/user_ldap/command/showremnants.php
index 3d39f9774215c174d48107ad9c48b966f3dac720..fb9fc54ff6aabf66b6304f39362ed722f2e93c2a 100644
--- a/apps/user_ldap/command/showremnants.php
+++ b/apps/user_ldap/command/showremnants.php
@@ -16,9 +16,21 @@ use Symfony\Component\Console\Output\OutputInterface;
 
 use OCA\user_ldap\lib\user\DeletedUsersIndex;
 use OCA\User_LDAP\lib\Connection;
-use OCA\User_LDAP\lib\Access;
+use OCA\User_LDAP\Mapping\UserMapping;
 
 class ShowRemnants extends Command {
+	/** @var OCA\User_LDAP\Mapping\UserMapping */
+	protected $mapping;
+
+	/**
+	 * @param OCA\user_ldap\User_Proxy $uBackend
+	 * @param OCA\User_LDAP\lib\Helper $helper
+	 * @param OCP\IConfig $config
+	 */
+	public function __construct(UserMapping $mapper) {
+		$this->mapper = $mapper;
+		parent::__construct();
+	}
 
 	protected function configure() {
 		$this
@@ -31,7 +43,7 @@ class ShowRemnants extends Command {
 		$dui = new DeletedUsersIndex(
 			new \OC\Preferences(\OC_DB::getConnection()),
 			\OC::$server->getDatabaseConnection(),
-			$this->getAccess()
+			$this->mapper
 		);
 
 		/** @var \Symfony\Component\Console\Helper\Table $table */
@@ -63,19 +75,4 @@ class ShowRemnants extends Command {
 		$table->setRows($rows);
 		$table->render($output);
 	}
-
-	protected function getAccess() {
-		$ldap = new \OCA\user_ldap\lib\LDAP();
-		$dummyConnection = new Connection($ldap, '', null);
-		$userManager = new \OCA\user_ldap\lib\user\Manager(
-			\OC::$server->getConfig(),
-			new \OCA\user_ldap\lib\FilesystemHelper(),
-			new \OCA\user_ldap\lib\LogWrapper(),
-			\OC::$server->getAvatarManager(),
-			new \OCP\Image()
-		);
-		$access = new Access($dummyConnection, $ldap, $userManager);
-		return $access;
-	}
-
 }
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index 692afb98f9910e805b0d422a3d9caab294855057..3e9869b4d717af449d5564aa11e8bfc444978a8b 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -75,6 +75,18 @@ class Access extends LDAPUtility implements user\IUserTools {
 		$this->userMapper = $mapper;
 	}
 
+	/**
+	 * returns the User Mapper
+	 * @throws \Exception
+	 * @return AbstractMapping
+	 */
+	public function getUserMapper() {
+		if(is_null($this->userMapper)) {
+			throw new \Exception('UserMapper was not assigned to this Access instance.');
+		}
+		return $this->userMapper;
+	}
+
 	/**
 	 * sets the Group Mapper
 	 * @param AbstractMapping $mapper
@@ -83,6 +95,18 @@ class Access extends LDAPUtility implements user\IUserTools {
 		$this->groupMapper = $mapper;
 	}
 
+	/**
+	 * returns the Group Mapper
+	 * @throws \Exception
+	 * @return AbstractMapping
+	 */
+	public function getGroupMapper() {
+		if(is_null($this->groupMapper)) {
+			throw new \Exception('GroupMapper was not assigned to this Access instance.');
+		}
+		return $this->groupMapper;
+	}
+
 	/**
 	 * @return bool
 	 */
@@ -333,10 +357,10 @@ class Access extends LDAPUtility implements user\IUserTools {
 	 */
 	public function dn2ocname($fdn, $ldapName = null, $isUser = true) {
 		if($isUser) {
-			$mapper = $this->userMapper;
+			$mapper = $this->getUserMapper();
 			$nameAttribute = $this->connection->ldapUserDisplayName;
 		} else {
-			$mapper = $this->groupMapper;
+			$mapper = $this->getGroupMapper();
 			$nameAttribute = $this->connection->ldapGroupDisplayName;
 		}
 
diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php
index 30f09cdc8f85808284acdafe794eb9f3b4698ed8..391a10d31f8f2a5f8c3ec7e2b12e9d35d2cd6e94 100644
--- a/apps/user_ldap/lib/jobs.php
+++ b/apps/user_ldap/lib/jobs.php
@@ -23,6 +23,8 @@
 
 namespace OCA\user_ldap\lib;
 
+use OCA\User_LDAP\Mapping\GroupMapping;
+
 class Jobs extends \OC\BackgroundJob\TimedJob {
 	static private $groupsFromDB;
 
@@ -169,6 +171,7 @@ class Jobs extends \OC\BackgroundJob\TimedJob {
 				new \OCP\Image());
 			$connector = new Connection($ldapWrapper, $configPrefixes[0]);
 			$ldapAccess = new Access($connector, $ldapWrapper, $userManager);
+			$groupMapper = new GroupMapping(\OC::$server->getDatabaseConnection());
 			self::$groupBE = new \OCA\user_ldap\GROUP_LDAP($ldapAccess);
 		} else {
 			self::$groupBE = new \OCA\user_ldap\Group_Proxy($configPrefixes, $ldapWrapper);
diff --git a/apps/user_ldap/lib/user/deletedusersindex.php b/apps/user_ldap/lib/user/deletedusersindex.php
index 0d8bacffe9439e29490d37b5ecc888dca4c7df7b..e544d29bad5ada3a6750d967f477d0905602bb19 100644
--- a/apps/user_ldap/lib/user/deletedusersindex.php
+++ b/apps/user_ldap/lib/user/deletedusersindex.php
@@ -24,7 +24,7 @@
 namespace OCA\user_ldap\lib\user;
 
 use OCA\user_ldap\lib\user\OfflineUser;
-use OCA\user_ldap\lib\Access;
+use OCA\User_LDAP\Mapping\UserMapping;
 
 /**
  * Class DeletedUsersIndex
@@ -42,9 +42,9 @@ class DeletedUsersIndex {
 	protected $db;
 
 	/**
-	 * @var \OCA\user_ldap\lib\Access $access
+	 * @var \OCA\User_LDAP\Mapping\UserMapping $mapping
 	 */
-	protected $access;
+	protected $mapping;
 
 	/**
 	 * @var int $limit
@@ -56,10 +56,10 @@ class DeletedUsersIndex {
 	 */
 	protected $deletedUsers = false;
 
-	public function __construct(\OC\Preferences $preferences, \OCP\IDBConnection $db, Access $access) {
+	public function __construct(\OC\Preferences $preferences, \OCP\IDBConnection $db, UserMapping $mapping) {
 		$this->preferences = $preferences;
 		$this->db = $db;
-		$this->access = $access;
+		$this->mapping = $mapping;
 	}
 
 	/**
@@ -84,7 +84,7 @@ class DeletedUsersIndex {
 
 		$userObjects = array();
 		foreach($deletedUsers as $user) {
-			$userObjects[] = new OfflineUser($user, $this->preferences, $this->db, $this->access);
+			$userObjects[] = new OfflineUser($user, $this->preferences, $this->db, $this->mapping);
 		}
 
 		$this->deletedUsers[$key] = $userObjects;
diff --git a/apps/user_ldap/lib/user/iusertools.php b/apps/user_ldap/lib/user/iusertools.php
index ffdef62410dcd1bf6c625a7fd9565fb75b6e4644..fcb00d2f7467ac3c3b3814a5eaa76c5fefe0b238 100644
--- a/apps/user_ldap/lib/user/iusertools.php
+++ b/apps/user_ldap/lib/user/iusertools.php
@@ -38,8 +38,4 @@ interface IUserTools {
 	public function dn2username($dn, $ldapname = null);
 
 	public function username2dn($name);
-
-	//temporary hack for LDAP user cleanup, will be removed in OC 8.
-	public function ocname2dn($name, $isUser);
-
 }
diff --git a/apps/user_ldap/lib/user/manager.php b/apps/user_ldap/lib/user/manager.php
index 1bcc9b96d8ac15335f66fb034b043e7a5b25dd90..cd4f4441e1dab35aebebf0e6ef0d958459184d6f 100644
--- a/apps/user_ldap/lib/user/manager.php
+++ b/apps/user_ldap/lib/user/manager.php
@@ -154,7 +154,7 @@ class Manager {
 			$id,
 			new \OC\Preferences(\OC_DB::getConnection()),
 			\OC::$server->getDatabaseConnection(),
-			$this->access);
+			$this->access->getUserMapper());
 	}
 
 	protected function createInstancyByUserName($id) {
diff --git a/apps/user_ldap/lib/user/offlineuser.php b/apps/user_ldap/lib/user/offlineuser.php
index 7750348a2808745aa69bf1ddbca1a4abeef509d3..7cf48bc05b1b9bca9b4ead07580030e43b8e8e12 100644
--- a/apps/user_ldap/lib/user/offlineuser.php
+++ b/apps/user_ldap/lib/user/offlineuser.php
@@ -23,7 +23,7 @@
 
 namespace OCA\user_ldap\lib\user;
 
-use OCA\user_ldap\lib\Access;
+use OCA\User_LDAP\Mapping\UserMapping;
 
 class OfflineUser {
 	/**
@@ -67,15 +67,15 @@ class OfflineUser {
 	 */
 	protected $db;
 	/**
-	 * @var \OCA\user_ldap\lib\Access
+	 * @var OCA\User_LDAP\Mapping\UserMapping
 	 */
-	protected $access;
+	protected $mapping;
 
-	public function __construct($ocName, \OC\Preferences $preferences, \OCP\IDBConnection $db, Access $access) {
+	public function __construct($ocName, \OC\Preferences $preferences, \OCP\IDBConnection $db, UserMapping $mapping) {
 		$this->ocName = $ocName;
 		$this->preferences = $preferences;
 		$this->db = $db;
-		$this->access = $access;
+		$this->mapping = $mapping;
 		$this->fetchDetails();
 	}
 
@@ -176,7 +176,7 @@ class OfflineUser {
 			$this->$property = $this->preferences->getValue($this->ocName, $app, $property, '');
 		}
 
-		$dn = $this->access->ocname2dn($this->ocName, true);
+		$dn = $this->mapping->getDNByName($this->ocName);
 		$this->dn = ($dn !== false) ? $dn : '';
 
 		$this->determineShares();
diff --git a/apps/user_ldap/tests/user_ldap.php b/apps/user_ldap/tests/user_ldap.php
index 876b3d0903a9f84938bda956fb0df0f1ece7b966..fdda35b63c95675fa7b25c076ad88a13be079bae 100644
--- a/apps/user_ldap/tests/user_ldap.php
+++ b/apps/user_ldap/tests/user_ldap.php
@@ -239,6 +239,16 @@ class Test_User_Ldap_Direct extends \Test\TestCase {
 
 	public function testDeleteUserSuccess() {
 		$access = $this->getAccessMock();
+		$mapping = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping')
+			->disableOriginalConstructor()
+			->getMock();
+		$mapping->expects($this->once())
+			->method('unmap')
+			->will($this->returnValue(true));
+		$access->expects($this->once())
+			->method('getUserMapper')
+			->will($this->returnValue($mapping));
+
 		$backend = new UserLDAP($access);
 
 		$pref = \OC::$server->getConfig();
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index 2274e4156ccdb9d771f9b58c1ecd204d4c29b4e3..c2d0f387b9c68149a0e173fe6e47dd5164250a9b 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -229,7 +229,7 @@ class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn
 		//necessary for removing directories as done by OC_User.
 		$home = $pref->getUserValue($uid, 'user_ldap', 'homePath', '');
 		$this->homesToKill[$uid] = $home;
-		$this->access->unmapUser($uid);
+		$this->access->getUserMapper()->unmap($uid);
 
 		return true;
 	}