diff --git a/public/src/forum/categoryTools.js b/public/src/forum/categoryTools.js
index dc66fe02f6..f40fb26b2f 100644
--- a/public/src/forum/categoryTools.js
+++ b/public/src/forum/categoryTools.js
@@ -129,18 +129,9 @@ define('forum/categoryTools', ['forum/topic/move', 'topicSelect'], function(move
 		var isAnyPinned = isAny(isTopicPinned, tids);
 		var isAnyLocked = isAny(isTopicLocked, tids);
 
-		translator.translate('<i class="fa fa-fw ' + (isAnyDeleted ? 'fa-history' : 'fa-trash-o') + '"></i> [[topic:thread_tools.' + (isAnyDeleted ? 'restore' : 'delete') + ']]', function(translated) {
-			$('.delete_thread span').html(translated);
-		});
-
-		translator.translate('<i class="fa fa-fw fa-thumb-tack"></i> [[topic:thread_tools.' + (isAnyPinned ? 'unpin' : 'pin') + ']]', function(translated) {
-			$('.pin_thread').html(translated);
-		});
-
-		translator.translate('<i class="fa fa-fw fa-' + (isAnyLocked ? 'un': '') + 'lock"></i> [[topic:thread_tools.' + (isAnyLocked ? 'un': '') + 'lock]]', function(translated) {
-			$('.lock_thread').html(translated);
-		});
-
+		$('.delete_thread span').translateHtml('<i class="fa fa-fw ' + (isAnyDeleted ? 'fa-history' : 'fa-trash-o') + '"></i> [[topic:thread_tools.' + (isAnyDeleted ? 'restore' : 'delete') + ']]');
+		$('.pin_thread').translateHtml('<i class="fa fa-fw fa-thumb-tack"></i> [[topic:thread_tools.' + (isAnyPinned ? 'unpin' : 'pin') + ']]');
+		$('.lock_thread').translateHtml('<i class="fa fa-fw fa-' + (isAnyLocked ? 'un': '') + 'lock"></i> [[topic:thread_tools.' + (isAnyLocked ? 'un': '') + 'lock]]');
 		$('.purge_thread').toggleClass('none', !areAllDeleted);
 	}
 
diff --git a/public/src/forum/topic/events.js b/public/src/forum/topic/events.js
index 7241318380..e1d7becc8c 100644
--- a/public/src/forum/topic/events.js
+++ b/public/src/forum/topic/events.js
@@ -134,9 +134,7 @@ define('forum/topic/events', ['forum/topic/browsing', 'forum/topic/postTools', '
 
 		if (!app.isAdmin && parseInt(data.uid, 10) !== parseInt(app.uid, 10)) {
 			if (isDeleted) {
-				translator.translate('[[topic:post_is_deleted]]', function(translated) {
-					postEl.find('.post-content').html(translated);
-				});
+				postEl.find('.post-content').translateHtml('[[topic:post_is_deleted]]');
 			} else {
 				postEl.find('.post-content').html(data.content);
 			}
diff --git a/public/src/forum/topic/fork.js b/public/src/forum/topic/fork.js
index dde247baa7..38052fa35b 100644
--- a/public/src/forum/topic/fork.js
+++ b/public/src/forum/topic/fork.js
@@ -90,9 +90,7 @@ define('forum/topic/fork', function() {
 	}
 
 	function showNoPostsSelected() {
-		translator.translate('[[topic:fork_no_pids]]', function(translated) {
-			forkModal.find('#fork-pids').html(translated);
-		});
+		forkModal.find('#fork-pids').translateHtml('[[topic:fork_no_pids]]');
 	}
 
 	function checkForkButtonEnable() {
diff --git a/public/src/forum/topic/move.js b/public/src/forum/topic/move.js
index 1027f44ff1..c94dfb40f2 100644
--- a/public/src/forum/topic/move.js
+++ b/public/src/forum/topic/move.js
@@ -21,9 +21,7 @@ define('forum/topic/move', function() {
 		$('#move-confirm').hide();
 
 		if (Move.moveAll || (tids && tids.length > 1)) {
-			translator.translate('[[topic:move_topics]]', function(translated) {
-				modal.find('.modal-header h3').text(translated);
-			});
+			modal.find('.modal-header h3').translateText('[[topic:move_topics]]');
 		}
 
 		modal.modal('show');
diff --git a/public/src/forum/topic/postTools.js b/public/src/forum/topic/postTools.js
index cdb44dc5e4..f27a3ef320 100644
--- a/public/src/forum/topic/postTools.js
+++ b/public/src/forum/topic/postTools.js
@@ -22,11 +22,8 @@ define('forum/topic/postTools', ['composer', 'share', 'navigator'], function(com
 
 		postEl.find('.quote, .favourite, .post_reply, .chat').toggleClass('none', isDeleted);
 		postEl.find('.purge').toggleClass('none', !isDeleted);
-
-		translator.translate(isDeleted ? ' [[topic:restore]]' : ' [[topic:delete]]', function(translated) {
-			postEl.find('.delete').find('i').toggleClass('fa-trash-o', !isDeleted).toggleClass('fa-history', isDeleted);
-			postEl.find('.delete').find('span').html(translated);
-		});
+		postEl.find('.delete .i').toggleClass('fa-trash-o', !isDeleted).toggleClass('fa-history', isDeleted);
+		postEl.find('.delete span').translateHtml(isDeleted ? ' [[topic:restore]]' : ' [[topic:delete]]');
 	};
 
 	PostTools.updatePostCount = function() {
diff --git a/public/src/forum/topic/threadTools.js b/public/src/forum/topic/threadTools.js
index 30f2f11a66..1e8e63b14f 100644
--- a/public/src/forum/topic/threadTools.js
+++ b/public/src/forum/topic/threadTools.js
@@ -104,10 +104,8 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func
 		var threadEl = $('#post-container');
 		if (parseInt(data.tid, 10) === parseInt(threadEl.attr('data-tid'), 10)) {
 			var isLocked = data.isLocked && !app.isAdmin;
-			translator.translate('<i class="fa fa-fw fa-' + (data.isLocked ? 'un': '') + 'lock"></i> [[topic:thread_tools.' + (data.isLocked ? 'un': '') + 'lock]]', function(translated) {
-				$('.lock_thread').html(translated);
-			});
 
+			$('.lock_thread').translateHtml('<i class="fa fa-fw fa-' + (data.isLocked ? 'un': '') + 'lock"></i> [[topic:thread_tools.' + (data.isLocked ? 'un': '') + 'lock]]');
 
 			translator.translate(isLocked ? '[[topic:locked]]' : '[[topic:reply]]', function(translated) {
 				var className = isLocked ? 'fa-lock' : 'fa-reply';
@@ -127,9 +125,7 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move'], func
 			return;
 		}
 
-		translator.translate('<i class="fa fa-fw ' + (data.isDelete ? 'fa-history' : 'fa-trash-o') + '"></i> [[topic:thread_tools.' + (data.isDelete ? 'restore' : 'delete') + ']]', function(translated) {
-			$('.delete_thread span').html(translated);
-		});
+		$('.delete_thread span').translateHtml('<i class="fa fa-fw ' + (data.isDelete ? 'fa-history' : 'fa-trash-o') + '"></i> [[topic:thread_tools.' + (data.isDelete ? 'restore' : 'delete') + ']]');
 
 		threadEl.toggleClass('deleted', data.isDelete);
 		ThreadTools.threadState.deleted = data.isDelete;
diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js
index 5e305d8525..5143179a6d 100644
--- a/public/src/modules/chat.js
+++ b/public/src/modules/chat.js
@@ -210,10 +210,7 @@ define('chat', ['taskbar', 'string', 'sounds'], function(taskbar, S, sounds) {
 					checkOnlineStatus(chatModal);
 				});
 
-				translator.translate('[[modules:chat.user_typing, ' + username + ']]', function(translated) {
-					chatModal.find('.user-typing .text').text(translated);
-				});
-
+				chatModal.find('.user-typing .text').translateText('[[modules:chat.user_typing, ' + username + ']]');
 
 				taskbar.push('chat', chatModal.attr('UUID'), {
 					title: username,
diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js
index f10629db59..84ad64c8b1 100644
--- a/public/src/modules/composer.js
+++ b/public/src/modules/composer.js
@@ -297,9 +297,7 @@ define('composer', dependencies, function(taskbar, controls, uploads, formatting
 		var titleEl = postContainer.find('.title');
 
 		if (parseInt(postData.tid, 10) > 0) {
-			translator.translate('[[topic:composer.replying_to, ' + postData.title + ']]', function(newTitle) {
-				titleEl.val(newTitle);
-			});
+			titleEl.translateVal('[[topic:composer.replying_to, ' + postData.title + ']]');
 			titleEl.prop('disabled', true);
 		} else if (parseInt(postData.pid, 10) > 0) {
 			titleEl.val(postData.title);
diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js
index 72869c5912..4f8d57895b 100644
--- a/public/src/modules/navigator.js
+++ b/public/src/modules/navigator.js
@@ -91,10 +91,8 @@ define('navigator', ['forum/topic/pagination'], function(pagination) {
 
 	navigator.updateTextAndProgressBar = function() {
 		index = index > count ? count : index;
-		translator.translate('[[global:pagination.out_of, ' + index + ', ' + count + ']]', function(translated) {
-			$('#pagination').html(translated);
-		});
 
+		$('#pagination').translateHtml('[[global:pagination.out_of, ' + index + ', ' + count + ']]');
 		$('.pagination-block .progress-bar').width((index / count * 100) + '%');
 	};
 
diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js
index bf257c2e20..ef00636f45 100644
--- a/public/src/modules/notifications.js
+++ b/public/src/modules/notifications.js
@@ -52,10 +52,7 @@ define('notifications', ['sounds'], function(sound) {
 					}
 
 
-					translator.translate(html, function(translated) {
-						notifList.html(translated);
-					});
-
+					notifList.translateHtml(html);
 
 					updateNotifCount(data.unread.length);
 
diff --git a/public/src/overrides.js b/public/src/overrides.js
index f3b36e54d2..978dea0720 100644
--- a/public/src/overrides.js
+++ b/public/src/overrides.js
@@ -51,6 +51,27 @@ if ('undefined' !== typeof window) {
 			});
 		};
 
+		$.fn.translateHtml = function(str) {
+			return translate(this, 'html', str);
+		};
+
+		$.fn.translateText = function(str) {
+			return translate(this, 'text', str);
+		};
+
+		$.fn.translateVal = function(str) {
+			return translate(this, 'val', str);
+		};
+
+		function translate(elements, type, str) {
+			return elements.each(function() {
+				var el = $(this);
+				translator.translate(str, function(translated) {
+					el[type](translated);
+				});
+			});
+		}
+
 	})(jQuery || {fn:{}});