diff --git a/core/js/js.js b/core/js/js.js
index 1d5219eff12103bf2c45fc165f4f35c25ded5305..a8dd9ca889d34b6f5b74e4504807dc4c8eb4b147 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -968,6 +968,8 @@ function initCore() {
 	 * time out
 	 */
 	function initSessionHeartBeat(){
+		// max interval in seconds set to 24 hours
+		var maxInterval = 24 * 3600;
 		// interval in seconds
 		var interval = 900;
 		if (oc_config.session_lifetime) {
@@ -977,6 +979,9 @@ function initCore() {
 		if (interval < 60) {
 			interval = 60;
 		}
+		if (interval > maxInterval) {
+			interval = maxInterval;
+		}
 		var url = OC.generateUrl('/heartbeat');
 		setInterval(function(){
 			$.post(url);
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index 3c62b976779bcb27a0b648acb9b7bf52c9441621..dd9d4a79277d3a3cfeb9d2b9584344cbd6de0736 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -19,7 +19,6 @@
 *
 */
 
-/* global OC */
 describe('Core base tests', function() {
 	describe('Base values', function() {
 		it('Sets webroots', function() {
@@ -235,10 +234,12 @@ describe('Core base tests', function() {
 		});
 		afterEach(function() {
 			clock.restore();
+			/* jshint camelcase: false */
 			window.oc_config = oldConfig;
 			routeStub.restore();
 		});
 		it('sends heartbeat half the session lifetime when heartbeat enabled', function() {
+			/* jshint camelcase: false */
 			window.oc_config = {
 				session_keepalive: true,
 				session_lifetime: 300
@@ -265,6 +266,7 @@ describe('Core base tests', function() {
 			expect(counter).toEqual(2);
 		});
 		it('does no send heartbeat when heartbeat disabled', function() {
+			/* jshint camelcase: false */
 			window.oc_config = {
 				session_keepalive: false,
 				session_lifetime: 300
@@ -279,6 +281,26 @@ describe('Core base tests', function() {
 			// still nothing
 			expect(counter).toEqual(0);
 		});
+		it('limits the heartbeat between one minute and one day', function() {
+			/* jshint camelcase: false */
+			var setIntervalStub = sinon.stub(window, 'setInterval');
+			window.oc_config = {
+				session_keepalive: true,
+				session_lifetime: 5
+			};
+			window.initCore();
+			expect(setIntervalStub.getCall(0).args[1]).toEqual(60 * 1000);
+			setIntervalStub.reset();
+
+			window.oc_config = {
+				session_keepalive: true,
+				session_lifetime: 48 * 3600
+			};
+			window.initCore();
+			expect(setIntervalStub.getCall(0).args[1]).toEqual(24 * 3600 * 1000);
+
+			setIntervalStub.restore();
+		});
 	});
 	describe('Parse query string', function() {
 		it('Parses query string from full URL', function() {