diff --git a/layouts/v7/modules/Vtiger/MassEditForm.tpl b/layouts/v7/modules/Vtiger/MassEditForm.tpl
index 0a138c42e10424f3f0f947135fbca47e07cbfcc4..17f24de829f49a6282f7b00437c693f82d03864c 100644
--- a/layouts/v7/modules/Vtiger/MassEditForm.tpl
+++ b/layouts/v7/modules/Vtiger/MassEditForm.tpl
@@ -10,6 +10,7 @@
  ********************************************************************************/
 -->*}
 {strip}
+{assign var="MASS_EDITION_MODE" value=true}
 <div id="massEditContainer" class='fc-overlay-modal modal-content'>
     <form class="form-horizontal" id="massEdit" name="MassEdit" method="post" action="index.php">
         <input type="hidden" name="module" value="{$MODULE}" />
diff --git a/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl b/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl
index 1db8f29b5ee0eee5e44c575687043a48bd33411d..1134f02f6bf05624fffeb29bcb45ccc18aae8aa8 100644
--- a/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl
+++ b/layouts/v7/modules/Vtiger/partials/EditViewContents.tpl
@@ -46,6 +46,9 @@
 										{assign var=COUNTER value=$COUNTER+1}
 									{/if}
 									<td class="fieldLabel alignMiddle">
+										{if $MASS_EDITION_MODE}
+											<input class="inputElement" id="include_in_mass_edit_{$FIELD_MODEL->getFieldName()}" data-update-field="{$FIELD_MODEL->getFieldName()}" type="checkbox">&nbsp;
+										{/if}
 										{if $isReferenceField eq "reference"}
 											{if $refrenceListCount > 1}
 												{assign var="DISPLAYID" value=$FIELD_MODEL->get('fieldvalue')}
diff --git a/layouts/v7/modules/Vtiger/resources/List.js b/layouts/v7/modules/Vtiger/resources/List.js
index d6928a66c82539b8238c5b05b74786257f3991d0..a1ce135152ea795c38cd447088d4f6db67dc417f 100644
--- a/layouts/v7/modules/Vtiger/resources/List.js
+++ b/layouts/v7/modules/Vtiger/resources/List.js
@@ -1204,9 +1204,15 @@ Vtiger.Class("Vtiger_List_Js", {
 			editInstance.registerBasicEvents(container);
 			var form_original_data = $("#massEdit").serialize();
 			$('#massEdit').on('submit', function (event) {
-				thisInstance.saveMassedit(event, form_original_data, isOwnerChanged);
+				thisInstance.saveMassEdit(event, form_original_data, isOwnerChanged);
 				isOwnerChanged = false;
 			});
+			
+			//automatically select fields for mass edit when updated
+			$('#massEdit :input').change(function() {
+				$(this).closest('tr').find("input[id^=include_in_mass_edit_" + $(this).attr('name') + "]").prop( "checked", true );
+			});
+			
 			app.helper.registerLeavePageWithoutSubmit($("#massEdit"));
 			app.helper.registerModalDismissWithoutSubmit($("#massEdit"));
 		});
@@ -1356,32 +1362,46 @@ Vtiger.Class("Vtiger_List_Js", {
         });
     },
     
-	saveMassedit: function (event, form_original_data, isOwnerChanged) {
+	saveMassEdit: function (event, form_original_data, isOwnerChanged) {
 		event.preventDefault();
 		var form = $('#massEdit');
 		var form_new_data = form.serialize();
+		var changedFields = form.find("input[id^=include_in_mass_edit_]:checked");
+		
 		app.helper.showProgress();
-		if (form_new_data !== form_original_data || isOwnerChanged) {
+		if (changedFields.length > 0 || isOwnerChanged) {
 			var originalData = app.convertUrlToDataParams(form_original_data);
 			var newData = app.convertUrlToDataParams(form_new_data);
 
-			for (var key in originalData) {
-				if ((form.find('[name="' + key + '"]').is("select")
-						|| form.find('[name="' + key + '"]').is("input[type='checkbox']"))
-						&& (originalData[key] == newData[key])) {
-					delete newData[key];
-				}
-			}
-
+			var form_update_data = '';
 			if (!newData['assigned_user_id'] && isOwnerChanged) {
-				newData['assigned_user_id'] = originalData['assigned_user_id'];
+				form_update_data += 'assigned_user_id=' + originalData['assigned_user_id'] + '&';
 			}
 
-			var form_update_data = '';
-			for (var key in newData) {
-				form_update_data += key + '=' + newData[key] + '&';
-			}
-			form_update_data = form_update_data.slice(0, -1);
+			//add url params for hidden fields needed for the save request
+			var hiddenFields = form.find("input[type=hidden]");
+			hiddenFields.each(function(i, obj){
+				key = $(this).attr("name");
+				
+				if (typeof newData[key] !== 'undefined') {
+					form_update_data += key + '=' + newData[key] + '&';
+				}
+			});
+			
+			//add url params for fields that will be updated
+			changedFields.each(function(i, obj){
+				var key = $(this).data("update-field");
+				var value = newData[key];
+				form_update_data += key + '=';
+				
+				if (typeof value !== 'undefined') {
+					form_update_data += newData[key];
+				}
+				form_update_data += '&';
+			});
+			
+			form_update_data = form_update_data.slice(0, -1);//remove last &
+			
 			app.request.post({data: form_update_data}).then(function (err, data) {
 				app.helper.hideProgress();
 				if (data) {
@@ -1398,6 +1418,7 @@ Vtiger.Class("Vtiger_List_Js", {
 			app.helper.showAlertBox({'message': app.vtranslate('NONE_OF_THE_FIELD_VALUES_ARE_CHANGED_IN_MASS_EDIT')});
 		}
 	},
+	
 	markSelectedIdsCheckboxes: function () {
 		var self = this;
 
@@ -2509,7 +2530,7 @@ Vtiger.Class("Vtiger_List_Js", {
 			self.registerFloatingThead();
 		});
 	},
-
+	
 	registerEvents: function () {
 		var thisInstance = this;
 		this._super();
diff --git a/modules/Vtiger/actions/MassSave.php b/modules/Vtiger/actions/MassSave.php
index c6ecc8dfeb0b905d569b1bfe40a30f3422ebe1ee..8966268abab62b24d0a92ce090e90693b1944052 100644
--- a/modules/Vtiger/actions/MassSave.php
+++ b/modules/Vtiger/actions/MassSave.php
@@ -21,7 +21,6 @@ class Vtiger_MassSave_Action extends Vtiger_Mass_Action {
 		try {
 			vglobal('VTIGER_TIMESTAMP_NO_CHANGE_MODE', $request->get('_timeStampNoChangeMode',false));
 			$moduleName = $request->getModule();
-			$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
 			$recordModels = $this->getRecordModelsFromRequest($request);
 			$allRecordSave= true;
 			foreach($recordModels as $recordId => $recordModel) {
@@ -46,46 +45,40 @@ class Vtiger_MassSave_Action extends Vtiger_Mass_Action {
 	}
 
 	/**
-	 * Function to get the record model based on the request parameters
+	 * Function to get the updated record models
 	 * @param Vtiger_Request $request
-	 * @return Vtiger_Record_Model or Module specific Record Model instance
+	 * @return array of Vtiger_Record_Model
 	 */
-	function getRecordModelsFromRequest(Vtiger_Request $request) {
-
-		$moduleName = $request->getModule();
-		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
+	protected function getRecordModelsFromRequest(Vtiger_Request $request) {
 		$recordIds = $this->getRecordsListFromRequest($request);
 		$recordModels = array();
 
-		$fieldModelList = $moduleModel->getFields();
 		foreach($recordIds as $recordId) {
-			$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleModel);
-			$recordModel->set('id', $recordId);
-			$recordModel->set('mode', 'edit');
-
-			foreach ($fieldModelList as $fieldName => $fieldModel) {
+			$recordModels[$recordId] = $this->getUpdatedRecord($request, $recordId);
+		}
+		
+		return $recordModels;
+	}
+	
+	private function getUpdatedRecord(Vtiger_Request $request, $recordId) {
+		$recordModel = Vtiger_Record_Model::getInstanceById($recordId);
+		$recordModel->set('mode', 'edit');
+		$fieldModelList = $recordModel->getModule()->getFields();
+		
+		foreach ($fieldModelList as $fieldName => $fieldModel) {
+			if ($request->has($fieldName)) {
 				$fieldValue = $request->get($fieldName, null);
 				$fieldDataType = $fieldModel->getFieldDataType();
 				if($fieldDataType == 'time'){
 					$fieldValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldValue);
 				}
-				if(isset($fieldValue) && $fieldValue != null) {
-					if(!is_array($fieldValue)) {
-						$fieldValue = trim($fieldValue);
-					}
-					$recordModel->set($fieldName, $fieldValue);
-				} else {
-					$uiType = $fieldModel->get('uitype');
-					if($uiType == 70) {
-						$recordModel->set($fieldName, $recordModel->get($fieldName));
-					}  else {
-						$uiTypeModel = $fieldModel->getUITypeModel();
-						$recordModel->set($fieldName, $uiTypeModel->getUserRequestValue($recordModel->get($fieldName)));
-					}
+				
+				if (!is_array($fieldValue)) {
+					$fieldValue = trim($fieldValue);
 				}
+				$recordModel->set($fieldName, $fieldValue);
 			}
-			$recordModels[$recordId] = $recordModel;
 		}
-		return $recordModels;
+		return $recordModel;
 	}
 }