diff --git a/static/plugin_dbui/src/appform.js b/static/plugin_dbui/src/appform.js
index 04e35195f84805c373ea662fdfa7f228a231052e..9367f50c04a33269205665dad7e5167de0762bac 100644
--- a/static/plugin_dbui/src/appform.js
+++ b/static/plugin_dbui/src/appform.js
@@ -290,7 +290,7 @@ App.form.FormPanel = Ext.extend(Ext.form.FormPanel, {
     updateRecord: function (record) {
 
         var combo, 
-            combos, 
+            fields, 
             i, 
             item, 
             rec, 
@@ -304,12 +304,22 @@ App.form.FormPanel = Ext.extend(Ext.form.FormPanel, {
             }
         }
         
+        // handle field embedded in composite fields
+        fields = this.findByType('compositefield');
+        for (i = 0; i < fields.length; i += 1) {
+            fields[i].items.eachKey(function(key, field) {
+                if (field.isDirty()) {
+                    record.set(field.getName(), field.getValue());
+                }
+            });
+        }
+        
         // For foreign key, the record contains the valueField 
         // as well as the displayField. Previous action update the valueField
         // but note the display field. The next line append the displayField
-        combos = this.findByType('xcombobox');
-        for (i = 0; i < combos.length; i += 1) {
-            combo = combos[i];
+        fields = this.findByType('xcombobox');
+        for (i = 0; i < fields.length; i += 1) {
+            combo = fields[i];
             rec = combo.findRecord(combo.valueField, combo.getValue());
             record.set(combo.displayField, rec.get(combo.displayField));            
         }