diff --git a/lib/base.php b/lib/base.php
index feaf46e83f1442f5200de1d67f309597d23fe496..6a1841fa93b7de1a8c5f9a8057be154f27691020 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -246,18 +246,21 @@ class OC {
 		$configFileWritable = is_writable($configFilePath);
 		if (!$configFileWritable && !OC_Helper::isReadOnlyConfigEnabled()
 			|| !$configFileWritable && self::checkUpgrade(false)) {
+
+			$urlGenerator = \OC::$server->getURLGenerator();
+
 			if (self::$CLI) {
 				echo $l->t('Cannot write into "config" directory!')."\n";
 				echo $l->t('This can usually be fixed by giving the webserver write access to the config directory')."\n";
 				echo "\n";
-				echo $l->t('See %s', array(\OC_Helper::linkToDocs('admin-dir_permissions')))."\n";
+				echo $l->t('See %s', [ $urlGenerator->linkToDocs('admin-dir_permissions') ])."\n";
 				exit;
 			} else {
 				OC_Template::printErrorPage(
 					$l->t('Cannot write into "config" directory!'),
 					$l->t('This can usually be fixed by '
 					. '%sgiving the webserver write access to the config directory%s.',
-					 array('<a href="'.\OC_Helper::linkToDocs('admin-dir_permissions').'" target="_blank">', '</a>'))
+					 array('<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
 				);
 			}
 		}
diff --git a/lib/private/config.php b/lib/private/config.php
index 3ad800a00bec7213dfc766ad9e716a1d1f98b625..94b4fd56daa150f3dc2d5489c1c4fbd39fa13b7b 100644
--- a/lib/private/config.php
+++ b/lib/private/config.php
@@ -234,7 +234,9 @@ class Config {
 
 		// File does not exist, this can happen when doing a fresh install
 		if(!is_resource ($filePointer)) {
-			$url = \OC_Helper::linkToDocs('admin-dir_permissions');
+			// TODO fix this via DI once it is very clear that this doesn't cause side effects due to initialization order
+			// currently this breaks app routes but also could have other side effects especially during setup and exception handling
+			$url = \OC::$server->getURLGenerator()->linkToDocs('admin-dir_permissions');
 			throw new HintException(
 				"Can't write into config directory!",
 				'This can usually be fixed by '
diff --git a/lib/private/helper.php b/lib/private/helper.php
index fc7653baf6fe545f6e77a6945fde7ee5a3e0a62b..fb8e38cc26e4798ab0be787f597430e19d23d495 100644
--- a/lib/private/helper.php
+++ b/lib/private/helper.php
@@ -81,15 +81,6 @@ class OC_Helper {
 		return OC::$server->getURLGenerator()->linkTo($app, $file, $args);
 	}
 
-	/**
-	 * @param string $key
-	 * @return string url to the online documentation
-	 * @deprecated Use \OC::$server->getURLGenerator()->linkToDocs($key)
-	 */
-	public static function linkToDocs($key) {
-		return OC::$server->getURLGenerator()->linkToDocs($key);
-	}
-
 	/**
 	 * Creates an absolute url
 	 * @param string $app app
diff --git a/lib/private/template/functions.php b/lib/private/template/functions.php
index cea5860cec68c1e37c81e70d80c4b55e8feaa25d..79d18632d2fa79505e0e502bc3829ef51b7f1d79 100644
--- a/lib/private/template/functions.php
+++ b/lib/private/template/functions.php
@@ -154,7 +154,7 @@ function link_to( $app, $file, $args = array() ) {
  * @return string url to the online documentation
  */
 function link_to_docs($key) {
-	return OC_Helper::linkToDocs($key);
+	return \OC::$server->getURLGenerator()->linkToDocs($key);
 }
 
 /**
diff --git a/lib/private/util.php b/lib/private/util.php
index 69f01c22be9637cf736b16cceb23d74e93932326..84a8c49c3839726a3ad1b491ee6ae8f0b2900bf1 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -621,6 +621,9 @@ class OC_Util {
 		$webServerRestart = false;
 		$setup = new \OC\Setup($config, \OC::$server->getIniWrapper(), \OC::$server->getL10N('lib'),
 			new \OC_Defaults(), \OC::$server->getLogger(), \OC::$server->getSecureRandom());
+
+		$urlGenerator = \OC::$server->getURLGenerator();
+
 		$availableDatabases = $setup->getSupportedDatabases();
 		if (empty($availableDatabases)) {
 			$errors[] = array(
@@ -649,7 +652,7 @@ class OC_Util {
 				'error' => $l->t('Cannot write into "config" directory'),
 				'hint' => $l->t('This can usually be fixed by '
 					. '%sgiving the webserver write access to the config directory%s.',
-					array('<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
+					array('<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
 			);
 		}
 
@@ -664,7 +667,7 @@ class OC_Util {
 					'hint' => $l->t('This can usually be fixed by '
 						. '%sgiving the webserver write access to the apps directory%s'
 						. ' or disabling the appstore in the config file.',
-						array('<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
+						array('<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'))
 				);
 			}
 		}
@@ -679,14 +682,14 @@ class OC_Util {
 						'error' => $l->t('Cannot create "data" directory (%s)', array($CONFIG_DATADIRECTORY)),
 						'hint' => $l->t('This can usually be fixed by '
 							. '<a href="%s" target="_blank">giving the webserver write access to the root directory</a>.',
-							array(OC_Helper::linkToDocs('admin-dir_permissions')))
+							array($urlGenerator->linkToDocs('admin-dir_permissions')))
 					);
 				}
 			} else if (!is_writable($CONFIG_DATADIRECTORY) or !is_readable($CONFIG_DATADIRECTORY)) {
 				//common hint for all file permissions error messages
 				$permissionsHint = $l->t('Permissions can usually be fixed by '
 					. '%sgiving the webserver write access to the root directory%s.',
-					array('<a href="' . \OC_Helper::linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'));
+					array('<a href="' . $urlGenerator->linkToDocs('admin-dir_permissions') . '" target="_blank">', '</a>'));
 				$errors[] = array(
 					'error' => 'Data directory (' . $CONFIG_DATADIRECTORY . ') not writable by ownCloud',
 					'hint' => $permissionsHint