diff --git a/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java b/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
+++ b/modules/org.openbravo.service.json/src/org/openbravo/service/json/DataToJsonConverter.java
@@ -260,12 +260,15 @@
 
       Property displayColumnProperty = DalUtil.getPropertyFromPath(referencedProperty.getEntity(),
           referencingProperty.getDisplayPropertyName());
-      if (displayColumnProperty.hasDisplayColumn()) {
+      if (referencingProperty.hasDisplayColumn()) {
+        String identifier = (String) obObject.get(referencingProperty.getDisplayPropertyName());
+        if (referencingProperty.isDisplayValue()) {
+          String value = (String) obObject.get("searchKey");
+          identifier = value + " - " + identifier;
+        }
         // Allowing one level deep of displayed column pointing to references with display column
         jsonObject.put(propertyName.replace(DalUtil.DOT, DalUtil.FIELDSEPARATOR)
-            + DalUtil.FIELDSEPARATOR + JsonConstants.IDENTIFIER, ((BaseOBObject) obObject
-            .get(referencingProperty.getDisplayPropertyName())).get(displayColumnProperty
-            .getDisplayPropertyName()));
+            + DalUtil.FIELDSEPARATOR + JsonConstants.IDENTIFIER, identifier);
       } else if (!displayColumnProperty.isPrimitive()) {
         // Displaying identifier for non primitive properties
         jsonObject.put(propertyName.replace(DalUtil.DOT, DalUtil.FIELDSEPARATOR)
diff --git a/src/org/openbravo/base/model/Property.java b/src/org/openbravo/base/model/Property.java
--- a/src/org/openbravo/base/model/Property.java
+++ b/src/org/openbravo/base/model/Property.java
@@ -114,6 +114,7 @@
   private int indexInEntity;
 
   private Boolean hasDisplayColumn;
+  private Boolean isDisplayValue;
   private String displayProperty;
 
   private Property trlParentProperty;
@@ -1139,6 +1140,23 @@
     return hasDisplayColumn;
   }
 
+  /**
+   * @return true if the property is a table reference which defines an explicit display column.
+   *         This display column is then used as the identifier of objects referenced through this
+   *         property.
+   */
+  public boolean isDisplayValue() {
+    if (isDisplayValue == null) {
+      if (domainType instanceof TableDomainType) {
+        final TableDomainType tableDomainType = (TableDomainType) domainType;
+        isDisplayValue = tableDomainType.getRefTable().getDisplayedValue();
+      } else {
+        isDisplayValue = false;
+      }
+    }
+    return isDisplayValue;
+  }
+
   public String getDisplayPropertyName() {
     if (displayProperty == null) {
       final Column column = ((TableDomainType) domainType).getRefTable().getDisplayColumn();
diff --git a/src/org/openbravo/base/model/RefTable.hbm.xml b/src/org/openbravo/base/model/RefTable.hbm.xml
--- a/src/org/openbravo/base/model/RefTable.hbm.xml
+++ b/src/org/openbravo/base/model/RefTable.hbm.xml
@@ -30,8 +30,10 @@
          
         <many-to-one name="reference" not-null="true" class="org.openbravo.base.model.Reference" column="ad_reference_id" insert="false" update="false"/>
 
-		<many-to-one name="column" not-null="true" class="org.openbravo.base.model.Column" column="ad_key"/>				
-
+		<many-to-one name="column" not-null="true" class="org.openbravo.base.model.Column" column="ad_key"/>	
+    
+        <property name="displayedValue" type="org.openbravo.base.session.OBYesNoType" not-null="true" column="IsValueDisplayed"/>
+    			
     <many-to-one name="displayColumn" not-null="true" class="org.openbravo.base.model.Column" column="ad_display"/>        
 		
 		<property name="updated"/>
diff --git a/src/org/openbravo/base/model/RefTable.java b/src/org/openbravo/base/model/RefTable.java
--- a/src/org/openbravo/base/model/RefTable.java
+++ b/src/org/openbravo/base/model/RefTable.java
@@ -39,6 +39,8 @@
 
   private Column displayColumn;
 
+  private boolean displayedValue;
+
   public Column getColumn() {
     return column;
   }
@@ -69,4 +71,12 @@
   public void setDisplayColumn(Column displayColumn) {
     this.displayColumn = displayColumn;
   }
+
+  public boolean getDisplayedValue() {
+    return this.displayedValue;
+  }
+
+  public void setDisplayedValue(boolean displayedValue) {
+    this.displayedValue = displayedValue;
+  }
 }
