diff -r d84acc99f234 modules/org.openbravo.client.application/web/org.openbravo.client.application/js/form/formitem/ob-formitem-fk-filter.js
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/form/formitem/ob-formitem-fk-filter.js	Tue Jul 01 16:54:00 2014 +0000
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/form/formitem/ob-formitem-fk-filter.js	Wed Jul 02 13:27:41 2014 +0530
@@ -72,6 +72,10 @@
         if (gridView) {
           requestProperties.params.tabId = gridView.tabId || (gridView.sourceView && gridView.sourceView.tabId);
         }
+        //send the display field in request params to add it to the list of fields to be fetched.
+        if (this.formItem && this.formItem.displayProperty) {
+          requestProperties.params.displayProperty = this.formItem.displayProperty;
+        }
         delete me.forceReload;
       },
 
diff -r d84acc99f234 modules/org.openbravo.client.application/web/org.openbravo.client.application/js/grid/ob-grid.js
--- a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/grid/ob-grid.js	Tue Jul 01 16:54:00 2014 +0000
+++ b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/grid/ob-grid.js	Wed Jul 02 13:27:41 2014 +0530
@@ -597,6 +597,10 @@
           field.filterEditorProperties.criteriaField = field.criteriaField;
         }
 
+        if (field.displayProperty) {
+          field.filterEditorProperties.displayProperty = field.displayProperty;
+        }
+
         if (field.editorType && new Function('return isc.' + field.editorType + '.getPrototype().isAbsoluteTime')()) {
           // In the case of an absolute time, the time needs to be converted in order to avoid the UTC conversion
           // http://forums.smartclient.com/showthread.php?p=116135
diff -r d84acc99f234 modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java
--- a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java	Tue Jul 01 16:54:00 2014 +0000
+++ b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/FKComboUIDefinition.java	Wed Jul 02 13:27:41 2014 +0530
@@ -60,15 +60,18 @@
       Reference referenceSearchKey = column.getReferenceSearchKey();
       if (referenceSearchKey != null && referenceSearchKey.getADReferencedTableList().size() > 0) {
         ReferencedTable referencedTable = referenceSearchKey.getADReferencedTableList().get(0);
-        if (referencedTable != null
-            && isTableWithMultipleIdentifierColumns(referencedTable.getTable())) {
+        if (referencedTable != null) {
           Property prop = KernelUtils.getInstance().getPropertyFromColumn(column);
           Property referencedProp = KernelUtils.getInstance().getPropertyFromColumn(
               referencedTable.getDisplayedColumn());
           if (prop != null && referencedProp != null) {
-            criteriaField = ", criteriaField: " + "'" + prop.getName() + DalUtil.FIELDSEPARATOR
-                + referencedProp.getName() + "', criteriaDisplayField: '"
-                + referencedProp.getName() + "'";
+            if (isTableWithMultipleIdentifierColumns(referencedTable.getTable())) {
+              criteriaField = ", criteriaField: " + "'" + prop.getName() + DalUtil.FIELDSEPARATOR
+                  + referencedProp.getName() + "', criteriaDisplayField: '"
+                  + referencedProp.getName() + "'";
+            }
+            criteriaField = criteriaField.concat(", displayProperty: '" + referencedProp.getName()
+                + "'");
           }
         }
       }
diff -r d84acc99f234 modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
--- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java	Tue Jul 01 16:54:00 2014 +0000
+++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java	Wed Jul 02 13:27:41 2014 +0530
@@ -28,6 +28,7 @@
 import java.util.Map;
 
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang.StringUtils;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.hibernate.ObjectNotFoundException;
@@ -78,6 +79,9 @@
   // limit the json serialization to these properties
   private List<String> selectedProperties = new ArrayList<String>();
 
+  // display property used for table reference fields
+  private String displayProperty = null;
+
   private static final Logger log = LoggerFactory.getLogger(DataToJsonConverter.class);
 
   /**
@@ -206,6 +210,17 @@
           }
         }
       }
+      if (StringUtils.isNotEmpty(displayProperty)) {
+        if (jsonObject.has(displayProperty + DalUtil.FIELDSEPARATOR + JsonConstants.IDENTIFIER)
+            && !jsonObject.get(displayProperty + DalUtil.FIELDSEPARATOR + JsonConstants.IDENTIFIER)
+                .equals(jsonObject.NULL)) {
+          jsonObject.put(JsonConstants.IDENTIFIER,
+              jsonObject.get(displayProperty + DalUtil.FIELDSEPARATOR + JsonConstants.IDENTIFIER));
+        } else if (jsonObject.has(displayProperty)
+            && !jsonObject.get(displayProperty).equals(jsonObject.NULL)) {
+          jsonObject.put(JsonConstants.IDENTIFIER, jsonObject.get(displayProperty));
+        }
+      }
 
       // The recordTime is also added. This is the time (in milliseconds) at which the record was
       // generated. This time can be used in the client side to compute the record "age", for
@@ -404,4 +419,8 @@
         selectedProperties.add(selectedProp);
     }
   }
+
+  public void setDisplayProperty(String displayPropertyValue) {
+    displayProperty = displayPropertyValue;
+  }
 }
diff -r d84acc99f234 modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java
--- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java	Tue Jul 01 16:54:00 2014 +0000
+++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DefaultJsonDataService.java	Wed Jul 02 13:27:41 2014 +0530
@@ -89,6 +89,23 @@
       Check.isNotNull(parameters, "The parameters should not be null");
 
       String selectedProperties = parameters.get(JsonConstants.SELECTEDPROPERTIES_PARAMETER);
+      String displayField = parameters.get(JsonConstants.DISPLAYFIELD_PARAMETER);
+      if (StringUtils.isNotEmpty(displayField) && StringUtils.isNotEmpty(selectedProperties)) {
+        boolean propertyPresent = false;
+        for (String selectedProp : selectedProperties.split(",")) {
+          if (selectedProp.equals(displayField)) {
+            propertyPresent = true;
+            break;
+          }
+        }
+        if (!propertyPresent) {
+          if (StringUtils.isNotEmpty(selectedProperties)) {
+            selectedProperties = selectedProperties.concat("," + displayField);
+          } else {
+            selectedProperties = displayField;
+          }
+        }
+      }
 
       final JSONObject jsonResult = new JSONObject();
       final JSONObject jsonResponse = new JSONObject();
@@ -217,6 +234,9 @@
           DataToJsonConverter.class);
       toJsonConverter.setAdditionalProperties(JsonUtils.getAdditionalProperties(parameters));
       toJsonConverter.setSelectedProperties(selectedProperties);
+      if (StringUtils.isNotEmpty(displayField) && (!displayField.equals(JsonConstants.IDENTIFIER))) {
+        toJsonConverter.setDisplayProperty(displayField);
+      }
       final List<JSONObject> jsonObjects = toJsonConverter.toJsonObjects(bobs);
 
       addWritableAttribute(jsonObjects);
diff -r d84acc99f234 modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonConstants.java
--- a/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonConstants.java	Tue Jul 01 16:54:00 2014 +0000
+++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/JsonConstants.java	Wed Jul 02 13:27:41 2014 +0530
@@ -69,6 +69,7 @@
   public static final String TEXTMATCH_EXACT = "exact";
   public static final String TEXTMATCH_STARTSWITH = "startsWith";
   public static final String TEXTMATCH_SUBSTRING = "substring";
+  public static final String DISPLAYFIELD_PARAMETER = "displayProperty";
 
   // if this parameter is passed then if a new object already has an id then
   // that id is set back in the json which is returned together with the
