diff --git a/modules/Accounts/views/AccountHierarchy.php b/modules/Accounts/views/AccountHierarchy.php
index ea3bc8836d982e9a77c26492ecbb1eb824e8c58e..6e31b143f6c233a2e3153e766588dd785918dfee 100644
--- a/modules/Accounts/views/AccountHierarchy.php
+++ b/modules/Accounts/views/AccountHierarchy.php
@@ -10,14 +10,13 @@
 
 class Accounts_AccountHierarchy_View extends Vtiger_View_Controller {
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		return $permissions;
+	}
+	
 	public function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
-
-		$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
-		if(!$currentUserPriviligesModel->hasModulePermission($moduleModel->getId())) {
-			throw new AppException(vtranslate($moduleName, $moduleName).' '.vtranslate('LBL_NOT_ACCESSIBLE'));
-		}
+		parent::checkPermission($request);
 	}
 	
 	function preProcess(Vtiger_Request $request, $display = true) {
diff --git a/modules/Vtiger/actions/Save.php b/modules/Vtiger/actions/Save.php
index b05191ac42ac28b785528207dc0f2fcf86ee33aa..60ea03eaadc0da368636c77b88bddcc59d3f0d12 100644
--- a/modules/Vtiger/actions/Save.php
+++ b/modules/Vtiger/actions/Save.php
@@ -10,25 +10,25 @@
 
 class Vtiger_Save_Action extends Vtiger_Action_Controller {
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$record = $request->get('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');
+		return $permissions;
+	}
+	
 	public function checkPermission(Vtiger_Request $request) {
 		$moduleName = $request->getModule();
 		$record = $request->get('record');
 
-		$actionName = ($record) ? 'EditView' : 'CreateView';
-		if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-
-		if(!Users_Privileges_Model::isPermitted($moduleName, 'Save', $record)) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-
 		if ($record) {
 			$recordEntityName = getSalesEntityType($record);
 			if ($recordEntityName !== $moduleName) {
 				throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
 			}
 		}
+		parent::checkPermission($request);
 	}
 	
 	public function validateRequest(Vtiger_Request $request) {
diff --git a/modules/Vtiger/views/Detail.php b/modules/Vtiger/views/Detail.php
index dec2638d6683df636af18ddf93e56c6526f07e77..f7745a5fbd97af4e6c830f0eb85c5d98411369a9 100644
--- a/modules/Vtiger/views/Detail.php
+++ b/modules/Vtiger/views/Detail.php
@@ -26,22 +26,46 @@ class Vtiger_Detail_View extends Vtiger_Index_View {
 		$this->exposeMethod('showRelatedRecords');
 	}
 
+	public function requiresPermission(Vtiger_Request $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');
+					break;
+				case 'showRecentComments':
+				case 'showChildComments':
+					$permission[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+					$request->set('custom_module', 'ModComments');
+					break;
+				case 'showRelatedList':
+				case 'showRelatedRecords':
+					$permission[] = array('module_parameter' => 'relatedModule', 'action' => 'DetailView');
+					break;
+				case 'getActivities':
+					$permission[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+					$request->set('custom_module', 'Calendar');
+					break;
+				default:
+					break;
+			}
+		}
+		return $permission;
+	}
+	
 	function checkPermission(Vtiger_Request $request) {
 		$moduleName = $request->getModule();
 		$recordId = $request->get('record');
 
-		$recordPermission = Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $recordId);
-		if(!$recordPermission) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-
 		if ($recordId) {
 			$recordEntityName = getSalesEntityType($recordId);
 			if ($recordEntityName !== $moduleName) {
 				throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
 			}
 		}
-		return true;
+		parent::checkPermission($request);
 	}
 
 	function preProcess(Vtiger_Request $request, $display=true) {
diff --git a/modules/Vtiger/views/Edit.php b/modules/Vtiger/views/Edit.php
index 365ec5271c4d7529bb640bd3d7c80e5517b1cbe8..683376294e77ac7d8837947cc8665753b459a2d1 100644
--- a/modules/Vtiger/views/Edit.php
+++ b/modules/Vtiger/views/Edit.php
@@ -14,18 +14,19 @@ Class Vtiger_Edit_View extends Vtiger_Index_View {
 		parent::__construct();
 	}
 
-	public function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
+	public function requiresPermission(\Vtiger_Request $request) {
 		$record = $request->get('record');
-
 		$actionName = 'CreateView';
 		if ($record && !$request->get('isDuplicate')) {
 			$actionName = 'EditView';
 		}
-
-		if(!Users_Privileges_Model::isPermitted($moduleName, $actionName, $record)) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
+		$permissions[] = array('module_parameter' => 'module', 'action' => $actionName, 'record_parameter' => 'record');
+		return $permissions;
+	}
+	
+	public function checkPermission(Vtiger_Request $request) {
+		$moduleName = $request->getModule();
+		$record = $request->get('record');
 
 		if ($record) {
 			$recordEntityName = getSalesEntityType($record);
@@ -33,6 +34,7 @@ Class Vtiger_Edit_View extends Vtiger_Index_View {
 				throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
 			}
 		}
+		parent::checkPermission($request);
 	}
 
 	public function setModuleInfo($request, $moduleModel) {
diff --git a/modules/Vtiger/views/Index.php b/modules/Vtiger/views/Index.php
index 1de1cde1b1eb6af3a47b33e2949990bce0f252a7..f2956e7884c66738ff9ffba72255317d8a38f12d 100644
--- a/modules/Vtiger/views/Index.php
+++ b/modules/Vtiger/views/Index.php
@@ -14,11 +14,6 @@ class Vtiger_Index_View extends Vtiger_Basic_View {
 		parent::__construct();
 	}
 
-	function checkPermission(Vtiger_Request $request) {
-		//Return true as WebUI.php is already checking for module permission
-		return true;
-	}
-
 	public function preProcess (Vtiger_Request $request, $display=true) {
 		parent::preProcess($request, false);