diff --git a/layouts/v7/modules/Settings/Roles/EditView.tpl b/layouts/v7/modules/Settings/Roles/EditView.tpl
index a0a1bba286641a776bb885c598fb94d996a873a4..917115bcb08a73015d162f03ef9dbb845792bee7 100644
--- a/layouts/v7/modules/Settings/Roles/EditView.tpl
+++ b/layouts/v7/modules/Settings/Roles/EditView.tpl
@@ -32,7 +32,7 @@
                     {assign var=RECORD_ID value=$RECORD_MODEL->getId()}
                     <input type="hidden" name="record" value="{$RECORD_ID}" />
                     <input type="hidden" name="mode" value="{$MODE}">
-                    <input type="hidden" name="profile_directly_related_to_role_id" value="{$PROFILE_ID}" />
+                    <input type="hidden" name="profile_directly_related_to_role_id" value="{(isset($PROFILE_ID)) ? $PROFILE_ID: ''}" />
                     {assign var=HAS_PARENT value="{if $RECORD_MODEL->getParent()}true{/if}"}
                     {if $HAS_PARENT}
                         <input type="hidden" name="parent_roleid" value="{$RECORD_MODEL->getParent()->getId()}">
diff --git a/modules/Settings/Profiles/models/Record.php b/modules/Settings/Profiles/models/Record.php
index b6ed8c1c44981ac511b40ecfccbcd9e0c224201c..e77cedbb68d4b6273da5eb064244e4b045dbd797 100644
--- a/modules/Settings/Profiles/models/Record.php
+++ b/modules/Settings/Profiles/models/Record.php
@@ -18,6 +18,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	const PROFILE_FIELD_READWRITE = 2;
 	private static $fieldLockedUiTypes = array('70');
 
+	public $profile_tab_field_permissions=[];
 	/**
 	 * Function to get the Id
 	 * @return <Number> Profile Id
@@ -85,7 +86,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	public function getGlobalPermissions() {
 		$db = PearDatabase::getInstance();
 
-		if(!$this->global_permissions) {
+		if(!property_exists($this,'global_permissions')||!$this->global_permissions) {
 			$globalPermissions = array();
 			$globalPermissions[Settings_Profiles_Module_Model::GLOBAL_ACTION_VIEW] =
 				$globalPermissions[Settings_Profiles_Module_Model::GLOBAL_ACTION_EDIT] =
@@ -242,7 +243,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	public function getProfileTabPermissions() {
 		$db = PearDatabase::getInstance();
 
-		if(!$this->profile_tab_permissions) {
+		if(!property_exists($this,'profile_tab_permissions') || !$this->profile_tab_permissions) {
 			$profile2TabPermissions = array();
 			if($this->getId()) {
 				$sql = 'SELECT * FROM vtiger_profile2tab WHERE profileid=?';
@@ -263,7 +264,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	public function getProfileTabFieldPermissions($tabId) {
 		$db = PearDatabase::getInstance();
 
-		if(!$this->profile_tab_field_permissions[$tabId]) {
+		if(!isset($this->profile_tab_field_permissions[$tabId]) || !$this->profile_tab_field_permissions[$tabId]) {
 			$profile2TabFieldPermissions = array();
 			if($this->getId()) {
 				$sql = 'SELECT * FROM vtiger_profile2field WHERE profileid=? AND tabid=?';
@@ -286,7 +287,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	public function getProfileActionPermissions() {
 		$db = PearDatabase::getInstance();
 
-		if(!$this->profile_action_permissions) {
+		if(!property_exists($this,'profile_action_permissions') || !$this->profile_action_permissions) {
 			$profile2ActionPermissions = array();
 			if($this->getId()) {
 				$sql = 'SELECT * FROM vtiger_profile2standardpermissions WHERE profileid=?';
@@ -308,7 +309,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	public function getProfileUtilityPermissions() {
 		$db = PearDatabase::getInstance();
 
-		if(!$this->profile_utility_permissions) {
+		if(!property_exists($this,'profile_utility_permissions') || !$this->profile_utility_permissions) {
 			$profile2UtilityPermissions = array();
 			if($this->getId()) {
 				$sql = 'SELECT * FROM vtiger_profile2utility WHERE profileid=?';
@@ -328,7 +329,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 	}
 
 	public function getModulePermissions() {
-		if(!$this->module_permissions) {
+		if(!property_exists($this,'module_permissions')||!$this->module_permissions) {
 			$allModules = Vtiger_Module_Model::getAll(array(0), Settings_Profiles_Module_Model::getNonVisibleModulesList());
 			$eventModule = Vtiger_Module_Model::getInstance('Events');
 			$allModules[$eventModule->getId()] = $eventModule;
@@ -455,6 +456,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 			$actionModels = Vtiger_Action_Model::getAll(true);
 			foreach($allModuleModules as $tabId => $moduleModel) {
 				if($moduleModel->isActive()) {
+					$profilePermissions[$moduleModel->getId()] = isset($profilePermissions[$moduleModel->getId()]) ? $profilePermissions[$moduleModel->getId()] : '';
 					$this->saveModulePermissions($moduleModel, $profilePermissions[$moduleModel->getId()]);
 				} else {
 					$permissions = array();
@@ -495,12 +497,12 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 		$profileId = $this->getId();
 		$tabId = $moduleModel->getId();
 		$profileActionPermissions = $this->getProfileActionPermissions();
-		$profileActionPermissions = $profileActionPermissions[$tabId];
+		$profileActionPermissions = isset($profileActionPermissions[$tabId]) ? $profileActionPermissions[$tabId] : '';
 
 		$db->pquery('DELETE FROM vtiger_profile2tab WHERE profileid=? AND tabid=?', array($profileId, $tabId));
 
 		$actionPermissions = array();
-		$actionPermissions = $permissions['actions'];
+		$actionPermissions = isset($permissions['actions']) ? $permissions['actions'] : '';
 		$actionEnabled = false;
 		if($moduleModel->isEntityModule() || $moduleModel->isUtilityActionEnabled()) {
 			if($actionPermissions || $moduleModel->isUtilityActionEnabled()) {
@@ -509,11 +511,11 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 				$availableActionIds = array_keys($actionIdsList);
 
 				foreach ($availableActionIds as $actionId) {
-					if ($actionId === 0) {
+					if ($actionId === 0 && isset($actionPermissions[1]) && isset($actionPermissions[7])) {
 						//Save action permissions = Permissions of Create/Editview action
 						$actionPermissions[$actionId] = $actionPermissions[1] || $actionPermissions[7];
 					} else {
-						$actionPermissions[$actionId] = $actionPermissions[$actionId];
+						$actionPermissions[$actionId] = isset($actionPermissions[$actionId]) ? $actionPermissions[$actionId] : null;
 					}
 				}
                 
@@ -614,7 +616,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 
 		// Enable module permission in profile2tab table only if either its an extension module or the entity module has atleast 1 action enabled
 		if($actionEnabled) {
-			$isModulePermitted = $this->tranformInputPermissionValue($permissions['is_permitted']);
+			$isModulePermitted = isset($permissions['is_permitted']) ? $this->tranformInputPermissionValue($permissions['is_permitted']) :'';
 		} else {
 			$isModulePermitted = Settings_Profiles_Module_Model::NOT_PERMITTED_VALUE;
 		}
@@ -622,7 +624,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 		$params = array($profileId, $tabId, $isModulePermitted);
 		$db->pquery($sql, $params);
 
-		$fieldPermissions = $permissions['fields'];
+		$fieldPermissions = isset($permissions['fields']) ? $permissions['fields'] : '';
 		if(is_array($fieldPermissions)) {
 			foreach($fieldPermissions as $fieldId => $stateValue) {
 				$db->pquery('DELETE FROM vtiger_profile2field WHERE profileid=? AND tabid=? AND fieldid=?',
@@ -857,7 +859,7 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 			$allowedFields = array("roleid","currency_id","reports_to_id");
 			foreach ($moduleFields as $fieldName => $fieldModel) {
 				if(in_array($fieldName,$allowedFields) || $fieldModel->getFieldDataType() == 'string' || $fieldModel->getFieldDataType() == 'email' || $fieldModel->getFieldDataType() == 'phone') {
-					if(!in_array($fieldModel->get('uitype'), $skipFields) && $fieldName != 'asterisk_extension'){
+					if(isset($userAccessbleFields[$fieldModel->get('id')]) && !in_array($fieldModel->get('uitype'), $skipFields) && $fieldName != 'asterisk_extension'){
 						$userAccessbleFields[$fieldModel->get('id')] .= $fieldName;
 					}
 				}
diff --git a/modules/Settings/Roles/models/Record.php b/modules/Settings/Roles/models/Record.php
index 8686106bc31fc2ef0aa5e821481e9adbf890be66..4446c201354fd8da9d1bd347f7e2e92c91500294 100644
--- a/modules/Settings/Roles/models/Record.php
+++ b/modules/Settings/Roles/models/Record.php
@@ -17,6 +17,9 @@ class Settings_Roles_Record_Model extends Settings_Vtiger_Record_Model {
 	 * Function to get the Id
 	 * @return <Number> Role Id
 	 */
+
+	public $children;
+
 	public function getId() {
 		return $this->get('roleid');
 	}
@@ -59,7 +62,7 @@ class Settings_Roles_Record_Model extends Settings_Vtiger_Record_Model {
 	 * @return <Settings_Roles_Record_Model> instance
 	 */
 	public function getParent() {
-		if(!$this->parent) {
+		if(!property_exists($this, 'parent') || !$this->parent) {
 			$parentRoleString = $this->getParentRoleString();
 			$parentComponents = explode('::', $parentRoleString);
 			$noOfRoles = php7_count($parentComponents);
@@ -228,7 +231,7 @@ class Settings_Roles_Record_Model extends Settings_Vtiger_Record_Model {
 	 * @return <Array> Settings_Profiles_Record_Model instances
 	 */
 	public function getProfiles() {
-		if(!$this->profiles) {
+		if(!property_exists($this,'profiles')  || !$this->profiles) {
 			$this->profiles = Settings_Profiles_Record_Model::getAllByRole($this->getId());
 		}
 		return $this->profiles;
diff --git a/modules/Vtiger/models/Field.php b/modules/Vtiger/models/Field.php
index 05e49e664fd823c044dd860db1aeeb8c46deedc4..863bc0cc88e84a2a40b9d442b63ec262a8cadaa1 100644
--- a/modules/Vtiger/models/Field.php
+++ b/modules/Vtiger/models/Field.php
@@ -404,6 +404,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 	 * @return <Boolean> - true/false
 	 */
 	public function isMandatory() {
+		if(substr_count($this->get('typeofdata'),'~') == 0)  $this->set('typeofdata', $this->get('typeofdata') . '~');
 		list($type,$mandatory)= explode('~',$this->get('typeofdata'));
 		return $mandatory=='M' ? true:false;
 	}