diff --git a/images/friendika-128.jpg b/images/friendika-128.jpg
new file mode 100644
index 0000000000..f7d86ae50d
Binary files /dev/null and b/images/friendika-128.jpg differ
diff --git a/images/friendika-128.png b/images/friendika-128.png
new file mode 100644
index 0000000000..1d1c8e3207
Binary files /dev/null and b/images/friendika-128.png differ
diff --git a/images/friendika-16.jpg b/images/friendika-16.jpg
new file mode 100644
index 0000000000..ce59a70a01
Binary files /dev/null and b/images/friendika-16.jpg differ
diff --git a/images/friendika-16.png b/images/friendika-16.png
new file mode 100644
index 0000000000..1a742ecdc1
Binary files /dev/null and b/images/friendika-16.png differ
diff --git a/images/friendika-256.jpg b/images/friendika-256.jpg
new file mode 100644
index 0000000000..182810d625
Binary files /dev/null and b/images/friendika-256.jpg differ
diff --git a/images/friendika-256.png b/images/friendika-256.png
new file mode 100644
index 0000000000..ea931c85f7
Binary files /dev/null and b/images/friendika-256.png differ
diff --git a/images/friendika-32.jpg b/images/friendika-32.jpg
new file mode 100644
index 0000000000..4e697411d6
Binary files /dev/null and b/images/friendika-32.jpg differ
diff --git a/images/friendika-32.png b/images/friendika-32.png
new file mode 100644
index 0000000000..a300b7beae
Binary files /dev/null and b/images/friendika-32.png differ
diff --git a/images/friendika-64.jpg b/images/friendika-64.jpg
new file mode 100644
index 0000000000..050830fff9
Binary files /dev/null and b/images/friendika-64.jpg differ
diff --git a/images/friendika-64.png b/images/friendika-64.png
new file mode 100644
index 0000000000..a1c0422932
Binary files /dev/null and b/images/friendika-64.png differ
diff --git a/images/friendika.svg b/images/friendika.svg
new file mode 100644
index 0000000000..2155d0b006
--- /dev/null
+++ b/images/friendika.svg
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="96"
+   height="96"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.0 r9654"
+   sodipodi:docname="friendika.svg"
+   inkscape:export-filename="/home/meta/Documents/My random images/friendika.png"
+   inkscape:export-xdpi="80.552788"
+   inkscape:export-ydpi="80.552788">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="highlightgradient">
+      <stop
+         id="stop3833"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0.74374998;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3829" />
+    </linearGradient>
+    <linearGradient
+       id="shadowgradient">
+      <stop
+         id="stop3833-5"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:0.5;" />
+      <stop
+         style="stop-color:#818080;stop-opacity:0;"
+         offset="1"
+         id="stop3829-9" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#highlightgradient"
+       id="linearGradient4011"
+       x1="44.948269"
+       y1="0"
+       x2="54.103466"
+       y2="46.797421"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1,0.54545455)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#shadowgradient"
+       id="linearGradient4021"
+       x1="52.016712"
+       y1="96"
+       x2="42.867535"
+       y2="41.837971"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5,0,48)" />
+    <filter
+       inkscape:collect="always"
+       id="filter4055"
+       x="-0.03"
+       width="1.06"
+       y="-0.12"
+       height="1.24">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.2"
+         id="feGaussianBlur4057" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter4059"
+       x="-0.029877551"
+       width="1.0597551"
+       y="-0.122"
+       height="1.244">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.22"
+         id="feGaussianBlur4061" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.9132799"
+     inkscape:cx="53.033009"
+     inkscape:cy="2.8284271"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     width="256px"
+     inkscape:snap-global="true"
+     inkscape:window-width="1680"
+     inkscape:window-height="1010"
+     inkscape:window-x="194"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="3"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="2px"
+       spacingy="2px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Colors"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-956.3622)"
+     style="display:inline">
+    <path
+       style="fill:#ffc019;fill-opacity:1;stroke:none"
+       d="M 16,0 C 7.0091019,0.04308252 0,7.0521845 0,16 0,16 0,57.499123 0,80 0,89.120146 7.0091019,96 16,96 L 32,96 32,70 64,70 63.916016,46.068359 32,46.236328 32,26 64,26 64,0 C 64,0 24,0 16,0 z"
+       transform="translate(0,956.3622)"
+       id="rect2993"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccsccccccccc" />
+    <path
+       style="fill:#1872a2;fill-opacity:1;stroke:none"
+       d="m 80,1052.3622 c 8.990898,0 16.086165,-6.966 16,-16 0,0 0,-41.4991 0,-64 0.07767,-9.01639 -7.067354,-16 -16,-16 l -16,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26 c 0,0 32,0 48,0 z"
+       id="rect2993-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccsccccccccc" />
+  </g>
+  <g
+     style="display:inline"
+     inkscape:label="Lines as original logo"
+     id="g3997"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:nodetypes="cccccccc"
+       inkscape:connector-curvature="0"
+       id="path3999"
+       d="m 64,0 0,26 -32,0 0,22 m 32,0 0,22 -32,0 0,26"
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       ry="16"
+       rx="16"
+       y="0"
+       x="0"
+       height="96"
+       width="96"
+       id="rect4001"
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Lines with center break"
+     style="display:none">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 64,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26"
+       id="path3926"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccc" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3928"
+       width="96"
+       height="96"
+       x="0"
+       y="0"
+       rx="16"
+       ry="16" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Effects"
+     style="display:inline">
+    <rect
+       style="fill:url(#linearGradient3930);fill-opacity:1;stroke:none"
+       id="rect3823"
+       width="96"
+       height="48.04369"
+       x="-3.1086245e-15"
+       y="1.8024861e-14"
+       ry="15.215644"
+       rx="15.214664" />
+    <rect
+       style="fill:url(#linearGradient3904);fill-opacity:1;stroke:none"
+       id="rect3823-8"
+       width="96"
+       height="47.86721"
+       x="1.5376101e-14"
+       y="-96"
+       ry="15.159752"
+       rx="15.214664"
+       transform="scale(1,-1)" />
+    <rect
+       style="fill:url(#linearGradient4011);fill-opacity:1;stroke:none;filter:url(#filter4059)"
+       id="rect4003"
+       width="98"
+       height="24"
+       x="0"
+       y="0"
+       rx="15.214664"
+       ry="8.2994423"
+       transform="matrix(1.0296115,0,0,1.1963836,-2.901924,-4.7132067)" />
+    <rect
+       style="opacity:0.56746030000000003;fill:url(#linearGradient4021);fill-opacity:1;stroke:none;filter:url(#filter4055)"
+       id="rect4013"
+       width="96"
+       height="24"
+       x="0"
+       y="72"
+       rx="14.008356"
+       ry="12"
+       transform="matrix(0.9768331,0,0,0.91974646,1.1649641,8.098115)" />
+  </g>
+</svg>
diff --git a/include/nav.php b/include/nav.php
index 5e29cc3c4b..4104cf3cf3 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -124,7 +124,7 @@ function nav(&$a) {
 	$banner = get_config('system','banner');
 
 	if($banner === false) 
-		$banner .= '<a href="http://friendika.com"><img id="logo-img" src="images/ff-32.jpg" alt="logo" /></a><span id="logo-text"><a href="http://friendika.com">Friendika</a></span>';
+		$banner .= '<a href="http://friendika.com"><img id="logo-img" src="images/friendika-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendika.com">Friendika</a></span>';
 
 
 	$a->page['nav'] .= '<span id="banner">' . $banner . '</span>';
diff --git a/include/poller.php b/include/poller.php
index d54c88e053..fd02e01984 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -2,18 +2,18 @@
 require_once("boot.php");
 
 function poller_run($argv, $argc){
-  global $a, $db;
+	global $a, $db;
 
-  if(is_null($a)){
-    $a = new App;
-  }
+	if(is_null($a)) {
+		$a = new App;
+	}
   
-  if(is_null($db)){
-    @include(".htconfig.php");
-    require_once("dba.php");
-    $db = new dba($db_host, $db_user, $db_pass, $db_data);
-    unset($db_host, $db_user, $db_pass, $db_data);
-  };
+	if(is_null($db)) {
+	    @include(".htconfig.php");
+    	require_once("dba.php");
+	    $db = new dba($db_host, $db_user, $db_pass, $db_data);
+    	unset($db_host, $db_user, $db_pass, $db_data);
+  	};
 
 	require_once('session.php');
 	require_once('datetime.php');
@@ -30,7 +30,7 @@ function poller_run($argv, $argc){
 	proc_run('php',"include/queue.php");
 	
 	// clear old cache
-	q("DELETE FROM `cache` WHERE `updated`<'%s'",
+	q("DELETE FROM `cache` WHERE `updated` < '%s'",
 		dbesc(datetime_convert('UTC','UTC',"now - 30 days")));
 
 	$manual_id  = 0;
@@ -47,130 +47,214 @@ function poller_run($argv, $argc){
 
 	$sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
 
-	// 'stat' clause is a temporary measure until we have federation subscriptions working both directions
-	$contacts = q("SELECT * FROM `contact` 
-		WHERE ( ( `network` = 'dfrn' AND ( `dfrn-id` != '' OR (`issued-id` != '' AND `duplex` = 1)))
-		OR ( `network` IN ( 'stat', 'feed' ) AND `poll` != '' ))
+	$contacts = q("SELECT `id` FROM `contact` 
+		WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
 		$sql_extra 
-		AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()");
+		AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()",
+		intval(REL_FAN),
+		intval(REL_BUD)
+	);
 
-	if(! count($contacts)){
+	if(! count($contacts)) {
 		return;
 	}
 
-	foreach($contacts as $contact) {
+	foreach($contacts as $c) {
 
-		if($manual_id)
-			$contact['last-update'] = '0000-00-00 00:00:00';
-
-		if($contact['priority'] || $contact['subhub']) {
-
-			$hub_update = true;
-			$update     = false;
-
-			$t = $contact['last-update'];
-
-			// We should be getting everything via a hub. But just to be sure, let's check once a day.
-			// (You can make this more or less frequent if desired by setting 'pushpoll_frequency' appropriately)
-			// This also lets us update our subscription to the hub, and add or replace hubs in case it
-			// changed. We will only update hubs once a day, regardless of 'pushpoll_frequency'. 
-
-
-			if($contact['subhub']) {
-				$interval = get_config('system','pushpoll_frequency');
-				$contact['priority'] = (($interval !== false) ? intval($interval) : 3);
-				$hub_update = false;
-
-				if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
-						$hub_update = true;
-			}
-
-
-			/**
-			 * Based on $contact['priority'], should we poll this site now? Or later?
-			 */			
-
-			switch ($contact['priority']) {
-				case 5:
-					if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 month"))
-						$update = true;
-					break;					
-				case 4:
-					if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 week"))
-						$update = true;
-					break;
-				case 3:
-					if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day"))
-						$update = true;
-					break;
-				case 2:
-					if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 12 hour"))
-						$update = true;
-					break;
-				case 1:
-				default:
-					if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 hour"))
-						$update = true;
-					break;
-			}
-			if((! $update) && (! $force))
-				continue;
-		}
-
-		$importer_uid = $contact['uid'];
-
-		$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
-			intval($importer_uid)
+		$res = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
+			intval($c['id'])
 		);
-		if(! count($r))
+
+		if(! count($res))
 			continue;
 
-		$importer = $r[0];
+		foreach($res as $contact) {
+			if($manual_id)
+				$contact['last-update'] = '0000-00-00 00:00:00';
 
-		logger("poller: poll: IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}");
+			if($contact['priority'] || $contact['subhub']) {
 
-		$last_update = (($contact['last-update'] === '0000-00-00 00:00:00') 
-			? datetime_convert('UTC','UTC','now - 30 days', ATOM_TIME)
-			: datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME)
-		);
+				$hub_update = true;
+				$update     = false;
 
-		if($contact['network'] === 'dfrn') {
+				$t = $contact['last-update'];
 
-			$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
+				// We should be getting everything via a hub. But just to be sure, let's check once a day.
+				// (You can make this more or less frequent if desired by setting 'pushpoll_frequency' appropriately)
+				// This also lets us update our subscription to the hub, and add or replace hubs in case it
+				// changed. We will only update hubs once a day, regardless of 'pushpoll_frequency'. 
 
-			if(intval($contact['duplex']) && $contact['dfrn-id'])
-				$idtosend = '0:' . $orig_id;
-			if(intval($contact['duplex']) && $contact['issued-id'])
-				$idtosend = '1:' . $orig_id;		
 
-			$url = $contact['poll'] . '?dfrn_id=' . $idtosend 
-				. '&dfrn_version=' . DFRN_PROTOCOL_VERSION 
-				. '&type=data&last_update=' . $last_update ;
+				if($contact['subhub']) {
+					$interval = get_config('system','pushpoll_frequency');
+					$contact['priority'] = (($interval !== false) ? intval($interval) : 3);
+					$hub_update = false;
 	
-			$xml = fetch_url($url);
+					if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
+							$hub_update = true;
+				}
 
-			logger('poller: handshake with url ' . $url . ' returns xml: ' . $xml, LOGGER_DATA);
+				/**
+				 * Based on $contact['priority'], should we poll this site now? Or later?
+				 */			
 
-
-			if(! $xml) {
-				logger("poller: $url appears to be dead - marking for death ");
-				// dead connection - might be a transient event, or this might
-				// mean the software was uninstalled or the domain expired. 
-				// Will keep trying for one month.
-				mark_for_death($contact);
-
-				// set the last-update so we don't keep polling
-
-				$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
-					dbesc(datetime_convert()),
-					intval($contact['id'])
-				);
-
-				continue;
+				switch ($contact['priority']) {
+					case 5:
+						if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 month"))
+							$update = true;
+						break;					
+					case 4:
+						if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 week"))
+							$update = true;
+						break;
+					case 3:
+						if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day"))
+							$update = true;
+						break;
+					case 2:
+						if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 12 hour"))
+							$update = true;
+						break;
+					case 1:
+					default:
+						if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 hour"))
+							$update = true;
+						break;
+				}
+				if((! $update) && (! $force))
+					continue;
 			}
 
+			$importer_uid = $contact['uid'];
+		
+			$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
+				intval($importer_uid)
+			);
+			if(! count($r))
+				continue;
+
+			$importer = $r[0];
+
+			logger("poller: poll: IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}");
+
+			$last_update = (($contact['last-update'] === '0000-00-00 00:00:00') 
+				? datetime_convert('UTC','UTC','now - 30 days', ATOM_TIME)
+				: datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME)
+			);
+
+			if($contact['network'] === 'dfrn') {
+
+				$idtosend = $orig_id = (($contact['dfrn-id']) ? $contact['dfrn-id'] : $contact['issued-id']);
+
+				if(intval($contact['duplex']) && $contact['dfrn-id'])
+					$idtosend = '0:' . $orig_id;
+				if(intval($contact['duplex']) && $contact['issued-id'])
+					$idtosend = '1:' . $orig_id;		
+
+				$url = $contact['poll'] . '?dfrn_id=' . $idtosend 
+					. '&dfrn_version=' . DFRN_PROTOCOL_VERSION 
+					. '&type=data&last_update=' . $last_update ;
+	
+				$xml = fetch_url($url);
+
+				logger('poller: handshake with url ' . $url . ' returns xml: ' . $xml, LOGGER_DATA);
+
+
+				if(! $xml) {
+					logger("poller: $url appears to be dead - marking for death ");
+					// dead connection - might be a transient event, or this might
+					// mean the software was uninstalled or the domain expired. 
+					// Will keep trying for one month.
+					mark_for_death($contact);
+
+					// set the last-update so we don't keep polling
+
+					$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+						dbesc(datetime_convert()),
+						intval($contact['id'])
+					);
+
+					continue;
+				}
+
+				if(! strstr($xml,'<?xml')) {
+					logger('poller: response from ' . $url . ' did not contain XML.');
+					$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+						dbesc(datetime_convert()),
+						intval($contact['id'])
+					);
+					continue;
+				}
+
+
+				$res = simplexml_load_string($xml);
+	
+				if(intval($res->status) == 1) {
+					logger("poller: $url replied status 1 - marking for death ");
+
+					// we may not be friends anymore. Will keep trying for one month.
+					// set the last-update so we don't keep polling
+
+					$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
+						dbesc(datetime_convert()),
+						intval($contact['id'])
+					);
+
+					mark_for_death($contact);
+				}
+				else {
+					if($contact['term-date'] != '0000-00-00 00:00:00') {
+						logger("poller: $url back from the dead - removing mark for death");
+						unmark_for_death($contact);
+					}
+				}
+
+				if((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id)))
+					continue;
+
+				$postvars = array();
+
+				$sent_dfrn_id = hex2bin((string) $res->dfrn_id);
+				$challenge    = hex2bin((string) $res->challenge);
+
+				$final_dfrn_id = '';
+
+				if(($contact['duplex']) && strlen($contact['prvkey'])) {
+					openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
+					openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
+				}
+				else {
+					openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
+					openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
+				}
+
+				$final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
+
+				if(strpos($final_dfrn_id,':') == 1)
+					$final_dfrn_id = substr($final_dfrn_id,2);
+
+				if($final_dfrn_id != $orig_id) {
+	
+					// did not decode properly - cannot trust this site 
+					continue;
+				}
+
+				$postvars['dfrn_id'] = $idtosend;
+				$postvars['dfrn_version'] = DFRN_PROTOCOL_VERSION;
+
+				$xml = post_url($contact['poll'],$postvars);
+			}
+			else {
+
+				// $contact['network'] !== 'dfrn'
+
+				$xml = fetch_url($contact['poll']);
+			}
+
+			logger('poller: received xml : ' . $xml, LOGGER_DATA);
+
 			if(! strstr($xml,'<?xml')) {
-				logger('poller: response from ' . $url . ' did not contain XML.');
+				logger('poller: post_handshake: response from ' . $url . ' did not contain XML.');
 				$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
 					dbesc(datetime_convert()),
 					intval($contact['id'])
@@ -178,114 +262,39 @@ function poller_run($argv, $argc){
 				continue;
 			}
 
+			consume_feed($xml,$importer,$contact,$hub,1);
 
-			$res = simplexml_load_string($xml);
+			// do it twice. Ensures that children of parents which may be later in the stream aren't tossed
 
-			if(intval($res->status) == 1) {
-				logger("poller: $url replied status 1 - marking for death ");
+			consume_feed($xml,$importer,$contact,$hub,1);
 
-				// we may not be friends anymore. Will keep trying for one month.
-				// set the last-update so we don't keep polling
 
-				$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
-					dbesc(datetime_convert()),
-					intval($contact['id'])
-				);
-
-				mark_for_death($contact);
-			}
-			else {
-				if($contact['term-date'] != '0000-00-00 00:00:00') {
-					logger("poller: $url back from the dead - removing mark for death");
-					unmark_for_death($contact);
+			if((strlen($hub)) && ($hub_update) 
+				&& (($contact['rel'] == REL_BUD) || (($contact['network'] === 'stat') && (! $contact['readonly'])))) {
+				logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
+				$hubs = explode(',', $hub);
+				if(count($hubs)) {
+					foreach($hubs as $h) {
+						$h = trim($h);
+						if(! strlen($h))
+							continue;
+						subscribe_to_hub($h,$importer,$contact);
+					}
 				}
 			}
 
-			if((intval($res->status) != 0) || (! strlen($res->challenge)) || (! strlen($res->dfrn_id)))
-				continue;
 
-			$postvars = array();
+			$updated = datetime_convert();
 
-			$sent_dfrn_id = hex2bin((string) $res->dfrn_id);
-			$challenge    = hex2bin((string) $res->challenge);
-
-			$final_dfrn_id = '';
-
-			if(($contact['duplex']) && strlen($contact['prvkey'])) {
-				openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
-				openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
-			}
-			else {
-				openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
-				openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
-			}
-
-			$final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
-
-			if(strpos($final_dfrn_id,':') == 1)
-				$final_dfrn_id = substr($final_dfrn_id,2);
-
-			if($final_dfrn_id != $orig_id) {
-
-				// did not decode properly - cannot trust this site 
-				continue;
-			}
-
-			$postvars['dfrn_id'] = $idtosend;
-			$postvars['dfrn_version'] = DFRN_PROTOCOL_VERSION;
-
-			$xml = post_url($contact['poll'],$postvars);
-		}
-		else {
-
-			// $contact['network'] !== 'dfrn'
-
-			$xml = fetch_url($contact['poll']);
-		}
-
-		logger('poller: received xml : ' . $xml, LOGGER_DATA);
-
-		if(! strstr($xml,'<?xml')) {
-			logger('poller: post_handshake: response from ' . $url . ' did not contain XML.');
-			$r = q("UPDATE `contact` SET `last-update` = '%s' WHERE `id` = %d LIMIT 1",
-				dbesc(datetime_convert()),
+			$r = q("UPDATE `contact` SET `last-update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1",
+				dbesc($updated),
+				dbesc($updated),
 				intval($contact['id'])
 			);
-			continue;
+
+			// loop - next contact
 		}
-
-		consume_feed($xml,$importer,$contact,$hub,1);
-
-		// do it twice. Ensures that children of parents which may be later in the stream aren't tossed
-
-		consume_feed($xml,$importer,$contact,$hub,1);
-
-
-		if((strlen($hub)) && ($hub_update) 
-			&& (($contact['rel'] == REL_BUD) || (($contact['network'] === 'stat') && (! $contact['readonly'])))) {
-			logger('poller: subscribing to hub(s) : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
-			$hubs = explode(',', $hub);
-			if(count($hubs)) {
-				foreach($hubs as $h) {
-					$h = trim($h);
-					if(! strlen($h))
-						continue;
-					subscribe_to_hub($h,$importer,$contact);
-				}
-			}
-		}
-
-
-		$updated = datetime_convert();
-
-		$r = q("UPDATE `contact` SET `last-update` = '%s', `success_update` = '%s' WHERE `id` = %d LIMIT 1",
-			dbesc($updated),
-			dbesc($updated),
-			intval($contact['id'])
-		);
-
-		// loop - next contact
-	}  
+	}
 		
 	return;
 }
diff --git a/mod/pubsub.php b/mod/pubsub.php
index df27c6bc2b..5d8ea2ed76 100644
--- a/mod/pubsub.php
+++ b/mod/pubsub.php
@@ -55,7 +55,8 @@ function pubsub_init(&$a) {
 
 		$sql_extra = ((strlen($hub_verify)) ? sprintf(" AND `hub-verify` = '%s' ", dbesc($hub_verify)) : '');
 
-		$r = q("SELECT * FROM `contact` WHERE `poll` = '%s' AND `id` = %d AND `uid` = %d AND `blocked` = 0 $sql_extra LIMIT 1",
+		$r = q("SELECT * FROM `contact` WHERE `poll` = '%s' AND `id` = %d AND `uid` = %d 
+			AND `blocked` = 0 AND `pending` = 0 $sql_extra LIMIT 1",
 			dbesc($hub_topic),
 			intval($contact_id),
 			intval($owner['uid'])
@@ -101,10 +102,14 @@ function pubsub_post(&$a) {
 
 	$importer = $r[0];
 
-	$r = q("SELECT * FROM `contact` WHERE `subhub` = 1 AND `id` = %d AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
+	$r = q("SELECT * FROM `contact` WHERE `subhub` = 1 AND `id` = %d AND `uid` = %d 
+		AND ( `rel` = %d OR `rel` = %d ) AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
 		intval($contact_id),
-		intval($importer['uid'])
+		intval($importer['uid']),
+		intval(REL_FAN),
+		intval(REL_BUD)	
 	);
+
 	if(! count($r)) {
 		logger('pubsub: no contact record - ignored');
 		hub_post_return();
diff --git a/mod/wall_upload.php b/mod/wall_upload.php
index ab06b4b2d8..b5725311d1 100644
--- a/mod/wall_upload.php
+++ b/mod/wall_upload.php
@@ -101,5 +101,5 @@ function wall_upload_post(&$a) {
 	echo  '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg\" alt=\"$basename\" /></a><br /><br />";
 
 	killme();
-	return; // NOTREACHED
-}
\ No newline at end of file
+	// NOTREACHED
+}
diff --git a/view/de/head.tpl b/view/de/head.tpl
index c3ec3d2c9e..17b7706f82 100644
--- a/view/de/head.tpl
+++ b/view/de/head.tpl
@@ -1,7 +1,7 @@
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <base href="$baseurl" />
 <link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
-<link rel="shortcut icon" href="$baseurl/images/ff-32.jpg" />
+<link rel="shortcut icon" href="$baseurl/images/friendika-32.png" />
 
 <!--[if IE]>
 <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
diff --git a/view/de/mail_received_html_body_eml.tpl b/view/de/mail_received_html_body_eml.tpl
index 32c5a651a2..9d0ecf7aef 100644
--- a/view/de/mail_received_html_body_eml.tpl
+++ b/view/de/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
 <body>
 <table style="border:1px solid #ccc">
 	<tbody>
-	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/freindika-32.png'><span style="padding:7px;">Friendika</span></td></tr>
 
 	<tr><td style="padding-top:22px;" colspan="2">Du hast eine neue private Nachricht von '$from' auf '$siteName' erhhalten.</td></tr>
 
diff --git a/view/en/head.tpl b/view/en/head.tpl
index ce141b2514..8f97a11e50 100644
--- a/view/en/head.tpl
+++ b/view/en/head.tpl
@@ -2,7 +2,7 @@
 <base href="$baseurl" />
 <meta name="generator" content="$generator" />
 <link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
-<link rel="shortcut icon" href="$baseurl/images/ff-32.jpg" />
+<link rel="shortcut icon" href="$baseurl/images/friendika-32.png" />
 
 <!--[if IE]>
 <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
diff --git a/view/en/mail_received_html_body_eml.tpl b/view/en/mail_received_html_body_eml.tpl
index 56cbf1d7c9..6b7eb88735 100644
--- a/view/en/mail_received_html_body_eml.tpl
+++ b/view/en/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
 <body>
 <table style="border:1px solid #ccc">
 	<tbody>
-	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/friendika-32.png'><span style="padding:7px;">Friendika</span></td></tr>
 
 	<tr><td style="padding-top:22px;" colspan="2">$from sent you a new private message at $siteName.</td></tr>
 
diff --git a/view/fr/head.tpl b/view/fr/head.tpl
index 75da8a9240..4636b542ca 100644
--- a/view/fr/head.tpl
+++ b/view/fr/head.tpl
@@ -2,7 +2,7 @@
 <base href="$baseurl" />
 <meta name="generator" content="$generator" />
 <link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
-<link rel="shortcut icon" href="$baseurl/images/ff-32.jpg" />
+<link rel="shortcut icon" href="$baseurl/images/friendika-32.png" />
 
 <!--[if IE]>
 <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
diff --git a/view/fr/mail_received_html_body_eml.tpl b/view/fr/mail_received_html_body_eml.tpl
index d60bbe70c9..55e8b8a733 100644
--- a/view/fr/mail_received_html_body_eml.tpl
+++ b/view/fr/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
 <body>
 <table style="border:1px solid #ccc">
 	<tbody>
-	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/friendika-32.png'><span style="padding:7px;">Friendika</span></td></tr>
 
 	<tr><td style="padding-top:22px;" colspan="2">$from t'a envoyŽ un message ˆ $siteName.</td></tr>
 
diff --git a/view/it/head.tpl b/view/it/head.tpl
index 071c8fa91f..8e4e0ccd7f 100644
--- a/view/it/head.tpl
+++ b/view/it/head.tpl
@@ -2,7 +2,7 @@
 <base href="$baseurl" />
 <meta name="generator" content="$generator" />
 <link rel="stylesheet" type="text/css" href="$stylesheet" media="all" />
-<link rel="shortcut icon" href="$baseurl/images/ff-32.jpg" />
+<link rel="shortcut icon" href="$baseurl/images/friendika-32.png" />
 
 <!--[if IE]>
 <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
diff --git a/view/it/mail_received_html_body_eml.tpl b/view/it/mail_received_html_body_eml.tpl
index 7510f2b303..8479545505 100644
--- a/view/it/mail_received_html_body_eml.tpl
+++ b/view/it/mail_received_html_body_eml.tpl
@@ -7,7 +7,7 @@
 <body>
 <table style="border:1px solid #ccc">
 	<tbody>
-	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/ff-32.jpg'><span style="padding:7px;">Friendika</span></td></tr>
+	<tr><td colspan="2" style="background:#3b5998; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px;" src='$siteurl/images/friendika-32.png'><span style="padding:7px;">Friendika</span></td></tr>
 
 	<tr><td style="padding-top:22px;" colspan="2">Hai ricevuto un nuovo messsaggio privato su $siteName da '$from'.</td></tr>
 
diff --git a/view/theme/duepuntozero/friendika-16.png b/view/theme/duepuntozero/friendika-16.png
new file mode 100644
index 0000000000..1a742ecdc1
Binary files /dev/null and b/view/theme/duepuntozero/friendika-16.png differ
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index 1586499338..bfe524b019 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -91,12 +91,13 @@ nav #site-location {
 
 nav #banner {
 	display: block;
-    padding-top: 10px;
+    padding-top: 14px;
 	position: absolute;
 }
 nav #banner #logo-text a {
-	font-size: 44px;
+	font-size: 40px;
 	font-weight: bold;
+	margin-left: 3px;
  	color: #000000;
 
 }
@@ -318,7 +319,7 @@ div.wall-item-content-wrapper.shiny {
 
 input#dfrn-url {
 	float: left;
-	background: url(ff-16.jpg) no-repeat;
+	background: url(friendika-16.png) no-repeat;
 	background-position: 2px center;
 	font-size: 17px;
 	padding-left: 21px;
diff --git a/view/theme/loozah/friendika-16.png b/view/theme/loozah/friendika-16.png
new file mode 100644
index 0000000000..1a742ecdc1
Binary files /dev/null and b/view/theme/loozah/friendika-16.png differ
diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css
index 902e71be8f..662df25288 100644
--- a/view/theme/loozah/style.css
+++ b/view/theme/loozah/style.css
@@ -452,7 +452,7 @@ nav {
 
 input#dfrn-url {
 	float: left;
-	background: url(ff-16.jpg) no-repeat;
+	background: url(friendika-16.png) no-repeat;
 	background-position: 2px center;
 	font-size: 17px;
 	padding-left: 21px;