diff --git a/include/ListView/ListViewController.php b/include/ListView/ListViewController.php
index c496d13eb429bcd4e59bcf4118671fbf3ee06f16..a887223328296b4e965e3f438e3c5ae072261b48 100644
--- a/include/ListView/ListViewController.php
+++ b/include/ListView/ListViewController.php
@@ -283,7 +283,7 @@ class ListViewController {
 					$fileIdRes = $db->pquery($fileIdQuery,array($recordId));
 					$fileId = $db->query_result($fileIdRes,0,'attachmentsid');
 					if($fileName != '' && $status == 1) {
-						if($downloadType == 'I' ) {
+						if($downloadType == 'I' && $fileId) {
 							$value = '<a href="index.php?module=Documents&action=DownloadFile&record='.$recordId.'&fileid='.$fileId.'"'.
 									' title="'.	getTranslatedString('LBL_DOWNLOAD_FILE',$module).
 									'" >'.textlength_check($value).
@@ -291,7 +291,7 @@ class ListViewController {
 						} elseif($downloadType == 'E') {
 							$value = '<a onclick="event.stopPropagation()"'.
 									' href="'.$fileName.'" target="_blank"'.
-									' title="'.	getTranslatedString('LBL_DOWNLOAD_FILE',$module).
+									' title="'.	getTranslatedString('LBL_DOWNLOAD_FILE',$module).	
 									'" >'.textlength_check($value).
 									'</a>';
 						} else {
diff --git a/languages/en_us/Vtiger.php b/languages/en_us/Vtiger.php
index d1602d3a395ea59478ee190398bcba5834daf2bd..147fcf73f122f87e6c8ee308fe1176819e23061d 100644
--- a/languages/en_us/Vtiger.php
+++ b/languages/en_us/Vtiger.php
@@ -1387,6 +1387,7 @@ $languageStrings = array(
 	'LBL_RECENT_UPDATES' => 'Recent Updates',
 	'LBL_VIEW_UPDATES_IN_DETAIL' => 'Read More ...',
 	'LBL_DEFAULT_DASHBOARD_TOOLTIP'=>'Make this dashboard as default by reordering it as the first tab!',
+	'LBL_RELATED_MODULES_PERMISSION_DENIED' => 'Related modules permission is denied',
 	'LBL_RECORD_PERMISSION_DENIED' => 'Record permissions denied',
 );
 
diff --git a/modules/Vtiger/actions/DeleteImage.php b/modules/Vtiger/actions/DeleteImage.php
index 44e2bd7729050eda32def96848301cc3e6f465ca..3553de8f4e339091dca928291152c555f214ee0c 100644
--- a/modules/Vtiger/actions/DeleteImage.php
+++ b/modules/Vtiger/actions/DeleteImage.php
@@ -10,13 +10,15 @@
 
 class Vtiger_DeleteImage_Action extends Vtiger_Action_Controller {
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'Delete', 'record_parameter' => 'record');
+		return $permissions;
+	}
+	
 	public function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-		$record = $request->get('id');
-
-		if (!(Users_Privileges_Model::isPermitted($moduleName, 'EditView', $record) && Users_Privileges_Model::isPermitted($moduleName, 'Delete', $record))) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
+		parent::checkPermission($request);
 	}
 
 	public function process(Vtiger_Request $request) {
@@ -26,7 +28,7 @@ class Vtiger_DeleteImage_Action extends Vtiger_Action_Controller {
 
 		$response = new Vtiger_Response();
 		if ($recordId) {
-			$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleModel);
+			$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName);
 			$status = $recordModel->deleteImage($imageId);
 			if ($status) {
 				$response->setResult(array(vtranslate('LBL_IMAGE_DELETED_SUCCESSFULLY', $moduleName)));
diff --git a/modules/Vtiger/actions/ExportData.php b/modules/Vtiger/actions/ExportData.php
index 3d116b4b9f2ca3e693da11710e292151f6f598c5..721ef835a0dfc0faccb70136206b72317b7cfdf8 100644
--- a/modules/Vtiger/actions/ExportData.php
+++ b/modules/Vtiger/actions/ExportData.php
@@ -11,17 +11,15 @@
 class Vtiger_ExportData_Action extends Vtiger_Mass_Action {
 
 	var $moduleCall = false;
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'Export');
+		$permissions[] = array('module_parameter' => 'source_module', 'action' => 'Export');
+		return $permissions;
+	}
+	
 	function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-		$sourceModule = $request->get('source_module');
-		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
-		$sourceModuleModel = Vtiger_Module_Model::getInstance($sourceModule);
-
-		$currentUserPriviligesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
-		if(!$currentUserPriviligesModel->hasModuleActionPermission($moduleModel->getId(), 'Export') || 
-		  !$currentUserPriviligesModel->hasModuleActionPermission($sourceModuleModel->getId(), 'Export')) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
+		parent::checkPermission($request);
 	}
 
 	/**
diff --git a/modules/Vtiger/actions/RelatedRecordsAjax.php b/modules/Vtiger/actions/RelatedRecordsAjax.php
index ae927a9eaa28f99a90fb0510788991524ae1447b..a795095871ed58123bac6a088b64ee086d2f9f47 100644
--- a/modules/Vtiger/actions/RelatedRecordsAjax.php
+++ b/modules/Vtiger/actions/RelatedRecordsAjax.php
@@ -9,13 +9,33 @@
  *************************************************************************************/
 
 class Vtiger_RelatedRecordsAjax_Action extends Vtiger_Action_Controller {
-
+	var $relationModules = array();
 	function __construct() {
 		parent::__construct();
 		$this->exposeMethod('getRelatedRecordsCount');
 	}
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'recordId');
+		return $permissions;
+	}
+	
 	function checkPermission(Vtiger_Request $request) {
+		parent::checkPermission($request);
+		$parentModule = $request->get("module");
+		$parentModuleModel = Vtiger_Module_Model::getInstance($parentModule);
+		$relationModels = $parentModuleModel->getRelations();
+		foreach ($relationModels as $relation) {
+			$relatedModuleName = $relation->get('relatedModuleName');
+			$permissionStatus  = Users_Privileges_Model::isPermitted($relatedModuleName,  'DetailView');
+			if($permissionStatus){
+				$this->relationModules[] = $relation;
+			}
+		}
+		if(empty($this->relationModules)){
+			throw new AppException(vtranslate('LBL_RELATED_MODULES_PERMISSION_DENIED'));
+		}
 	}
 
 	public function process(Vtiger_Request $request) {
@@ -35,7 +55,7 @@ class Vtiger_RelatedRecordsAjax_Action extends Vtiger_Action_Controller {
 		$parentModule = $request->get("module");
 		$parentModuleModel = Vtiger_Module_Model::getInstance($parentModule);
 		$parentRecordModel = Vtiger_Record_Model::getInstanceById($parentRecordId, $parentModuleModel);
-		$relationModels = $parentModuleModel->getRelations();
+		$relationModels = $this->relationModules;
 		$relatedRecordsCount = array();
 		foreach ($relationModels as $relation) {
 			$relationId = $relation->getId();
diff --git a/modules/Vtiger/actions/TagCloud.php b/modules/Vtiger/actions/TagCloud.php
index 0c4bd299525bee5b381ae1c883cb49f61fc42a7a..860998bb62d0f27cad16909a13b19c6bb4578736 100644
--- a/modules/Vtiger/actions/TagCloud.php
+++ b/modules/Vtiger/actions/TagCloud.php
@@ -19,16 +19,14 @@ class Vtiger_TagCloud_Action extends Vtiger_Mass_Action {
 		$this->exposeMethod('remove');
 	}
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'module', 'action' => 'DetailView', 'record_parameter' => 'record');
+		return $permissions;
+	}
+	
 	function checkPermission(Vtiger_Request $request) {
-		$moduleName = $request->getModule();
-		$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
-
-		$userPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
-		$permission = $userPrivilegesModel->hasModulePermission($moduleModel->getId());
-		if(!$permission) {
-			throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));
-		}
-		return true;
+		parent::checkPermission($request);
 	}
 
 	public function process(Vtiger_Request $request) {
diff --git a/modules/Vtiger/views/ExportExtensionLog.php b/modules/Vtiger/views/ExportExtensionLog.php
index 50cf1abe961db3742b23d1d2ae0bd0555bd4ba65..0b71c03c29a63037e70e39e50df6ce0e008332f1 100644
--- a/modules/Vtiger/views/ExportExtensionLog.php
+++ b/modules/Vtiger/views/ExportExtensionLog.php
@@ -11,6 +11,16 @@ require_once 'modules/WSAPP/WSAPPLogs.php';
 
 class Vtiger_ExportExtensionLog_View extends Vtiger_View_Controller {
 
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		$request->set('custom_module', 'WSAPP');
+		return $permissions;
+	}
+	
+	public function checkPermission(Vtiger_Request $request) {
+		parent::checkPermission($request);
+	}
 	function preProcess(Vtiger_Request $request) {
 		return false;
 	}
@@ -19,15 +29,6 @@ class Vtiger_ExportExtensionLog_View extends Vtiger_View_Controller {
 		return false;
 	}
 
-	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('LBL_PERMISSION_DENIED'));
-		}
-	}
 
 	/**
 	 * Function to convert log details to user format
diff --git a/modules/Vtiger/views/ExtensionViews.php b/modules/Vtiger/views/ExtensionViews.php
index 3cda8aabef75c3c3adccaf5fa90a806fa6a046e1..26b2528e93a249ef156cebcc72edc777e857b552 100644
--- a/modules/Vtiger/views/ExtensionViews.php
+++ b/modules/Vtiger/views/ExtensionViews.php
@@ -16,6 +16,17 @@ class Vtiger_ExtensionViews_View extends Vtiger_Index_View {
 		$this->exposeMethod('showLogs');
 		$this->exposeMethod('showLogDetail');
 	}
+	
+	function checkPermission(Vtiger_Request $request) {
+		parent::checkPermission($request);
+	}
+	
+	public function requiresPermission(\Vtiger_Request $request) {
+		$permissions = parent::requiresPermission($request);
+		$permissions[] = array('module_parameter' => 'custom_module', 'action' => 'DetailView');
+		$request->set('custom_module', 'WSAPP');
+		return $permissions;
+	}
 
 	function process(Vtiger_Request $request) {
 		$mode = $request->get('mode');