diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index c5989bb..ff9bf68 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -282,7 +282,8 @@
 			Returns start and end date depending on the frequency of email digest
 		"""
 		from datetime import datetime, date, timedelta
-		today = datetime.now().date()
+		from webnotes.utils import now_datetime
+		today = now_datetime().date()
 		year, month, day = today.year, today.month, today.day
 		
 		if self.doc.frequency == 'Daily':
@@ -409,6 +410,7 @@
 
 		from webnotes.utils.email_lib import sendmail
 		try:
+			#webnotes.msgprint('in send')
 			sendmail(
 				recipients=recipient_list,
 				sender='notifications+email_digest@erpnext.com',
@@ -419,64 +421,22 @@
 			)
 		except Exception, e:
 			webnotes.msgprint('There was a problem in sending your email. Please contact support@erpnext.com')
-			#webnotes.errprint(webnotes.getTraceback())
+			webnotes.errprint(webnotes.getTraceback())
 
 
 	def get_next_sending(self):
-		"""
-
-		"""
-		# Get TimeZone
-		# Get System TimeZone
-		import time
-		from pytz import timezone
 		import datetime
-		import webnotes.defs
-		cp = webnotes.model.doc.Document('Control Panel','Control Panel')
-		app_tz = timezone(cp.time_zone)
-		server_tz = timezone(getattr(webnotes.defs, 'system_timezone'))
 		
 		start_date, end_date = self.get_start_end_dates()
 		
-		new_date = end_date + datetime.timedelta(days=1)
-		new_time = datetime.time(hour=6)
-
-		naive_dt = datetime.datetime.combine(new_date, new_time)
-		app_dt = app_tz.localize(naive_dt)
-		server_dt = server_tz.normalize(app_dt.astimezone(server_tz))
-
-		res = {
-			'app_dt': app_dt.replace(tzinfo=None),
-			'app_tz': app_tz,
-			'server_dt': server_dt.replace(tzinfo=None),
-			'server_tz': server_tz
-		}
-
+		send_date = end_date + datetime.timedelta(days=1)
+		
 		from webnotes.utils import formatdate
-		str_date = formatdate(str(res['app_dt'].date()))
-		str_time = res['app_dt'].time().strftime('%I:%M')
+		str_date = formatdate(str(send_date))
 
-		self.doc.next_send = str_date + " at about " + str_time
+		self.doc.next_send = str_date + " at midnight"
 
-		return res
-
-
-	def get_next_execution(self):
-		"""
-
-		"""
-		from datetime import datetime, timedelta
-		dt_args = self.get_next_sending()
-		server_dt = dt_args['server_dt']
-		now_dt = datetime.now(dt_args['server_tz'])
-		if now_dt.time() <= server_dt.time():
-			next_date = now_dt.date()
-		else:
-			next_date = now_dt.date() + timedelta(days=1)
-
-		next_time = server_dt.time()
-
-		return datetime.combine(next_date, next_time)
+		return send_date
 
 
 	def onload(self):
@@ -743,21 +703,16 @@
 	""", as_list=1)
 
 	from webnotes.model.code import get_obj
-	from datetime import datetime, timedelta
-	now = datetime.now()
-	now_date = now.date()
-	now_time = (now + timedelta(hours=2)).time()
+	from webnotes.utils import now_datetime
 
+	now_date = now_datetime().date()
+	
 	for ed in edigest_list:
 		if ed[0]:
 			ed_obj = get_obj('Email Digest', ed[0])
 			ed_obj.sending = True
-			dt_dict = ed_obj.get_next_sending()
-			send_date = dt_dict['server_dt'].date()
-			send_time = dt_dict['server_dt'].time()
+			send_date = ed_obj.get_next_sending()
+			#webnotes.msgprint([ed[0], now_date, send_date])
 
 			if (now_date == send_date):
-				#webnotes.msgprint('sending ' + ed_obj.doc.name)
 				ed_obj.send()
-			#else:
-			#	webnotes.msgprint('not sending ' + ed_obj.doc.name)
