diff --git a/core/js/l10n.js b/core/js/l10n.js
index c19f523b30e4ae8f4a9ebea2b70eca0d6c26a5d9..43cfc7e820fa3b2482eb6d00a0334d8edfcce67c 100644
--- a/core/js/l10n.js
+++ b/core/js/l10n.js
@@ -78,9 +78,7 @@ OC.L10N = {
 			}
 		} else {
 			// Theme overwriting the default language
-			_.each(bundle, function(translation, key) {
-				self._bundles[appName][key] = translation
-			});
+			_.extend(self._bundles[appName], bundle);
 		}
 	},
 
diff --git a/core/js/tests/specs/l10nSpec.js b/core/js/tests/specs/l10nSpec.js
index bafc7746d6c851f34c3ae8f7c3b872bce3134f97..2ceb2f4a916b076d07f3deedd2e4a6ffaf252400 100644
--- a/core/js/tests/specs/l10nSpec.js
+++ b/core/js/tests/specs/l10nSpec.js
@@ -52,6 +52,14 @@ describe('OC.L10N tests', function() {
 				t(TEST_APP, 'Hello {name}', {name: '<strong>Steve</strong>'}, null, {escape: false})
 			).toEqual('Hello <strong>Steve</strong>');
 		});
+		it('keeps old texts when registering existing bundle', function() {
+			OC.L10N.register(TEST_APP, {
+				'sunny': 'sonnig',
+				'new': 'neu'
+			});
+			expect(t(TEST_APP, 'sunny')).toEqual('sonnig');
+			expect(t(TEST_APP, 'new')).toEqual('neu');
+		});
 	});
 	describe('plurals', function() {
 		function checkPlurals() {