diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
index b0bc2b9..5614c16 100755
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
@@ -205,7 +205,7 @@
 	}
 	private byte[] encryptKey(byte[] data, PBEKeySpec keyspec) throws Throwable {
 		SecretKey key = getPasswordKey(keyspec);
-		if(keyspec != null && keyspec.getSalt() != null){
+		if(keyspec.getSalt() != null) {
 			PBEParameterSpec paramSpec = new PBEParameterSpec(keyspec.getSalt(), keyspec.getIterationCount());
 			Cipher c = Cipher.getInstance(key.getAlgorithm());
 			c.init(Cipher.ENCRYPT_MODE, key,paramSpec);
@@ -219,7 +219,7 @@
 	}
 	private byte[] decryptKey(byte[] encrypted, PBEKeySpec keyspec) throws Throwable {
 		SecretKey key = getPasswordKey(keyspec);
-		if(keyspec != null && keyspec.getSalt() != null){
+		if(keyspec.getSalt() != null) {
 			PBEParameterSpec paramSpec = new PBEParameterSpec(keyspec.getSalt(), keyspec.getIterationCount());
 			Cipher c = Cipher.getInstance(key.getAlgorithm());
 			c.init(Cipher.DECRYPT_MODE, key, paramSpec);
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 89cc32f..daf3c8e 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -1591,8 +1591,8 @@
 			if (CollectionUtils.isNotEmpty(policyLists)){
 				svcStore.getPoliciesInExcel(policyLists, response);
 			}else{
+				response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 				LOG.error("No policies found to download!");
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NO_CONTENT, "No policies found to download!", true);
 			}
 			
 			RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
@@ -1638,8 +1638,8 @@
 			if (CollectionUtils.isNotEmpty(policyLists)){
 				svcStore.getPoliciesInCSV(policyLists, response);
 			}else{
+				response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 				LOG.error("No policies found to download!");
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NO_CONTENT, "No policies found to download!", true);
 			}
 			
 			RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
@@ -1689,8 +1689,9 @@
 			if (CollectionUtils.isNotEmpty(policyLists)) {
 				svcStore.getPoliciesInJson(policyLists, response);
 			} else {
+				checkPoliciesExists = true;
+				response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 				LOG.error("There is no Policy to Export!!");
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NO_CONTENT, "There is no Policy to Export!!", true);
 			}
 			if(!checkPoliciesExists){
 				RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
@@ -1814,17 +1815,25 @@
 					Gson gson = new Gson();
 					
 					String policiesString = IOUtils.toString(uploadedInputStream);
+					policiesString = policiesString.trim();
 					if (StringUtils.isNotEmpty(policiesString)){
 						gson.fromJson(policiesString, RangerExportPolicyList.class);
 						rangerExportPolicyList = new ObjectMapper().readValue(policiesString, RangerExportPolicyList.class);
+					} else {
+						LOG.error("Provided json file is empty!!");
+						throw restErrorUtil.createRESTException("Provided json file is empty!!");
 					}
 					if (!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getMetaDataInfo())){
 						metaDataInfo = new ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+					} else {
+						LOG.info("metadata info is not provided!!");
 					}
 					if (!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getPolicies())){
 						policies = rangerExportPolicyList.getPolicies();
+					} else {
+						LOG.error("Provided json file does not contain any policy!!");
+						throw restErrorUtil.createRESTException("Provided json file does not contain any policy!!");
 					}
-					
 					if (CollectionUtils.sizeIsEmpty(servicesMappingMap) && isOverride){
 						if(!CollectionUtils.sizeIsEmpty(policies)){
 							for (RangerPolicy policyInJson: policies){
@@ -1917,7 +1926,8 @@
 						}
 					}
 				} catch (IOException e) {
-					e.printStackTrace();
+					LOG.error(e.getMessage());
+					throw restErrorUtil.createRESTException(e.getMessage());
 				}
 			}else{
 				LOG.error("Provided file format is not supported!!");
@@ -1932,7 +1942,7 @@
 			}
 			trxLogListError.add(xxTrxLogError);
 			bizUtil.createTrxLog(trxLogListError);
-			throw ex;
+			throw restErrorUtil.createRESTException(ex.getMessage());
 	      }catch (WebApplicationException excp) {
 			LOG.error("Error while importing policy from file!!", excp);
 			xxTrxLogError.setAction("IMPORT ERROR");
diff --git a/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js b/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
index a963370..338fffb 100644
--- a/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
+++ b/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
@@ -45,7 +45,7 @@
 		},
 
 		initialize : function(options) {
-			_.extend(this, _.pick(options, 'collection','serviceNames'));
+			_.extend(this, _.pick(options, 'collection','serviceNames','services'));
 			
 		},
 		onSourceChange : function(e){
@@ -54,14 +54,24 @@
 		},
 		onDestinationSelect : function(e) {
 		   this.model.set('destination', _.isEmpty(e.currentTarget.value) ? undefined : e.currentTarget.value);
-			
+		   var serviceTypes = _.find( this.services.models , function(m){
+			   return m.get('name') == e.currentTarget.value
+		   });
+		   if(!_.isUndefined(serviceTypes)){
+			   this.model.set('serviceType' , serviceTypes.get('type') );
+		   }else{
+			   this.model.set('serviceType' , " " );
+		   }
 		},
 		onDeleteMapClick : function(){
 			this.collection.remove(this.model)	
 		},
  
 		onRender : function() {
+			var that = this;
 			var options = _.map(this.serviceNames, function(m, key){ return { 'id' : m.name, 'text' : m.name}; });
+			this.ui.sourceInput.val(this.model.get('source'));
+			this.ui.destinationSelect.val(this.model.get('destination'));
 			this.ui.destinationSelect.select2({
 				closeOnSelect: true,
 				placeholder: 'Select service name',
@@ -89,6 +99,7 @@
 			return {
 				'collection' 	: this.collection,
 				'serviceNames' 	: this.serviceNames,
+				'services': this.services,
 			};
 		},
 		initialize: function(options) {
@@ -237,7 +248,19 @@
 				});
 				var names = componentServices.map(function(m){ return { 'name' : m.get('name') } });
 				that.serviceNames = names;
-				that.collection.trigger('reset')
+				if(!_.isUndefined(e.removed)){
+					_.each(that.collection.models , function(m){
+						if(m.get('serviceType') == e.removed.id){
+							var mapModels = that.collection.filter(function(m){
+								return m.get('serviceType') == e.removed.id;
+							})
+							if(!_.isUndefined(mapModels)){
+								that.collection.remove(mapModels);
+							}
+						}
+					});
+				}
+				that.collection.trigger('reset');
 			}).trigger('change');
 		},
 		importPolicy : function(e){
diff --git a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
index 7a1933e..197bc84 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
@@ -472,8 +472,7 @@
 		onDownload: function(e){
 			var that = this, url = '';
 			if(!this.allowDownload){
-				XAUtil.alertBoxWithTimeSet(localization.tt('msg.noPolicytoExport'))
-				
+				return XAUtil.alertBoxWithTimeSet(localization.tt('msg.noPolicytoExport'))
 			}
 			if(!this.searchedFlag) {
 				url =  this.previousSearchUrl;
