diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.js b/erpnext/hr/doctype/salary_manager/salary_manager.js
index 240547c..ca70226 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.js
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.js
@@ -1,30 +1,44 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-var display_activity_log = function(msg) {
+cur_frm.cscript.display_activity_log = function(msg) {
 	if(!cur_frm.ss_html)
 		cur_frm.ss_html = $a(cur_frm.fields_dict['activity_log'].wrapper,'div');
-	cur_frm.ss_html.innerHTML =
-		'<div class="padding"><h4>'+__("Activity Log:")+'</h4>'+msg+'</div>';
+	if(msg) {
+		cur_frm.ss_html.innerHTML =
+			'<div class="padding"><h4>'+__("Activity Log:")+'</h4>'+msg+'</div>';
+	} else {
+		cur_frm.ss_html.innerHTML = "";
+	}
 }
 
 //Create salary slip
 //-----------------------
 cur_frm.cscript.create_salary_slip = function(doc, cdt, cdn) {
+	cur_frm.cscript.display_activity_log("");
 	var callback = function(r, rt){
 		if (r.message)
-			display_activity_log(r.message);
+			cur_frm.cscript.display_activity_log(r.message);
 	}
 	return $c('runserverobj', args={'method':'create_sal_slip','docs':doc},callback);
 }
 
 cur_frm.cscript.submit_salary_slip = function(doc, cdt, cdn) {
+	cur_frm.cscript.display_activity_log("");
 	var check = confirm(__("Do you really want to Submit all Salary Slip for month {0} and year {1}", [doc.month, doc.fiscal_year]));
 	if(check){
+		// clear all in locals
+		if(locals["Salary Slip"]) {
+			$.each(locals["Salary Slip"], function(name, d) {
+				frappe.model.remove_from_locals("Salary Slip", name);
+			});
+		}
+
 		var callback = function(r, rt){
 			if (r.message)
-				display_activity_log(r.message);
+				cur_frm.cscript.display_activity_log(r.message);
 		}
+
 		return $c('runserverobj', args={'method':'submit_salary_slip','docs':doc},callback);
 	}
 }
@@ -47,4 +61,4 @@
 
 frappe.ui.form.on("Salary Manager", "refresh", function(frm) {
 	frm.disable_save();
-});
\ No newline at end of file
+});
diff --git a/erpnext/hr/doctype/salary_manager/salary_manager.py b/erpnext/hr/doctype/salary_manager/salary_manager.py
index eeb6ac0..3e0b53e 100644
--- a/erpnext/hr/doctype/salary_manager/salary_manager.py
+++ b/erpnext/hr/doctype/salary_manager/salary_manager.py
@@ -101,7 +101,7 @@
 		log = "<p>No employee for the above selected criteria OR salary slip already created</p>"
 		if ss_list:
 			log = "<b>Salary Slip Created For</b>\
-			<br><br>%s" % '<br>'.join(ss_list)
+			<br><br>%s" % '<br>'.join(self.format_as_links(ss_list))
 		return log
 
 
@@ -144,7 +144,7 @@
 		else:
 			all_ss = [d[0] for d in all_ss]
 
-		submitted_ss = list(set(all_ss) - set(not_submitted_ss))
+		submitted_ss = self.format_as_links(list(set(all_ss) - set(not_submitted_ss)))
 		if submitted_ss:
 			mail_sent_msg = self.send_email and " (Mail has been sent to the employee)" or ""
 			log = """
@@ -164,6 +164,9 @@
 			"""% ('<br>'.join(not_submitted_ss))
 		return log
 
+	def format_as_links(self, ss_list):
+		return ['<a href="#Form/Salary Slip/{0}">{0}</a>'.format(s) for s in ss_list]
+
 
 	def get_total_salary(self):
 		"""
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 1135bc7..249cf74 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -498,9 +498,9 @@
 }
 
 cur_frm.cscript.validate = function(doc, cdt, cdn) {
-	cur_frm.cscript.validate_items(doc);
 	if($.inArray(cur_frm.doc.purpose, ["Purchase Return", "Sales Return"])!==-1)
 		validated = cur_frm.cscript.get_doctype_docname() ? true : false;
+	cur_frm.cscript.validate_items(doc);
 }
 
 cur_frm.cscript.validate_items = function(doc) {
