var mumuki = mumuki || {};
(function (mumuki) {

  function Laboratory(exerciseId){
    this.exerciseId = exerciseId;
  }

  Laboratory.prototype = {
    runLocalTests: function (solution) {
      var token = new mumuki.CsrfToken();
      var request = token.newRequest({
        type: 'POST',
        url: window.location.origin + window.location.pathname + '/solutions',
        data: solution
      });
      return $.ajax(request)
    },
    runTests: function(content) {
      return this.runLocalTests({ solution: content });
    }
  };

  mumuki.bridge = {
    Laboratory: Laboratory
  };

}(mumuki));

@@ -20,16 +20,43 @@
  %7C%7C %7B%7D;%0A
+%0Avar lastSubmission = %7B%7D;%0A%0A
 (functio
@@ -68,17 +68,16 @@
 muki) %7B%0A
-%0A
   functi
@@ -206,24 +206,248 @@
 solution) %7B%0A
+      if(lastSubmission.result && lastSubmission.result.status !== 'aborted' && JSON.stringify(lastSubmission.content) === JSON.stringify(solution))%7B%0A        return $.Deferred().resolve(lastSubmission.result)%0A      %7Delse%7B%0A  
       var to
@@ -478,24 +478,26 @@
 en();%0A      
+  
 var request 
@@ -525,16 +525,18 @@
         
+  
 type: 'P
@@ -549,16 +549,18 @@
         
+ 
+ 
 url: win
@@ -630,16 +630,18 @@
         
+  
 data: so
@@ -653,16 +653,18 @@
 n%0A      
+  
 %7D);%0A    
@@ -661,24 +661,26 @@
   %7D);%0A      
+ 
+ 
 return $.aja
@@ -689,16 +689,127 @@
 request)
+.done(function (result) %7B%0A          lastSubmission = %7B content: solution, result: result %7D;%0A        %7D);%0A      %7D
 %0A    %7D,%0A

Modify bridge to return the same response when submitted solution is the same as the last