diff --git a/accounts/doctype/journal_voucher/journal_voucher.js b/accounts/doctype/journal_voucher/journal_voucher.js
index a3aa6f1..a6aa007 100644
--- a/accounts/doctype/journal_voucher/journal_voucher.js
+++ b/accounts/doctype/journal_voucher/journal_voucher.js
@@ -59,6 +59,50 @@
 			};
 		});
 	},
+	
+	against_voucher: function(doc, cdt, cdn) {
+		var d = wn.model.get_doc(cdt, cdn);
+		if (d.against_voucher && !flt(d.debit)) {
+			this.get_outstanding({
+				'doctype': 'Purchase Invoice', 
+				'docname': d.against_voucher
+			}, d)
+		}
+	},
+	
+	against_invoice: function(doc, cdt, cdn) {
+		var d = wn.model.get_doc(cdt, cdn);
+		if (d.against_invoice && !flt(d.credit)) {
+			this.get_outstanding({
+				'doctype': 'Sales Invoice', 
+				'docname': d.against_invoice
+			}, d)
+		}
+	},
+	
+	against_jv: function(doc, cdt, cdn) {
+		var d = wn.model.get_doc(cdt, cdn);
+		if (d.against_jv && !flt(d.credit) && !flt(d.debit)) {
+			this.get_outstanding({
+				'doctype': 'Journal Voucher', 
+				'docname': d.against_jv,
+				'account': d.account
+			}, d)
+		}
+	},
+	
+	get_outstanding: function(args, child) {
+		var me = this;
+		return this.frm.call({
+			child: child,
+			method: "get_outstanding",
+			args: { args: args},
+			callback: function(r) {
+				cur_frm.cscript.update_totals(me.frm.doc);
+			}
+		});
+	}
+	
 });
 
 cur_frm.script_manager.make(erpnext.accounts.JournalVoucher);
@@ -88,24 +132,6 @@
 	if (doc.is_opening == 'Yes') unhide_field('aging_date');
 }
 
-cur_frm.cscript.against_voucher = function(doc,cdt,cdn) {
-	var d = locals[cdt][cdn];
-	if (d.against_voucher && !flt(d.debit)) {
-		args = {'doctype': 'Purchase Invoice', 'docname': d.against_voucher }
-		return get_server_fields('get_outstanding',docstring(args),'entries',doc,cdt,cdn,1,function(r,rt) { cur_frm.cscript.update_totals(doc); });
-	}
-}
-
-cur_frm.cscript.against_invoice = function(doc,cdt,cdn) {
-	var d = locals[cdt][cdn];
-	if (d.against_invoice && !flt(d.credit)) {
-		args = {'doctype': 'Sales Invoice', 'docname': d.against_invoice }
-		return get_server_fields('get_outstanding',docstring(args),'entries',doc,cdt,cdn,1,function(r,rt) { cur_frm.cscript.update_totals(doc); });
-	}
-}
-
-// Update Totals
-
 cur_frm.cscript.update_totals = function(doc) {
 	var td=0.0; var tc =0.0;
 	var el = getchildren('Journal Voucher Detail', doc.name, 'entries');
diff --git a/accounts/doctype/journal_voucher/journal_voucher.py b/accounts/doctype/journal_voucher/journal_voucher.py
index a43f8ca..a87166c 100644
--- a/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/accounts/doctype/journal_voucher/journal_voucher.py
@@ -260,15 +260,6 @@
 		if gl_map:
 			make_gl_entries(gl_map, cancel=cancel, adv_adj=adv_adj)
 
-	def get_outstanding(self, args):
-		args = eval(args)
-		o_s = webnotes.conn.sql("""select outstanding_amount from `tab%s` where name = %s""" % 
-			(args['doctype'], '%s'), args['docname'])
-		if args['doctype'] == 'Purchase Invoice':
-			return {'debit': o_s and flt(o_s[0][0]) or 0}
-		if args['doctype'] == 'Sales Invoice':
-			return {'credit': o_s and flt(o_s[0][0]) or 0}
-	
 	def get_balance(self):
 		if not getlist(self.doclist,'entries'):
 			msgprint("Please enter atleast 1 entry in 'GL Entries' table")
@@ -434,4 +425,31 @@
 		where jv_detail.parent = jv.name and jv_detail.account = %s and jv.docstatus = 1 
 		and jv.%s like %s order by jv.name desc limit %s, %s""" % 
 		("%s", searchfield, "%s", "%s", "%s"), 
-		(filters["account"], "%%%s%%" % txt, start, page_len))
\ No newline at end of file
+		(filters["account"], "%%%s%%" % txt, start, page_len))
+
+@webnotes.whitelist()		
+def get_outstanding(args):
+	args = eval(args)
+	if args.get("doctype") == "Journal Voucher" and args.get("account"):
+		against_jv_amount = webnotes.conn.sql("""
+			select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
+			from `tabJournal Voucher Detail` where parent=%s and account=%s 
+			and ifnull(against_invoice, '')='' and ifnull(against_voucher, '')=''
+			and ifnull(against_jv, '')=''""", (args['docname'], args['account']))
+			
+		against_jv_amount = flt(against_jv_amount[0][0]) if against_jv_amount else 0
+		if against_jv_amount > 0:
+			return {"credit": against_jv_amount}
+		else:
+			return {"debit": -1* against_jv_amount}
+		
+	elif args.get("doctype") == "Sales Invoice":
+		return {
+			"credit": flt(webnotes.conn.get_value("Sales Invoice", args["docname"], 
+				"outstanding_amount"))
+		}
+	elif args.get("doctype") == "Purchase Invoice":
+		return {
+			"debit": flt(webnotes.conn.get_value("Purchase Invoice", args["docname"], 
+				"outstanding_amount"))
+		}
\ No newline at end of file
diff --git a/support/doctype/support_ticket/support_ticket.js b/support/doctype/support_ticket/support_ticket.js
index 0e61273..c61d973 100644
--- a/support/doctype/support_ticket/support_ticket.js
+++ b/support/doctype/support_ticket/support_ticket.js
@@ -6,7 +6,7 @@
 
 wn.provide("erpnext.support");
 // TODO commonify this code
-erpnext.support.CustomerIssue = wn.ui.form.Controller.extend({
+erpnext.support.SupportTicket = wn.ui.form.Controller.extend({
 	customer: function() {
 		var me = this;
 		if(this.frm.doc.customer) {
@@ -18,7 +18,7 @@
 	}
 });
 
-$.extend(cur_frm.cscript, new erpnext.support.CustomerIssue({frm: cur_frm}));
+$.extend(cur_frm.cscript, new erpnext.support.SupportTicket({frm: cur_frm}));
 
 $.extend(cur_frm.cscript, {
 	onload: function(doc, dt, dn) {
