diff --git a/packages/vtiger/mandatory/Mobile.zip b/packages/vtiger/mandatory/Mobile.zip
index 8f539b289e20c81be0dd894c960e5391b8070d10..126bd9a8608b0f01b2dfc4865c9ba5a10744c527 100644
Binary files a/packages/vtiger/mandatory/Mobile.zip and b/packages/vtiger/mandatory/Mobile.zip differ
diff --git a/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php b/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php
index 57bdf53f5459fb8b71c8f95841d9ad860576cbd6..fdb64a54636fbb1fcde6445ddee947c2908d2738 100644
--- a/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php
+++ b/pkg/vtiger/modules/Mobile/modules/Mobile/api/ws/FetchRecord.php
@@ -10,9 +10,9 @@
 include_once 'include/Webservices/Retrieve.php';
 
 class Mobile_WS_FetchRecord extends Mobile_WS_Controller {
-
+	
 	private $module = false;
-
+	
 	protected $resolvedValueCache = array();
 	
 	protected function detectModuleName($recordid) {
@@ -30,53 +30,36 @@ class Mobile_WS_FetchRecord extends Mobile_WS_Controller {
 		
 		return $record;
 	}
-
+	
 	function process(Mobile_API_Request $request) {
 		$current_user = $this->getActiveUser();
-		$record = $request->get('record');
-		$module = $request->get('module');
+		$record = $this->processRetrieve($request);
 		
-		$moduleModel = Vtiger_Module_Model::getInstance($module);
-		$recordModel = Vtiger_Record_Model::getInstanceById($record, $moduleModel);
-		$data = $recordModel->getData();
-		
-		$data = $this->resolveRecordValues($data, $moduleModel);
+		$this->resolveRecordValues($record, $current_user);
 		
 		$response = new Mobile_API_Response();
-		$response->setResult(array('record' => $data));
+		$response->setResult(array('record' => $record));
 		
 		return $response;
 	}
-
-	function resolveRecordValues($data, $moduleModel) {
-		$fields = $moduleModel->getFields();
+	
+	function resolveRecordValues(&$record, $user, $ignoreUnsetFields=false) {
+		if(empty($record)) return $record;
 		
-		foreach ($data as $fieldName => $value) {
-			if ($fields[$fieldName]) {
-				$fieldModel = $fields[$fieldName];
-				$fieldType = $fieldModel->getFieldDataType();
-				$referenceModules = $fieldModel->getReferenceList();
-				if ($fieldType == 'reference' && !in_array('Users', $referenceModules)) {
-					$data[$fieldName] = array('value' => $value, 'label' => decode_html(Vtiger_Functions::getCRMRecordLabel($value)));
-				} else if ($fieldType == 'reference' && in_array('Users', $referenceModules)) {
-					$data[$fieldName] = array('value' => $value, 'label' => decode_html(Vtiger_Functions::getUserRecordLabel($value)));
-				} else if ($fieldType == 'url') {
-					$data[$fieldName] = array('value' => $value, 'label' => $value);
-				} else if ($fieldType == 'owner') {
-					$ownerName = Vtiger_Functions::getUserRecordLabel($value);
-					if (!empty($ownerName)) {
-						$data[$fieldName] = array('value' => $value, 'label' => decode_html($ownerName));
-					} else {
-						$data[$fieldName] = array('value' => $value, 'label' => decode_html(Vtiger_Functions::getGroupRecordLabel($value)));
-					}
-				} else {
-					$data[$fieldName] = array('value' => $value, 'label' => decode_html($fieldModel->getDisplayValue($value)));
+		$fieldnamesToResolve = Mobile_WS_Utils::detectFieldnamesToResolve(
+			$this->detectModuleName($record['id']) );
+		
+		if(!empty($fieldnamesToResolve)) {
+			foreach($fieldnamesToResolve as $resolveFieldname) {
+				if ($ignoreUnsetFields === false || isset($record[$resolveFieldname])) {
+					$fieldvalueid = $record[$resolveFieldname];
+					$fieldvalue = $this->fetchRecordLabelForId($fieldvalueid, $user);
+					$record[$resolveFieldname] = array('value' => $fieldvalueid, 'label'=>$fieldvalue);
 				}
 			}
 		}
-		return $data;
 	}
-
+	
 	function fetchRecordLabelForId($id, $user) {
 		$value = null;