diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js
index bc2d297112..ca12c815f4 100644
--- a/public/src/client/topic/posts.js
+++ b/public/src/client/topic/posts.js
@@ -25,14 +25,7 @@ define('forum/topic/posts', [
 
 		data.loggedIn = app.user.uid ? true : false;
 		data.privileges = ajaxify.data.privileges;
-		data.posts.forEach(function (post) {
-			post.selfPost = !!app.user.uid && parseInt(post.uid, 10) === parseInt(app.user.uid, 10);
-			post.display_edit_tools = (ajaxify.data.privileges['posts:edit'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod;
-			post.display_delete_tools = (ajaxify.data.privileges['posts:delete'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod;
-			post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools;
-			post.display_move_tools = ajaxify.data.privileges.isAdminOrMod;
-			post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || (post.selfPost && !ajaxify.data.locked) || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted);
-		});
+		Posts.modifyPostsByPrivileges(data.posts);
 
 		updatePostCounts(data.posts);
 
@@ -46,6 +39,17 @@ define('forum/topic/posts', [
 		}
 	};
 
+	Posts.modifyPostsByPrivileges = function (posts) {
+		posts.forEach(function (post) {
+			post.selfPost = !!app.user.uid && parseInt(post.uid, 10) === parseInt(app.user.uid, 10);
+			post.display_edit_tools = (ajaxify.data.privileges['posts:edit'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod;
+			post.display_delete_tools = (ajaxify.data.privileges['posts:delete'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod;
+			post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools;
+			post.display_move_tools = ajaxify.data.privileges.isAdminOrMod;
+			post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || (post.selfPost && !ajaxify.data.locked) || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted);
+		});
+	};
+
 	function updatePostCounts(posts) {
 		for (var i = 0; i < posts.length; ++i) {
 			var cmp = components.get('user/postcount', posts[i].uid);
diff --git a/public/src/client/topic/replies.js b/public/src/client/topic/replies.js
index 64f5441ecd..ad461430be 100644
--- a/public/src/client/topic/replies.js
+++ b/public/src/client/topic/replies.js
@@ -1,8 +1,8 @@
 'use strict';
 
-/* globals define, app, ajaxify, bootbox, socket, templates, utils, config */
+/* globals define, app, ajaxify, socket */
 
-define('forum/topic/replies', ['navigator', 'components', 'translator'], function (navigator, components, translator) {
+define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts'], function (navigator, components, posts) {
 
 	var Replies = {};
 
@@ -19,7 +19,7 @@ define('forum/topic/replies', ['navigator', 'components', 'translator'], functio
 	}
 
 	function onRepliesClicked(button, tid) {
-		var post = button.parents('[data-pid]');
+		var post = button.closest('[data-pid]');
 		var pid = post.data('pid');
 		var open = button.children('[component="post/replies/open"]');
 		var loading = button.children('[component="post/replies/loading"]');
@@ -40,16 +40,20 @@ define('forum/topic/replies', ['navigator', 'components', 'translator'], functio
 				loading.addClass('hidden');
 				close.removeClass('hidden');
 
-				templates.parse('partials/posts_list', data, function (html) {
-					translator.translate(html, function (translated) {
-						$('<div>', {component: 'post/replies'}).html(translated).hide().insertAfter(button).slideDown('fast');
-					});
+				posts.modifyPostsByPrivileges(data);
+				var tplData ={
+					posts: data,
+					privileges: ajaxify.data.privileges,
+					loggedIn: !!app.user.uid,
+					hideReplies: true
+				};
+				app.parseAndTranslate('topic', 'posts', tplData, function (html) {
+					$('<div>', {component: 'post/replies'}).html(html).hide().insertAfter(button).slideDown('fast');
 				});
 			});
 		} else if (close.is(':not(.hidden)')) {
 			close.addClass('hidden');
 			open.removeClass('hidden');
-
 			post.find('[component="post/replies"]').slideUp('fast', function () {
 				$(this).remove();
 			});
diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js
index 9700db947c..c6ef158221 100644
--- a/public/src/modules/navigator.js
+++ b/public/src/modules/navigator.js
@@ -162,6 +162,9 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co
 	};
 
 	navigator.updateTextAndProgressBar = function () {
+		if (!utils.isNumber(index)) {
+			return;
+		}
 		index = index > count ? count : index;
 
 		$('.pagination-block .pagination-text').translateHtml('[[global:pagination.out_of, ' + index + ', ' + count + ']]');
diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js
index a762aa127c..781970f11f 100644
--- a/src/socket.io/posts.js
+++ b/src/socket.io/posts.js
@@ -122,8 +122,23 @@ SocketPosts.getReplies = function (socket, pid, callback) {
 	if (!utils.isNumber(pid)) {
 		return callback(new Error('[[error:invalid-data]'));
 	}
+	async.waterfall([
+		function (next) {
+			posts.getPidsFromSet('pid:' + pid + ':replies', 0, -1, false, next);
+		},
+		function (pids, next) {
+			privileges.posts.filter('read', pids, socket.uid, next);
+		},
+		function (pids, next) {
+			posts.getPostsByPids(pids, socket.uid, next);
+		}
+	], function (err, postData) {
+		if (err) {
+			return callback(err);
+		}
 
-	posts.getPostSummariesFromSet('pid:' + pid + ':replies', socket.uid, 0, -1, callback);
+		topics.addPostData(postData, socket.uid, callback);
+	});
 };