diff --git a/modules/Accounts/actions/TransferOwnership.php b/modules/Accounts/actions/TransferOwnership.php
index a8816b1ea7321761688f2bb561e9c1262df599a8..b77146e98334bb6d505e3cdf665926ed7a78a2f5 100644
--- a/modules/Accounts/actions/TransferOwnership.php
+++ b/modules/Accounts/actions/TransferOwnership.php
@@ -12,6 +12,7 @@ class Accounts_TransferOwnership_Action extends Vtiger_Action_Controller {
 	var $transferRecordIds = Array();
 	
 	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
 		$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView', 'record_parameter' => 'record');
 		return $permissions;
 	}
diff --git a/modules/Accounts/views/AccountHierarchy.php b/modules/Accounts/views/AccountHierarchy.php
index c07916e7a3507dfad2d00b1eae69af44e42d962c..37e4035d0e03fdcfd86def10a14d2551a2486259 100644
--- a/modules/Accounts/views/AccountHierarchy.php
+++ b/modules/Accounts/views/AccountHierarchy.php
@@ -10,7 +10,8 @@
 
 class Accounts_AccountHierarchy_View extends Vtiger_View_Controller {
 
-	public function requiresPermission(\Vtiger_Request $request) {
+	public function requiresPermission(Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
 		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
 		return $permissions;
 	}
diff --git a/modules/Calendar/actions/ActivityReminder.php b/modules/Calendar/actions/ActivityReminder.php
index fe1b4aee5eb5f009f48b01ff8196c96e5614cba3..073aaa0efca070ee7379811c7a0a86f0c8fa64cd 100644
--- a/modules/Calendar/actions/ActivityReminder.php
+++ b/modules/Calendar/actions/ActivityReminder.php
@@ -16,22 +16,23 @@ class Calendar_ActivityReminder_Action extends Vtiger_Action_Controller{
 	}
 
 	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
 		$mode = $request->getMode();
 		if(!empty($mode)) {
 			switch ($mode) {
 				case 'getReminders':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
 					break;
 
 				case 'postpone':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'EditView', 'record_parameter' => 'record');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView', 'record_parameter' => 'record');
 					break;
 
 				default:
 					break;
 			}
 		}
-		return $permission;
+		return $permissions;
 	}
 	
 	public function checkPermission(Vtiger_Request $request) {
diff --git a/modules/Calendar/actions/CalendarActions.php b/modules/Calendar/actions/CalendarActions.php
index aac5e9e412786db62048c3c69466ffa2012ac08b..71a0bc953bffd57ece3e90277894801bb6819bfb 100644
--- a/modules/Calendar/actions/CalendarActions.php
+++ b/modules/Calendar/actions/CalendarActions.php
@@ -15,17 +15,18 @@ class Calendar_CalendarActions_Action extends Vtiger_BasicAjax_Action {
 	}
 	
 	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
 		$mode = $request->getMode();
 		if(!empty($mode)) {
 			switch ($mode) {
 				case 'fetchAgendaViewEventDetails':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'id');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'id');
 					break;
 				default:
 					break;
 			}
 		}
-		return $permission;
+		return $permissions;
 	}
 	
 	public function checkPermission(Vtiger_Request $request) {
diff --git a/modules/Calendar/actions/CalendarUserActions.php b/modules/Calendar/actions/CalendarUserActions.php
index 22fed381088f4203a74f4da1a667c2b02579ae2e..274692da74d227f2ec65124fc383f9475e62b921 100755
--- a/modules/Calendar/actions/CalendarUserActions.php
+++ b/modules/Calendar/actions/CalendarUserActions.php
@@ -19,26 +19,27 @@ class Calendar_CalendarUserActions_Action extends Vtiger_Action_Controller{
 	}
 	
 	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
 		$mode = $request->getMode();
 		if(!empty($mode)) {
 			switch ($mode) {
 				case 'deleteUserCalendar':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'EditView');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView');
 					break;
 				case 'deleteCalendarView':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'EditView');
-					$permission[] = array('module_parameter' => 'module', 'action' => 'Delete');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'Delete');
 					break;
 				case 'addUserCalendar':
 				case 'addCalendarView':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'EditView');
-					$permission[] = array('module_parameter' => 'module', 'action' => 'CreateView');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'CreateView');
 					break;
 				default:
 					break;
 			}
 		}
-		return $permission;
+		return $permissions;
 	}
 	
 	public function checkPermission(Vtiger_Request $request) {
diff --git a/modules/Calendar/actions/DeleteAjax.php b/modules/Calendar/actions/DeleteAjax.php
index d3012c7c97d691b6cb8f048a458f67eba2657412..75310db9f1e76278f9a46a97e2e2d5c8b764b1a1 100644
--- a/modules/Calendar/actions/DeleteAjax.php
+++ b/modules/Calendar/actions/DeleteAjax.php
@@ -10,18 +10,23 @@
 
 class Calendar_DeleteAjax_Action extends Vtiger_DeleteAjax_Action {
 	
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$moduleParameter = $request->get('sourceModule');
+		if (!$moduleParameter) {
+			$moduleParameter = 'module';
+		}else{
+			$moduleParameter = 'sourceModule';
+		}
+		$permissions[] = array('module_parameter' => $moduleParameter, 'action' => 'Delete', 'record_parameter'=>'record');
+		return $permissions;
+	}
+	
 	function checkPermission(Vtiger_Request $request) {
 		$sourceModule = $request->get('sourceModule');
-		if (!$sourceModule) {
-			$sourceModule = $request->getModule();
-		}
 		$record = $request->get('record');
-
-		$currentUserPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
-		if (!$currentUserPrivilegesModel->isPermitted($sourceModule, 'Delete', $record)) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-
+		parent::checkPermission($request);
+		
 		if ($record) {
 			$activityModulesList = array('Calendar', 'Events');
 			$recordEntityName = getSalesEntityType($record);
@@ -30,6 +35,7 @@ class Calendar_DeleteAjax_Action extends Vtiger_DeleteAjax_Action {
 				throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
 			}
 		}
+		return true;
 	}
 	
 	public function process(Vtiger_Request $request) {
diff --git a/modules/Campaigns/actions/DetailAjax.php b/modules/Campaigns/actions/DetailAjax.php
index 5a75e4dfd191fd842e29050c3a452d75c8f0ddec..e2ce901efea70806d95d2c6fcffcb272fc26cb47 100644
--- a/modules/Campaigns/actions/DetailAjax.php
+++ b/modules/Campaigns/actions/DetailAjax.php
@@ -16,17 +16,18 @@ class Campaigns_DetailAjax_Action extends Vtiger_BasicAjax_Action {
 	}
 
 	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
 		$mode = $request->getMode();
 		if(!empty($mode)) {
 			switch ($mode) {
 				case 'getRecordsCount':
-					$permission[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
 					break;
 				default:
 					break;
 			}
 		}
-		return $permission;
+		return $permissions;
 	}
 	
 	public function checkPermission(Vtiger_Request $request) {
diff --git a/modules/Campaigns/actions/RelationAjax.php b/modules/Campaigns/actions/RelationAjax.php
index 0af2bbfb26e19f677259e544392aa1e5709e8e3a..c490c0e146b8676a2659edcc1c1bd0dc51ac3848 100644
--- a/modules/Campaigns/actions/RelationAjax.php
+++ b/modules/Campaigns/actions/RelationAjax.php
@@ -17,21 +17,22 @@ class Campaigns_RelationAjax_Action extends Vtiger_RelationAjax_Action {
 	}
 
 	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
 		$mode = $request->getMode();
 		if(!empty($mode)) {
 			switch ($mode) {
 				case 'addRelationsFromRelatedModuleViewId':
-					$permission[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
 					break;
 				case 'updateStatus':
-					$permission[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
-					$permission[] = array('module_parameter' => 'module', 'action' => 'EditView');
+					$permissions[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'EditView');
 					break;
 				default:
 					break;
 			}
 		}
-		return $permission;
+		return $permissions;
 	}
 	
 	public function checkPermission(Vtiger_Request $request) {
diff --git a/modules/Vtiger/actions/RelationAjax.php b/modules/Vtiger/actions/RelationAjax.php
index 039a172577b1ddf08962523a97848f882fd3e6aa..d78069c745f4adc8b7f7e65259cb1ea8a03287a4 100644
--- a/modules/Vtiger/actions/RelationAjax.php
+++ b/modules/Vtiger/actions/RelationAjax.php
@@ -17,7 +17,31 @@ class Vtiger_RelationAjax_Action extends Vtiger_Action_Controller {
 		$this->exposeMethod('getRelatedRecordInfo');
 	}
 
-	function checkPermission(Vtiger_Request $request) { }
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$mode = $request->getMode();
+		if(!empty($mode)) {
+			switch ($mode) {
+				case 'addRelation':
+				case 'deleteRelation':
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'src_record');
+					$permissions[] = array('module_parameter' => 'related_module', 'action' => 'DetailView');
+					break;
+				case 'getRelatedListPageCount':
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+					$permissions[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+				case 'getRelatedRecordInfo':
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'id');
+				default:
+					break;
+			}
+		}
+		return $permissions;
+	}
+	
+	function checkPermission(Vtiger_Request $request) {
+ 		return parent::checkPermission($request);
+	}
 
 	function preProcess(Vtiger_Request $request) {
 		return true;
diff --git a/modules/Vtiger/actions/Save.php b/modules/Vtiger/actions/Save.php
index 874dc78468a3cea39fe76d24fa68c23f9b0428d8..6f15add1323b1671fde392fb657bf639a23ae6e4 100644
--- a/modules/Vtiger/actions/Save.php
+++ b/modules/Vtiger/actions/Save.php
@@ -11,10 +11,21 @@
 class Vtiger_Save_Action extends Vtiger_Action_Controller {
 
 	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$moduleParameter = $request->get('source_module');
+		if (!$moduleParameter) {
+			$moduleParameter = 'module';
+		}else{
+			$moduleParameter = 'source_module';
+		}
 		$record = $request->get('record');
+		if (!$record) {
+			$recordParameter = '';
+		}else{
+			$recordParameter = 'record';
+		}
 		$actionName = ($record) ? 'EditView' : 'CreateView';
-		$permissions[] = array('module_parameter' => 'module', 'action' => $actionName, 'record_parameter' => 'record');
-		$permissions[] = array('module_parameter' => 'module', 'action' => 'Save', 'record_parameter' => 'record');
+		$permissions[] = array('module_parameter' => $moduleParameter, 'action' => $actionName, 'record_parameter' => $recordParameter);
 		return $permissions;
 	}
 	
diff --git a/modules/Vtiger/views/Detail.php b/modules/Vtiger/views/Detail.php
index 33852d1fd5dd827efba62004c29525f8739d9468..a512ea1a3ca537f59a7c5d82367354e76559816e 100644
--- a/modules/Vtiger/views/Detail.php
+++ b/modules/Vtiger/views/Detail.php
@@ -27,32 +27,33 @@ class Vtiger_Detail_View extends Vtiger_Index_View {
 	}
 
 	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
 		$mode = $request->getMode();
 		if(!empty($mode)) {
 			switch ($mode) {
 				case 'showModuleDetailView':
 				case 'showModuleSummaryView':
 				case 'showModuleBasicView':
-					$permission[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
 					break;
 				case 'showRecentComments':
 				case 'showChildComments':
-					$permission[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
 					$request->set('custom_module', 'ModComments');
 					break;
 				case 'showRelatedList':
 				case 'showRelatedRecords':
-					$permission[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
 					break;
 				case 'getActivities':
-					$permission[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+					$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
 					$request->set('custom_module', 'Calendar');
 					break;
 				default:
 					break;
 			}
 		}
-		return $permission;
+		return $permissions;
 	}
 	
 	function checkPermission(Vtiger_Request $request) {
diff --git a/modules/Vtiger/views/Edit.php b/modules/Vtiger/views/Edit.php
index 00762d4e03bd2bcaaa7f122fc55585c8c8bb3246..634c3951507296eb785c0ad22bb53edfc0ba3aa4 100644
--- a/modules/Vtiger/views/Edit.php
+++ b/modules/Vtiger/views/Edit.php
@@ -15,6 +15,7 @@ Class Vtiger_Edit_View extends Vtiger_Index_View {
 	}
 
 	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
 		$record = $request->get('record');
 		$actionName = 'CreateView';
 		if ($record && !$request->get('isDuplicate')) {
diff --git a/modules/Vtiger/views/RelatedList.php b/modules/Vtiger/views/RelatedList.php
index fa2e03e67a83ae35d60f922d77809dbad65aa414..6fbc3fdcfa82b8dc93df800926f3ba966d6f62ef 100644
--- a/modules/Vtiger/views/RelatedList.php
+++ b/modules/Vtiger/views/RelatedList.php
@@ -11,9 +11,11 @@
 class Vtiger_RelatedList_View extends Vtiger_Index_View {
 	
 	public function requiresPermission(Vtiger_Request $request){
-		$permission[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		$permissions[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
 		
-		return $permission;
+		return $permissions;
 	}
 	
 	public function checkPermission(Vtiger_Request $request) {