diff --git a/src/org/openbravo/client/application/templates/layout.js.ftl b/src/org/openbravo/client/application/templates/layout.js.ftl
--- a/src/org/openbravo/client/application/templates/layout.js.ftl
+++ b/src/org/openbravo/client/application/templates/layout.js.ftl
@@ -212,6 +212,13 @@
   },
   
   removeTabs: function(tabs, destroyPanes) {
+    var i, tab, appFrame, tabsLength,
+        tabSet = OB.MainView.TabSet;
+
+    if(!tabs) {
+      return;
+    }
+
     if (!isc.isAn.Array(tabs)) { 
         tabs = [tabs];
     }
@@ -220,14 +227,29 @@
     // We can pass this to tabBar.removeTabs()
     tabs = this.map("getTab", tabs);
 
-    var tabsLength = tabs.length, i;
-    
+    tabsLength = tabs.length;
+
     for (i = 0; i < tabsLength; i++) {
-        OB.Layout.ViewManager.views.removeTab(tabs[i].ID);        
+      tab = tabSet.getTab(tabs[i].ID);
+      if(tab.pane.Class === "ClassicOBWindow") {
+
+        appFrame = tab.pane.appFrameWindow ||
+                   tab.pane.getAppFrameWindow();
+
+        if(appFrame && appFrame.isUserChanges) {
+          if(appFrame.validate && !appFrame.validate()) {
+            return;
+          }
+          tab.pane.saveRecord(tabs[i].ID);
+        } else {
+          OB.Layout.ViewManager.views.removeTab(tabs[i].ID);
+          this.Super("removeTabs", arguments);
+        }
+      } else {
+        OB.Layout.ViewManager.views.removeTab(tabs[i].ID);
+        this.Super("removeTabs", arguments);
+      }
     }
-  
-    this.Super("removeTabs", arguments);
-    
     OB.Layout.HistoryManager.updateHistory();
   }
 });
diff --git a/web/org.openbravo.client.application/js/classic-ob-window.js b/web/org.openbravo.client.application/js/classic-ob-window.js
--- a/web/org.openbravo.client.application/js/classic-ob-window.js
+++ b/web/org.openbravo.client.application/js/classic-ob-window.js
@@ -237,6 +237,41 @@
       return {viewId: 'ClassicOBHelp', windowId: null, tabTitle: this.tabTitle + ' - ' + OB.I18N.getLabel('UINAVBA_Help'), windowType: "X", windowName: this.formId};
     }
     return null;
+  },
+
+  saveRecord: function(/*String*/ tabID, /*Function*/ callback) {
+    var postData, reqObj,
+        appFrame = this.appFrameWindow || this.getAppFrameWindow(),
+        saveCallback = callback || this.ID + ".saveCallback(rpcResponse, data, rpcRequest)",
+        tabid = tabID || "";
+
+    postData = {};
+    OB.Utilities.addFormInputsToCriteria(postData, appFrame);
+
+    postData.Command = "SAVE_XHR";
+    postData.tabID = tabid;
+
+    reqObj = {
+      params: postData,
+      callback: saveCallback,
+      evalResult: false,
+      httpMethod : "POST",
+      useSimpleHttp : true,
+      actionURL: OB.Application.contextUrl + postData.mappingName
+    };
+    isc.RPCManager.sendRequest(reqObj);
+  },
+
+  saveCallback: function(rpcResponse, data, rpcRequest) {
+    var result = eval("("+data+")"),
+        appFrame = this.appFrameWindow || this.getAppFrameWindow();
+    if(result && result.oberror) {
+      if(result.oberror.type === "Success") {
+        appFrame.isUserChanges = false;
+        OB.MainView.TabSet.removeTab(OB.MainView.TabSet.getTab(result.tabid));
+      } else {
+        appFrame.location.href = result.redirect;
+      }
+    }
   }
-  
 });
