diff --git a/public/src/forum/category.js b/public/src/forum/category.js
index 4d88d475e6..5720988f74 100644
--- a/public/src/forum/category.js
+++ b/public/src/forum/category.js
@@ -116,8 +116,8 @@
 		}, function(data) {
 			if(data.topics.length) {
 				onTopicsLoaded(data.topics);
-				loadingMoreTopics = false;
 			}
+			loadingMoreTopics = false;
 		});
 	}
 
diff --git a/public/src/forum/recent.js b/public/src/forum/recent.js
index 6b0ca925c7..816f914aaa 100644
--- a/public/src/forum/recent.js
+++ b/public/src/forum/recent.js
@@ -1,4 +1,6 @@
 (function() {
+	var loadingMoreTopics = false;
+
 	app.enter_room('recent_posts');
 
 	ajaxify.register_events([
@@ -58,7 +60,37 @@
 				app.alertError('There was an error marking topics read!');
 			}
 		});
+	});
+
+	function onTopicsLoaded(topics) {
+
+		var html = templates.prepare(templates['recent'].blocks['topics']).parse({ topics: topics }),
+			container = $('#topics-container');
+
+		$('#category-no-topics').remove();
+
+		container.append(html);
+	}
 
+	function loadMoreTopics() {
+		loadingMoreTopics = true;
+		socket.emit('api:topics.loadMoreRecentTopics', {after:$('#topics-container').children().length}, function(data) {
+			if(data.topics && data.topics.length) {
+				onTopicsLoaded(data.topics);
+				console.log(data.topics);
+			}
+			loadingMoreTopics = false;
+		});
+	}
+
+	$(window).off('scroll').on('scroll', function() {
+		var windowHeight = document.body.offsetHeight - $(window).height(),
+			half = windowHeight / 2;
+
+		if (document.body.scrollTop > half && !loadingMoreTopics) {
+			loadMoreTopics();
+		}
 	});
 
+
 })();
\ No newline at end of file
diff --git a/src/routes/api.js b/src/routes/api.js
index 91db56782c..a47a7a35ca 100644
--- a/src/routes/api.js
+++ b/src/routes/api.js
@@ -108,7 +108,7 @@ var user = require('./../user.js'),
 
 		app.get('/api/recent', function(req, res) {
 			var uid = (req.user) ? req.user.uid : 0;
-			topics.getLatestTopics(uid, 0, 9, function(data) {
+			topics.getLatestTopics(uid, 0, 19, function(data) {
 				res.json(data);
 			});
 		});
diff --git a/src/topics.js b/src/topics.js
index 1ff2ad8d6d..3d3ba5bf86 100644
--- a/src/topics.js
+++ b/src/topics.js
@@ -97,8 +97,10 @@ marked.setOptions({
 	Topics.getLatestTopics = function(current_user, start, end, callback) {
 
 		var timestamp = Date.now();
+
+		var args = [ 'topics:recent', '+inf', timestamp - 86400000, 'WITHSCORES', 'LIMIT', start, end - start + 1];
 		
-		RDB.zrevrangebyscore([ 'topics:recent', '+inf', timestamp - 86400000], function(err, tids) {
+		RDB.zrevrangebyscore(args, function(err, tids) {
 			
 			var latestTopics = {
 				'category_name' : 'Recent',
diff --git a/src/websockets.js b/src/websockets.js
index 9cd45459eb..f7dc80c28b 100644
--- a/src/websockets.js
+++ b/src/websockets.js
@@ -570,6 +570,15 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }),
 			});
 		});
 
+		socket.on('api:topics.loadMoreRecentTopics', function(data, callback) {
+			var start = data.after,
+				end = start + 9;
+
+			topics.getLatestTopics(uid, start, end, function(latestTopics) {
+				callback(latestTopics);
+			});
+		});
+
 		socket.on('api:admin.topics.getMore', function(data) {
 			topics.getAllTopics(data.limit, data.after, function(topics) {
 				socket.emit('api:admin.topics.getMore', JSON.stringify(topics));