diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
index c4288a4..830092b 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
@@ -20,19 +20,8 @@
 	if (!doc.transaction_date) doc.transaction_date = dateutil.obj_to_str(new Date());
 }
 
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	hide_field('repost_account_balances');
-	hide_field('next_fiscal_year');
-	hide_field('repost');
-
-	if (doc.docstatus == 1) { 
-		unhide_field('repost_account_balances');
-		unhide_field('next_fiscal_year');
-		unhide_field('repost');
-	}
-}
 
 // ***************** Get Account Head *****************
 cur_frm.fields_dict['closing_account_head'].get_query = function(doc, cdt, cdn) {
-	return 'SELECT `tabAccount`.name FROM `tabAccount` WHERE `tabAccount`.is_pl_account = "No" AND `tabAccount`.debit_or_credit = "Credit" AND `tabAccount`.company = "'+ cstr(doc.company) +'" AND `tabAccount`.freeze_account = "No" AND `tabAccount`.group_or_ledger = "Ledger" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.name ASC LIMIT 50';
+	return 'SELECT `tabAccount`.name FROM `tabAccount` WHERE `tabAccount`.is_pl_account = "No" AND `tabAccount`.debit_or_credit = "Credit" AND `tabAccount`.company = "'+ cstr(doc.company) +'" AND ifnull(`tabAccount`.freeze_account, "No") = "No" AND `tabAccount`.group_or_ledger = "Ledger" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.name ASC LIMIT 50';
 }
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
index 1b59bc6..f4cf47d 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
@@ -8,11 +8,11 @@
 # 
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
 # GNU General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.	If not, see <http://www.gnu.org/licenses/>.
 
 # Please edit this list and import only required elements
 import webnotes
@@ -34,179 +34,165 @@
 
 
 class DocType:
-  def __init__(self,d,dl):
-    self.doc, self.doclist = d, dl
-    self.td, self.tc = 0, 0
-    self.year_start_date = ''
-    self.year_end_date = ''
+	def __init__(self,d,dl):
+		self.doc, self.doclist = d, dl
+		self.td, self.tc = 0, 0
+		self.year_start_date = ''
+		self.year_end_date = ''
 
 
-  # Validate Account Head
-  #============================================================
-  def validate_account_head(self):
-    acc_det = sql("select debit_or_credit, is_pl_account, group_or_ledger, company from `tabAccount` where name = '%s'" % (self.doc.closing_account_head))
+	def validate_account_head(self):
+		acc_det = sql("select debit_or_credit, is_pl_account, group_or_ledger, company \
+			from `tabAccount` where name = '%s'" % (self.doc.closing_account_head))
 
-    # Account should be under liability 
-    if cstr(acc_det[0][0]) != 'Credit' or cstr(acc_det[0][1]) != 'No':
-      msgprint("Account: %s must be created under 'Source of Funds'" % self.doc.closing_account_head)
-      raise Exception
-   
-    # Account must be a ledger
-    if cstr(acc_det[0][2]) != 'Ledger':
-      msgprint("Account %s must be a ledger" % self.doc.closing_account_head)
-      raise Exception 
-    
-    # Account should belong to company selected 
-    if cstr(acc_det[0][3]) != self.doc.company:
-      msgprint("Account %s does not belong to Company %s ." % (self.doc.closing_account_head, self.doc.company))
-      raise Exception 
+		# Account should be under liability 
+		if cstr(acc_det[0][0]) != 'Credit' or cstr(acc_det[0][1]) != 'No':
+			msgprint("Account: %s must be created under 'Source of Funds'" % self.doc.closing_account_head)
+			raise Exception
+	 
+		# Account must be a ledger
+		if cstr(acc_det[0][2]) != 'Ledger':
+			msgprint("Account %s must be a ledger" % self.doc.closing_account_head)
+			raise Exception 
+		
+		# Account should belong to company selected 
+		if cstr(acc_det[0][3]) != self.doc.company:
+			msgprint("Account %s does not belong to Company %s ." % (self.doc.closing_account_head, self.doc.company))
+			raise Exception 
 
-  # validate posting date
-  #=============================================================
-  def validate_posting_date(self):
-    yr = sql("select start_date, end_date from `tabPeriod` where period_name = '%s'" % (self.doc.fiscal_year))
-    self.year_start_date = yr and yr[0][0] or ''
-    self.year_end_date = yr and yr[0][1] or ''
-    
-    # Posting Date should be within closing year
-    if getdate(self.doc.posting_date) < self.year_start_date or getdate(self.doc.posting_date) > self.year_end_date:
-      msgprint("Posting Date should be within Closing Fiscal Year")
-      raise Exception
 
-    # Period Closing Entry
-    pce = sql("select name from `tabPeriod Closing Voucher` where posting_date > '%s' and fiscal_year = '%s' and docstatus = 1" % (self.doc.posting_date, self.doc.fiscal_year))
-    if pce and pce[0][0]:
-      msgprint("Another Period Closing Entry: %s has been made after posting date: %s" % (cstr(pce[0][0]), self.doc.posting_date))
-      raise Exception
-     
-  # Validate closing entry requirement
-  #==========================================================
-  def validate_pl_balances(self):
-    income_bal = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1, tabAccount t2 where t1.account = t2.name and t1.posting_date between '%s' and '%s' and t2.debit_or_credit = 'Credit' and t2.group_or_ledger = 'Ledger' and ifnull(t2.freeze_account, 'No') = 'No' and t2.is_pl_account = 'Yes' and t2.docstatus < 2 and t2.company = '%s'" % (self.year_start_date, self.doc.posting_date, self.doc.company))
-    expense_bal = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1, tabAccount t2 where t1.account = t2.name and t1.posting_date between '%s' and '%s' and t2.debit_or_credit = 'Debit' and t2.group_or_ledger = 'Ledger' and ifnull(t2.freeze_account, 'No') = 'No' and t2.is_pl_account = 'Yes' and t2.docstatus < 2 and t2.company = '%s'" % (self.year_start_date, self.doc.posting_date, self.doc.company))
-    
-    income_bal = income_bal and income_bal[0][0] or 0
-    expense_bal = expense_bal and expense_bal[0][0] or 0
-    
-    if not income_bal and not expense_bal:
-      msgprint("Both Income and Expense balances are zero. No Need to make Period Closing Entry.")
-      raise Exception
-    
-  # Get account (pl) specific balance
-  #===========================================================
-  def get_pl_balances(self, d_or_c):
-	acc_bal = sql("select  t1.account, sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) from `tabGL Entry` t1, `tabAccount` t2 where t1.account = t2.name and t2.group_or_ledger = 'Ledger' and ifnull(t2.freeze_account, 'No') = 'No' and ifnull(t2.is_pl_account, 'No') = 'Yes' and ifnull(is_cancelled, 'No') = 'No' and t2.debit_or_credit = '%s' and t2.docstatus < 2 and t2.company = '%s' and t1.posting_date between '%s' and '%s' group by t1.account " % (d_or_c, self.doc.company, self.year_start_date, self.doc.posting_date))
-	return acc_bal
+	def validate_posting_date(self):
+		yr = sql("select start_date, end_date from `tabPeriod` where period_name = '%s'" % (self.doc.fiscal_year))
+		self.year_start_date = yr and yr[0][0] or ''
+		self.year_end_date = yr and yr[0][1] or ''
+		
+		# Posting Date should be within closing year
+		if getdate(self.doc.posting_date) < self.year_start_date or getdate(self.doc.posting_date) > self.year_end_date:
+			msgprint("Posting Date should be within Closing Fiscal Year")
+			raise Exception
 
-   
-  # Makes GL Entries
-  # ==========================================================
-  def make_gl_entries(self, acc_det):
-    for a in acc_det:
-      if flt(a[1]):
-        fdict = {
-	        'account': a[0], 
-	        'cost_center': '', 
-	        'against': '', 
-	        'debit': flt(a[1]) < 0 and -1*flt(a[1]) or 0,
-	        'credit': flt(a[1]) > 0 and flt(a[1]) or 0,
-	        'remarks': self.doc.remarks, 
-	        'voucher_type': self.doc.doctype, 
-	        'voucher_no': self.doc.name, 
-	        'transaction_date': self.doc.transaction_date, 
-	        'posting_date': self.doc.posting_date, 
-	        'fiscal_year': self.doc.fiscal_year, 
-	        'against_voucher': '', 
-	        'against_voucher_type': '', 
-	        'company': self.doc.company, 
-	        'is_opening': 'No', 
-	        'aging_date': self.doc.posting_date
-        }
-      
-        self.save_entry(fdict)
-   
+		# Period Closing Entry
+		pce = sql("select name from `tabPeriod Closing Voucher` \
+			where posting_date > '%s' and fiscal_year = '%s' and docstatus = 1" \
+			% (self.doc.posting_date, self.doc.fiscal_year))
+		if pce and pce[0][0]:
+			msgprint("Another Period Closing Entry: %s has been made after posting date: %s"\
+			 % (cstr(pce[0][0]), self.doc.posting_date))
+			raise Exception
+		 
+		
+	def validate_pl_balances(self):
+		income_bal = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) \
+			from `tabGL Entry` t1, tabAccount t2 where t1.account = t2.name \
+			and t1.posting_date between '%s' and '%s' and t2.debit_or_credit = 'Credit' \
+			and t2.group_or_ledger = 'Ledger' and t2.is_pl_account = 'Yes' and t2.docstatus < 2 \
+			and t2.company = '%s'" % (self.year_start_date, self.doc.posting_date, self.doc.company))
+			
+		expense_bal = sql("select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) \
+			from `tabGL Entry` t1, tabAccount t2 where t1.account = t2.name \
+			and t1.posting_date between '%s' and '%s' and t2.debit_or_credit = 'Debit' \
+			and t2.group_or_ledger = 'Ledger' and t2.is_pl_account = 'Yes' and t2.docstatus < 2 \
+			and t2.company = '%s'" % (self.year_start_date, self.doc.posting_date, self.doc.company))
+		
+		income_bal = income_bal and income_bal[0][0] or 0
+		expense_bal = expense_bal and expense_bal[0][0] or 0
+		
+		if not income_bal and not expense_bal:
+			msgprint("Both Income and Expense balances are zero. No Need to make Period Closing Entry.")
+			raise Exception
+		
+		
+	def get_pl_balances(self, d_or_c):
+		"""Get account (pl) specific balance"""
+		acc_bal = sql("select	t1.account, sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) \
+			from `tabGL Entry` t1, `tabAccount` t2 where t1.account = t2.name and t2.group_or_ledger = 'Ledger' \
+ 			and ifnull(t2.is_pl_account, 'No') = 'Yes' and ifnull(is_cancelled, 'No') = 'No' \
+			and t2.debit_or_credit = '%s' and t2.docstatus < 2 and t2.company = '%s' \
+			and t1.posting_date between '%s' and '%s' group by t1.account " \
+			% (d_or_c, self.doc.company, self.year_start_date, self.doc.posting_date))
+		return acc_bal
+
+	 
+	def make_gl_entries(self, acc_det):
+		for a in acc_det:
+			if flt(a[1]):
+				fdict = {
+					'account': a[0], 
+					'cost_center': '', 
+					'against': '', 
+					'debit': flt(a[1]) < 0 and -1*flt(a[1]) or 0,
+					'credit': flt(a[1]) > 0 and flt(a[1]) or 0,
+					'remarks': self.doc.remarks, 
+					'voucher_type': self.doc.doctype, 
+					'voucher_no': self.doc.name, 
+					'transaction_date': self.doc.transaction_date, 
+					'posting_date': self.doc.posting_date, 
+					'fiscal_year': self.doc.fiscal_year, 
+					'against_voucher': '', 
+					'against_voucher_type': '', 
+					'company': self.doc.company, 
+					'is_opening': 'No', 
+					'aging_date': self.doc.posting_date
+				}
+			
+				self.save_entry(fdict)
+	 
+
+	def save_entry(self, fdict, is_cancel = 'No'):
+		# Create new GL entry object and map values
+		le = Document('GL Entry')
+		for k in fdict:
+			le.fields[k] = fdict[k]
+		
+		le_obj = get_obj(doc=le)
+		# validate except on_cancel
+		if is_cancel == 'No':
+			le_obj.validate()
+			
+			# update total debit / credit except on_cancel
+			self.td += flt(le.credit)
+			self.tc += flt(le.debit)
+
+		# save
+		le.save(1)
+		le_obj.on_update(adv_adj = '', cancel = '')
  
-  # Save GL Entry
-  # ==========================================================
-  def save_entry(self, fdict, is_cancel = 'No'):
-    # Create new GL entry object and map values
-    le = Document('GL Entry')
-    for k in fdict:
-      le.fields[k] = fdict[k]
-    
-    le_obj = get_obj(doc=le)
-    # validate except on_cancel
-    if is_cancel == 'No':
-      le_obj.validate()
-      
-      # update total debit / credit except on_cancel
-      self.td += flt(le.credit)
-      self.tc += flt(le.debit)
+		 	
+	def validate(self):
+		# validate account head
+		self.validate_account_head()
 
-    # save
-    le.save(1)
-    le_obj.on_update(adv_adj = '', cancel = '')
-    
+		# validate posting date
+		self.validate_posting_date()
 
-  # Reposting Balances
-  # ==========================================================
-  def repost_account_balances(self):
-    # Get Next Fiscal Year
-    fy = sql("select name, is_fiscal_year_closed from `tabFiscal Year` where name = '%s' and past_year = '%s'" % (self.doc.next_fiscal_year, self.doc.fiscal_year))
-    if not fy:
-      msgprint("There is no Fiscal Year with Name " + cstr(self.doc.next_fiscal_year) + " and Past Year " + cstr(self.doc.fiscal_year))
-      raise Exception
-   
-    if fy and fy[0][1] == 'Yes':
-      msgprint("Fiscal Year %s has been closed." % cstr(fy[1]))
-      raise Exception
-    
-    # Repost Balances
-    get_obj('Fiscal Year', fy[0][0]).repost()
- 
-     
-  # Validation
-  # ===========================================================
-  def validate(self):
-  
-    # validate account head
-    self.validate_account_head()
-
-    # validate posting date
-    self.validate_posting_date()
-
-    # check if pl balance:
-    self.validate_pl_balances()
+		# check if pl balance:
+		self.validate_pl_balances()
 
 
-  # On Submit
-  # ===========================================================
-  def on_submit(self):
-    
-    # Makes closing entries for Expense Account
-    in_acc_det = self.get_pl_balances('Credit')
-    self.make_gl_entries(in_acc_det)
+	def on_submit(self):
+		
+		# Makes closing entries for Expense Account
+		in_acc_det = self.get_pl_balances('Credit')
+		self.make_gl_entries(in_acc_det)
 
-    # Makes closing entries for Expense Account
-    ex_acc_det = self.get_pl_balances('Debit')
-    self.make_gl_entries(ex_acc_det)
+		# Makes closing entries for Expense Account
+		ex_acc_det = self.get_pl_balances('Debit')
+		self.make_gl_entries(ex_acc_det)
 
 
-    # Makes Closing entry for Closing Account Head
-    bal = self.tc - self.td
-    self.make_gl_entries([[self.doc.closing_account_head, flt(bal)]])
+		# Makes Closing entry for Closing Account Head
+		bal = self.tc - self.td
+		self.make_gl_entries([[self.doc.closing_account_head, flt(bal)]])
 
 
-  # On Cancel
-  # =============================================================
-  def on_cancel(self):
-    # get all submit entries of current closing entry voucher
-    gl_entries = sql("select account, debit, credit from `tabGL Entry` where voucher_type = 'Period Closing Voucher' and voucher_no = '%s' and ifnull(is_cancelled, 'No') = 'No'" % (self.doc.name))
+	def on_cancel(self):
+		# get all submit entries of current closing entry voucher
+		gl_entries = sql("select account, debit, credit from `tabGL Entry` where voucher_type = 'Period Closing Voucher' and voucher_no = '%s' and ifnull(is_cancelled, 'No') = 'No'" % (self.doc.name))
 
-    # Swap Debit & Credit Column and make gl entry
-    for gl in gl_entries:
-      fdict = {'account': gl[0], 'cost_center': '', 'against': '', 'debit': flt(gl[2]), 'credit' : flt(gl[1]), 'remarks': self.doc.cancel_reason, 'voucher_type': self.doc.doctype, 'voucher_no': self.doc.name, 'transaction_date': self.doc.transaction_date, 'posting_date': self.doc.posting_date, 'fiscal_year': self.doc.fiscal_year, 'against_voucher': '', 'against_voucher_type': '', 'company': self.doc.company, 'is_opening': 'No', 'aging_date': 'self.doc.posting_date'}
-      self.save_entry(fdict, is_cancel = 'Yes')
+		# Swap Debit & Credit Column and make gl entry
+		for gl in gl_entries:
+			fdict = {'account': gl[0], 'cost_center': '', 'against': '', 'debit': flt(gl[2]), 'credit' : flt(gl[1]), 'remarks': self.doc.cancel_reason, 'voucher_type': self.doc.doctype, 'voucher_no': self.doc.name, 'transaction_date': self.doc.transaction_date, 'posting_date': self.doc.posting_date, 'fiscal_year': self.doc.fiscal_year, 'against_voucher': '', 'against_voucher_type': '', 'company': self.doc.company, 'is_opening': 'No', 'aging_date': 'self.doc.posting_date'}
+			self.save_entry(fdict, is_cancel = 'Yes')
 
-    # Update is_cancelled = 'Yes' to all gl entries for current voucher
-    sql("update `tabGL Entry` set is_cancelled = 'Yes' where voucher_type = '%s' and voucher_no = '%s'" % (self.doc.doctype, self.doc.name))
+		# Update is_cancelled = 'Yes' to all gl entries for current voucher
+		sql("update `tabGL Entry` set is_cancelled = 'Yes' where voucher_type = '%s' and voucher_no = '%s'" % (self.doc.doctype, self.doc.name))
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
index c70745e..f56c1b0 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-04-13 11:56:17',
+		'creation': '2012-06-11 12:09:52',
 		'docstatus': 0,
-		'modified': '2012-05-31 11:38:17',
+		'modified': '2012-07-10 14:21:21',
 		'modified_by': u'Administrator',
 		'owner': u'jai@webnotestech.com'
 	},
@@ -273,42 +273,5 @@
 		'permlevel': 0,
 		'print_hide': 1,
 		'search_index': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'repost_account_balances',
-		'fieldtype': u'Section Break',
-		'label': u'Repost Account Balances',
-		'oldfieldtype': u'Section Break',
-		'options': u'Simple',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'allow_on_submit': 1,
-		'doctype': u'DocField',
-		'fieldname': u'next_fiscal_year',
-		'fieldtype': u'Select',
-		'label': u'Fiscal Year (For Reposting)',
-		'oldfieldname': u'next_fiscal_year',
-		'oldfieldtype': u'Select',
-		'options': u'link:Fiscal Year',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'allow_on_submit': 1,
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'repost',
-		'fieldtype': u'Button',
-		'label': u'Repost',
-		'oldfieldtype': u'Button',
-		'options': u'repost_account_balances',
-		'permlevel': 0
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/setup/doctype/email_settings/email_settings.py b/erpnext/setup/doctype/email_settings/email_settings.py
index 755b91d..118dba2 100644
--- a/erpnext/setup/doctype/email_settings/email_settings.py
+++ b/erpnext/setup/doctype/email_settings/email_settings.py
@@ -54,24 +54,13 @@
 				webnotes.msgprint(err_msg)
 				raise e
 			
+			# exceptions are handled in smtp_connect
+			sess = out_email.smtp_connect()
+			
 			try:
-				sess = out_email.smtp_connect()
-				
-				try:
-					sess.quit()
-				except:
-					pass
-			except _socket.error, e:
-				# Invalid mail server -- due to refusing connection
-				webnotes.msgprint('Invalid Outgoing Mail Server or Port. Please rectify and try again.')
-				raise e
-			except smtplib.SMTPAuthenticationError, e:
-				webnotes.msgprint('Invalid Login Id or Mail Password. Please rectify and try again.')
-				raise e
-			except smtplib.SMTPException, e:
-				webnotes.msgprint('There is something wrong with your Outgoing Mail Settings. \
-				Please contact us at support@erpnext.com')
-				raise e
+				sess.quit()
+			except:
+				pass
 		
 
 	def validate_incoming(self):
