diff --git a/layouts/vlayout/modules/Emails/resources/MassEdit.js b/layouts/vlayout/modules/Emails/resources/MassEdit.js
index dfb59d5304df3cc2f06764861c8614a1412deb8f..90c5a26e86e11892a1bfd086ab07272807e04d81 100644
--- a/layouts/vlayout/modules/Emails/resources/MassEdit.js
+++ b/layouts/vlayout/modules/Emails/resources/MassEdit.js
@@ -63,7 +63,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 	 * return UI
 	 */
 	showComposeEmailForm : function(params,cb,windowName){
-	    app.hideModalWindow();
+		app.hideModalWindow();
 		var popupInstance = Vtiger_Popup_Js.getInstance();
 		return popupInstance.show(params,cb,windowName);
 		
@@ -279,7 +279,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 				for(var id in responseData){
 					selectedDocumentId = id;
 					var selectedFileName = responseData[id].info['filename'];
-					var selectedFileSize =  responseData[id].info['filesize'];
+					var selectedFileSize = responseData[id].info['filesize'];
 					var response = thisInstance.writeDocumentIds(selectedDocumentId)
 					if(response){
 						var attachmentElement = thisInstance.getDocumentAttachmentElement(selectedFileName,id,selectedFileSize);
@@ -405,31 +405,31 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 			}
 			var popupInstance =Vtiger_Popup_Js.getInstance();
 			popupInstance.show(params, function(data){
-					var responseData = JSON.parse(data);
-					for(var id in responseData){
-						var data = {
-							'name' : responseData[id].name,
-							'id' : id,
-							'emailid' : responseData[id].email
-						}
-						thisInstance.setReferenceFieldValue(parentElem, data);
-                        thisInstance.addToEmailAddressData(data);
-                        thisInstance.appendToSelectedIds(id);
-                        thisInstance.addToEmails(data);
+				var responseData = JSON.parse(data);
+				for(var id in responseData){
+					var data = {
+						'name' : responseData[id].name,
+						'id' : id,
+						'emailid' : responseData[id].email
 					}
-				},'relatedEmailModules');
+					thisInstance.setReferenceFieldValue(parentElem, data);
+					thisInstance.addToEmailAddressData(data);
+					thisInstance.appendToSelectedIds(id);
+					thisInstance.addToEmails(data);
+				}
+			},'relatedEmailModules');
 		});
 		
 		this.getMassEmailForm().on('click','[name="clearToEmailField"]',function(e){
 			var element = jQuery(e.currentTarget);
-			element.closest('div.toEmailField').find('.sourceField').val('');
+			element.closest('div.toEmailField').find('#toEmail').val('');
 			thisInstance.getMassEmailForm().find('[name="toemailinfo"]').val(JSON.stringify(new Array()));
 			thisInstance.getMassEmailForm().find('[name="selected_ids"]').val(JSON.stringify(new Array()));
 			thisInstance.getMassEmailForm().find('[name="to"]').val(JSON.stringify(new Array()));
 
 			var preloadData = [];
 			thisInstance.setPreloadData(preloadData);
-			thisInstance.getMassEmailForm().find('#emailField').select2('data', preloadData);
+			thisInstance.getMassEmailForm().find('#toEmail').select2('data', preloadData);
 		});
 		
 		
@@ -446,9 +446,9 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 		}
 		preloadData.push(emailInfo);
 		thisInstance.setPreloadData(preloadData);
-		container.find('#emailField').select2('data', preloadData);
+		container.find('#toEmail').select2('data', preloadData);
 
-		var toEmailField = container.find('.sourceField');
+		var toEmailField = container.find('#toEmail');
 		var toEmailFieldExistingValue = toEmailField.val();
 		var toEmailFieldNewValue;
 		if(toEmailFieldExistingValue != ""){
@@ -459,50 +459,50 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 		toEmailField.val(toEmailFieldNewValue);
 	},
 
-    addToEmailAddressData : function(mailInfo) {    
-        var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]');
-        var existingToMailInfo = JSON.parse(mailInfoElement.val());
-         if(typeof existingToMailInfo.length != 'undefined') {
-            existingToMailInfo = {};
-        } 
-        //If same record having two different email id's then it should be appended to
-        //existing email id
-         if(existingToMailInfo.hasOwnProperty(mailInfo.id) === true){
-            var existingValues = existingToMailInfo[mailInfo.id];
-            var newValue = new Array(mailInfo.emailid);
-            existingToMailInfo[mailInfo.id] = jQuery.merge(existingValues,newValue);
-        } else {
-            existingToMailInfo[mailInfo.id] = new Array(mailInfo.emailid);
-        }
-        mailInfoElement.val(JSON.stringify(existingToMailInfo));
-    },
-
-    appendToSelectedIds : function(selectedId) {
-        var selectedIdElement = this.getMassEmailForm().find('[name="selected_ids"]');
-        var previousValue = '';
-        if(JSON.parse(selectedIdElement.val()) != '') {
-            previousValue = JSON.parse(selectedIdElement.val());
-            //If value doesn't exist then insert into an array
-            if(jQuery.inArray(selectedId,previousValue) === -1){
-                previousValue.push(selectedId);
-            }
-        } else {
+	addToEmailAddressData : function(mailInfo) {
+		var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]');
+		var existingToMailInfo = JSON.parse(mailInfoElement.val());
+		 if(typeof existingToMailInfo.length != 'undefined') {
+			existingToMailInfo = {};
+		} 
+		//If same record having two different email id's then it should be appended to
+		//existing email id
+		 if(existingToMailInfo.hasOwnProperty(mailInfo.id) === true){
+			var existingValues = existingToMailInfo[mailInfo.id];
+			var newValue = new Array(mailInfo.emailid);
+			existingToMailInfo[mailInfo.id] = jQuery.merge(existingValues,newValue);
+		} else {
+			existingToMailInfo[mailInfo.id] = new Array(mailInfo.emailid);
+		}
+		mailInfoElement.val(JSON.stringify(existingToMailInfo));
+	},
+
+	appendToSelectedIds : function(selectedId) {
+		var selectedIdElement = this.getMassEmailForm().find('[name="selected_ids"]');
+		var previousValue = '';
+		if(JSON.parse(selectedIdElement.val()) != '') {
+			previousValue = JSON.parse(selectedIdElement.val());
+			//If value doesn't exist then insert into an array
+			if(jQuery.inArray(selectedId,previousValue) === -1){
+				previousValue.push(selectedId);
+			}
+		} else {
 			previousValue = new Array(selectedId);
-        }
+		}
 		selectedIdElement.val(JSON.stringify(previousValue));
 
-    },
+	},
 
-    addToEmails : function(mailInfo){
-        var toEmails = this.getMassEmailForm().find('[name="to"]');
-        var value = JSON.parse(toEmails.val());
+	addToEmails : function(mailInfo){
+		var toEmails = this.getMassEmailForm().find('[name="to"]');
+		var value = JSON.parse(toEmails.val());
 		if(value == ""){
 			value = new Array();
 		}
-        value.push(mailInfo.emailid);
-        toEmails.val(JSON.stringify(value));
-    },
-	
+		value.push(mailInfo.emailid);
+		toEmails.val(JSON.stringify(value));
+	},
+
 	/**
 	 * Function to remove attachments that are added in 
 	 * edit view of email in compose email form
@@ -614,7 +614,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 	registerAutoCompleteFields : function(container) {
 		var thisInstance = this;
 
-		container.find('#emailField').select2({
+		container.find('.emailField').select2({
 			minimumInputLength: 3,
 			closeOnSelect : false,
 
@@ -626,18 +626,18 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 			},
 
 			ajax : {
-                'url' : 'index.php?module=Emails&action=BasicAjax',
-                'dataType' : 'json',
-                'data' : function(term,page){
-                     var data = {};
-                     data['searchValue'] = term;
-                     return data;
-                },
-                'results' : function(data){
+				'url' : 'index.php?module=Emails&action=BasicAjax',
+				'dataType' : 'json',
+				'data' : function(term,page){
+					 var data = {};
+					 data['searchValue'] = term;
+					 return data;
+				},
+				'results' : function(data){
 					var finalResult = [];
 					var results = data.result;
 					var resultData = new Array();
-                    for(var moduleName in results) {
+					for(var moduleName in results) {
 						var moduleResult = [];
 						moduleResult.text = moduleName;
 
@@ -654,18 +654,51 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 						}
 						moduleResult.children = children;
 						resultData.push(moduleResult);
-                    }
+					}
 					finalResult.results = resultData;
-                    return finalResult;
-                },
+					return finalResult;
+				},
 				transport : function(params) {
 					return jQuery.ajax(params);
 				}
-            }
+			}
 
 		}).on("change", function (selectedData) {
-                    console.log("Change of select element");
 			var addedElement = selectedData.added;
+			var removedData = selectedData.removed;
+			var currentElementName = jQuery(selectedData.currentTarget).attr('name');
+			if(currentElementName == 'cc' || currentElementName == 'bcc') {
+				var fieldName = 'ccInfo';
+				if(currentElementName == 'bcc') {
+					fieldName = 'bccInfo';
+				}
+
+				var emailData = [];
+				var fieldData = jQuery('[name="'+fieldName+'"]').val();
+				if(fieldData.length) {
+					emailData = JSON.parse(fieldData);
+					emailData = jQuery.map(emailData, function(value, index) {
+						return [value];
+					});
+				}
+
+				if(typeof addedElement != 'undefined') {
+					var data = {
+						'id' : addedElement.recordId,
+						'name' : addedElement.text,
+						'emailid' : addedElement.id
+					}
+					emailData.push(data);
+				} else if(typeof removedData != 'undefined') {
+					for(var i in emailData) {
+						if(emailData[i].id == removedData.recordId || emailData[i].emailid == removedData.id) {
+							emailData.splice(i, 1);
+						}
+					}
+				}
+				jQuery('[name="'+fieldName+'"]').val(JSON.stringify(emailData));
+			}
+
 			if (typeof addedElement != 'undefined') {
 				var data = {
 					'id' : addedElement.recordId,
@@ -721,13 +754,13 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 			}
 		});
 
-		container.find('#emailField').select2("container").find("ul.select2-choices").sortable({
+		container.find('.emailField').select2("container").find("ul.select2-choices").sortable({
 			containment: 'parent',
 			start: function(){
-				container.find('#emailField').select2("onSortStart");
+				container.find('.emailField').select2("onSortStart");
 			},
 			update: function(){
-				container.find('#emailField').select2("onSortEnd");
+				container.find('.emailField').select2("onSortEnd");
 			}
 		});
 
@@ -762,6 +795,7 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 				}
 			}
 		}
+
 		if (typeof toFieldValues != 'undefined') {
 			for(var i in toFieldValues) {
 				var emailId = toFieldValues[i];
@@ -774,14 +808,47 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 		}
 		if (typeof preloadData != 'undefined') {
 			thisInstance.setPreloadData(preloadData);
-			container.find('#emailField').select2('data', preloadData);
+			container.find('.emailField[name="toEmail"]').select2('data', preloadData);
+		}
+
+		var ccValues = container.find('[name="ccInfo"]').val();
+		if(ccValues) {
+			ccValues = JSON.parse(ccValues);
+			var emailData = [];
+			for(var i in ccValues) {
+				var ccValue = ccValue[i];
+				if(ccValue.id) {
+					emailData.push({'id' : ccValue.emailid, 'text' : ccValue.name, 'recordId' : ccValue.id});
+				} else if(ccValue.emailid) {
+					emailData.push({'id' : ccValue.emailid, 'text' : ccValue.name});
+				} else {
+					emailData.push({'id' : ccValue.trim(), 'text' : ccValue.trim()});
+				}
+			}
+			container.find('.emailField[name="cc"]').select2('data', emailData);
 		}
 
+		var bccValues = container.find('[name="bccInfo"]').val();
+		if(bccValues) {
+			bccValues = JSON.parse(bccValues);
+			var bemailData = [];
+			for(var i in bccValues) {
+				var bccValue = bccValues[i];
+				if(bccValue.id) {
+					bemailData.push({'id' : bccValue.emailid, 'text' : bccValue.name, 'recordId' : bccValue.id});
+				} else if(bccValue.emailid) {
+					bemailData.push({'id' : bccValue.emailid, 'text' : bccValue.name});
+				} else {
+					bemailData.push({'id' : bccValue.trim(), 'text' : bccValue.trim()});
+				}
+			}
+			container.find('.emailField[name="bcc"]').select2('data', bemailData);
+		}
 	},
 
 	removeFromEmailAddressData : function(mailInfo) {
-        var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]');
-        var previousValue = JSON.parse(mailInfoElement.val());
+		var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]');
+		var previousValue = JSON.parse(mailInfoElement.val());
 		var elementSize = previousValue[mailInfo.id].length;
 		var emailAddress = mailInfo.emailid;
 		var selectedId = mailInfo.id;
@@ -801,14 +868,14 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 			//update toemailnameslist hidden element value
 		}
 		mailInfoElement.val(JSON.stringify(previousValue));
-    },
+	},
 
-    removeFromSelectedIds : function(selectedId) {
-        var selectedIdElement = this.getMassEmailForm().find('[name="selected_ids"]');
-        var previousValue = JSON.parse(selectedIdElement.val());
+	removeFromSelectedIds : function(selectedId) {
+		var selectedIdElement = this.getMassEmailForm().find('[name="selected_ids"]');
+		var previousValue = JSON.parse(selectedIdElement.val());
 		var mailInfoElement = this.getMassEmailForm().find('[name="toemailinfo"]');
-        var mailAddress = JSON.parse(mailInfoElement.val());
-		var elements  = mailAddress[selectedId];
+		var mailAddress = JSON.parse(mailInfoElement.val());
+		var elements = mailAddress[selectedId];
 		var noOfEmailAddress = elements.length; 
 		
 		//Don't remove id from selected_ids if element is having more than two email id's
@@ -826,11 +893,11 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 			}
 			selectedIdElement.val(JSON.stringify(updatedValue));
 		}
-    },
+	},
 
-    removeFromEmails : function(mailInfo){
-        var toEmails = this.getMassEmailForm().find('[name="to"]');
-        var previousValue = JSON.parse(toEmails.val());
+	removeFromEmails : function(mailInfo){
+		var toEmails = this.getMassEmailForm().find('[name="to"]');
+		var previousValue = JSON.parse(toEmails.val());
 
 		var updatedValue = [];
 		for (var i in previousValue) {
@@ -843,8 +910,8 @@ jQuery.Class("Emails_MassEdit_Js",{},{
 				updatedValue.push(email);
 			}
 		}
-        toEmails.val(JSON.stringify(updatedValue));
-    },
+		toEmails.val(JSON.stringify(updatedValue));
+	},
 
 	registerEvents : function(){
 		var thisInstance = this;
diff --git a/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl b/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl
index 8febca558ba3c719e3159db2fa8c48810197a9b4..d6dcf7e1ab92f0bc219adc16c23ff0f155796451 100644
--- a/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl
+++ b/layouts/vlayout/modules/Vtiger/ComposeEmailForm.tpl
@@ -20,28 +20,28 @@
 		<input type="hidden" name="excluded_ids" value='{ZEND_JSON::encode($EXCLUDED_IDS)}' />
 		<input type="hidden" name="viewname" value="{$VIEWNAME}" />
 		<input type="hidden" name="module" value="{$MODULE}"/>
-                <input type="hidden" name="selectedFields" value='{ZEND_JSON::encode($SELECTED_FIELDS)}'/>  
+		<input type="hidden" name="selectedFields" value='{ZEND_JSON::encode($SELECTED_FIELDS)}'/>
 		<input type="hidden" name="mode" value="massSave" />
 		<input type="hidden" name="toemailinfo" value='{ZEND_JSON::encode($TOMAIL_INFO)}' />
 		<input type="hidden" name="view" value="MassSaveAjax" />
-		<input type="hidden"  name="to" value='{ZEND_JSON::encode($TO)}' />
-		<input type="hidden"  name="toMailNamesList" value='{ZEND_JSON::encode($TOMAIL_NAMES_LIST)}' />
+		<input type="hidden" name="to" value='{ZEND_JSON::encode($TO)}' />
+		<input type="hidden" name="toMailNamesList" value='{ZEND_JSON::encode($TOMAIL_NAMES_LIST)}' />
 		<input type="hidden" id="flag" name="flag" value="" />
 		<input type="hidden" id="maxUploadSize" value="{$MAX_UPLOAD_SIZE}" />
 		<input type="hidden" id="documentIds" name="documentids" value="" />
 		<input type="hidden" name="emailMode" value="{$EMAIL_MODE}" />
-        {if !empty($PARENT_EMAIL_ID)}
-            <input type="hidden" name="parent_id" value="{$PARENT_EMAIL_ID}" />
+		{if !empty($PARENT_EMAIL_ID)}
+			<input type="hidden" name="parent_id" value="{$PARENT_EMAIL_ID}" />
 			<input type="hidden" name="parent_record_id" value="{$PARENT_RECORD}" />
-        {/if}
-        {if !empty($RECORDID)}
-            <input type="hidden" name="record" value="{$RECORDID}" />
-        {/if}
-        <input type="hidden" name="search_key" value= "{$SEARCH_KEY}" />
-        <input type="hidden" name="operator" value="{$OPERATOR}" />
-        <input type="hidden" name="search_value" value="{$ALPHABET_VALUE}" />
-        <input type="hidden" name="search_params" value='{ZEND_JSON::encode($SEARCH_PARAMS)}' />
-        
+		{/if}
+		{if !empty($RECORDID)}
+			<input type="hidden" name="record" value="{$RECORDID}" />
+		{/if}
+		<input type="hidden" name="search_key" value= "{$SEARCH_KEY}" />
+		<input type="hidden" name="operator" value="{$OPERATOR}" />
+		<input type="hidden" name="search_value" value="{$ALPHABET_VALUE}" />
+		<input type="hidden" name="search_params" value='{ZEND_JSON::encode($SEARCH_PARAMS)}' />
+
 		<div class="row-fluid toEmailField padding10">
 			<span class="span8">
 				<span class="row-fluid">
@@ -49,8 +49,8 @@
 					{if !empty($TO)}
 						{assign var=TO_EMAILS value=","|implode:$TO}
 					{/if}
-                    <span class="span9">
-					<input id="emailField" name="toEmail" type="text" class="row-fluid autoComplete sourceField select2"
+					<span class="span9">
+					<input id="toEmail" name="toEmail" type="text" class="row-fluid autoComplete emailField select2"
 					value="{$TO_EMAILS}" data-validation-engine="validate[required, funcCall[Vtiger_To_Email_Validator_Js.invokeValidation]]"
 					data-fieldinfo='{$FIELD_INFO}'
 					{if !empty($SPECIAL_VALIDATOR)}data-validator='{Zend_Json::encode($SPECIAL_VALIDATOR)}'{/if}/>
@@ -83,7 +83,7 @@
 			<div class="span8">
 				<div class="row-fluid">
 					<div class="span2">{vtranslate('LBL_CC',$MODULE)}</div>
-					<input class="span9"  data-validation-engine="validate[funcCall[Vtiger_MultiEmails_Validator_Js.invokeValidation]]" type="text" name="cc" value="{if !empty($CC)}{$CC}{/if}"/>
+					<input class="span9 row-fluid emailField select2" data-validation-engine="validate[funcCall[Vtiger_To_Email_Validator_Js.invokeValidation]]" type="text" name="cc" value="{if !empty($CC)}{$CC}{/if}"/>
 				</div>
 			</div>
 			<div class="span4"></div>
@@ -92,7 +92,7 @@
 			<span class="span8">
 				<span class="row-fluid">
 					<span class="span2">{vtranslate('LBL_BCC',$MODULE)}</span>
-					<input class="span9" data-validation-engine="validate[funcCall[Vtiger_MultiEmails_Validator_Js.invokeValidation]]" type="text" name="bcc" value="{if !empty($BCC)}{$BCC}{/if}"/>
+					<input class="span9 row-fluid emailField select2" data-validation-engine="validate[funcCall[Vtiger_To_Email_Validator_Js.invokeValidation]]" type="text" name="bcc" value="{if !empty($BCC)}{$BCC}{/if}"/>
 				</span>
 			</span>
 			<span class="span4"></span>
@@ -113,11 +113,11 @@
 			<span class="span8">
 				<span class="row-fluid">
 					<span class="span2">{vtranslate('LBL_SUBJECT',$MODULE)}<span class="redColor">*</span></span>
-					<span class="span9">
-                        <input data-validation-engine='validate[required]' class="row-fluid" type="text" name="subject" value="{$SUBJECT}" id="subject" spellcheck="true"/>
-                    </span>
+						<span class="span9">
+							<input data-validation-engine='validate[required]' class="row-fluid" type="text" name="subject" value="{$SUBJECT}" id="subject" spellcheck="true"/>
+						</span>
+					</span>
 				</span>
-			</span>
 			<span class="span4"></span>
 		</div>
 		<div class="row-fluid padding10">
@@ -135,7 +135,7 @@
 								{else}
 									{assign var=FILE_TYPE value="file"}
 								{/if}
-								<div class="MultiFile-label customAttachment" data-file-id="{$ATTACHMENT['fileid']}" data-file-type="{$FILE_TYPE}"  data-file-size="{$ATTACHMENT['size']}" {if $FILE_TYPE eq "document"} data-document-id="{$DOCUMENT_ID}"{/if}>
+								<div class="MultiFile-label customAttachment" data-file-id="{$ATTACHMENT['fileid']}" data-file-type="{$FILE_TYPE}" data-file-size="{$ATTACHMENT['size']}" {if $FILE_TYPE eq "document"} data-document-id="{$DOCUMENT_ID}"{/if}>
 									{if $ATTACHMENT['nondeletable'] neq true}
 										<a name="removeAttachment" class="cursorPointer">x </a>
 									{/if}
@@ -158,7 +158,7 @@
 							<button type="button" class="btn" id="gotoPreview" title="{vtranslate('LBL_GO_TO_PREVIEW',$MODULE)}" style="margin-left: 5px;"><strong>{vtranslate('LBL_GO_TO_PREVIEW',$MODULE)}</strong></button>
 						{/if}
 					</span>
-					<span  name="progressIndicator" style="height:30px;">&nbsp;</span>
+					<span name="progressIndicator" style="height:30px;">&nbsp;</span>
 				</div>
 			</div>
 			{if $MODULE_IS_ACTIVE}
@@ -169,9 +169,9 @@
 				</div>
 			{/if}
 		</div>
-        {if $RELATED_LOAD eq true}
-            <input type="hidden" name="related_load" value={$RELATED_LOAD} />
-        {/if}
+		{if $RELATED_LOAD eq true}
+			<input type="hidden" name="related_load" value={$RELATED_LOAD} />
+		{/if}
 		<textarea id="description" name="description">{$DESCRIPTION}</textarea>
 		<input type="hidden" name="attachments" value='{ZEND_JSON::encode($ATTACHMENTS)}' />
 	</form>