From f7537c9e90fa1b35618abd523d0d00f9658085a9 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Wed, 17 Feb 2016 00:01:24 +0100
Subject: [PATCH 1/4] Remove the baseurl where possible to avoid mixed content

---
 boot.php                  |  4 ++++
 include/ForumManager.php  | 10 +++++-----
 include/nav.php           |  2 +-
 mod/network.php           | 22 ++++++++++----------
 object/Item.php           |  2 +-
 view/templates/head.tpl   | 42 +++++++++++++++++++--------------------
 view/theme/vier/theme.php |  8 +++-----
 7 files changed, 46 insertions(+), 44 deletions(-)

diff --git a/boot.php b/boot.php
index d9d7c62dc7..0217750136 100644
--- a/boot.php
+++ b/boot.php
@@ -920,6 +920,10 @@ class App {
 	}
 
 	function get_cached_avatar_image($avatar_image){
+		// Just remove the base url. This avoid mixed content
+		$avatar_image = normalise_link($avatar_image);
+		$base = normalise_link($this->get_baseurl());
+		$avatar_image = str_replace($base."/", "", $avatar_image);
 		return $avatar_image;
 
 		// The following code is deactivated. It doesn't seem to make any sense and it slows down the system.
diff --git a/include/ForumManager.php b/include/ForumManager.php
index 49417d1831..73eb511de6 100644
--- a/include/ForumManager.php
+++ b/include/ForumManager.php
@@ -89,18 +89,18 @@ class ForumManager {
 		if(count($contacts)) {
 
 			$id = 0;
-
+$a = get_app();
 			foreach($contacts as $contact) {
 
 				$selected = (($cid == $contact['id']) ? ' forum-selected' : '');
 
 				$entry = array(
-					'url' => z_root() . '/network?f=&cid=' . $contact['id'],
-					'external_url' => z_root() . '/redir/' . $contact['id'],
+					'url' => 'network?f=&cid=' . $contact['id'],
+					'external_url' => 'redir/' . $contact['id'],
 					'name' => $contact['name'],
 					'cid' => $contact['id'],
 					'selected' 	=> $selected,
-					'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO),
+					'micro' => $a->get_cached_avatar_image(proxy_url($contact['micro'], false, PROXY_SIZE_MICRO)),
 					'id' => ++$id,
 				);
 				$entries[] = $entry;
@@ -187,4 +187,4 @@ class ForumManager {
 		return $r;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/include/nav.php b/include/nav.php
index 6512d35609..fb7225af92 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -107,7 +107,7 @@ function nav_info(&$a) {
 	if(($a->config['register_policy'] == REGISTER_OPEN) && (! local_user()) && (! remote_user()))
 		$nav['register'] = array('register',t('Register'), "", t('Create an account'));
 
-	$help_url = $a->get_baseurl($ssl_state) . '/help';
+	$help_url = 'help';
 
 	if(! get_config('system','hide_help'))
 		$nav['help'] = array($help_url, t('Help'), "", t('Help and documentation'));
diff --git a/mod/network.php b/mod/network.php
index 0010a3d824..a9f369a894 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -149,10 +149,10 @@ function network_init(&$a) {
 
 	$a->page['aside'] .= (feature_enabled(local_user(),'groups') ? group_side('network/0','network','standard',$group_id) : '');
 	$a->page['aside'] .= (feature_enabled(local_user(),'forumlist_widget') ? ForumManager::widget(local_user(),$cid) : '');
-	$a->page['aside'] .= posted_date_widget($a->get_baseurl() . '/network',local_user(),false);
-	$a->page['aside'] .= networks_widget($a->get_baseurl(true) . '/network',(x($_GET, 'nets') ? $_GET['nets'] : ''));
+	$a->page['aside'] .= posted_date_widget('network',local_user(),false);
+	$a->page['aside'] .= networks_widget('network',(x($_GET, 'nets') ? $_GET['nets'] : ''));
 	$a->page['aside'] .= saved_searches($search);
-	$a->page['aside'] .= fileas_widget($a->get_baseurl(true) . '/network',(x($_GET, 'file') ? $_GET['file'] : ''));
+	$a->page['aside'] .= fileas_widget('network',(x($_GET, 'file') ? $_GET['file'] : ''));
 
 }
 
@@ -363,7 +363,7 @@ function network_content(&$a, $update = 0) {
 	$tabs = array(
 		array(
 			'label'	=> t('Commented Order'),
-			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
+			'url'	=> str_replace('/new', '', $cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
 			'sel'	=> $all_active,
 			'title'	=> t('Sort by Comment Date'),
 			'id'	=> 'commented-order-tab',
@@ -371,7 +371,7 @@ function network_content(&$a, $update = 0) {
 		),
 		array(
 			'label'	=> t('Posted Order'),
-			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
+			'url'	=> str_replace('/new', '', $cmd) . '?f=&order=post' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''),
 			'sel'	=> $postord_active,
 			'title'	=> t('Sort by Post Date'),
 			'id'	=> 'posted-order-tab',
@@ -382,7 +382,7 @@ function network_content(&$a, $update = 0) {
 	if(feature_enabled(local_user(),'personal_tab')) {
 		$tabs[] = array(
 			'label'	=> t('Personal'),
-			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
+			'url'	=> str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&conv=1',
 			'sel'	=> $conv_active,
 			'title'	=> t('Posts that mention or involve you'),
 			'id'	=> 'personal-tab',
@@ -393,7 +393,7 @@ function network_content(&$a, $update = 0) {
 	if(feature_enabled(local_user(),'new_tab')) {
 		$tabs[] = array(
 			'label'	=> t('New'),
-			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
+			'url'	=> str_replace('/new', '', $cmd) . ($len_naked_cmd ? '/' : '') . 'new' . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : ''),
 			'sel'	=> $new_active,
 			'title'	=> t('Activity Stream - by date'),
 			'id'	=> 'activitiy-by-date-tab',
@@ -404,7 +404,7 @@ function network_content(&$a, $update = 0) {
 	if(feature_enabled(local_user(),'link_tab')) {
 		$tabs[] = array(
 			'label'	=> t('Shared Links'),
-			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
+			'url'	=> str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&bmark=1',
 			'sel'	=> $bookmarked_active,
 			'title'	=> t('Interesting Links'),
 			'id'	=> 'shared-links-tab',
@@ -415,7 +415,7 @@ function network_content(&$a, $update = 0) {
 	if(feature_enabled(local_user(),'star_posts')) {
 		$tabs[] = array(
 			'label'	=> t('Starred'),
-			'url'	=> $a->get_baseurl(true) . '/' . str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
+			'url'	=> str_replace('/new', '', $cmd) . ((x($_GET,'cid')) ? '/?f=&cid=' . $_GET['cid'] : '/?f=') . '&star=1',
 			'sel'	=> $starred_active,
 			'title'	=> t('Favourite Posts'),
 			'id'	=> 'starred-posts-tab',
@@ -547,7 +547,7 @@ function network_content(&$a, $update = 0) {
 			if($update)
 				killme();
 			notice( t('No such group') . EOL );
-			goaway($a->get_baseurl(true) . '/network/0');
+			goaway('network/0');
 			// NOTREACHED
 		}
 
@@ -611,7 +611,7 @@ function network_content(&$a, $update = 0) {
 		}
 		else {
 			notice( t('Invalid contact.') . EOL);
-			goaway($a->get_baseurl(true) . '/network');
+			goaway('network');
 			// NOTREACHED
 		}
 	}
diff --git a/object/Item.php b/object/Item.php
index 04c1a707e3..7b542c4724 100644
--- a/object/Item.php
+++ b/object/Item.php
@@ -705,7 +705,7 @@ class Item extends BaseObject {
 				'$profile_uid' =>  $conv->get_profile_owner(),
 				'$mylink' => $a->contact['url'],
 				'$mytitle' => t('This is you'),
-				'$myphoto' => $a->contact['thumb'],
+				'$myphoto' => $a->get_cached_avatar_image($a->contact['thumb']),
 				'$comment' => t('Comment'),
 				'$submit' => t('Submit'),
 				'$edbold' => t('Bold'),
diff --git a/view/templates/head.tpl b/view/templates/head.tpl
index 17c459c4d8..fdf9a7716e 100644
--- a/view/templates/head.tpl
+++ b/view/templates/head.tpl
@@ -2,17 +2,17 @@
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <base href="{{$baseurl}}/" />
 <meta name="generator" content="{{$generator}}" />
-<link rel="stylesheet" href="{{$baseurl}}/view/global.css" type="text/css" media="all" />
-<link rel="stylesheet" href="{{$baseurl}}/library/colorbox/colorbox.css" type="text/css" media="screen" />
-<link rel="stylesheet" href="{{$baseurl}}/library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen" />
-<link rel="stylesheet" href="{{$baseurl}}/library/datetimepicker/jquery.datetimepicker.css" type="text/css" media="screen" />
-<link rel="stylesheet" href="{{$baseurl}}/library/perfect-scrollbar/perfect-scrollbar.min.css" type="text/css" media="screen" />
+<link rel="stylesheet" href="view/global.css" type="text/css" media="all" />
+<link rel="stylesheet" href="library/colorbox/colorbox.css" type="text/css" media="screen" />
+<link rel="stylesheet" href="library/jgrowl/jquery.jgrowl.css" type="text/css" media="screen" />
+<link rel="stylesheet" href="library/datetimepicker/jquery.datetimepicker.css" type="text/css" media="screen" />
+<link rel="stylesheet" href="library/perfect-scrollbar/perfect-scrollbar.min.css" type="text/css" media="screen" />
 
 <link rel="stylesheet" type="text/css" href="{{$stylesheet}}" media="all" />
 
 <!--
-<link rel="shortcut icon" href="{{$baseurl}}/images/friendica-32.png" />
-<link rel="apple-touch-icon" href="{{$baseurl}}/images/friendica-128.png"/>
+<link rel="shortcut icon" href="images/friendica-32.png" />
+<link rel="apple-touch-icon" href="images/friendica-128.png"/>
 -->
 <link rel="shortcut icon" href="{{$shortcut_icon}}" />
 <link rel="apple-touch-icon" href="{{$touch_icon}}"/>
@@ -28,20 +28,20 @@
 <!--[if IE]>
 <script type="text/javascript" src="https://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
 <![endif]-->
-<script type="text/javascript" src="{{$baseurl}}/js/modernizr.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/js/jquery.js" ></script>
-<!-- <script type="text/javascript" src="{{$baseurl}}/js/jquery-migrate.js" ></script>-->
-<script type="text/javascript" src="{{$baseurl}}/js/jquery-migrate.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/js/jquery.textinputs.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/js/fk.autocomplete.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/library/colorbox/jquery.colorbox-min.js"></script>
-<script type="text/javascript" src="{{$baseurl}}/library/jgrowl/jquery.jgrowl_minimized.js"></script>
-<script type="text/javascript" src="{{$baseurl}}/library/datetimepicker/jquery.datetimepicker.js"></script>
-<script type="text/javascript" src="{{$baseurl}}/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/library/perfect-scrollbar/perfect-scrollbar.jquery.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/js/acl.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/js/webtoolkit.base64.js" ></script>
-<script type="text/javascript" src="{{$baseurl}}/js/main.js" ></script>
+<script type="text/javascript" src="js/modernizr.js" ></script>
+<script type="text/javascript" src="js/jquery.js" ></script>
+<!-- <script type="text/javascript" src="js/jquery-migrate.js" ></script>-->
+<script type="text/javascript" src="js/jquery-migrate.js" ></script>
+<script type="text/javascript" src="js/jquery.textinputs.js" ></script>
+<script type="text/javascript" src="js/fk.autocomplete.js" ></script>
+<script type="text/javascript" src="library/colorbox/jquery.colorbox-min.js"></script>
+<script type="text/javascript" src="library/jgrowl/jquery.jgrowl_minimized.js"></script>
+<script type="text/javascript" src="library/datetimepicker/jquery.datetimepicker.js"></script>
+<script type="text/javascript" src="library/tinymce/jscripts/tiny_mce/tiny_mce_src.js" ></script>
+<script type="text/javascript" src="library/perfect-scrollbar/perfect-scrollbar.jquery.js" ></script>
+<script type="text/javascript" src="js/acl.js" ></script>
+<script type="text/javascript" src="js/webtoolkit.base64.js" ></script>
+<script type="text/javascript" src="js/main.js" ></script>
 <script>
 
 	var updateInterval = {{$update_interval}};
diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php
index c2669f5a93..25954350f9 100644
--- a/view/theme/vier/theme.php
+++ b/view/theme/vier/theme.php
@@ -19,8 +19,6 @@ function vier_init(&$a) {
 
 	set_template_engine($a, 'smarty3');
 
-	$baseurl = $a->get_baseurl();
-
 	$a->theme_info = array();
 
 	if ($a->argv[0].$a->argv[1] === "profile".$a->user['nickname'] or $a->argv[0] === "network" && local_user()) {
@@ -160,7 +158,7 @@ function vier_community_info() {
 				$entry = replace_macros($tpl,array(
 					'$id' => $rr['id'],
 					//'$profile_link' => zrl($rr['url']),
-					'$profile_link' => $a->get_baseurl().'/follow/?url='.urlencode($rr['url']),
+					'$profile_link' => 'follow/?url='.urlencode($rr['url']),
 					'$photo' => proxy_url($rr['photo'], false, PROXY_SIZE_MICRO),
 					'$alt_text' => $rr['name'],
 				));
@@ -186,7 +184,7 @@ function vier_community_info() {
 			$aside['$lastusers_items'] = array();
 
 			foreach($r as $rr) {
-				$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
+				$profile_link = 'profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
 				$entry = replace_macros($tpl,array(
 					'$id' => $rr['id'],
 					'$profile_link' => $profile_link,
@@ -207,7 +205,7 @@ function vier_community_info() {
 		$nv['suggest'] = Array('suggest', t('Friend Suggestions'), "", "");
 		$nv['invite'] = Array('invite', t('Invite Friends'), "", "");
 
-		$nv['search'] = '<form name="simple_bar" method="get" action="'.$a->get_baseurl().'/dirfind">
+		$nv['search'] = '<form name="simple_bar" method="get" action="dirfind">
 						<span class="sbox_l"></span>
 						<span class="sbox">
 						<input type="text" name="search" size="13" maxlength="50">

From c5b724828a12a215d66e8086ed0ffdabfad5e928 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Wed, 17 Feb 2016 08:08:28 +0100
Subject: [PATCH 2/4] Just some more removed baseurls ...

---
 boot.php                  | 23 +++++++++++++++++++----
 include/ForumManager.php  |  4 ++--
 include/conversation.php  |  2 +-
 include/identity.php      |  6 +++---
 include/nav.php           |  2 +-
 index.php                 |  6 +++---
 mod/content.php           |  4 ++--
 mod/directory.php         |  4 ++--
 mod/profiles.php          | 28 ++++++++++------------------
 object/Item.php           |  4 ++--
 view/theme/vier/theme.php |  2 +-
 11 files changed, 46 insertions(+), 39 deletions(-)

diff --git a/boot.php b/boot.php
index 0217750136..851008aef5 100644
--- a/boot.php
+++ b/boot.php
@@ -920,10 +920,6 @@ class App {
 	}
 
 	function get_cached_avatar_image($avatar_image){
-		// Just remove the base url. This avoid mixed content
-		$avatar_image = normalise_link($avatar_image);
-		$base = normalise_link($this->get_baseurl());
-		$avatar_image = str_replace($base."/", "", $avatar_image);
 		return $avatar_image;
 
 		// The following code is deactivated. It doesn't seem to make any sense and it slows down the system.
@@ -951,6 +947,25 @@ class App {
 	}
 
 
+	/**
+	 * @brief Removes the baseurl from an url. This avoids some mixed content problems.
+	 *
+	 * @param string $url
+	 *
+	 * @return string The cleaned url
+	 */
+	function remove_baseurl($url){
+
+		// Is the function called statically?
+		if (!is_object($this))
+			return(self::$a->remove_baseurl($ssl));
+
+		$url = normalise_link($url);
+		$base = normalise_link($this->get_baseurl());
+		$url = str_replace($base."/", "", $url);
+		return $url;
+	}
+
 	/**
 	 * @brief Register template engine class
 	 * 
diff --git a/include/ForumManager.php b/include/ForumManager.php
index 73eb511de6..6fede0204d 100644
--- a/include/ForumManager.php
+++ b/include/ForumManager.php
@@ -89,7 +89,7 @@ class ForumManager {
 		if(count($contacts)) {
 
 			$id = 0;
-$a = get_app();
+
 			foreach($contacts as $contact) {
 
 				$selected = (($cid == $contact['id']) ? ' forum-selected' : '');
@@ -100,7 +100,7 @@ $a = get_app();
 					'name' => $contact['name'],
 					'cid' => $contact['id'],
 					'selected' 	=> $selected,
-					'micro' => $a->get_cached_avatar_image(proxy_url($contact['micro'], false, PROXY_SIZE_MICRO)),
+					'micro' => App::remove_baseurl(proxy_url($contact['micro'], false, PROXY_SIZE_MICRO)),
 					'id' => ++$id,
 				);
 				$entries[] = $entry;
diff --git a/include/conversation.php b/include/conversation.php
index 6c33be84fb..53a7b3d1ed 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -614,7 +614,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
 				if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
 					$profile_avatar = $a->contacts[$normalised]['thumb'];
 				else
-					$profile_avatar = ((strlen($item['author-avatar'])) ? $a->get_cached_avatar_image($item['author-avatar']) : $item['thumb']);
+					$profile_avatar = $a->remove_baseurl(((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']));
 
 				$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
 				call_hooks('render_location',$locate);
diff --git a/include/identity.php b/include/identity.php
index ec66225d0f..aba69bae49 100644
--- a/include/identity.php
+++ b/include/identity.php
@@ -332,9 +332,9 @@ function profile_sidebar($profile, $block = 0) {
 		'fullname' => $profile['name'],
 		'firstname' => $firstname,
 		'lastname' => $lastname,
-		'photo300' => $a->get_cached_avatar_image($a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg'),
-		'photo100' => $a->get_cached_avatar_image($a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg'),
-		'photo50' => $a->get_cached_avatar_image($a->get_baseurl() . '/photo/custom/50/'  . $profile['uid'] . '.jpg'),
+		'photo300' => $a->get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg',
+		'photo100' => $a->get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg',
+		'photo50' => $a->get_baseurl() . '/photo/custom/50/'  . $profile['uid'] . '.jpg',
 	);
 
 	if (!$block){
diff --git a/include/nav.php b/include/nav.php
index fb7225af92..0fa671a27d 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -82,7 +82,7 @@ function nav_info(&$a) {
 		// user info
 		$r = q("SELECT micro FROM contact WHERE uid=%d AND self=1", intval($a->user['uid']));
 		$userinfo = array(
-			'icon' => (count($r) ? $a->get_cached_avatar_image($r[0]['micro']) : $a->get_baseurl($ssl_state)."/images/person-48.jpg"),
+			'icon' => (count($r) ? $a->remove_baseurl($r[0]['micro']) : "images/person-48.jpg"),
 			'name' => $a->user['username'],
 		);
 
diff --git a/index.php b/index.php
index 8471735d01..e364389b2c 100644
--- a/index.php
+++ b/index.php
@@ -371,7 +371,7 @@ $a->init_page_end();
 if(x($_SESSION,'visitor_home'))
 	$homebase = $_SESSION['visitor_home'];
 elseif(local_user())
-	$homebase = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
+	$homebase = 'profile/' . $a->user['nickname'];
 
 if(isset($homebase))
 	$a->page['content'] .= '<script>var homebase="' . $homebase . '" ; </script>';
@@ -423,10 +423,10 @@ if($a->module != 'install' && $a->module != 'maintenance') {
 
 if($a->is_mobile || $a->is_tablet) {
 	if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
-		$link = $a->get_baseurl() . '/toggle_mobile?address=' . curPageURL();
+		$link = 'toggle_mobile?address=' . curPageURL();
 	}
 	else {
-		$link = $a->get_baseurl() . '/toggle_mobile?off=1&address=' . curPageURL();
+		$link = 'toggle_mobile?off=1&address=' . curPageURL();
 	}
 	$a->page['footer'] = replace_macros(get_markup_template("toggle_mobile_footer.tpl"), array(
 	                     	'$toggle_link' => $link,
diff --git a/mod/content.php b/mod/content.php
index c5a5556116..c2b1546bf1 100644
--- a/mod/content.php
+++ b/mod/content.php
@@ -420,7 +420,7 @@ function render_content(&$a, $items, $mode, $update, $preview = false) {
 				if(($normalised != 'mailbox') && (x($a->contacts[$normalised])))
 					$profile_avatar = $a->contacts[$normalised]['thumb'];
 				else
-					$profile_avatar = ((strlen($item['author-avatar'])) ? $a->get_cached_avatar_image($item['author-avatar']) : $item['thumb']);
+					$profile_avatar = $a->remove_baseurl(((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']));
 
 				$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
 				call_hooks('render_location',$locate);
@@ -791,7 +791,7 @@ function render_content(&$a, $items, $mode, $update, $preview = false) {
 				if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
 					$profile_avatar = $a->contacts[$normalised]['thumb'];
 				else
-					$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->get_cached_avatar_image($thumb));
+					$profile_avatar = $a->remove_baseurl(((strlen($item['author-avatar']) && $diff_author) ? $item['author-avatar'] : $thumb));
 
 				$like    = ((x($alike,$item['uri'])) ? format_like($alike[$item['uri']],$alike[$item['uri'] . '-l'],'like',$item['uri']) : '');
 				$dislike = ((x($dlike,$item['uri'])) ? format_like($dlike[$item['uri']],$dlike[$item['uri'] . '-l'],'dislike',$item['uri']) : '');
diff --git a/mod/directory.php b/mod/directory.php
index 294a55585d..be09dd37f6 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -158,14 +158,14 @@ function directory_content(&$a) {
 			else {
 				$location_e = $location;
 			}
-			
+
 			$photo_menu = array(array(t("View Profile"), zrl($profile_link)));
 
 			$entry = array(
 				'id' => $rr['id'],
 				'url' => $profile_link,
 				'itemurl' => $itemurl,
-				'thumb' => proxy_url($a->get_cached_avatar_image($rr[$photo]), false, PROXY_SIZE_THUMB),
+				'thumb' => proxy_url($rr[$photo], false, PROXY_SIZE_THUMB),
 				'img_hover' => $rr['name'],
 				'name' => $rr['name'],
 				'details' => $details,
diff --git a/mod/profiles.php b/mod/profiles.php
index 5c372de8ee..0b8261422f 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -16,7 +16,7 @@ function profiles_init(&$a) {
 		);
 		if(! count($r)) {
 			notice( t('Profile not found.') . EOL);
-			goaway($a->get_baseurl(true) . '/profiles');
+			goaway('profiles');
 			return; // NOTREACHED
 		}
 
@@ -34,9 +34,9 @@ function profiles_init(&$a) {
 			intval(local_user())
 		);
 		if($r)
-			info( t('Profile deleted.') . EOL);
+			info(t('Profile deleted.').EOL);
 
-		goaway($a->get_baseurl(true) . '/profiles');
+		goaway('profiles');
 		return; // NOTREACHED
 	}
 
@@ -73,9 +73,9 @@ function profiles_init(&$a) {
 
 		info( t('New profile created.') . EOL);
 		if(count($r3) == 1)
-			goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']);
+			goaway('profiles/'.$r3[0]['id']);
 
-		goaway($a->get_baseurl(true) . '/profiles');
+		goaway('profiles');
 	}
 
 	if(($a->argc > 2) && ($a->argv[1] === 'clone')) {
@@ -116,9 +116,9 @@ function profiles_init(&$a) {
 		);
 		info( t('New profile created.') . EOL);
 		if(count($r3) == 1)
-			goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']);
+			goaway('profiles/'.$r3[0]['id']);
 
-		goaway($a->get_baseurl(true) . '/profiles');
+		goaway('profiles');
 
 		return; // NOTREACHED
 	}
@@ -582,15 +582,7 @@ function profile_activity($changed, $value) {
 
 	$i = item_store($arr);
 	if($i) {
-
-		// give it a permanent link
-		//q("update item set plink = '%s' where id = %d",
-		//	dbesc($a->get_baseurl() . '/display/' . $a->user['nickname'] . '/' . $i),
-		//	intval($i)
-		//);
-
 	   	proc_run('php',"include/notifier.php","activity","$i");
-
 	}
 }
 
@@ -786,7 +778,7 @@ function profiles_content(&$a) {
 			);
 			if(count($r)){
 				//Go to the default profile.
-				goaway($a->get_baseurl(true) . '/profiles/'.$r[0]['id']);
+				goaway('profiles/'.$r[0]['id']);
 			}
 		}
 
@@ -807,12 +799,12 @@ function profiles_content(&$a) {
 
 			foreach($r as $rr) {
 				$o .= replace_macros($tpl, array(
-					'$photo' => $a->get_cached_avatar_image($rr['thumb']),
+					'$photo' => $a->remove_baseurl($rr['thumb']),
 					'$id' => $rr['id'],
 					'$alt' => t('Profile Image'),
 					'$profile_name' => $rr['profile-name'],
 					'$visible' => (($rr['is-default']) ? '<strong>' . t('visible to everybody') . '</strong>'
-						: '<a href="' . $a->get_baseurl(true) . '/profperm/' . $rr['id'] . '" />' . t('Edit visibility') . '</a>')
+						: '<a href="'.'profperm/'.$rr['id'].'" />' . t('Edit visibility') . '</a>')
 				));
 			}
 		}
diff --git a/object/Item.php b/object/Item.php
index 7b542c4724..9daf44648e 100644
--- a/object/Item.php
+++ b/object/Item.php
@@ -154,7 +154,7 @@ class Item extends BaseObject {
 		if(($normalised != 'mailbox') && (x($a->contacts,$normalised)))
 			$profile_avatar = $a->contacts[$normalised]['thumb'];
 		else
-			$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->get_cached_avatar_image($this->get_data_value('thumb')));
+			$profile_avatar = (((strlen($item['author-avatar'])) && $diff_author) ? $item['author-avatar'] : $a->remove_baseurl($this->get_data_value('thumb')));
 
 		$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
 		call_hooks('render_location',$locate);
@@ -705,7 +705,7 @@ class Item extends BaseObject {
 				'$profile_uid' =>  $conv->get_profile_owner(),
 				'$mylink' => $a->contact['url'],
 				'$mytitle' => t('This is you'),
-				'$myphoto' => $a->get_cached_avatar_image($a->contact['thumb']),
+				'$myphoto' => $a->remove_baseurl($a->contact['thumb']),
 				'$comment' => t('Comment'),
 				'$submit' => t('Submit'),
 				'$edbold' => t('Bold'),
diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php
index 25954350f9..f33a9178ac 100644
--- a/view/theme/vier/theme.php
+++ b/view/theme/vier/theme.php
@@ -188,7 +188,7 @@ function vier_community_info() {
 				$entry = replace_macros($tpl,array(
 					'$id' => $rr['id'],
 					'$profile_link' => $profile_link,
-					'$photo' => $a->get_cached_avatar_image($rr['thumb']),
+					'$photo' => $a->remove_baseurl($rr['thumb']),
 					'$alt_text' => $rr['name']));
 				$aside['$lastusers_items'][] = $entry;
 			}

From 8af8567567e67af97871d12333d6d55c79c5a67d Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Wed, 17 Feb 2016 12:18:36 +0100
Subject: [PATCH 3/4] Some more ...

---
 boot.php | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/boot.php b/boot.php
index 851008aef5..69440e69d2 100644
--- a/boot.php
+++ b/boot.php
@@ -864,11 +864,11 @@ class App {
 
 		$shortcut_icon = get_config("system", "shortcut_icon");
 		if ($shortcut_icon == "")
-			$shortcut_icon = $this->get_baseurl()."/images/friendica-32.png";
+			$shortcut_icon = "images/friendica-32.png";
 
 		$touch_icon = get_config("system", "touch_icon");
 		if ($touch_icon == "")
-			$touch_icon = $this->get_baseurl()."/images/friendica-128.png";
+			$touch_icon = "images/friendica-128.png";
 
 		$tpl = get_markup_template('head.tpl');
 		$this->page['htmlhead'] = replace_macros($tpl,array(
@@ -1447,7 +1447,7 @@ function login($register = false, $hiddens=false) {
 
 	$noid = get_config('system','no_openid');
 
-	$dest_url = $a->get_baseurl(true) . '/' . $a->query_string;
+	$dest_url = $a->query_string;
 
 	if(local_user()) {
 		$tpl = get_markup_template("logout.tpl");
@@ -1766,9 +1766,9 @@ function current_theme_url() {
 
 	$opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : '');
 	if (file_exists('view/theme/' . $t . '/style.php'))
-		return($a->get_baseurl() . '/view/theme/' . $t . '/style.pcss' . $opts);
+		return('view/theme/'.$t.'/style.pcss'.$opts);
 
-	return($a->get_baseurl() . '/view/theme/' . $t . '/style.css');
+	return('view/theme/'.$t.'/style.css');
 }
 
 function feed_birthday($uid,$tz) {

From 7d4c99ebbc0ab4bd548fdd89680d5e75af4f85b9 Mon Sep 17 00:00:00 2001
From: Michael Vogel <icarus@dabo.de>
Date: Wed, 17 Feb 2016 23:47:32 +0100
Subject: [PATCH 4/4] "get_baseurl" and "z_root" are disappearing ...

---
 boot.php                   |   2 +-
 include/conversation.php   |  22 ++---
 include/text.php           |  24 ++---
 mod/admin.php              | 186 ++++++++++++++++++-------------------
 mod/common.php             |   2 +-
 mod/contacts.php           |  52 +++++------
 mod/content.php            |   2 +-
 mod/directory.php          |   2 +-
 mod/message.php            |  18 ++--
 mod/notifications.php      |  16 ++--
 mod/photos.php             |  78 +++++++---------
 mod/search.php             |   2 +-
 mod/settings.php           |  26 +++---
 mod/uexport.php            |  62 ++-----------
 object/Item.php            |  10 +-
 view/templates/uexport.tpl |  18 ++--
 view/theme/vier/style.css  |   4 +-
 view/theme/vier/theme.php  |   6 +-
 18 files changed, 235 insertions(+), 297 deletions(-)

diff --git a/boot.php b/boot.php
index df4a1fdea2..d82669f231 100644
--- a/boot.php
+++ b/boot.php
@@ -949,7 +949,7 @@ class App {
 
 		// Is the function called statically?
 		if (!is_object($this))
-			return(self::$a->remove_baseurl($ssl));
+			return(self::$a->remove_baseurl($url));
 
 		$url = normalise_link($url);
 		$base = normalise_link($this->get_baseurl());
diff --git a/include/conversation.php b/include/conversation.php
index 53a7b3d1ed..a52502ec39 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -707,8 +707,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
 					'like' => '',
 					'dislike' => '',
 					'comment' => '',
-					//'conv' => (($preview) ? '' : array('href'=> $a->get_baseurl($ssl_state) . '/display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
-					'conv' => (($preview) ? '' : array('href'=> $a->get_baseurl($ssl_state) . '/display/'.$item['guid'], 'title'=> t('View in context'))),
+					//'conv' => (($preview) ? '' : array('href'=> 'display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
+					'conv' => (($preview) ? '' : array('href'=> 'display/'.$item['guid'], 'title'=> t('View in context'))),
 					'previewing' => $previewing,
 					'wait' => t('Please wait'),
 					'thread_level' => 1,
@@ -868,7 +868,7 @@ function item_photo_menu($item){
 		$status_link = $profile_link . "?url=status";
 		$photos_link = $profile_link . "?url=photos";
 		$profile_link = $profile_link . "?url=profile";
-		$pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
+		$pm_url = 'message/new/' . $cid;
 		$zurl = '';
 	}
 	else {
@@ -882,23 +882,23 @@ function item_photo_menu($item){
 				$cid = $r[0]["id"];
 
 				if ($r[0]["network"] == NETWORK_DIASPORA)
-					$pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
+					$pm_url = 'message/new/' . $cid;
 
 			} else
 				$cid = 0;
 		}
 	}
 	if(($cid) && (! $item['self'])) {
-		$poke_link = $a->get_baseurl($ssl_state) . '/poke/?f=&c=' . $cid;
-		$contact_url = $a->get_baseurl($ssl_state) . '/contacts/' . $cid;
-		$posts_link = $a->get_baseurl($ssl_state) . '/contacts/' . $cid . '/posts';
+		$poke_link = 'poke/?f=&c=' . $cid;
+		$contact_url = 'contacts/' . $cid;
+		$posts_link = 'contacts/' . $cid . '/posts';
 
 		$clean_url = normalise_link($item['author-link']);
 
 		if((local_user()) && (local_user() == $item['uid'])) {
 			if(isset($a->contacts) && x($a->contacts,$clean_url)) {
 				if($a->contacts[$clean_url]['network'] === NETWORK_DIASPORA) {
-					$pm_url = $a->get_baseurl($ssl_state) . '/message/new/' . $cid;
+					$pm_url = 'message/new/' . $cid;
 				}
 			}
 		}
@@ -921,7 +921,7 @@ function item_photo_menu($item){
 
 		if ((($cid == 0) OR ($a->contacts[$clean_url]['rel'] == CONTACT_IS_FOLLOWER)) AND
 			in_array($item['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_DIASPORA)))
-			$menu[t("Connect/Follow")] = $a->get_baseurl($ssl_state)."/follow?url=".urlencode($item['author-link']);
+			$menu[t("Connect/Follow")] = "follow?url=".urlencode($item['author-link']);
 	} else
 		$menu = array(t("View Profile") => $item['author-link']);
 
@@ -980,7 +980,7 @@ function builtin_activity_puller($item, &$conv_responses) {
 		if((activity_match($item['verb'], $verb)) && ($item['id'] != $item['parent'])) {
 			$url = $item['author-link'];
 			if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === NETWORK_DFRN) && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) {
-				$url = z_root(true) . '/redir/' . $item['contact-id'];
+				$url = 'redir/' . $item['contact-id'];
 				$sparkle = ' class="sparkle" ';
 			}
 			else
@@ -1178,7 +1178,7 @@ function status_editor($a,$x, $notes_cid = 0, $popup=false) {
 
 	$o .= replace_macros($tpl,array(
 		'$return_path' => $query_str,
-		'$action' =>  $a->get_baseurl(true) . '/item',
+		'$action' =>  'item',
 		'$share' => (x($x,'button') ? $x['button'] : t('Share')),
 		'$upload' => t('Upload photo'),
 		'$shortupload' => t('upload photo'),
diff --git a/include/text.php b/include/text.php
index c7681a4d58..07524e851d 100644
--- a/include/text.php
+++ b/include/text.php
@@ -285,7 +285,7 @@ function paginate_data(&$a, $count=null) {
 	if (($a->page_offset != "") AND !preg_match('/[?&].offset=/', $stripped))
 		$stripped .= "&offset=".urlencode($a->page_offset);
 
-	$url = z_root() . '/' . $stripped;
+	$url = $stripped;
 
 	$data = array();
 	function _l(&$d, $name, $url, $text, $class="") {
@@ -923,7 +923,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
 
 	if($redirect) {
 		$a = get_app();
-		$redirect_url = z_root() . '/redir/' . $contact['id'];
+		$redirect_url = 'redir/' . $contact['id'];
 		if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === NETWORK_DFRN)) {
 			$redir = true;
 			$url = $redirect_url;
@@ -964,13 +964,13 @@ if(! function_exists('search')) {
  * @param string $url search url
  * @param boolean $savedsearch show save search button
  */
-function search($s,$id='search-box',$url='/search',$save = false, $aside = true) {
+function search($s,$id='search-box',$url='search',$save = false, $aside = true) {
 	$a = get_app();
 
 	$values = array(
 			'$s' => $s,
 			'$id' => $id,
-			'$action_url' => $a->get_baseurl((stristr($url,'network')) ? true : false) . $url,
+			'$action_url' => $url,
 			'$search_label' => t('Search'),
 			'$save_label' => t('Save'),
 			'$savedsearch' => feature_enabled(local_user(),'savedsearch'),
@@ -1305,7 +1305,7 @@ function redir_private_images($a, &$item) {
 
 			if((local_user() == $item['uid']) && ($item['private'] != 0) && ($item['contact-id'] != $a->contact['id']) && ($item['network'] == NETWORK_DFRN)) {
 				//logger("redir_private_images: redir");
-				$img_url = z_root() . '/redir?f=1&quiet=1&url=' . $mtch[1] . '&conurl=' . $item['author-link'];
+				$img_url = 'redir?f=1&quiet=1&url=' . $mtch[1] . '&conurl=' . $item['author-link'];
 				$item['body'] = str_replace($mtch[0], "[img]".$img_url."[/img]", $item['body']);
 			}
 		}
@@ -1421,7 +1421,7 @@ function prepare_body(&$item,$attach = false, $preview = false) {
 					$mime = $mtch[3];
 
 					if((local_user() == $item['uid']) && ($item['contact-id'] != $a->contact['id']) && ($item['network'] == NETWORK_DFRN))
-						$the_url = z_root() . '/redir/' . $item['contact-id'] . '?f=1&url=' . $mtch[1];
+						$the_url = 'redir/' . $item['contact-id'] . '?f=1&url=' . $mtch[1];
 					else
 						$the_url = $mtch[1];
 
@@ -1596,7 +1596,7 @@ function get_cats_and_terms($item) {
 			$categories[] = array(
 				'name' => xmlify(file_tag_decode($mtch[1])),
 				'url' =>  "#",
-				'removeurl' => ((local_user() == $item['uid'])?z_root() . '/filerm/' . $item['id'] . '?f=&cat=' . xmlify(file_tag_decode($mtch[1])):""),
+				'removeurl' => ((local_user() == $item['uid'])?'filerm/' . $item['id'] . '?f=&cat=' . xmlify(file_tag_decode($mtch[1])):""),
 				'first' => $first,
 				'last' => false
 			);
@@ -1614,7 +1614,7 @@ function get_cats_and_terms($item) {
 				$folders[] = array(
 					'name' => xmlify(file_tag_decode($mtch[1])),
 					'url' =>  "#",
-					'removeurl' => ((local_user() == $item['uid'])?z_root() . '/filerm/' . $item['id'] . '?f=&term=' . xmlify(file_tag_decode($mtch[1])):""),
+					'removeurl' => ((local_user() == $item['uid'])?'filerm/' . $item['id'] . '?f=&term=' . xmlify(file_tag_decode($mtch[1])):""),
 					'first' => $first,
 					'last' => false
 				);
@@ -1639,15 +1639,15 @@ function get_plink($item) {
 
 	if ($a->user['nickname'] != "") {
 		$ret = array(
-				//'href' => z_root()."/display/".$a->user['nickname']."/".$item['id'],
-				'href' => z_root()."/display/".$item['guid'],
-				'orig' => z_root()."/display/".$item['guid'],
+				//'href' => "display/".$a->user['nickname']."/".$item['id'],
+				'href' => "display/".$item['guid'],
+				'orig' => "display/".$item['guid'],
 				'title' => t('View on separate page'),
 				'orig_title' => t('view on separate page'),
 			);
 
 		if (x($item,'plink')) {
-			$ret["href"] = $item['plink'];
+			$ret["href"] = $a->remove_baseurl($item['plink']);
 			$ret["title"] = t('link to source');
 		}
 
diff --git a/mod/admin.php b/mod/admin.php
index 7f9000807b..ecd08bbe00 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -55,13 +55,13 @@ function admin_post(&$a){
 							$func($a);
 						}
 				}
-				goaway($a->get_baseurl(true) . '/admin/plugins/' . $a->argv[2] );
+				goaway('admin/plugins/'.$a->argv[2]);
 				return; // NOTREACHED
 				break;
 			case 'themes':
 				if($a->argc < 2) {
 					if(is_ajax()) return;
-					goaway($a->get_baseurl(true) . '/admin/' );
+					goaway('admin/');
 					return;
 				}
 
@@ -92,7 +92,7 @@ function admin_post(&$a){
 				info(t('Theme settings updated.'));
 				if(is_ajax()) return;
 
-				goaway($a->get_baseurl(true) . '/admin/themes/' . $theme );
+				goaway('admin/themes/'.$theme);
 				return;
 				break;
 			case 'features':
@@ -107,7 +107,7 @@ function admin_post(&$a){
 		}
 	}
 
-	goaway($a->get_baseurl(true) . '/admin' );
+	goaway('admin');
 	return; // NOTREACHED
 }
 
@@ -150,17 +150,17 @@ function admin_content(&$a) {
 	 * Side bar links
 	 */
 	$aside_tools = array();
-	// array( url, name, extra css classes )
+	// array(url, name, extra css classes)
 	// not part of $aside to make the template more adjustable
 	$aside_sub = array(
-		'site'	 =>	array($a->get_baseurl(true)."/admin/site/", t("Site") , "site"),
-		'users'	 =>	array($a->get_baseurl(true)."/admin/users/", t("Users") , "users"),
-		'plugins'=>	array($a->get_baseurl(true)."/admin/plugins/", t("Plugins") , "plugins"),
-		'themes' =>	array($a->get_baseurl(true)."/admin/themes/", t("Themes") , "themes"),
-		'features' =>	array($a->get_baseurl(true)."/admin/features/", t("Additional features") , "features"),
-		'dbsync' => 	array($a->get_baseurl(true)."/admin/dbsync/", t('DB updates'), "dbsync"),
-		'queue'	 =>	array($a->get_baseurl(true)."/admin/queue/", t('Inspect Queue'), "queue"),
-		'federation' => array($a->get_baseurl(true)."/admin/federation/", t('Federation Statistics'), "federation"),
+		'site'	 =>	array("admin/site/", t("Site") , "site"),
+		'users'	 =>	array("admin/users/", t("Users") , "users"),
+		'plugins'=>	array("admin/plugins/", t("Plugins") , "plugins"),
+		'themes' =>	array("admin/themes/", t("Themes") , "themes"),
+		'features' =>	array("admin/features/", t("Additional features") , "features"),
+		'dbsync' => 	array("admin/dbsync/", t('DB updates'), "dbsync"),
+		'queue'	 =>	array("admin/queue/", t('Inspect Queue'), "queue"),
+		'federation' => array("admin/federation/", t('Federation Statistics'), "federation"),
 	);
 
 	/* get plugins admin page */
@@ -169,18 +169,18 @@ function admin_content(&$a) {
 	$aside_tools['plugins_admin']=array();
 	foreach ($r as $h){
 		$plugin =$h['name'];
-		$aside_tools['plugins_admin'][] = array($a->get_baseurl(true)."/admin/plugins/".$plugin, $plugin, "plugin");
+		$aside_tools['plugins_admin'][] = array("admin/plugins/".$plugin, $plugin, "plugin");
 		// temp plugins with admin
 		$a->plugins_admin[] = $plugin;
 	}
 
-	$aside_tools['logs'] = array($a->get_baseurl(true)."/admin/logs/", t("Logs"), "logs");
-	$aside_tools['viewlogs'] = array($a->get_baseurl(true)."/admin/viewlogs/", t("View Logs"), 'viewlogs');
-	$aside_tools['diagnostics_probe'] = array($a->get_baseurl(true).'/probe/', t('probe address'), 'probe');
-	$aside_tools['diagnostics_webfinger'] = array($a->get_baseurl(true).'/webfinger/', t('check webfinger'), 'webfinger');
+	$aside_tools['logs'] = array("admin/logs/", t("Logs"), "logs");
+	$aside_tools['viewlogs'] = array("admin/viewlogs/", t("View Logs"), 'viewlogs');
+	$aside_tools['diagnostics_probe'] = array('probe/', t('probe address'), 'probe');
+	$aside_tools['diagnostics_webfinger'] = array('webfinger/', t('check webfinger'), 'webfinger');
 
 	$t = get_markup_template("admin_aside.tpl");
-	$a->page['aside'] .= replace_macros( $t, array(
+	$a->page['aside'] .= replace_macros($t, array(
 		'$admin' => $aside_tools,
 		'$subpages' => $aside_sub,
 		'$admtxt' => t('Admin'),
@@ -188,7 +188,7 @@ function admin_content(&$a) {
 		'$logtxt' => t('Logs'),
 		'$diagnosticstxt' => t('diagnostics'),
 		'$h_pending' => t('User registrations waiting for confirmation'),
-		'$admurl'=> $a->get_baseurl(true)."/admin/"
+		'$admurl'=> "admin/"
 	));
 
 
@@ -231,7 +231,7 @@ function admin_content(&$a) {
 				$o = admin_page_federation($a);
 				break;
 			default:
-				notice( t("Item not found.") );
+				notice(t("Item not found."));
 		}
 	} else {
 		$o = admin_page_summary($a);
@@ -409,18 +409,18 @@ function admin_page_queue(&$a) {
 function admin_page_summary(&$a) {
 	$r = q("SELECT `page-flags`, COUNT(uid) as `count` FROM `user` GROUP BY `page-flags`");
 	$accounts = array(
-		array( t('Normal Account'), 0),
-		array( t('Soapbox Account'), 0),
-		array( t('Community/Celebrity Account'), 0),
-		array( t('Automatic Friend Account'), 0),
-		array( t('Blog Account'), 0),
-		array( t('Private Forum'), 0)
+		array(t('Normal Account'), 0),
+		array(t('Soapbox Account'), 0),
+		array(t('Community/Celebrity Account'), 0),
+		array(t('Automatic Friend Account'), 0),
+		array(t('Blog Account'), 0),
+		array(t('Private Forum'), 0)
 	);
 
 	$users=0;
 	foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+= $u['count']; }
 
-	logger('accounts: ' . print_r($accounts,true),LOGGER_DATA);
+	logger('accounts: '.print_r($accounts,true),LOGGER_DATA);
 
 	$r = q("SELECT COUNT(id) as `count` FROM `register`");
 	$pending = $r[0]['count'];
@@ -433,7 +433,7 @@ function admin_page_summary(&$a) {
 
 	// We can do better, but this is a quick queue status
 
-	$queues = array( 'label' => t('Message queues'), 'deliverq' => $deliverq, 'queue' => $queue );
+	$queues = array('label' => t('Message queues'), 'deliverq' => $deliverq, 'queue' => $queue);
 
 
 	$t = get_markup_template("admin_summary.tpl");
@@ -441,15 +441,15 @@ function admin_page_summary(&$a) {
 		'$title' => t('Administration'),
 		'$page' => t('Summary'),
 		'$queues' => $queues,
-		'$users' => array( t('Registered users'), $users),
+		'$users' => array(t('Registered users'), $users),
 		'$accounts' => $accounts,
-		'$pending' => array( t('Pending registrations'), $pending),
-		'$version' => array( t('Version'), FRIENDICA_VERSION),
+		'$pending' => array(t('Pending registrations'), $pending),
+		'$version' => array(t('Version'), FRIENDICA_VERSION),
 		'$baseurl' => $a->get_baseurl(),
 		'$platform' => FRIENDICA_PLATFORM,
 		'$codename' => FRIENDICA_CODENAME,
 		'$build' =>  get_config('system','build'),
-		'$plugins' => array( t('Active plugins'), $a->plugins )
+		'$plugins' => array(t('Active plugins'), $a->plugins)
 	));
 }
 
@@ -473,7 +473,7 @@ function admin_page_site_post(&$a) {
 		$parsed = @parse_url($new_url);
 		if(!$parsed || (!x($parsed,'host') || !x($parsed,'scheme'))) {
 			notice(t("Can not parse base url. Must have at least <scheme>://<domain>"));
-			goaway($a->get_baseurl(true) . '/admin/site' );
+			goaway('admin/site');
 		}
 
 		/* steps:
@@ -501,8 +501,8 @@ function admin_page_site_post(&$a) {
 			$q = sprintf("UPDATE %s SET %s;", $table_name, $upds);
 			$r = q($q);
 			if(!$r) {
-				notice( "Failed updating '$table_name': " . $db->error );
-				goaway($a->get_baseurl(true) . '/admin/site' );
+				notice("Failed updating '$table_name': ".$db->error);
+				goaway('admin/site');
 			}
 		}
 
@@ -526,7 +526,7 @@ function admin_page_site_post(&$a) {
 
 		info("Relocation started. Could take a while to complete.");
 
-		goaway($a->get_baseurl(true) . '/admin/site' );
+		goaway('admin/site');
 	}
 	// end relocate
 
@@ -695,12 +695,12 @@ function admin_page_site_post(&$a) {
 	set_config('system','language', $language);
 	set_config('system','theme', $theme);
 
-	if( $theme_mobile === '---' ) {
+	if($theme_mobile === '---') {
 		del_config('system','mobile-theme');
 	} else {
 		set_config('system','mobile-theme', $theme_mobile);
 		}
-		if( $singleuser === '---' ) {
+		if($singleuser === '---') {
 			del_config('system','singleuser');
 		} else {
 			set_config('system','singleuser', $singleuser);
@@ -765,8 +765,8 @@ function admin_page_site_post(&$a) {
 	set_config('system','embedly', $embedly);
 
 
-	info( t('Site settings updated.') . EOL);
-	goaway($a->get_baseurl(true) . '/admin/site' );
+	info(t('Site settings updated.').EOL);
+	goaway('admin/site');
 	return; // NOTREACHED
 
 }
@@ -797,12 +797,12 @@ function admin_page_site(&$a) {
 	$files = glob('view/theme/*');
 	if($files) {
 		foreach($files as $file) {
-			if(intval(file_exists($file . '/unsupported')))
+			if(intval(file_exists($file.'/unsupported')))
 				continue;
 
 			$f = basename($file);
-			$theme_name = ((file_exists($file . '/experimental')) ?  sprintf("%s - \x28Experimental\x29", $f) : $f);
-			if(file_exists($file . '/mobile')) {
+			$theme_name = ((file_exists($file.'/experimental')) ?  sprintf("%s - \x28Experimental\x29", $f) : $f);
+			if(file_exists($file.'/mobile')) {
 				$theme_choices_mobile[$f] = $theme_name;
 			} else {
 				$theme_choices[$f] = $theme_name;
@@ -1003,12 +1003,12 @@ function admin_page_dbsync(&$a) {
 	$o = '';
 
 	if($a->argc > 3 && intval($a->argv[3]) && $a->argv[2] === 'mark') {
-		set_config('database', 'update_' . intval($a->argv[3]), 'success');
+		set_config('database', 'update_'.intval($a->argv[3]), 'success');
 		$curr = get_config('system','build');
 		if(intval($curr) == intval($a->argv[3]))
 			set_config('system','build',intval($curr) + 1);
-		info( t('Update has been marked successful') . EOL);
-		goaway($a->get_baseurl(true) . '/admin/dbsync');
+		info(t('Update has been marked successful').EOL);
+		goaway('admin/dbsync');
 	}
 
 	if(($a->argc > 2) AND (intval($a->argv[2]) OR ($a->argv[2] === 'check'))) {
@@ -1026,7 +1026,7 @@ function admin_page_dbsync(&$a) {
 
 	if($a->argc > 2 && intval($a->argv[2])) {
 		require_once('update.php');
-		$func = 'update_' . intval($a->argv[2]);
+		$func = 'update_'.intval($a->argv[2]);
 		if(function_exists($func)) {
 			$retval = $func();
 			if($retval === UPDATE_FAILED) {
@@ -1082,18 +1082,18 @@ function admin_page_dbsync(&$a) {
  * @param App $a
  */
 function admin_page_users_post(&$a){
-	$pending	=	( x($_POST, 'pending')			? $_POST['pending']		: array() );
-	$users		=	( x($_POST, 'user')			? $_POST['user']		: array() );
-	$nu_name	=	( x($_POST, 'new_user_name')		? $_POST['new_user_name']	: '');
-	$nu_nickname	=	( x($_POST, 'new_user_nickname')	? $_POST['new_user_nickname']	: '');
-	$nu_email	=	( x($_POST, 'new_user_email')		? $_POST['new_user_email']	: '');
+	$pending	=	(x($_POST, 'pending')			? $_POST['pending']		: array());
+	$users		=	(x($_POST, 'user')			? $_POST['user']		: array());
+	$nu_name	=	(x($_POST, 'new_user_name')		? $_POST['new_user_name']	: '');
+	$nu_nickname	=	(x($_POST, 'new_user_nickname')	? $_POST['new_user_nickname']	: '');
+	$nu_email	=	(x($_POST, 'new_user_email')		? $_POST['new_user_email']	: '');
 
 	check_form_security_token_redirectOnErr('/admin/users', 'admin_users');
 
 	if(!($nu_name==="") && !($nu_email==="") && !($nu_nickname==="")) {
 		require_once('include/user.php');
 
-		$result = create_user( array('username'=>$nu_name, 'email'=>$nu_email, 'nickname'=>$nu_nickname, 'verified'=>1)  );
+		$result = create_user(array('username'=>$nu_name, 'email'=>$nu_email, 'nickname'=>$nu_nickname, 'verified'=>1));
 		if(! $result['success']) {
 			notice($result['message']);
 			return;
@@ -1134,7 +1134,7 @@ function admin_page_users_post(&$a){
 		notification(array(
 			'type' => "SYSTEM_EMAIL",
 			'to_email' => $nu['email'],
-			'subject'=> sprintf( t('Registration details for %s'), $a->config['sitename']),
+			'subject'=> sprintf(t('Registration details for %s'), $a->config['sitename']),
 			'preamble'=> $preamble,
 			'body' => $body));
 
@@ -1143,17 +1143,17 @@ function admin_page_users_post(&$a){
 	if(x($_POST,'page_users_block')) {
 		foreach($users as $uid){
 			q("UPDATE `user` SET `blocked`=1-`blocked` WHERE `uid`=%s",
-				intval( $uid )
+				intval($uid)
 			);
 		}
-		notice( sprintf( tt("%s user blocked/unblocked", "%s users blocked/unblocked", count($users)), count($users)) );
+		notice(sprintf(tt("%s user blocked/unblocked", "%s users blocked/unblocked", count($users)), count($users)));
 	}
 	if(x($_POST,'page_users_delete')) {
 		require_once("include/Contact.php");
 		foreach($users as $uid){
 			user_remove($uid);
 		}
-		notice( sprintf( tt("%s user deleted", "%s users deleted", count($users)), count($users)) );
+		notice(sprintf(tt("%s user deleted", "%s users deleted", count($users)), count($users)));
 	}
 
 	if(x($_POST,'page_users_approve')) {
@@ -1168,7 +1168,7 @@ function admin_page_users_post(&$a){
 			user_deny($hash);
 		}
 	}
-	goaway($a->get_baseurl(true) . '/admin/users' );
+	goaway('admin/users');
 	return; // NOTREACHED
 }
 
@@ -1189,8 +1189,8 @@ function admin_page_users(&$a){
 		$uid = $a->argv[3];
 		$user = q("SELECT username, blocked FROM `user` WHERE `uid`=%d", intval($uid));
 		if(count($user)==0) {
-			notice( 'User not found' . EOL);
-			goaway($a->get_baseurl(true) . '/admin/users' );
+			notice('User not found'.EOL);
+			goaway('admin/users');
 			return ''; // NOTREACHED
 		}
 		switch($a->argv[2]){
@@ -1200,18 +1200,18 @@ function admin_page_users(&$a){
 				require_once("include/Contact.php");
 				user_remove($uid);
 
-				notice( sprintf(t("User '%s' deleted"), $user[0]['username']) . EOL);
+				notice(sprintf(t("User '%s' deleted"), $user[0]['username']).EOL);
 			}; break;
 			case "block":{
 				check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
 				q("UPDATE `user` SET `blocked`=%d WHERE `uid`=%s",
-					intval( 1-$user[0]['blocked'] ),
-					intval( $uid )
+					intval(1-$user[0]['blocked']),
+					intval($uid)
 				);
-				notice( sprintf( ($user[0]['blocked']?t("User '%s' unblocked"):t("User '%s' blocked")) , $user[0]['username']) . EOL);
+				notice(sprintf(($user[0]['blocked']?t("User '%s' unblocked"):t("User '%s' blocked")) , $user[0]['username']).EOL);
 			}; break;
 		}
-		goaway($a->get_baseurl(true) . '/admin/users' );
+		goaway('admin/users');
 		return ''; // NOTREACHED
 
 	}
@@ -1230,7 +1230,7 @@ function admin_page_users(&$a){
 		$a->set_pager_itemspage(100);
 	}
 
-	$users = q("SELECT `user` . * , `contact`.`name` , `contact`.`url` , `contact`.`micro`, `lastitem`.`lastitem_date`, `user`.`account_expired`
+	$users = q("SELECT `user`.* , `contact`.`name` , `contact`.`url` , `contact`.`micro`, `lastitem`.`lastitem_date`, `user`.`account_expired`
 				FROM
 					(SELECT MAX(`item`.`changed`) as `lastitem_date`, `item`.`uid`
 					FROM `item`
@@ -1277,7 +1277,7 @@ function admin_page_users(&$a){
 
 	while(count($users)) {
 		$new_user = array();
-		foreach( array_pop($users) as $k => $v) {
+		foreach(array_pop($users) as $k => $v) {
 			$k = str_replace('-','_',$k);
 			$new_user[$k] = $v;
 		}
@@ -1303,7 +1303,7 @@ function admin_page_users(&$a){
 		'$select_all' => t('select all'),
 		'$h_pending' => t('User registrations waiting for confirm'),
 		'$h_deleted' => t('User waiting for permanent deletion'),
-		'$th_pending' => array( t('Request date'), t('Name'), t('Email') ),
+		'$th_pending' => array(t('Request date'), t('Name'), t('Email')),
 		'$no_pending' =>  t('No registrations.'),
 		'$approve' => t('Approve'),
 		'$deny' => t('Deny'),
@@ -1315,8 +1315,8 @@ function admin_page_users(&$a){
 
 		'$h_users' => t('Users'),
 		'$h_newuser' => t('New User'),
-		'$th_deleted' => array( t('Name'), t('Email'), t('Register date'), t('Last login'), t('Last item'), t('Deleted since') ),
-		'$th_users' => array( t('Name'), t('Email'), t('Register date'), t('Last login'), t('Last item'),  t('Account') ),
+		'$th_deleted' => array(t('Name'), t('Email'), t('Register date'), t('Last login'), t('Last item'), t('Deleted since')),
+		'$th_users' => array(t('Name'), t('Email'), t('Register date'), t('Last login'), t('Last item'),  t('Account')),
 
 		'$confirm_delete_multi' => t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
 		'$confirm_delete' => t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
@@ -1362,7 +1362,7 @@ function admin_page_plugins(&$a){
 	if($a->argc == 3) {
 		$plugin = $a->argv[2];
 		if(!is_file("addon/$plugin/$plugin.php")) {
-			notice( t("Item not found.") );
+			notice(t("Item not found."));
 			return '';
 		}
 
@@ -1374,14 +1374,14 @@ function admin_page_plugins(&$a){
 			if($idx !== false) {
 				unset($a->plugins[$idx]);
 				uninstall_plugin($plugin);
-				info( sprintf( t("Plugin %s disabled."), $plugin ) );
+				info(sprintf(t("Plugin %s disabled."), $plugin));
 			} else {
 				$a->plugins[] = $plugin;
 				install_plugin($plugin);
-				info( sprintf( t("Plugin %s enabled."), $plugin ) );
+				info(sprintf(t("Plugin %s enabled."), $plugin));
 			}
 			set_config("system","addon", implode(", ",$a->plugins));
-			goaway($a->get_baseurl(true) . '/admin/plugins' );
+			goaway('admin/plugins');
 			return ''; // NOTREACHED
 		}
 
@@ -1480,7 +1480,7 @@ function admin_page_plugins(&$a){
 		'$function' => 'plugins',
 		'$plugins' => $plugins,
 		'$pcount' => count($plugins), 
-		'$noplugshint' => sprintf( t('There are currently no plugins available on your node. You can find the official plugin repository at %1$s and might find other interesting plugins in the open plugin registry at %2$s'), 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),
+		'$noplugshint' => sprintf(t('There are currently no plugins available on your node. You can find the official plugin repository at %1$s and might find other interesting plugins in the open plugin registry at %2$s'), 'https://github.com/friendica/friendica-addons', 'http://addons.friendi.ca'),
 		'$form_security_token' => get_form_security_token("admin_themes"),
 	));
 }
@@ -1575,8 +1575,8 @@ function admin_page_themes(&$a){
 	if($files) {
 		foreach($files as $file) {
 			$f = basename($file);
-			$is_experimental = intval(file_exists($file . '/experimental'));
-			$is_supported = 1-(intval(file_exists($file . '/unsupported')));
+			$is_experimental = intval(file_exists($file.'/experimental'));
+			$is_supported = 1-(intval(file_exists($file.'/unsupported')));
 			$is_allowed = intval(in_array($f,$allowed_themes));
 
 			if($is_allowed OR $is_supported OR get_config("system", "show_unsupported_themes"))
@@ -1585,7 +1585,7 @@ function admin_page_themes(&$a){
 	}
 
 	if(! count($themes)) {
-		notice( t('No themes found.'));
+		notice(t('No themes found.'));
 		return '';
 	}
 
@@ -1596,7 +1596,7 @@ function admin_page_themes(&$a){
 	if($a->argc == 3) {
 		$theme = $a->argv[2];
 		if(! is_dir("view/theme/$theme")) {
-			notice( t("Item not found.") );
+			notice(t("Item not found."));
 			return '';
 		}
 
@@ -1609,15 +1609,15 @@ function admin_page_themes(&$a){
 			$s = rebuild_theme_table($themes);
 			if($result) {
 				install_theme($theme);
-				info( sprintf('Theme %s enabled.',$theme));
+				info(sprintf('Theme %s enabled.',$theme));
 			}
 			else {
 				uninstall_theme($theme);
-				info( sprintf('Theme %s disabled.',$theme));
+				info(sprintf('Theme %s disabled.',$theme));
 			}
 
 			set_config('system','allowed_themes',$s);
-			goaway($a->get_baseurl(true) . '/admin/themes' );
+			goaway('admin/themes');
 			return ''; // NOTREACHED
 		}
 
@@ -1663,7 +1663,7 @@ function admin_page_themes(&$a){
 			$admin_form = __get_theme_admin_form($a, $theme);
 		}
 
-		$screenshot = array( get_theme_screenshot($theme), t('Screenshot'));
+		$screenshot = array(get_theme_screenshot($theme), t('Screenshot'));
 		if(! stristr($screenshot[0],$theme))
 			$screenshot = null;
 
@@ -1754,8 +1754,8 @@ function admin_page_logs_post(&$a) {
 		set_config('system','loglevel', $loglevel);
 	}
 
-	info( t("Log settings updated.") );
-	goaway($a->get_baseurl(true) . '/admin/logs' );
+	info(t("Log settings updated."));
+	goaway('admin/logs');
 	return; // NOTREACHED
 }
 
@@ -1803,7 +1803,7 @@ function admin_page_logs(&$a){
 		'$form_security_token' => get_form_security_token("admin_logs"),
 		'$phpheader' => t("PHP logging"),
 		'$phphint' => t("To enable logging of PHP errors and warnings you can add the following to the .htconfig.php file of your installation. The filename set in the 'error_log' line is relative to the friendica top-level directory and must be writeable by the web server. The option '1' for 'log_errors' and 'display_errors' is to enable these options, set to '0' to disable them."),
-		'$phplogcode' => "error_reporting(E_ERROR | E_WARNING | E_PARSE );\nini_set('error_log','php.out');\nini_set('log_errors','1');\nini_set('display_errors', '1');",
+		'$phplogcode' => "error_reporting(E_ERROR | E_WARNING | E_PARSE);\nini_set('error_log','php.out');\nini_set('log_errors','1');\nini_set('display_errors', '1');",
 	));
 }
 
@@ -1871,7 +1871,7 @@ function admin_page_features_post(&$a) {
 
 	check_form_security_token_redirectOnErr('/admin/features', 'admin_manage_features');
 
-	logger('postvars: ' . print_r($_POST,true),LOGGER_DATA);
+	logger('postvars: '.print_r($_POST,true),LOGGER_DATA);
 
 	$arr = array();
 	$features = get_features(false);
@@ -1879,11 +1879,11 @@ function admin_page_features_post(&$a) {
 	foreach($features as $fname => $fdata) {
 		foreach(array_slice($fdata,1) as $f) {
 			$feature = $f[0];
-			$feature_state = 'feature_' . $feature;
-			$featurelock = 'featurelock_' . $feature;
+			$feature_state = 'feature_'.$feature;
+			$featurelock = 'featurelock_'.$feature;
 
 			if(x($_POST[$feature_state]))
-				$val = intval($_POST['feature_' . $feature]);
+				$val = intval($_POST['feature_'.$feature]);
 			else
 				$val = 0;
 			set_config('feature',$feature,$val);
@@ -1895,7 +1895,7 @@ function admin_page_features_post(&$a) {
 		}
 	}
 
-	goaway($a->get_baseurl(true) . '/admin/features' );
+	goaway('admin/features');
 	return; // NOTREACHED
 }
 
@@ -1929,7 +1929,7 @@ function admin_page_features(&$a) {
 					$set = $f[3];
 				$arr[$fname][1][] = array(
 					array('feature_' .$f[0],$f[1],$set,$f[2],array(t('Off'),t('On'))),
-					array('featurelock_' .$f[0],sprintf( t('Lock feature %s'),$f[1]),(($f[4] !== false) ? "1" : ''),'',array(t('Off'),t('On')))
+					array('featurelock_' .$f[0],sprintf(t('Lock feature %s'),$f[1]),(($f[4] !== false) ? "1" : ''),'',array(t('Off'),t('On')))
 				);
 			}
 		}
diff --git a/mod/common.php b/mod/common.php
index c9409b3ef1..62a5185fed 100644
--- a/mod/common.php
+++ b/mod/common.php
@@ -40,7 +40,7 @@ function common_content(&$a) {
 		$vcard_widget .= replace_macros(get_markup_template("vcard-widget.tpl"),array(
 			'$name' => htmlentities($c[0]['name']),
 			'$photo' => $c[0]['photo'],
-			'url' => z_root() . '/contacts/' . $cid
+			'url' => 'contacts/' . $cid
 		));
 
 		if(! x($a->page,'aside'))
diff --git a/mod/contacts.php b/mod/contacts.php
index 0b421433e0..7f758b43c5 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -44,7 +44,7 @@ function contacts_init(&$a) {
 			$vcard_widget = replace_macros(get_markup_template("vcard-widget.tpl"),array(
 				'$name' => htmlentities($a->data['contact']['name']),
 				'$photo' => $a->data['contact']['photo'],
-				'$url' => ($a->data['contact']['network'] == NETWORK_DFRN) ? z_root()."/redir/".$a->data['contact']['id'] : $a->data['contact']['url'],
+				'$url' => ($a->data['contact']['network'] == NETWORK_DFRN) ? "redir/".$a->data['contact']['id'] : $a->data['contact']['url'],
 				'$addr' => (($a->data['contact']['addr'] != "") ? ($a->data['contact']['addr']) : ""),
 				'$network_name' => $networkname,
 				'$network' => t('Network:'),
@@ -129,9 +129,9 @@ function contacts_batch_actions(&$a){
 	}
 
 	if(x($_SESSION,'return_url'))
-		goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+		goaway('' . $_SESSION['return_url']);
 	else
-		goaway($a->get_baseurl(true) . '/contacts');
+		goaway('contacts');
 
 }
 
@@ -157,7 +157,7 @@ function contacts_post(&$a) {
 
 	if(! count($orig_record)) {
 		notice( t('Could not access contact record.') . EOL);
-		goaway($a->get_baseurl(true) . '/contacts');
+		goaway('contacts');
 		return; // NOTREACHED
 	}
 
@@ -366,19 +366,19 @@ function contacts_content(&$a) {
 
 		if(! count($orig_record)) {
 			notice( t('Could not access contact record.') . EOL);
-			goaway($a->get_baseurl(true) . '/contacts');
+			goaway('contacts');
 			return; // NOTREACHED
 		}
 
 		if($cmd === 'update') {
 			_contact_update($contact_id);
-			goaway($a->get_baseurl(true) . '/contacts/' . $contact_id);
+			goaway('contacts/' . $contact_id);
 			// NOTREACHED
 		}
 
 		if($cmd === 'updateprofile') {
 			_contact_update_profile($contact_id);
-			goaway($a->get_baseurl(true) . '/crepair/' . $contact_id);
+			goaway('crepair/' . $contact_id);
 			// NOTREACHED
 		}
 
@@ -389,7 +389,7 @@ function contacts_content(&$a) {
 				info((($blocked) ? t('Contact has been blocked') : t('Contact has been unblocked')).EOL);
 			}
 
-			goaway($a->get_baseurl(true) . '/contacts/' . $contact_id);
+			goaway('contacts/' . $contact_id);
 			return; // NOTREACHED
 		}
 
@@ -400,7 +400,7 @@ function contacts_content(&$a) {
 				info((($readonly) ? t('Contact has been ignored') : t('Contact has been unignored')).EOL);
 			}
 
-			goaway($a->get_baseurl(true) . '/contacts/' . $contact_id);
+			goaway('contacts/' . $contact_id);
 			return; // NOTREACHED
 		}
 
@@ -412,7 +412,7 @@ function contacts_content(&$a) {
 				info((($archived) ? t('Contact has been archived') : t('Contact has been unarchived')).EOL);
 			}
 
-			goaway($a->get_baseurl(true) . '/contacts/' . $contact_id);
+			goaway('contacts/' . $contact_id);
 			return; // NOTREACHED
 		}
 
@@ -447,17 +447,17 @@ function contacts_content(&$a) {
 			// Now check how the user responded to the confirmation query
 			if($_REQUEST['canceled']) {
 				if(x($_SESSION,'return_url'))
-					goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+					goaway('' . $_SESSION['return_url']);
 				else
-					goaway($a->get_baseurl(true) . '/contacts');
+					goaway('contacts');
 			}
 
 			_contact_drop($contact_id, $orig_record[0]);
 			info( t('Contact has been removed.') . EOL );
 			if(x($_SESSION,'return_url'))
-				goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+				goaway('' . $_SESSION['return_url']);
 			else
-				goaway($a->get_baseurl(true) . '/contacts');
+				goaway('contacts');
 			return; // NOTREACHED
 		}
 		if($cmd === 'posts') {
@@ -575,7 +575,7 @@ function contacts_content(&$a) {
 			'$lbl_info1' => t('Contact Information / Notes'),
 			'$infedit' => t('Edit contact notes'),
 			'$common_text' => $common_text,
-			'$common_link' => $a->get_baseurl(true) . '/common/loc/' . local_user() . '/' . $contact['id'],
+			'$common_link' => 'common/loc/' . local_user() . '/' . $contact['id'],
 			'$all_friends' => $all_friends,
 			'$relation_text' => $relation_text,
 			'$visit' => sprintf( t('Visit %s\'s profile [%s]'),$contact['name'],$contact['url']),
@@ -668,7 +668,7 @@ function contacts_content(&$a) {
 	$tabs = array(
 		array(
 			'label' => t('Suggestions'),
-			'url'   => $a->get_baseurl(true) . '/suggest',
+			'url'   => 'suggest',
 			'sel'   => '',
 			'title' => t('Suggest potential friends'),
 			'id'	=> 'suggestions-tab',
@@ -676,7 +676,7 @@ function contacts_content(&$a) {
 		),
 		array(
 			'label' => t('All Contacts'),
-			'url'   => $a->get_baseurl(true) . '/contacts/all',
+			'url'   => 'contacts/all',
 			'sel'   => ($all) ? 'active' : '',
 			'title' => t('Show all contacts'),
 			'id'	=> 'showall-tab',
@@ -684,7 +684,7 @@ function contacts_content(&$a) {
 		),
 		array(
 			'label' => t('Unblocked'),
-			'url'   => $a->get_baseurl(true) . '/contacts',
+			'url'   => 'contacts',
 			'sel'   => ((! $all) && (! $blocked) && (! $hidden) && (! $search) && (! $nets) && (! $ignored) && (! $archived)) ? 'active' : '',
 			'title' => t('Only show unblocked contacts'),
 			'id'	=> 'showunblocked-tab',
@@ -693,7 +693,7 @@ function contacts_content(&$a) {
 
 		array(
 			'label' => t('Blocked'),
-			'url'   => $a->get_baseurl(true) . '/contacts/blocked',
+			'url'   => 'contacts/blocked',
 			'sel'   => ($blocked) ? 'active' : '',
 			'title' => t('Only show blocked contacts'),
 			'id'	=> 'showblocked-tab',
@@ -702,7 +702,7 @@ function contacts_content(&$a) {
 
 		array(
 			'label' => t('Ignored'),
-			'url'   => $a->get_baseurl(true) . '/contacts/ignored',
+			'url'   => 'contacts/ignored',
 			'sel'   => ($ignored) ? 'active' : '',
 			'title' => t('Only show ignored contacts'),
 			'id'	=> 'showignored-tab',
@@ -711,7 +711,7 @@ function contacts_content(&$a) {
 
 		array(
 			'label' => t('Archived'),
-			'url'   => $a->get_baseurl(true) . '/contacts/archived',
+			'url'   => 'contacts/archived',
 			'sel'   => ($archived) ? 'active' : '',
 			'title' => t('Only show archived contacts'),
 			'id'	=> 'showarchived-tab',
@@ -720,7 +720,7 @@ function contacts_content(&$a) {
 
 		array(
 			'label' => t('Hidden'),
-			'url'   => $a->get_baseurl(true) . '/contacts/hidden',
+			'url'   => 'contacts/hidden',
 			'sel'   => ($hidden) ? 'active' : '',
 			'title' => t('Only show hidden contacts'),
 			'id'	=> 'showhidden-tab',
@@ -840,7 +840,7 @@ function contacts_tab($a, $contact_id, $active_tab) {
 				'accesskey' => 'd');
 
 	$tabs[] = array('label' => t('Repair'),
-			'url'   => $a->get_baseurl(true) . '/crepair/' . $contact_id,
+			'url'   => 'crepair/' . $contact_id,
 			'sel' => (($active_tab == 5)?'active':''),
 			'title' => t('Advanced Contact Settings'),
 			'id'	=> 'repair-tab',
@@ -848,21 +848,21 @@ function contacts_tab($a, $contact_id, $active_tab) {
 
 
 	$tabs[] = array('label' => (($contact['blocked']) ? t('Unblock') : t('Block') ),
-			'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/block',
+			'url'   => 'contacts/' . $contact_id . '/block',
 			'sel'   => '',
 			'title' => t('Toggle Blocked status'),
 			'id'	=> 'toggle-block-tab',
 			'accesskey' => 'b');
 
 	$tabs[] = array('label' => (($contact['readonly']) ? t('Unignore') : t('Ignore') ),
-			'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/ignore',
+			'url'   => 'contacts/' . $contact_id . '/ignore',
 			'sel'   => '',
 			'title' => t('Toggle Ignored status'),
 			'id'	=> 'toggle-ignore-tab',
 			'accesskey' => 'i');
 
 	$tabs[] = array('label' => (($contact['archive']) ? t('Unarchive') : t('Archive') ),
-			'url'   => $a->get_baseurl(true) . '/contacts/' . $contact_id . '/archive',
+			'url'   => 'contacts/' . $contact_id . '/archive',
 			'sel'   => '',
 			'title' => t('Toggle Archive status'),
 			'id'	=> 'toggle-archive-tab',
diff --git a/mod/content.php b/mod/content.php
index c2b1546bf1..49cff74d2d 100644
--- a/mod/content.php
+++ b/mod/content.php
@@ -615,7 +615,7 @@ function render_content(&$a, $items, $mode, $update, $preview = false) {
 					$comment_lastcollapsed = true;
 				}
 
-				$redirect_url = $a->get_baseurl($ssl_state) . '/redir/' . $item['cid'] ;
+				$redirect_url = 'redir/' . $item['cid'] ;
 
 				$lock = ((($item['private'] == 1) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) 
 					|| strlen($item['deny_cid']) || strlen($item['deny_gid']))))
diff --git a/mod/directory.php b/mod/directory.php
index be09dd37f6..625f6c95ac 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -104,7 +104,7 @@ function directory_content(&$a) {
 
 			$itemurl = (($rr['addr'] != "") ? $rr['addr'] : $rr['profile_url']);
 
-			$profile_link = z_root() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
+			$profile_link = 'profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
 
 			$pdesc = (($rr['pdesc']) ? $rr['pdesc'] . '<br />' : '');
 
diff --git a/mod/message.php b/mod/message.php
index 1724ebc424..734bf34710 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -13,7 +13,7 @@ function message_init(&$a) {
 
 	$new = array(
 		'label' => t('New Message'),
-		'url' => $a->get_baseurl(true) . '/message/new',
+		'url' => 'message/new',
 		'sel'=> ($a->argv[1] == 'new'),
 		'accesskey' => 'm',
 	);
@@ -90,7 +90,7 @@ function message_post(&$a) {
 		$a->argv[1] = 'new';
 	}
 	else
-		goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+		goaway($_SESSION['return_url']);
 
 }
 
@@ -182,7 +182,7 @@ function message_content(&$a) {
 		return;
 	}
 
-	$myprofile = $a->get_baseurl(true) . '/profile/' . $a->user['nickname'];
+	$myprofile = 'profile/' . $a->user['nickname'];
 
 	$tpl = get_markup_template('mail_head.tpl');
 	$header = replace_macros($tpl, array(
@@ -221,7 +221,7 @@ function message_content(&$a) {
 		}
 		// Now check how the user responded to the confirmation query
 		if($_REQUEST['canceled']) {
-			goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+			goaway($_SESSION['return_url']);
 		}
 
 		$cmd = $a->argv[1];
@@ -234,7 +234,7 @@ function message_content(&$a) {
 				info( t('Message deleted.') . EOL );
 			}
 			//goaway($a->get_baseurl(true) . '/message' );
-			goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+			goaway($_SESSION['return_url']);
 		}
 		else {
 			$r = q("SELECT `parent-uri`,`convid` FROM `mail` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@@ -265,7 +265,7 @@ function message_content(&$a) {
 					info( t('Conversation removed.') . EOL );
 			}
 			//goaway($a->get_baseurl(true) . '/message' );
-			goaway($a->get_baseurl(true) . '/' . $_SESSION['return_url']);
+			goaway($_SESSION['return_url']);
 		}
 
 	}
@@ -448,7 +448,7 @@ function message_content(&$a) {
 				$sparkle = '';
 			}
 			else {
-				$from_url = $a->get_baseurl(true) . '/redir/' . $message['contact-id'];
+				$from_url = 'redir/' . $message['contact-id'];
 				$sparkle = ' sparkle';
 			}
 
@@ -549,7 +549,7 @@ function render_messages($msg, $t) {
 	$tpl = get_markup_template($t);
 	$rslt = '';
 
-	$myprofile = $a->get_baseurl(true) . '/profile/' . $a->user['nickname'];
+	$myprofile = 'profile/' . $a->user['nickname'];
 
 	foreach($msg as $rr) {
 
@@ -577,7 +577,7 @@ function render_messages($msg, $t) {
 		$rslt .= replace_macros($tpl, array(
 			'$id' => $rr['id'],
 			'$from_name' => $participants,
-			'$from_url' => (($rr['network'] === NETWORK_DFRN) ? $a->get_baseurl(true) . '/redir/' . $rr['contact-id'] : $rr['url']),
+			'$from_url' => (($rr['network'] === NETWORK_DFRN) ? 'redir/' . $rr['contact-id'] : $rr['url']),
 			'$sparkle' => ' sparkle',
 			'$from_photo' => (($rr['thumb']) ? $rr['thumb'] : $rr['from-photo']),
 			'$subject' => $subject_e,
diff --git a/mod/notifications.php b/mod/notifications.php
index a267b7c958..f6c4e8f51f 100644
--- a/mod/notifications.php
+++ b/mod/notifications.php
@@ -49,12 +49,12 @@ function notifications_post(&$a) {
 					intval(local_user())
 				);
 			}
-			goaway($a->get_baseurl(true) . '/notifications/intros');
+			goaway('notifications/intros');
 		}
 		if($_POST['submit'] == t('Ignore')) {
 			$r = q("UPDATE `intro` SET `ignore` = 1 WHERE `id` = %d",
 				intval($intro_id));
-			goaway($a->get_baseurl(true) . '/notifications/intros');
+			goaway('notifications/intros');
 		}
 	}
 }
@@ -79,37 +79,37 @@ function notifications_content(&$a) {
 	$tabs = array(
 		array(
 			'label' => t('System'),
-			'url'=>$a->get_baseurl(true) . '/notifications/system',
+			'url'=>'notifications/system',
 			'sel'=> (($a->argv[1] == 'system') ? 'active' : ''),
 			'accesskey' => 'y',
 		),
 		array(
 			'label' => t('Network'),
-			'url'=>$a->get_baseurl(true) . '/notifications/network',
+			'url'=>'notifications/network',
 			'sel'=> (($a->argv[1] == 'network') ? 'active' : ''),
 			'accesskey' => 'w',
 		),
 		array(
 			'label' => t('Personal'),
-			'url'=>$a->get_baseurl(true) . '/notifications/personal',
+			'url'=>'notifications/personal',
 			'sel'=> (($a->argv[1] == 'personal') ? 'active' : ''),
 			'accesskey' => 'r',
 		),
 		array(
 			'label' => t('Home'),
-			'url' => $a->get_baseurl(true) . '/notifications/home',
+			'url' => 'notifications/home',
 			'sel'=> (($a->argv[1] == 'home') ? 'active' : ''),
 			'accesskey' => 'h',
 		),
 		array(
 			'label' => t('Introductions'),
-			'url' => $a->get_baseurl(true) . '/notifications/intros',
+			'url' => 'notifications/intros',
 			'sel'=> (($a->argv[1] == 'intros') ? 'active' : ''),
 			'accesskey' => 'i',
 		),
 		/*array(
 			'label' => t('Messages'),
-			'url' => $a->get_baseurl(true) . '/message',
+			'url' => 'message',
 			'sel'=> '',
 		),*/ /*while I can have notifications for messages, this tablist is not place for message page link */
 	);
diff --git a/mod/photos.php b/mod/photos.php
index a9dade6a81..2257a96653 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -80,7 +80,7 @@ function photos_init(&$a) {
 				$entry = array(
 					'text'      => $album['album'],
 					'total'     => $album['total'],
-					'url'       => z_root() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album['album']),
+					'url'       => 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album['album']),
 					'urlencode' => urlencode($album['album']),
 					'bin2hex'   => bin2hex($album['album'])
 				);
@@ -100,7 +100,7 @@ function photos_init(&$a) {
 				'$recent'    => t('Recent Photos'),
 				'$albums'   => $albums['albums'],
 				'$baseurl'  => z_root(),
-				'$upload'   => array( t('Upload New Photos'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/upload'),
+				'$upload'   => array( t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload'),
 				'$can_post' => $can_post
 			));
 		}
@@ -190,7 +190,7 @@ function photos_post(&$a) {
 		$album = hex2bin($a->argv[3]);
 
 		if($album === t('Profile Photos') || $album === 'Contact Photos' || $album === t('Contact Photos')) {
-			goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+			goaway($_SESSION['photo_return']);
 			return; // NOTREACHED
 		}
 
@@ -200,13 +200,13 @@ function photos_post(&$a) {
 		);
 		if(! count($r)) {
 			notice( t('Album not found.') . EOL);
-			goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+			goaway($_SESSION['photo_return']);
 			return; // NOTREACHED
 		}
 
 		// Check if the user has responded to a delete confirmation query
 		if($_REQUEST['canceled']) {
-			goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+			goaway($_SESSION['photo_return']);
 		}
 
 		/*
@@ -221,7 +221,7 @@ function photos_post(&$a) {
 				intval($page_owner_uid)
 			);
 			$newurl = str_replace(bin2hex($album),bin2hex($newalbum),$_SESSION['photo_return']);
-			goaway($a->get_baseurl() . '/' . $newurl);
+			goaway($newurl);
 			return; // NOTREACHED
 		}
 
@@ -273,7 +273,7 @@ function photos_post(&$a) {
 				}
 			}
 			else {
-				goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+				goaway($_SESSION['photo_return']);
 				return; // NOTREACHED
 			}
 
@@ -309,14 +309,14 @@ function photos_post(&$a) {
 				}
 			}
 		}
-		goaway($a->get_baseurl() . '/photos/' . $a->data['user']['nickname']);
+		goaway('photos/' . $a->data['user']['nickname']);
 		return; // NOTREACHED
 	}
 
 
 	// Check if the user has responded to a delete confirmation query for a single photo
 	if(($a->argc > 2) && $_REQUEST['canceled']) {
-		goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+		goaway($_SESSION['photo_return']);
 	}
 
 	if(($a->argc > 2) && (x($_POST,'delete')) && ($_POST['delete'] == t('Delete Photo'))) {
@@ -379,7 +379,7 @@ function photos_post(&$a) {
 			}
 		}
 
-		goaway($a->get_baseurl() . '/photos/' . $a->data['user']['nickname']);
+		goaway('photos/' . $a->data['user']['nickname']);
 		return; // NOTREACHED
 	}
 
@@ -718,12 +718,6 @@ function photos_post(&$a) {
 
 					$item_id = item_store($arr);
 					if($item_id) {
-						//q("UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d",
-						//	dbesc($a->get_baseurl() . '/display/' . $owner_record['nickname'] . '/' . $item_id),
-						//	intval($page_owner_uid),
-						//	intval($item_id)
-						//);
-
 						proc_run('php',"include/notifier.php","tag","$item_id");
 					}
 				}
@@ -731,7 +725,7 @@ function photos_post(&$a) {
 			}
 
 		}
-		goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+		goaway($_SESSION['photo_return']);
 		return; // NOTREACHED
 	}
 
@@ -938,14 +932,6 @@ function photos_post(&$a) {
 
 	$item_id = item_store($arr);
 
-	//if($item_id) {
-	//	q("UPDATE `item` SET `plink` = '%s' WHERE `uid` = %d AND `id` = %d",
-	//		dbesc($a->get_baseurl() . '/display/' . $owner_record['nickname'] . '/' . $item_id),
-	//		intval($page_owner_uid),
-	//		intval($item_id)
-	//	);
-	//}
-
 	if($visible)
 		proc_run('php', "include/notifier.php", 'wall-new', $item_id);
 
@@ -954,7 +940,7 @@ function photos_post(&$a) {
 	// addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
 	// if they do not wish to be redirected
 
-	goaway($a->get_baseurl() . '/' . $_SESSION['photo_return']);
+	goaway($_SESSION['photo_return']);
 	// NOTREACHED
 }
 
@@ -1125,7 +1111,7 @@ function photos_content(&$a) {
 
 		$uploader = '';
 
-		$ret = array('post_url' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'],
+		$ret = array('post_url' => 'photos/' . $a->data['user']['nickname'],
 				'addon_text' => $uploader,
 				'default_upload' => true);
 
@@ -1267,15 +1253,15 @@ function photos_content(&$a) {
 		else {
 			if(($album !== t('Profile Photos')) && ($album !== 'Contact Photos') && ($album !== t('Contact Photos'))) {
 				if($can_post) {
-					$edit = array(t('Edit Album'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '/edit');
+					$edit = array(t('Edit Album'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '/edit');
  				}
 			}
 		}
 
 		if($_GET['order'] === 'posted')
-			$order =  array(t('Show Newest First'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album));
+			$order =  array(t('Show Newest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album));
 		else
-			$order = array(t('Show Oldest First'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '?f=&order=posted');
+			$order = array(t('Show Oldest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '?f=&order=posted');
 
 		$photos = array();
 
@@ -1301,10 +1287,10 @@ function photos_content(&$a) {
 				$photos[] = array(
 					'id' => $rr['id'],
 					'twist' => ' ' . $twist . rand(2,4),
-					'link' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id']
+					'link' => 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id']
 						. (($_GET['order'] === 'posted') ? '?f=&order=posted' : ''),
 					'title' => t('View Photo'),
-					'src' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext,
+					'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext,
 					'alt' => $imgalt_e,
 					'desc'=> $desc_e,
 					'ext' => $ext,
@@ -1317,7 +1303,7 @@ function photos_content(&$a) {
 				'$photos' => $photos,
 				'$album' => $album,
 				'$can_post' => $can_post,
-				'$upload' => array(t('Upload New Photos'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/upload/' . bin2hex($album)),
+				'$upload' => array(t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload/' . bin2hex($album)),
 				'$order' => $order,
 				'$edit' => $edit
 			));
@@ -1384,8 +1370,8 @@ function photos_content(&$a) {
 				}
 			}
 			$edit_suffix = ((($cmd === 'edit') && ($can_post)) ? '/edit' : '');
-			$prevlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
-			$nextlink = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
+			$prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
+			$nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : '');
  		}
 
 
@@ -1402,14 +1388,14 @@ function photos_content(&$a) {
 			}
 		}
 
-		$album_link = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
+		$album_link = 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
  		$tools = Null;
  		$lock = Null;
 
 		if($can_post && ($ph[0]['uid'] == $owner_uid)) {
 			$tools = array(
-				'edit'	=> array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . (($cmd === 'edit') ? '' : '/edit'), (($cmd === 'edit') ? t('View photo') : t('Edit photo'))),
-				'profile'=>array($a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')),
+				'edit'	=> array('photos/' . $a->data['user']['nickname'] . '/image/' . $datum . (($cmd === 'edit') ? '' : '/edit'), (($cmd === 'edit') ? t('View photo') : t('Edit photo'))),
+				'profile'=>array('profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')),
 			);
 
 			// lock
@@ -1433,9 +1419,9 @@ function photos_content(&$a) {
 			$prevlink = array($prevlink, '<div class="icon prev"></div>') ;
 
 		$photo = array(
-			'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']],
+			'href' => 'photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']],
 			'title'=> t('View Full Size'),
-			'src'  => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?f=&_u=' . datetime_convert('','','','ymdhis'),
+			'src'  => 'photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?f=&_u=' . datetime_convert('','','','ymdhis'),
 			'height' => $hires['height'],
 			'width' => $hires['width'],
 			'album' => $hires['album'],
@@ -1522,7 +1508,7 @@ function photos_content(&$a) {
 			}
 			$tags = array(t('Tags: '), $tag_str);
 			if($cmd === 'edit') {
-				$tags[] = $a->get_baseurl() . '/tagrm/' . $link_item['id'];
+				$tags[] = 'tagrm/' . $link_item['id'];
 				$tags[] = t('[Remove any tag]');
 			}
 		}
@@ -1693,7 +1679,7 @@ function photos_content(&$a) {
 					if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE))) && ($item['id'] != $item['parent']))
 						continue;
 
-					$redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
+					$redirect_url = 'redir/' . $item['cid'] ;
 
 
 					if(local_user() && ($item['contact-uid'] == local_user())
@@ -1880,12 +1866,12 @@ function photos_content(&$a) {
 			$photos[] = array(
 				'id'		=> $rr['id'],
 				'twist'		=> ' ' . $twist . rand(2,4),
-				'link'  	=> $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
+				'link'  	=> 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'],
 				'title' 	=> t('View Photo'),
-				'src'     	=> $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.' . $ext,
+				'src'     	=> 'photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.' . $ext,
 				'alt'     	=> $alt_e,
 				'album'	=> array(
-					'link'  => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']),
+					'link'  => 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']),
 					'name'  => $name_e,
 					'alt'   => t('View Album'),
 				),
@@ -1898,7 +1884,7 @@ function photos_content(&$a) {
 	$o .= replace_macros($tpl, array(
 		'$title' => t('Recent Photos'),
 		'$can_post' => $can_post,
-		'$upload' => array(t('Upload New Photos'), $a->get_baseurl().'/photos/'.$a->data['user']['nickname'].'/upload'),
+		'$upload' => array(t('Upload New Photos'), 'photos/'.$a->data['user']['nickname'].'/upload'),
 		'$photos' => $photos,
 	));
 
diff --git a/mod/search.php b/mod/search.php
index 7c78339c70..1776a92552 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -147,7 +147,7 @@ function search_content(&$a) {
 	}
 
 
-	$o .= search($search,'search-box','/search',((local_user()) ? true : false), false);
+	$o .= search($search,'search-box','search',((local_user()) ? true : false), false);
 
 	if(strpos($search,'#') === 0) {
 		$tag = true;
diff --git a/mod/settings.php b/mod/settings.php
index 3efdbf6bde..905a5ed08d 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -39,7 +39,7 @@ function settings_init(&$a) {
 	$tabs = array(
 		array(
 			'label'	=> t('Account'),
-			'url' 	=> $a->get_baseurl(true).'/settings',
+			'url' 	=> 'settings',
 			'selected'	=>  (($a->argc == 1) && ($a->argv[0] === 'settings')?'active':''),
 			'accesskey' => 'o',
 		),
@@ -48,7 +48,7 @@ function settings_init(&$a) {
 	if(get_features()) {
 		$tabs[] =	array(
 					'label'	=> t('Additional features'),
-					'url' 	=> $a->get_baseurl(true).'/settings/features',
+					'url' 	=> 'settings/features',
 					'selected'	=> (($a->argc > 1) && ($a->argv[1] === 'features') ? 'active' : ''),
 					'accesskey' => 't',
 				);
@@ -56,49 +56,49 @@ function settings_init(&$a) {
 
 	$tabs[] =	array(
 		'label'	=> t('Display'),
-		'url' 	=> $a->get_baseurl(true).'/settings/display',
+		'url' 	=> 'settings/display',
 		'selected'	=> (($a->argc > 1) && ($a->argv[1] === 'display')?'active':''),
 		'accesskey' => 'i',
 	);
 
 	$tabs[] =	array(
 		'label'	=> t('Social Networks'),
-		'url' 	=> $a->get_baseurl(true).'/settings/connectors',
+		'url' 	=> 'settings/connectors',
 		'selected'	=> (($a->argc > 1) && ($a->argv[1] === 'connectors')?'active':''),
 		'accesskey' => 'w',
 	);
 
 	$tabs[] =	array(
 		'label'	=> t('Plugins'),
-		'url' 	=> $a->get_baseurl(true).'/settings/addon',
+		'url' 	=> 'settings/addon',
 		'selected'	=> (($a->argc > 1) && ($a->argv[1] === 'addon')?'active':''),
 		'accesskey' => 'l',
 	);
 
 	$tabs[] =	array(
 		'label'	=> t('Delegations'),
-		'url' 	=> $a->get_baseurl(true).'/delegate',
+		'url' 	=> 'delegate',
 		'selected'	=> (($a->argc == 1) && ($a->argv[0] === 'delegate')?'active':''),
 		'accesskey' => 'd',
 	);
 
 	$tabs[] =	array(
 		'label' => t('Connected apps'),
-		'url' => $a->get_baseurl(true) . '/settings/oauth',
+		'url' => 'settings/oauth',
 		'selected' => (($a->argc > 1) && ($a->argv[1] === 'oauth')?'active':''),
 		'accesskey' => 'b',
 	);
 
 	$tabs[] =	array(
 		'label' => t('Export personal data'),
-		'url' => $a->get_baseurl(true) . '/uexport',
+		'url' => 'uexport',
 		'selected' => (($a->argc == 1) && ($a->argv[0] === 'uexport')?'active':''),
 		'accesskey' => 'e',
 	);
 
 	$tabs[] =	array(
 		'label' => t('Remove account'),
-		'url' => $a->get_baseurl(true) . '/removeme',
+		'url' => 'removeme',
 		'selected' => (($a->argc == 1) && ($a->argv[0] === 'removeme')?'active':''),
 		'accesskey' => 'r',
 	);
@@ -342,7 +342,7 @@ function settings_post(&$a) {
 		);
 
 		call_hooks('display_settings_post', $_POST);
-		goaway($a->get_baseurl(true) . '/settings/display' );
+		goaway('settings/display' );
 		return; // NOTREACHED
 	}
 
@@ -351,7 +351,7 @@ function settings_post(&$a) {
 	if (x($_POST,'resend_relocate')) {
 		proc_run('php', 'include/notifier.php', 'relocate', local_user());
 		info(t("Relocate message has been send to your contacts"));
-		goaway($a->get_baseurl(true) . '/settings');
+		goaway('settings');
 	}
 
 	call_hooks('settings_post', $_POST);
@@ -627,7 +627,7 @@ function settings_post(&$a) {
 
 	}
 
-	goaway($a->get_baseurl(true) . '/settings' );
+	goaway('settings' );
 	return; // NOTREACHED
 }
 
@@ -1152,7 +1152,7 @@ function settings_content(&$a) {
 		info( t('Profile is <strong>not published</strong>.') . EOL );
 
 
-	//$subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . $a->get_baseurl(true) . '/profile/' . $nickname : '');
+	//$subdir = ((strlen($a->get_path())) ? '<br />' . t('or') . ' ' . 'profile/' . $nickname : '');
 
 	$tpl_addr = get_markup_template("settings_nick_set.tpl");
 
diff --git a/mod/uexport.php b/mod/uexport.php
index a44620a976..3114add7e4 100644
--- a/mod/uexport.php
+++ b/mod/uexport.php
@@ -6,54 +6,6 @@ function uexport_init(&$a){
 
 	require_once("mod/settings.php");
         settings_init($a);
-
-/*
-	$tabs = array(
-		array(
-			'label'	=> t('Account settings'),
-			'url' 	=> $a->get_baseurl(true).'/settings',
-			'selected'	=> '',
-		),
-		array(
-			'label'	=> t('Display settings'),
-			'url' 	=> $a->get_baseurl(true).'/settings/display',
-			'selected'	=>'',
-		),
-
-		array(
-			'label'	=> t('Connector settings'),
-			'url' 	=> $a->get_baseurl(true).'/settings/connectors',
-			'selected'	=> '',
-		),
-		array(
-			'label'	=> t('Plugin settings'),
-			'url' 	=> $a->get_baseurl(true).'/settings/addon',
-			'selected'	=> '',
-		),
-		array(
-			'label' => t('Connected apps'),
-			'url' => $a->get_baseurl(true) . '/settings/oauth',
-			'selected' => '',
-		),
-		array(
-			'label' => t('Export personal data'),
-			'url' => $a->get_baseurl(true) . '/uexport',
-			'selected' => 'active'
-		),
-		array(
-			'label' => t('Remove account'),
-			'url' => $a->get_baseurl(true) . '/removeme',
-			'selected' => ''
-		)
-	);
-
-	$tabtpl = get_markup_template("generic_links_widget.tpl");
-	$a->page['aside'] = replace_macros($tabtpl, array(
-		'$title' => t('Settings'),
-		'$class' => 'settings-widget',
-		'$items' => $tabs,
-	));
-*/
 }
 
 function uexport_content(&$a){
@@ -74,8 +26,8 @@ function uexport_content(&$a){
       * list of array( 'link url', 'link text', 'help text' )
       */
     $options = array(
-            array('/uexport/account',t('Export account'),t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')),
-            array('/uexport/backup',t('Export all'),t('Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)')),
+            array('uexport/account',t('Export account'),t('Export your account info and contacts. Use this to make a backup of your account and/or to move it to another server.')),
+            array('uexport/backup',t('Export all'),t('Export your accout info, contacts and all your items as json. Could be a very big file, and could take a lot of time. Use this to make a full backup of your account (photos are not exported)')),
     );
     call_hooks('uexport_options', $options);
 
@@ -153,9 +105,9 @@ function uexport_account($a){
         'version' => FRIENDICA_VERSION,
         'schema' => DB_UPDATE_VERSION,
         'baseurl' => $a->get_baseurl(),
-        'user' => $user, 
-        'contact' => $contact, 
-        'profile' => $profile, 
+        'user' => $user,
+        'contact' => $contact,
+        'profile' => $profile,
         'photo' => $photo,
         'pconfig' => $pconfig,
         'group' => $group,
@@ -171,8 +123,8 @@ function uexport_account($a){
  * echoes account data and items as separated json, one per line
  */
 function uexport_all(&$a) {
-    
-    uexport_account($a);
+
+	uexport_account($a);
 	echo "\n";
 
 	$r = q("SELECT count(*) as `total` FROM `item` WHERE `uid` = %d ",
diff --git a/object/Item.php b/object/Item.php
index 9daf44648e..e9c96cf159 100644
--- a/object/Item.php
+++ b/object/Item.php
@@ -50,7 +50,7 @@ class Item extends BaseObject {
 		$this->writable = ($this->get_data_value('writable') || $this->get_data_value('self'));
 
 		$ssl_state = ((local_user()) ? true : false);
-		$this->redirect_url = $a->get_baseurl($ssl_state) . '/redir/' . $this->get_data_value('cid') ;
+		$this->redirect_url = 'redir/' . $this->get_data_value('cid') ;
 
 		if(get_config('system','thread_allow') && $a->theme_thread_allow && !$this->is_toplevel())
 			$this->threaded = true;
@@ -119,9 +119,9 @@ class Item extends BaseObject {
 		$shareable = ((($conv->get_profile_owner() == local_user()) && ($item['private'] != 1)) ? true : false);
 		if(local_user() && link_compare($a->contact['url'],$item['author-link'])) {
 			if ($item["event-id"] != 0)
-				$edpost = array($a->get_baseurl($ssl_state)."/events/event/".$item['event-id'], t("Edit"));
+				$edpost = array("events/event/".$item['event-id'], t("Edit"));
 			else
-				$edpost = array($a->get_baseurl($ssl_state)."/editpost/".$item['id'], t("Edit"));
+				$edpost = array("editpost/".$item['id'], t("Edit"));
 		} else
 			$edpost = false;
 		if(($this->get_data_value('uid') == local_user()) || $this->is_visiting())
@@ -160,7 +160,7 @@ class Item extends BaseObject {
 		call_hooks('render_location',$locate);
 		$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
 
-		$searchpath = $a->get_baseurl()."/search?tag=";
+		$searchpath = "search?tag=";
 		$tags=array();
 		$hashtags = array();
 		$mentions = array();
@@ -703,7 +703,7 @@ class Item extends BaseObject {
 				'$parent' => $this->get_id(),
 				'$qcomment' => $qcomment,
 				'$profile_uid' =>  $conv->get_profile_owner(),
-				'$mylink' => $a->contact['url'],
+				'$mylink' => $a->remove_baseurl($a->contact['url']),
 				'$mytitle' => t('This is you'),
 				'$myphoto' => $a->remove_baseurl($a->contact['thumb']),
 				'$comment' => t('Comment'),
diff --git a/view/templates/uexport.tpl b/view/templates/uexport.tpl
index 382c7fc6a3..b9e177af26 100644
--- a/view/templates/uexport.tpl
+++ b/view/templates/uexport.tpl
@@ -1,10 +1,10 @@
 
-<h3>{{$title}}</h3>
-
-
-{{foreach $options as $o}}
-<dl>
-    <dt><a href="{{$baseurl}}/{{$o.0}}">{{$o.1}}</a></dt>
-    <dd>{{$o.2}}</dd>
-</dl>
-{{/foreach}}
\ No newline at end of file
+<h3>{{$title}}</h3>
+
+
+{{foreach $options as $o}}
+<dl>
+    <dt><a href="{{$o.0}}">{{$o.1}}</a></dt>
+    <dd>{{$o.2}}</dd>
+</dl>
+{{/foreach}}
diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css
index e35556f541..3e91d61246 100644
--- a/view/theme/vier/style.css
+++ b/view/theme/vier/style.css
@@ -1432,8 +1432,8 @@ section.minimal {
 }
 .children .wall-item-container .wall-item-item .wall-item-content img {
   /* max-width: 650px; */
-  /* max-width: 580px; */
-  max-width: 100%;
+  max-width: 520px;
+  /* max-width: 100%; */
 }
 .wall-item-container .wall-item-links, .wall-item-container .wall-item-actions {
   display: table-cell;
diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php
index f33a9178ac..7f6ead079f 100644
--- a/view/theme/vier/theme.php
+++ b/view/theme/vier/theme.php
@@ -239,12 +239,12 @@ function vier_community_info() {
 				$selected = (($cid == $contact['id']) ? ' forum-selected' : '');
 
 				$entry = array(
-					'url' => z_root() . '/network?f=&cid=' . $contact['id'],
-					'external_url' => z_root() . '/redir/' . $contact['id'],
+					'url' => 'network?f=&cid=' . $contact['id'],
+					'external_url' => 'redir/' . $contact['id'],
 					'name' => $contact['name'],
 					'cid' => $contact['id'],
 					'selected' 	=> $selected,
-					'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO),
+					'micro' => App::remove_baseurl(proxy_url($contact['micro'], false, PROXY_SIZE_MICRO)),
 					'id' => ++$id,
 				);
 				$entries[] = $entry;