diff --git a/phpBB/includes/content_visibility.php b/phpBB/includes/content_visibility.php
index 1aa2ad1a29..8bc67a7fd2 100644
--- a/phpBB/includes/content_visibility.php
+++ b/phpBB/includes/content_visibility.php
@@ -242,12 +242,6 @@ class phpbb_content_visibility
 	{
 		global $db;
 
-		// if we're changing the starter, we need to change the rest of the topic
-		if ($is_starter && !$is_latest)
-		{
-			return self::set_topic_visibility($visibility, $topic_id, $forum_id);
-		}
-
 		if ($post_id)
 		{
 			$where_sql = 'post_id = ' . (int) $post_id;
@@ -274,8 +268,9 @@ class phpbb_content_visibility
 		$db->sql_query($sql);
 
 		// Sync the first/last topic information if needed
-		if ($is_starter || $is_latest)
+		if (!$is_starter && $is_latest)
 		{
+			// update_post_information can only update the last post info ...
 			if ($topic_id)
 			{
 				update_post_information('topic', $topic_id, false);
@@ -285,6 +280,12 @@ class phpbb_content_visibility
 				update_post_information('forum', $forum_id, false);
 			}
 		}
+		else if (($is_starter || $is_latest) && $topic_id)
+		{
+			// ... so we need to use sync, if the first post is changed.
+			// The forum is resynced recursive by sync() itself.
+			sync('topic', 'topic_id', $topic_id, true);
+		}
 	}
 
 	/**
diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php
index 54130df935..bb8b02bbea 100644
--- a/phpBB/includes/functions_admin.php
+++ b/phpBB/includes/functions_admin.php
@@ -1908,12 +1908,12 @@ function sync($mode, $where_type = '', $where_ids = '', $resync_parents = false,
 					unset($delete_topics[$topic_id]);
 
 					$topic_data[$topic_id]['replies_real'] += $row['total_posts'];
-					$topic_data[$topic_id]['first_post_id'] = (!$topic_data[$topic_id]['first_post_id']) ? $row['first_post_id'] : min($topic_data[$topic_id]['first_post_id'], $row['first_post_id']);
 
-					if ($row['post_visibility'] || !$topic_data[$topic_id]['last_post_id'])
+					if ($row['post_visibility'] == ITEM_APPROVED)
 					{
-						$topic_data[$topic_id]['replies'] = $row['total_posts'] - 1;
+						$topic_data[$topic_id]['first_post_id'] = $row['first_post_id'];
 						$topic_data[$topic_id]['last_post_id'] = $row['last_post_id'];
+						$topic_data[$topic_id]['replies'] = $row['total_posts'] - 1;
 					}
 				}
 			}