diff --git a/plugins/CoreHome/angularjs/common/services/piwik-api.js b/plugins/CoreHome/angularjs/common/services/piwik-api.js
index 69b962365894c5de2086c17fed3f44e7952b36b5..aed0f7695b310db6a84f1c35b39aeb7d5908cd75 100644
--- a/plugins/CoreHome/angularjs/common/services/piwik-api.js
+++ b/plugins/CoreHome/angularjs/common/services/piwik-api.js
@@ -42,13 +42,11 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo
      * @return $promise
      */
     function send () {
-
-        var deferred = $q.defer();
-        var requestHandle = deferred;
+        var deferred = $q.defer(),
+            requestPromise = deferred.promise;
 
         var onError = function (message) {
             deferred.reject(message);
-            requestHandle = null;
         };
 
         var onSuccess = function (response) {
@@ -67,11 +65,9 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo
                 } else {
                     onError(null);
                 }
-
             } else {
                 deferred.resolve(response);
             }
-            requestHandle = null;
         };
 
         var headers = {
@@ -86,25 +82,27 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo
             responseType: format,
             params: _mixinDefaultGetParams(getParams),
             data: $.param(getPostParams(postParams)),
-            timeout: deferred.promise,
+            timeout: requestPromise,
             headers: headers
         };
 
         $http(ajaxCall).success(onSuccess).error(onError);
 
+        // we can't modify requestPromise directly and add an abort method since for some reason it gets
+        // removed after then/finally/catch is called.
         var request = {
             then: function () {
-                deferred.promise.then.apply(deferred.promise, arguments);
+                requestPromise.then.apply(requestPromise, arguments);
                 return this;
             },
 
             'finally': function () {
-                deferred.promise['finally'].apply(deferred.promise, arguments);
+                requestPromise['finally'].apply(requestPromise, arguments);
                 return this;
             },
 
-            'catch': function () { // TODO: cleanup deferred.promise references
-                deferred.promise['catch'].apply(deferred.promise, arguments);
+            'catch': function () {
+                requestPromise['catch'].apply(requestPromise, arguments);
                 return this;
             },
 
@@ -176,6 +174,8 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo
         allRequests.forEach(function (request) {
             request.abort();
         });
+
+        allRequests = [];
     };
 
     /**
diff --git a/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js b/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js
index f5033333d3acc5992133b8ca2c51647e21cb92f5..278861c2834de44e735ded684c00db4e1e1de6e6 100644
--- a/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js
+++ b/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js
@@ -57,6 +57,23 @@ describe('piwikApiClient', function () {
         $httpBackend.flush();
     });
 
+    it("should not fail when multiple aborts are issued", function (done) {
+        var request = piwikApi.fetch({
+            method: "SomePlugin.action"
+        }).then(function (response) {
+            done(new Error("Aborted request succeeded!"));
+        }).catch(function (ex) {
+            done(ex);
+        });
+
+        request.abort();
+        request.abort();
+
+        $httpBackend.flush();
+
+        request.abort();
+    });
+
     it("should send multiple requests concurrently when fetch is called more than once", function (done) {
         var request1Done, request2Done;