diff --git a/modules/Inventory/views/ProductsPopup.php b/modules/Inventory/views/ProductsPopup.php
index f5a19cdada937995d22cba48d9517543514795b0..ac90ca95eebb56b2500bc655da30ccabc0a6097c 100644
--- a/modules/Inventory/views/ProductsPopup.php
+++ b/modules/Inventory/views/ProductsPopup.php
@@ -10,6 +10,15 @@
 
 class Inventory_ProductsPopup_View extends Vtiger_Popup_View {
 
+	
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		
+		$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		$request->set('custom_module', $this->getModule($request));
+		return $permissions;
+	}
+	
 	/**
 	 * Function returns module name for which Popup will be initialized
 	 * @param type $request
diff --git a/modules/Inventory/views/SendEmail.php b/modules/Inventory/views/SendEmail.php
index 2978dbf0c91736c1c44cdbff5579d5726658dd54..800afb8b7dcdf2730f6a70171eb7ceed8bcc0d2b 100644
--- a/modules/Inventory/views/SendEmail.php
+++ b/modules/Inventory/views/SendEmail.php
@@ -10,13 +10,6 @@
 
 class Inventory_SendEmail_View extends Vtiger_ComposeEmail_View {
 
-	public function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-		if(!Users_Privileges_Model::isPermitted($moduleName, 'index') || !Users_Privileges_Model::isPermitted('Emails', 'CreateView')) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-	}
-
 	/**
 	 * Function which will construct the compose email
 	 * This will handle the case of attaching the invoice pdf as attachment
diff --git a/modules/Inventory/views/SubProductsPopup.php b/modules/Inventory/views/SubProductsPopup.php
index ba030b7edb5f42a1ada869e199a565a68c12acc7..39eab43c1c15392e20a62a0ebd695cb3f6c1f2f7 100644
--- a/modules/Inventory/views/SubProductsPopup.php
+++ b/modules/Inventory/views/SubProductsPopup.php
@@ -10,6 +10,14 @@
 
 class Inventory_SubProductsPopup_View extends Vtiger_Popup_View {
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		
+		$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		$request->set('custom_module', $this->getModule($request));
+		return $permissions;
+	}
+	
 	/**
 	 * Function returns module name for which Popup will be initialized
 	 * @param type $request
diff --git a/modules/PurchaseOrder/actions/CompanyDetails.php b/modules/PurchaseOrder/actions/CompanyDetails.php
index 942b374c355133b15ffa663d8daadd8923f6508b..fdac26100b7eec861f80dd1f42c061a753281e65 100644
--- a/modules/PurchaseOrder/actions/CompanyDetails.php
+++ b/modules/PurchaseOrder/actions/CompanyDetails.php
@@ -10,22 +10,30 @@
 
 class PurchaseOrder_CompanyDetails_Action extends Vtiger_Action_Controller {
 
-	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'));
-		}
-	}
-
-     function __construct() {
+	function __construct() {
         parent::__construct();
         $this->exposeMethod('getCompanyDetails');
         $this->exposeMethod('getAddressDetails');
     }
 
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		$mode = $request->getMode();
+		if(!empty($mode)) {
+			switch ($mode) {
+				case 'getCompanyDetails':
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+					break;
+				case 'getAddressDetails':
+					$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'recordId');
+					break;
+				default:
+					break;
+			}
+		}
+		return $permissions;
+	}
+     
 	function process(Vtiger_Request $request) {
 		$mode = $request->getMode();
 		if(!empty($mode)) {
diff --git a/modules/PurchaseOrder/actions/GetTaxes.php b/modules/PurchaseOrder/actions/GetTaxes.php
index 7e1598d7018aa750767922d3823ac44159420476..19f8d026a8bfe0d71a7aa36b54c064b8abf7f6f2 100644
--- a/modules/PurchaseOrder/actions/GetTaxes.php
+++ b/modules/PurchaseOrder/actions/GetTaxes.php
@@ -10,17 +10,6 @@
 
 class PurchaseOrder_GetTaxes_Action extends Inventory_GetTaxes_Action {
 
-	function checkPermission(Vtiger_Request $request) {
-		$record = $request->get('record');
-
-		$moduleName = getSalesEntityType($record);
-		$recordPermission = Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $record);
-
-		if(!$recordPermission) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-	}
-
 	function process(Vtiger_Request $request) {
 		$decimalPlace = getCurrencyDecimalPlaces();
 		$currencyId = $request->get('currency_id');
diff --git a/modules/Vtiger/views/ComposeEmail.php b/modules/Vtiger/views/ComposeEmail.php
index 0ef99ddd944cf612918e9479f88fc2849965f8c4..f06c1375eed8cea67ad1072c4a7f737cbac5c453 100644
--- a/modules/Vtiger/views/ComposeEmail.php
+++ b/modules/Vtiger/views/ComposeEmail.php
@@ -20,17 +20,17 @@ class Vtiger_ComposeEmail_View extends Vtiger_Footer_View {
 		$this->exposeMethod('emailReply');
 		$this->exposeMethod('emailReplyAll');
 	}
-
-	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'));
-		}
+	
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		$request->set('custom_module', 'Emails');
+		return $permissions;
 	}
 
-	function preProcess(Vtiger_Request $request, $display=true) {
+	  function preProcess(Vtiger_Request $request, $display=true) {
 		if($request->getMode() == 'previewPrint'){
 			return;
 		}
diff --git a/modules/Vtiger/views/List.php b/modules/Vtiger/views/List.php
index 3e9b338a1fd24b810c26d3588f49dfd9933bef1e..5c56bd5ed3076fcb21a6f62539ad1163c508e2c4 100644
--- a/modules/Vtiger/views/List.php
+++ b/modules/Vtiger/views/List.php
@@ -27,11 +27,6 @@ class Vtiger_List_View extends Vtiger_Index_View {
 		return $permissions;
 	}
 
-
-	public function checkPermission(Vtiger_Request $request) {
-		return parent::checkPermission($request);
-	}
-
 	function preProcess(Vtiger_Request $request, $display=true) {
 		parent::preProcess($request, false);
 
diff --git a/modules/Vtiger/views/Popup.php b/modules/Vtiger/views/Popup.php
index 2185cbc1876194206fe4e8953513e2b8da77c5ed..f5b5d3e8206499c0ab3a0c63bfb4a07ef75a95f8 100644
--- a/modules/Vtiger/views/Popup.php
+++ b/modules/Vtiger/views/Popup.php
@@ -12,14 +12,11 @@ class Vtiger_Popup_View extends Vtiger_Footer_View {
 	protected $listViewEntries = false;
 	protected $listViewHeaders = false;
 
-	function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
-
-		$currentUserPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
-		if(!$currentUserPrivilegesModel->hasModulePermission($moduleModel->getId())) {
-			throw new AppException(vtranslate($moduleName, $moduleName).' '.vtranslate('LBL_NOT_ACCESSIBLE'));
-		}
+	public function requiresPermission(Vtiger_Request $request){
+		$permissions = parent::requiresPermission($request);
+		
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView');
+		return $permissions;
 	}
 
 	/**