diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index b149c02..a9260f3 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -4,6 +4,7 @@ X-editable changelog
 
 Version 1.1.1 wip
 ----------------------------   
+[enh #13] 'onblur' option: to cancel, submit or ignore when user clicks outside the form (vitalets)  
 [enh] 'ajaxOptions' parameter for advanced ajax configuration (vitalets)  
 [enh] success callback can return object to overwrite submitted value (vitalets)  
        
diff --git a/test/unit/common.js b/test/unit/common.js
index 468c48e..22e8da2 100644
--- a/test/unit/common.js
+++ b/test/unit/common.js
@@ -78,7 +78,7 @@
 
         e.click();
         var p = tip(e); 
-        ok(p.is(':visible'), 'popover shown');
+        ok(p.is(':visible'), 'popover shown');   
 
         //todo: for jqueryui phantomjs calcs wrong position. Need investigation
         if(!$.browser.webkit && fc.f !== 'jqueryui') {
@@ -89,7 +89,7 @@
         ok(p.find(':contains("'+title+'")').length, 'title ok');
         e.remove();
       });   
-      
+     /* 
       test("should close all other containers on click on editable", function () {
         var e1 = $('<a href="#" data-pk="1" data-url="post.php" id="a">abc</a>').appendTo('#qunit-fixture').editable(),  
             e2 = $('<a href="#" data-pk="1" data-url="post.php" id="b">abcd</a>').appendTo('#qunit-fixture').editable();  
@@ -121,6 +121,191 @@
         e1.click();
         ok(!p.is(':visible'), 'popover closed');
      });        
+      */
+      
+      test("onblur: cancel", function () {
+        var oldValue = 'abc',
+            newValue = 'cde',
+            e = $('<a href="#" data-type="text" data-pk="1" data-url="post.php" id="a">'+oldValue+'</a>').appendTo('#qunit-fixture').editable({
+               onblur: 'cancel',
+               url: function() {}
+            }),  
+            e2 = $('<a href="#" data-type="text" data-pk="1" data-url="post.php" id="b">abcd</a>').appendTo('#qunit-fixture').editable();  
+       
+        //click inside                                                              
+        e.click();
+        var p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        p.click();
+        p.find('input').click();
+        ok(p.is(':visible'), 'popover1 still visible');
+                                      
+        //click outside                                                              
+        p.find('input').val(newValue);
+        $('#qunit-fixture').click();
+        ok(!p.is(':visible'), 'popover1 closed');
+        equal(e.data('editable').value, oldValue, 'old value exists');
+        
+        //click on another editable                                                              
+        e.click();
+        p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        e2.click();
+        var p2 = tip(e2);
+        ok(!p.is(':visible'), 'popover1 closed');
+        ok(p2.is(':visible'), 'popover2 visible');
+        equal(e.data('editable').value, oldValue, 'old value exists'); 
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed');    
+        
+        //call show method of another editable (multi = false)                                                              
+        e.click();
+        p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        e2.editable('show');
+        p2 = tip(e2);
+        ok(!p.is(':visible'), 'popover1 closed');
+        ok(p2.is(':visible'), 'popover2 visible');
+        equal(e.data('editable').value, oldValue, 'old value exists');  
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed');         
+        
+        //call show method of another editable (multi = true)                                                              
+        e.click();
+        p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        e2.editable('show', true);
+        p2 = tip(e2);
+        ok(p.is(':visible'), 'popover1 visible');
+        ok(p2.is(':visible'), 'popover2 visible');
+
+        e.editable('hide');
+        e2.editable('hide');
+        ok(!p.is(':visible'), 'popover1 closed');
+        ok(!p2.is(':visible'), 'popover2 closed');
+     });  
+     
+     test("onblur: submit", function () {
+        var oldValue = 'abc',
+            newValue = 'cde',
+            e = $('<a href="#" data-type="text" data-pk="1" data-url="post.php" id="a">'+oldValue+'</a>').appendTo('#qunit-fixture').editable({
+               onblur: 'submit',
+               url: function() {}
+            }),  
+            e2 = $('<a href="#" data-type="text" data-pk="1" data-url="post.php" id="b">abcd</a>').appendTo('#qunit-fixture').editable();  
+        
+        //click inside                                                              
+        e.click();
+        var p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        p.click();
+        p.find('input').click();
+        ok(p.is(':visible'), 'popover1 still visible');        
+        
+        //click outside                                                              
+        p.find('input').val(newValue);
+        $('#qunit-fixture').click();
+        ok(!p.is(':visible'), 'popover1 closed');
+        equal(e.data('editable').value, newValue, 'new value saved');
+        
+        //click on another editable                                                              
+        e.click();
+        p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(oldValue);
+        e2.click();
+        var p2 = tip(e2);
+        ok(!p.is(':visible'), 'popover1 closed');
+        ok(p2.is(':visible'), 'popover2 visible');
+        equal(e.data('editable').value, oldValue, 'old value re-saved'); 
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed');    
+        
+        //call show method of another editable (multi = false)                                                              
+        e.click();
+        p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        e2.editable('show');
+        p2 = tip(e2);
+        ok(!p.is(':visible'), 'popover1 closed');
+        ok(p2.is(':visible'), 'popover2 visible');
+        equal(e.data('editable').value, newValue, 'new value saved');  
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed');         
+        
+        //call show method of another editable (multi = true)                                                              
+        e.click();
+        p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(oldValue);
+        e2.editable('show', true);
+        p2 = tip(e2);
+        ok(p.is(':visible'), 'popover1 visible');
+        ok(p2.is(':visible'), 'popover2 visible');
+
+        e.editable('hide');
+        e2.editable('hide');
+        ok(!p.is(':visible'), 'popover1 closed');
+        ok(!p2.is(':visible'), 'popover2 closed');
+     });         
+      
+     test("onblur: ignore", function () {
+        var oldValue = 'abc',
+            newValue = 'cde',
+            e = $('<a href="#" data-type="text" data-pk="1" data-url="post.php" id="a">'+oldValue+'</a>').appendTo('#qunit-fixture').editable({
+               onblur: 'ignore',
+               url: function() {}
+            }),  
+            e2 = $('<a href="#" data-type="text" data-pk="1" data-url="post.php" id="b">abcd</a>').appendTo('#qunit-fixture').editable();  
+        
+        //click inside                                                              
+        e.click();
+        var p = tip(e);
+        ok(p.is(':visible'), 'popover1 visible');
+        p.find('input').val(newValue);
+        p.click();
+        p.find('input').click();
+        ok(p.is(':visible'), 'popover1 still visible');        
+        
+        //click outside                                                              
+        p.find('input').val(newValue);
+        $('#qunit-fixture').click();
+        ok(p.is(':visible'), 'popover1 still visible'); 
+        
+        //click on another editable                                                              
+        e2.click();
+        var p2 = tip(e2);
+        ok(p.is(':visible'), 'popover1 still visible'); 
+        ok(p2.is(':visible'), 'popover2 visible');
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed');    
+        
+        //call show method of another editable (multi = false)                                                              
+        e2.editable('show');
+        p2 = tip(e2);
+        ok(p.is(':visible'), 'popover1 still visible'); 
+        ok(p2.is(':visible'), 'popover2 visible');
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed'); 
+        
+        //call show method of another editable (multi = true)                                                              
+        e2.editable('show', true);
+        p2 = tip(e2);
+        ok(p.is(':visible'), 'popover1 still visible'); 
+        ok(p2.is(':visible'), 'popover2 visible');
+        e2.editable('hide');
+        ok(!p2.is(':visible'), 'popover2 closed'); 
+
+        e.editable('hide');
+        ok(!p.is(':visible'), 'popover1 closed');
+     });           
+     
       
      test("should not wrap buttons when parent has position:absolute", function () {
         var  d = $('<div style="position: absolute; top: 200px">').appendTo(fx),