diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index d7a9d3b..3ffb2e4 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -4,6 +4,7 @@ X-editable changelog
 
 Version 1.4.1 wip
 ----------------------------
+[enh] new option `unsavedclass` to set css class when value was not sent to server (vitalets) 
 [enh] new option `emptyclass` to set css class when element is empty (vitalets) 
 [enh #59] select2 input (vitalets) 
 [enh #17] typeahead input (vitalets) 
diff --git a/src/editable-form/editable-form.css b/src/editable-form/editable-form.css
index be98f1f..83b43aa 100644
--- a/src/editable-form/editable-form.css
+++ b/src/editable-form/editable-form.css
@@ -110,18 +110,4 @@
 
 .editable-clear-x:hover {
    opacity: 1;
-}
-
-/*
-.editable-clear-x1 {
-   background: url('../img/clear.png') center center no-repeat;
-   display: inline-block;
-   zoom: 1; 
-   *display: inline;    
-   width: 13px;    
-   height: 13px;
-   vertical-align: middle;
-   position: relative;    
-   margin-left: -20px;
-}
-*/
+}
\ No newline at end of file
diff --git a/src/editable-form/editable-form.js b/src/editable-form/editable-form.js
index 64f8946..50d52c1 100644
--- a/src/editable-form/editable-form.js
+++ b/src/editable-form/editable-form.js
@@ -228,6 +228,7 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
                 }     
                 
                 //if success callback returns object like {newValue: <something>} --> use that value instead of submitted
+                //it is usefull if you want to chnage value in url-function
                 if(res && typeof res === 'object' && res.hasOwnProperty('newValue')) {
                     newValue = res.newValue;
                 }                            
diff --git a/test/unit/common.js b/test/unit/common.js
index ada59fe..316e593 100644
--- a/test/unit/common.js
+++ b/test/unit/common.js
@@ -546,6 +546,16 @@
         ok(p.hasClass('editable-inline'), 'has inline class');
     }); 
     
+     test("option 'inputclass'", function () {
+        var  e = $('<a href="#" id="a" data-inputclass="span4"> </a>').appendTo('#qunit-fixture').editable();
+            
+        e.click();
+        var p = tip(e);
+        ok(p.find('input[type=text]').hasClass('span4'), 'class set correctly');
+        p.find('.editable-cancel').click(); 
+        ok(!p.is(':visible'), 'popover was removed');
+      });      
+    
      test("emptytext, emptyclass", function () {
         var  emptytext = 'empty!',
              emptyclass = 'abc',
@@ -589,6 +599,50 @@
         equal(e.text(), emptytext, 'emptytext shown');
         ok(e.hasClass(emptyclass), 'emptyclass added');                     
    });  
+   
+    asyncTest("submit to url defined as function", function () {
+        expect(10);
+        var newText = 'qwe',
+            pass = false;
+            //should be called even without pk!
+            e = $('<a href="#" data-pk1="1" id="a"></a>').appendTo(fx).editable({
+            url: function(params) {
+               ok(this === e[0], 'scope is ok');
+               ok(params.value, newText, 'new text passed in users function');
+               if(!pass) {
+                   var d = new $.Deferred;
+                   return d.reject('my error');
+               }
+            }
+        });
+        
+        e.click();                       
+        var p = tip(e);
+
+        ok(p.find('input[type=text]').length, 'input exists')
+        p.find('input').val(newText);
+        p.find('form').submit();
+        
+        setTimeout(function() {
+           ok(p.is(':visible'), 'popover visible');
+           equal(p.find('.editable-error-block').text(), 'my error', 'error shown correctly');  
+             
+           pass = true;
+           newText = 'dfgd';
+           p.find('input').val(newText);
+           p.find('form').submit();           
+           
+           setTimeout(function() {  
+               ok(!p.is(':visible'), 'popover closed');
+               equal(e.text(), newText, 'element text ok');
+               ok(!e.hasClass($.fn.editable.defaults.unsavedclass), 'no unsaved class');
+                       
+               e.remove();    
+               start();
+           }, timeout);                 
+        }, timeout);           
+        
+   });     
     
           
 }(jQuery));  
\ No newline at end of file
diff --git a/test/unit/text.js b/test/unit/text.js
index 80b17b2..7ab83c6 100644
--- a/test/unit/text.js
+++ b/test/unit/text.js
@@ -16,16 +16,6 @@ $(function () {
         p.find('.editable-cancel').click(); 
         ok(!p.is(':visible'), 'popover was removed');
       });   
-      
-     test("option 'inputclass'", function () {
-        var  e = $('<a href="#" id="a" data-inputclass="span4"> </a>').appendTo('#qunit-fixture').editable();
-            
-        e.click();
-        var p = tip(e);
-        ok(p.find('input[type=text]').hasClass('span4'), 'class set correctly');
-        p.find('.editable-cancel').click(); 
-        ok(!p.is(':visible'), 'popover was removed');
-      });           
      
      asyncTest("should load correct value and save new entered text (and value)", function () {
         var  v = 'ab<b>"',
@@ -229,35 +219,6 @@ $(function () {
         }, timeout);             
         
       });            
-                   
-      
-     asyncTest("submit to url defined as function", function () {
-        expect(4);
-        var newText = 'qwe',
-            //should be called even without pk!
-            e = $('<a href="#" data-pk1="1" id="a"></a>').appendTo(fx).editable({
-            url: function(params) {
-               ok(this === e[0], 'scope is ok');
-               ok(params.value, newText, 'new text passed in users function');
-               var d = new $.Deferred;
-               return d.reject('my error');
-            }
-        });
-        
-        e.click();                       
-        var p = tip(e);
-
-        ok(p.find('input[type=text]').length, 'input exists')
-        p.find('input').val(newText);
-        p.find('form').submit();
-        
-        setTimeout(function() {
-           equal(p.find('.editable-error-block').text(), 'my error', 'error shown correctly');                  
-           e.remove();    
-           start();  
-        }, timeout);           
-        
-     });  
      
      asyncTest("should show emptytext if entered text is empty", function () {
             var emptytext = 'blabla',
@@ -351,13 +312,14 @@ $(function () {
             ok(!p.is(':visible'), 'popover was removed');
             equal(e.data('editable').value, newText, 'new text saved to value');
             equal(e.text(), newText, 'new text shown');
-            ok(e.hasClass('editable-unsaved'), 'has class editable-unsaved');
+            ok(e.hasClass($.fn.editable.defaults.unsavedclass), 'has class editable-unsaved');
       });
       
      test("send = 'never'. if pk defined --> should save new entered text and value, but no ajax", function () {
             var e = $('<a href="#" data-name="text1">abc</a>').appendTo('#qunit-fixture').editable({
                pk: 123, 
-               send: 'never'
+               send: 'never',
+               unsavedclass: 'qq'
             }),
             newText = 'cde';
 
@@ -370,7 +332,7 @@ $(function () {
             ok(!p.is(':visible'), 'popover was removed');
             equal(e.data('editable').value, newText, 'new text saved to value');
             equal(e.text(), newText, 'new text shown');
-            ok(e.hasClass('editable-unsaved'), 'has class editable-unsaved');
+            ok(e.hasClass('qq'), 'has class editable-unsaved');
       });  
 
       test("if name not defined --> should be taken from id", function () {
@@ -423,6 +385,7 @@ $(function () {
            ok(!p.is(':visible'), 'popover was removed');
            ok(!e.text().length, 'element still empty, new value was not displayed');  
            equal(e.data('editable').value, newText, 'new text saved to value');
+           ok(!e.hasClass($.fn.editable.defaults.unsavedclass), 'no unsaved css');
            e.remove();    
            start();  
         }, timeout);