diff --git a/include/items.php b/include/items.php
index 9c11a1f39..c4555e82d 100644
--- a/include/items.php
+++ b/include/items.php
@@ -2598,68 +2598,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
 
 				// This is my contact on another system, but it's really me.
 				// Turn this into a wall post.
-
-				if($contact['remote_self'] AND (($contact['network'] === NETWORK_FEED) OR !$datarray['private'])) {
-					logger('remote-self start - Contact '.$contact['url'].' - '.$contact['remote_self'].' Item '.print_r($datarray, true), LOGGER_DEBUG);
-					if ($contact['remote_self'] == 1) {
-						// Prevent that forwarded posts will be forwarded again
-						$notify = (normalise_link($datarray['author-link']) == normalise_link($datarray['owner-link']));
-						if ($datarray["app"] == $a->get_hostname())
-							$notify = false;
-					} elseif ($contact['remote_self'] == 2) {
-						$r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", intval($importer['uid']));
-						if (count($r)) {
-							$datarray['contact-id'] = $r[0]["id"];
-
-							$datarray['owner-name'] = $r[0]["name"];
-							$datarray['owner-link'] = $r[0]["url"];
-							$datarray['owner-avatar'] = $r[0]["avatar"];
-
-							$datarray['author-name']   = $datarray['owner-name'];
-							$datarray['author-link']   = $datarray['owner-link'];
-							$datarray['author-avatar'] = $datarray['owner-avatar'];
-						}
-						$notify = true;
-					}
-
-					if (!isset($datarray["app"]) OR ($datarray["app"] == ""))
-						$datarray["app"] = network_to_name($contact['network']);
-
-					if ($contact['network'] === NETWORK_FEED)
-						$datarray['private'] = 0;
-					elseif ($notify) {
-						$datarray2 = $datarray;
-
-						// Create a new guid and uri and post it as a forwarded post
-						$datarray2["guid"] = get_guid(32);
-						unset($datarray2["plink"]);
-						$datarray2["uri"] = item_new_uri($a->get_hostname(),$importer['uid']);
-						$datarray2["parent-uri"] = $datarray2["uri"];
-						$datarray2["extid"] = NETWORK_DFRN;
-						$urlpart = parse_url($datarray['author-link']);
-						$datarray2["app"] = $urlpart["host"];
-						$r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", intval($importer['uid']));
-						if (count($r)) {
-							$datarray2['contact-id'] = $r[0]["id"];
-
-							$datarray2['owner-name'] = $r[0]["name"];
-							$datarray2['owner-link'] = $r[0]["url"];
-							$datarray2['owner-avatar'] = $r[0]["avatar"];
-
-							$datarray2['author-name']   = $datarray2['owner-name'];
-							$datarray2['author-link']   = $datarray2['owner-link'];
-							$datarray2['author-avatar'] = $datarray2['owner-avatar'];
-						}
-
-						// Store the forwarded post
-						$r = item_store($datarray2, false, true);
-						logger('remote-self forwarded post - Contact '.$contact['url'].' return '.$r.' Item '.print_r($datarray2, true), LOGGER_DEBUG);
-
-						// Let the original item just be a regular item
-						$notify = false;
-					}
-				} else
-					$notify = false;
+				$notify = item_is_remote_self($contact, $datarray);
 
 				$r = item_store($datarray, false, $notify);
 				logger('Stored - Contact '.$contact['url'].' Notify '.$notify.' return '.$r.' Item '.print_r($datarray, true), LOGGER_DEBUG);
@@ -2670,6 +2609,61 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
 	}
 }
 
+function item_is_remote_self($contact, &$datarray) {
+	$a = get_app();
+
+	if (!$contact['remote_self'])
+		return false;
+
+	// Prevent to forward already forwarded posts
+	if ($datarray["app"] == $a->get_hostname())
+		return false;
+
+	if (($contact['network'] != NETWORK_FEED) AND $datarray['private'])
+		return false;
+
+	$datarray2 = $datarray;
+	logger('remote-self start - Contact '.$contact['url'].' - '.$contact['remote_self'].' Item '.print_r($datarray, true), LOGGER_DEBUG);
+	if ($contact['remote_self'] == 2) {
+		$r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`",
+			intval($contact['uid']));
+		if (count($r)) {
+			$datarray['contact-id'] = $r[0]["id"];
+
+			$datarray['owner-name'] = $r[0]["name"];
+			$datarray['owner-link'] = $r[0]["url"];
+			$datarray['owner-avatar'] = $r[0]["avatar"];
+
+			$datarray['author-name']   = $datarray['owner-name'];
+			$datarray['author-link']   = $datarray['owner-link'];
+			$datarray['author-avatar'] = $datarray['owner-avatar'];
+		}
+
+		if ($contact['network'] != NETWORK_FEED) {
+			$datarray["guid"] = get_guid(32);
+			unset($datarray["plink"]);
+			$datarray["uri"] = item_new_uri($a->get_hostname(),$contact['uid']);
+			$datarray["parent-uri"] = $datarray["uri"];
+			$datarray["extid"] = $contact['network'];
+			$urlpart = parse_url($datarray2['author-link']);
+			$datarray["app"] = $urlpart["host"];
+		} else
+			$datarray['private'] = 0;
+	}
+
+	//if (!isset($datarray["app"]) OR ($datarray["app"] == ""))
+	//	$datarray["app"] = network_to_name($contact['network']);
+
+	if ($contact['network'] != NETWORK_FEED) {
+		// Store the original post
+		$r = item_store($datarray2, false, false);
+		logger('remote-self post original item - Contact '.$contact['url'].' return '.$r.' Item '.print_r($datarray2, true), LOGGER_DEBUG);
+	} else
+		$datarray["app"] = "Feed";
+
+	return true;
+}
+
 function local_delivery($importer,$data) {
 	$a = get_app();
 
@@ -3751,68 +3745,7 @@ function local_delivery($importer,$data) {
 
 			// This is my contact on another system, but it's really me.
 			// Turn this into a wall post.
-
-			if($importer['remote_self'] AND (($importer['network'] === NETWORK_FEED) OR !$datarray['private'])) {
-				logger('remote-self start - Contact '.$importer['url'].' - '.$importer['remote_self'].' Item '.print_r($datarray, true), LOGGER_DEBUG);
-				if ($importer['remote_self'] == 1) {
-					// Prevent that forwarded posts will be forwarded again
-					$notify = (normalise_link($datarray['author-link']) == normalise_link($datarray['owner-link']));
-					if ($datarray["app"] == $a->get_hostname())
-						$notify = false;
-				} elseif ($importer['remote_self'] == 2) {
-					$r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`",
-						intval($importer['importer_uid']));
-					if (count($r)) {
-						$datarray['contact-id'] = $r[0]["id"];
-
-						$datarray['owner-name'] = $r[0]["name"];
-						$datarray['owner-link'] = $r[0]["url"];
-						$datarray['owner-avatar'] = $r[0]["avatar"];
-
-						$datarray['author-name']   = $datarray['owner-name'];
-						$datarray['author-link']   = $datarray['owner-link'];
-						$datarray['author-avatar'] = $datarray['owner-avatar'];
-					}
-					$notify = true;
-				}
-
-				//if (!isset($datarray["app"]) OR ($datarray["app"] == ""))
-				//	$datarray["app"] = network_to_name($importer['network']);
-
-				if ($importer['network'] === NETWORK_FEED)
-					$datarray['private'] = 0;
-				elseif ($notify) {
-					$datarray2 = $datarray;
-					// Create a new guid and uri and post it as a forwarded post
-					$datarray2["guid"] = get_guid(32);
-					unset($datarray2["plink"]);
-					$datarray2["uri"] = item_new_uri($a->get_hostname(),$importer['uid']);
-					$datarray2["parent-uri"] = $datarray2["uri"];
-					$datarray2["extid"] = NETWORK_DFRN;
-					$urlpart = parse_url($datarray['author-link']);
-					$datarray2["app"] = $urlpart["host"];
-					$r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", intval($importer['uid']));
-					if (count($r)) {
-						$datarray2['contact-id'] = $r[0]["id"];
-
-						$datarray2['owner-name'] = $r[0]["name"];
-						$datarray2['owner-link'] = $r[0]["url"];
-						$datarray2['owner-avatar'] = $r[0]["avatar"];
-
-						$datarray2['author-name']   = $datarray2['owner-name'];
-						$datarray2['author-link']   = $datarray2['owner-link'];
-						$datarray2['author-avatar'] = $datarray2['owner-avatar'];
-					}
-
-					// Store the forwarded post
-					$r = item_store($datarray2, false, true);
-					logger('remote-self forwarded post - Contact '.$importer['url'].' return '.$r.' Item '.print_r($datarray2, true), LOGGER_DEBUG);
-
-					// Let the original item just be a regular item
-					$notify = false;
-				}
-			} else
-				$notify = false;
+			$notify = item_is_remote_self($importer, $datarray);
 
 			$posted_id = item_store($datarray, false, $notify);
 
diff --git a/mod/crepair.php b/mod/crepair.php
index 23f833c5b..aba71232c 100644
--- a/mod/crepair.php
+++ b/mod/crepair.php
@@ -157,8 +157,8 @@ function crepair_content(&$a) {
 
 	if ($contact['network'] == NETWORK_FEED)
 		$remote_self_options = array('0'=>t('No mirroring'), '1'=>t('Mirror as forwarded posting'), '2'=>t('Mirror as my own posting'));
-	elseif ($contact['network'] == NETWORK_DFRN)
-		$remote_self_options = array('0'=>t('No mirroring'), '1'=>t('Mirror as forwarded posting'));
+		elseif ($contact['network'] == NETWORK_DFRN)
+		$remote_self_options = array('0'=>t('No mirroring'), '2'=>t('Mirror as my own posting'));
 
 	$tpl = get_markup_template('crepair.tpl');
 	$o .= replace_macros($tpl, array(