diff --git a/hr/doctype/job_applicant/__init__.py b/hr/doctype/job_applicant/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/job_applicant/__init__.py
diff --git a/hr/doctype/job_applicant/get_job_applications.py b/hr/doctype/job_applicant/get_job_applications.py
new file mode 100644
index 0000000..c5066dc
--- /dev/null
+++ b/hr/doctype/job_applicant/get_job_applications.py
@@ -0,0 +1,55 @@
+# ERPNext - web based ERP (http://erpnext.com)
+# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
+# 
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# 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
+# 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/>.
+
+from __future__ import unicode_literals
+import webnotes
+from webnotes.utils import cstr, cint
+from webnotes.utils.email_lib.receive import POP3Mailbox
+from core.doctype.communication.communication import make
+
+class JobsMailbox(POP3Mailbox):	
+	def setup(self):
+		self.settings = webnotes.doc("Jobs Email Settings", "Jobs Email Settings")
+	
+	def check_mails(self):
+		return webnotes.conn.sql("select user from tabSessions where \
+			time_to_sec(timediff(now(), lastupdate)) < 1800")
+	
+	def get_existing_application(self, email_id):
+		name = webnotes.conn.sql("""select name from `tabJob Applicant` where
+			email_id = %s""", email_id)
+		return name and name[0][0] or None
+	
+	def process_message(self, mail):
+		name = self.get_existing_application(mail.from_email)
+		if name:
+			applicant = webnotes.model_wrapper("Job Applicant", name)
+		else:
+			applicant = webnotes.model_wrapper({
+				"doctype":"Job Applicant",
+				"applicant_name": mail.from_real_name or mail.from_email,
+				"email_id": mail.from_email
+			})
+			applicant.insert()
+		
+		mail.save_attachments_in_doc(applicant.doc)
+				
+		make(content=mail.content, sender=mail.from_email, 
+			doctype="Job Applicant", name=applicant.doc.name, set_lead=False)
+
+def get_job_applications():
+	if cint(webnotes.conn.get_value('Jobs Email Settings', None, 'extract_emails')):
+		JobsMailbox()
\ No newline at end of file
diff --git a/hr/doctype/job_applicant/job_applicant.js b/hr/doctype/job_applicant/job_applicant.js
new file mode 100644
index 0000000..2b8e064
--- /dev/null
+++ b/hr/doctype/job_applicant/job_applicant.js
@@ -0,0 +1,22 @@
+// For license information, please see license.txt
+
+cur_frm.cscript = {
+	refresh: function(doc) {
+		cur_frm.set_intro("");
+		if(doc.extract_emails) {
+			cur_frm.set_intro(wn._("Active: Will extract emails from ") + doc.email_id);
+		} else {
+			cur_frm.set_intro(wn._("Not Active"));
+		}
+		cur_frm.cscript.make_listing(doc);
+	},
+	make_listing: function(doc) {
+		var wrapper = cur_frm.fields_dict['thread_html'].wrapper;
+		cur_frm.communication_view = new wn.views.CommunicationList({
+			list: comm_list,
+			parent: wn.model.get("Communication", {"job_applicant": doc.name}),
+			doc: doc,
+			recipients: doc.email_id
+		})
+	},
+}
\ No newline at end of file
diff --git a/hr/doctype/job_applicant/job_applicant.py b/hr/doctype/job_applicant/job_applicant.py
new file mode 100644
index 0000000..928aa9f
--- /dev/null
+++ b/hr/doctype/job_applicant/job_applicant.py
@@ -0,0 +1,8 @@
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
\ No newline at end of file
diff --git a/hr/doctype/job_applicant/job_applicant.txt b/hr/doctype/job_applicant/job_applicant.txt
new file mode 100644
index 0000000..390b659
--- /dev/null
+++ b/hr/doctype/job_applicant/job_applicant.txt
@@ -0,0 +1,90 @@
+[
+ {
+  "owner": "Administrator", 
+  "docstatus": 0, 
+  "creation": "2013-01-15 16:32:13", 
+  "modified_by": "Administrator", 
+  "modified": "2013-01-15 17:08:46"
+ }, 
+ {
+  "autoname": "field:applicant_name", 
+  "description": "Applicant for a Job", 
+  "doctype": "DocType", 
+  "module": "HR", 
+  "document_type": "Transaction", 
+  "name": "__common__"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Job Applicant", 
+  "doctype": "DocField", 
+  "parenttype": "DocType", 
+  "permlevel": 0, 
+  "parentfield": "fields"
+ }, 
+ {
+  "parent": "Job Applicant", 
+  "read": 1, 
+  "cancel": 1, 
+  "name": "__common__", 
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "parenttype": "DocType", 
+  "role": "HR User", 
+  "report": 1, 
+  "permlevel": 0, 
+  "parentfield": "permissions"
+ }, 
+ {
+  "name": "Job Applicant", 
+  "doctype": "DocType"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Applicant Name", 
+  "fieldname": "applicant_name", 
+  "fieldtype": "Data", 
+  "reqd": 1
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Email Id", 
+  "fieldname": "email_id", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Status", 
+  "fieldname": "status", 
+  "fieldtype": "Select", 
+  "options": "Open\nReject\nHold"
+ }, 
+ {
+  "doctype": "DocField", 
+  "width": "50%", 
+  "fieldname": "column_break_3", 
+  "fieldtype": "Column Break"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Job Opening", 
+  "fieldname": "job_opening", 
+  "fieldtype": "Link", 
+  "options": "Job Opening"
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "section_break_5", 
+  "fieldtype": "Section Break"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Thread HTML", 
+  "fieldname": "thread_html", 
+  "fieldtype": "HTML"
+ }, 
+ {
+  "doctype": "DocPerm"
+ }
+]
\ No newline at end of file
diff --git a/hr/doctype/job_opening/__init__.py b/hr/doctype/job_opening/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/hr/doctype/job_opening/__init__.py
diff --git a/hr/doctype/job_opening/job_opening.py b/hr/doctype/job_opening/job_opening.py
new file mode 100644
index 0000000..928aa9f
--- /dev/null
+++ b/hr/doctype/job_opening/job_opening.py
@@ -0,0 +1,8 @@
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
\ No newline at end of file
diff --git a/hr/doctype/job_opening/job_opening.txt b/hr/doctype/job_opening/job_opening.txt
new file mode 100644
index 0000000..5e26f0d
--- /dev/null
+++ b/hr/doctype/job_opening/job_opening.txt
@@ -0,0 +1,67 @@
+[
+ {
+  "owner": "Administrator", 
+  "docstatus": 0, 
+  "creation": "2013-01-15 16:13:36", 
+  "modified_by": "Administrator", 
+  "modified": "2013-01-15 16:43:05"
+ }, 
+ {
+  "autoname": "field:job_title", 
+  "description": "Description of a Job Opening", 
+  "doctype": "DocType", 
+  "module": "HR", 
+  "document_type": "Transaction", 
+  "name": "__common__"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Job Opening", 
+  "doctype": "DocField", 
+  "parenttype": "DocType", 
+  "permlevel": 0, 
+  "parentfield": "fields"
+ }, 
+ {
+  "parent": "Job Opening", 
+  "read": 1, 
+  "cancel": 1, 
+  "name": "__common__", 
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "parenttype": "DocType", 
+  "role": "HR User", 
+  "report": 1, 
+  "permlevel": 0, 
+  "parentfield": "permissions"
+ }, 
+ {
+  "name": "Job Opening", 
+  "doctype": "DocType"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Job Title", 
+  "fieldname": "job_title", 
+  "fieldtype": "Data", 
+  "reqd": 1
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Status", 
+  "fieldname": "status", 
+  "fieldtype": "Select", 
+  "options": "Open\nClosed"
+ }, 
+ {
+  "description": "Job profile, qualifications required etc.", 
+  "doctype": "DocField", 
+  "label": "Description", 
+  "fieldname": "description", 
+  "fieldtype": "Text Editor"
+ }, 
+ {
+  "doctype": "DocPerm"
+ }
+]
\ No newline at end of file
diff --git a/setup/doctype/jobs_email_settings/__init__.py b/setup/doctype/jobs_email_settings/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/setup/doctype/jobs_email_settings/__init__.py
diff --git a/setup/doctype/jobs_email_settings/jobs_email_settings.js b/setup/doctype/jobs_email_settings/jobs_email_settings.js
new file mode 100644
index 0000000..0a75b89
--- /dev/null
+++ b/setup/doctype/jobs_email_settings/jobs_email_settings.js
@@ -0,0 +1,12 @@
+// For license information, please see license.txt
+
+cur_frm.cscript = {
+	refresh: function(doc) {
+		cur_frm.set_intro("");
+		if(doc.extract_emails) {
+			cur_frm.set_intro(wn._("Active: Will extract emails from ") + doc.email_id);
+		} else {
+			cur_frm.set_intro(wn._("Not Active"));
+		}
+	}
+}
\ No newline at end of file
diff --git a/setup/doctype/jobs_email_settings/jobs_email_settings.py b/setup/doctype/jobs_email_settings/jobs_email_settings.py
new file mode 100644
index 0000000..b09cefd
--- /dev/null
+++ b/setup/doctype/jobs_email_settings/jobs_email_settings.py
@@ -0,0 +1,17 @@
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import webnotes
+from webnotes import _
+from webnotes.utils import cint
+
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+		
+	def validate(self):
+		if cint(self.doc.extract_emails) and not (self.doc.email_id and self.doc.host and \
+			self.doc.username and self.doc.password):
+			
+			webnotes.msgprint(_("""Host, Email and Password required if emails are to be pulled"""),
+				raise_exception=True)
\ No newline at end of file
diff --git a/setup/doctype/jobs_email_settings/jobs_email_settings.txt b/setup/doctype/jobs_email_settings/jobs_email_settings.txt
new file mode 100644
index 0000000..788f51b
--- /dev/null
+++ b/setup/doctype/jobs_email_settings/jobs_email_settings.txt
@@ -0,0 +1,89 @@
+[
+ {
+  "owner": "Administrator", 
+  "docstatus": 0, 
+  "creation": "2013-01-15 16:50:01", 
+  "modified_by": "Administrator", 
+  "modified": "2013-01-15 16:57:08"
+ }, 
+ {
+  "issingle": 1, 
+  "description": "Email settings for jobs email id \"jobs@example.com\"", 
+  "doctype": "DocType", 
+  "module": "Setup", 
+  "name": "__common__"
+ }, 
+ {
+  "name": "__common__", 
+  "parent": "Jobs Email Settings", 
+  "doctype": "DocField", 
+  "parenttype": "DocType", 
+  "permlevel": 0, 
+  "parentfield": "fields"
+ }, 
+ {
+  "parent": "Jobs Email Settings", 
+  "read": 1, 
+  "name": "__common__", 
+  "create": 1, 
+  "doctype": "DocPerm", 
+  "write": 1, 
+  "parenttype": "DocType", 
+  "role": "System Manager", 
+  "permlevel": 0, 
+  "parentfield": "permissions"
+ }, 
+ {
+  "name": "Jobs Email Settings", 
+  "doctype": "DocType"
+ }, 
+ {
+  "description": "Settings to extract Job Applicants from a mailbox e.g. \"jobs@example.com\"", 
+  "doctype": "DocField", 
+  "label": "POP3 Mail Settings", 
+  "fieldname": "pop3_mail_settings", 
+  "fieldtype": "Section Break"
+ }, 
+ {
+  "description": "Check to activate", 
+  "doctype": "DocField", 
+  "label": "Extract Emails", 
+  "fieldname": "extract_emails", 
+  "fieldtype": "Check"
+ }, 
+ {
+  "description": "Email Id where a job applicant will email e.g. \"jobs@example.com\"", 
+  "doctype": "DocField", 
+  "label": "Email Id", 
+  "fieldname": "email_id", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "description": "POP3 server e.g. (pop.gmail.com)", 
+  "doctype": "DocField", 
+  "label": "Host", 
+  "fieldname": "host", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Use SSL", 
+  "fieldname": "use_ssl", 
+  "fieldtype": "Check"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Username", 
+  "fieldname": "username", 
+  "fieldtype": "Data"
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Password", 
+  "fieldname": "password", 
+  "fieldtype": "Password"
+ }, 
+ {
+  "doctype": "DocPerm"
+ }
+]
\ No newline at end of file
diff --git a/startup/schedule_handlers.py b/startup/schedule_handlers.py
index 668c11d..ab53b21 100644
--- a/startup/schedule_handlers.py
+++ b/startup/schedule_handlers.py
@@ -26,8 +26,11 @@
 		* recurring invoice
 	"""
 	# pull emails
-	from support.doctype.support_ticket import get_support_mails
+	from support.doctype.support_ticket.get_support_mails import get_support_mails
 	run_fn(get_support_mails)
+
+	from hr.doctype.job_applicant.get_job_applications import get_job_applications
+	run_fn(get_job_applications)
 	
 	# bulk email
 	from webnotes.utils.email_lib.bulk import flush
diff --git a/support/doctype/newsletter/newsletter.py b/support/doctype/newsletter/newsletter.py
index c4b622a..48ed21a 100644
--- a/support/doctype/newsletter/newsletter.py
+++ b/support/doctype/newsletter/newsletter.py
@@ -87,7 +87,7 @@
 
 		args = self.dt_map[doctype]
 
-		sender = self.doc.send_from or webnotes.utils.get_email_id(self.doc.owner)
+		sender = self.doc.send_from or webnotes.utils.get_formatted_email(self.doc.owner)
 		recipients = self.doc.test_email_id.split(",")
 		from webnotes.utils.email_lib.bulk import send
 		send(recipients = recipients, sender = sender, 
@@ -109,7 +109,7 @@
 			recipients = self.get_recipients(query_key)
 		else:
 			recipients = query_key
-		sender = self.doc.send_from or webnotes.utils.get_email_id(self.doc.owner)
+		sender = self.doc.send_from or webnotes.utils.get_formatted_email(self.doc.owner)
 		args = self.dt_map[doctype]
 		self.send_count[doctype] = self.send_count.setdefault(doctype, 0) + \
 			len(recipients)
diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py
index da1755f..e69de29 100644
--- a/support/doctype/support_ticket/__init__.py
+++ b/support/doctype/support_ticket/__init__.py
@@ -1,183 +0,0 @@
-# ERPNext - web based ERP (http://erpnext.com)
-# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# 
-# 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
-# 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/>.
-
-from __future__ import unicode_literals
-import webnotes
-from webnotes.utils import cstr, cint
-
-from webnotes.utils.email_lib.receive import POP3Mailbox
-
-class SupportMailbox(POP3Mailbox):
-	def __init__(self):
-		"""
-			settings_doc must contain
-			use_ssl, host, username, password
-		"""
-		from webnotes.model.doc import Document
-
-		# extract email settings
-		self.email_settings = Document('Email Settings','Email Settings')
-		if not self.email_settings.fields.get('sync_support_mails'): return
-		
-		s = Document('Support Email Settings')
-		s.use_ssl = self.email_settings.support_use_ssl
-		s.host = self.email_settings.support_host
-		s.username = self.email_settings.support_username
-		s.password = self.email_settings.support_password
-		
-		POP3Mailbox.__init__(self, s)
-	
-	def check_mails(self):
-		"""
-			returns true if there are active sessions
-		"""
-		self.auto_close_tickets()
-		return webnotes.conn.sql("select user from tabSessions where time_to_sec(timediff(now(), lastupdate)) < 1800")
-	
-	def process_message(self, mail):
-		"""
-			Updates message from support email as either new or reply
-		"""
-		from home import update_feed
-
-		content, content_type = '[Blank Email]', 'text/plain'
-		if mail.text_content:
-			content, content_type = mail.text_content, 'text/plain'
-		else:
-			content, content_type = mail.html_content, 'text/html'
-			
-		thread_list = mail.get_thread_id()
-
-		email_id = mail.mail['From']
-		if "<" in mail.mail['From']:
-			import re
-			re_result = re.findall('(?<=\<)(\S+)(?=\>)', mail.mail['From'])
-			if re_result and re_result[0]: 
-				email_id = re_result[0]
-		
-		from webnotes.utils import decode_email_header
-		
-		full_email_id = decode_email_header(mail.mail['From'])
-
-		for thread_id in thread_list:
-			exists = webnotes.conn.sql("""\
-				SELECT name
-				FROM `tabSupport Ticket`
-				WHERE name=%s AND raised_by REGEXP %s
-				""" , (thread_id, '(' + email_id + ')'))
-			if exists and exists[0] and exists[0][0]:
-				st = webnotes.get_obj('Support Ticket', thread_id)
-				
-				from core.doctype.communication.communication import make
-				
-				make(content=content, sender=full_email_id, doctype="Support Ticket",
-					name=thread_id, lead = st.doc.lead, contact=st.doc.contact)
-				
-				st.doc.status = 'Open'
-				st.doc.save()
-				
-				update_feed(st, 'on_update')
-				# extract attachments
-				self.save_attachments(st.doc, mail.attachments)
-				return
-				
-		from webnotes.model.doctype import get_property
-		opts = get_property('Support Ticket', 'options', 'naming_series')
-		# new ticket
-		from webnotes.model.doc import Document
-		d = Document('Support Ticket')
-		d.description = content
-		
-		d.subject = decode_email_header(mail.mail['Subject'])
-		
-		d.raised_by = full_email_id
-		d.content_type = content_type
-		d.status = 'Open'
-		d.naming_series = opts and opts.split("\n")[0] or 'SUP'
-		try:
-			d.save(1)
-			try:
-				# extract attachments
-				self.save_attachments(d, mail.attachments)
-			except Exception, e:
-				self.description += "\n\n[Did not pull attachment]"
-		except:
-			d.description = 'Unable to extract message'
-			d.save(1)
-		else:
-			# send auto reply
-			if cint(self.email_settings.send_autoreply):
-				if "mailer-daemon" not in d.raised_by.lower():
-					self.send_auto_reply(d)
-
-			
-	def save_attachments(self, doc, attachment_list=[]):
-		"""
-			Saves attachments from email
-
-			attachment_list is a list of dict containing:
-			'filename', 'content', 'content-type'
-		"""
-		from webnotes.utils.file_manager import save_file, add_file_list
-		for attachment in attachment_list:
-			fid = save_file(attachment['filename'], attachment['content'], 'Support')
-			status = add_file_list('Support Ticket', doc.name, fid, fid)
-			if not status:
-				doc.description = doc.description \
-					+ "\nCould not attach: " + cstr(attachment['filename'])
-				doc.save()
-		
-	def send_auto_reply(self, d):
-		"""
-			Send auto reply to emails
-		"""
-		from webnotes.utils import cstr
-
-		signature = self.email_settings.fields.get('support_signature') or ''
-
-		response = self.email_settings.fields.get('support_autoreply') or ("""
-A new Ticket has been raised for your query. If you have any additional information, please
-reply back to this mail.
-		
-We will get back to you as soon as possible
-----------------------
-Original Query:
-
-""" + d.description + "\n----------------------\n" + cstr(signature))
-
-		from webnotes.utils.email_lib import sendmail		
-		
-		sendmail(\
-			recipients = [cstr(d.raised_by)], \
-			sender = cstr(self.email_settings.fields.get('support_email')), \
-			subject = '['+cstr(d.name)+'] ' + cstr(d.subject), \
-			msg = cstr(response))
-		
-	def auto_close_tickets(self):
-		"""
-			Auto Closes Waiting for Customer Support Ticket after 15 days
-		"""
-		webnotes.conn.sql("update `tabSupport Ticket` set status = 'Closed' where status = 'Waiting for Customer' and date_sub(curdate(),interval 15 Day) > modified")
-
-
-def get_support_mails():
-	"""
-		Gets new emails from support inbox and updates / creates Support Ticket records
-	"""
-	import webnotes
-	from webnotes.utils import cint
-	if cint(webnotes.conn.get_value('Email Settings', None, 'sync_support_mails')):
-		SupportMailbox().get_messages()
\ No newline at end of file
diff --git a/support/doctype/support_ticket/get_support_mails.py b/support/doctype/support_ticket/get_support_mails.py
new file mode 100644
index 0000000..c0b85e4
--- /dev/null
+++ b/support/doctype/support_ticket/get_support_mails.py
@@ -0,0 +1,96 @@
+# ERPNext - web based ERP (http://erpnext.com)
+# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
+# 
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# 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
+# 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/>.
+
+from __future__ import unicode_literals
+import webnotes
+from webnotes.utils import cstr, cint
+from webnotes.utils.email_lib import sendmail		
+from webnotes.utils.email_lib.receive import POP3Mailbox
+from core.doctype.communication.communication import make
+
+class SupportMailbox(POP3Mailbox):	
+	def setup(self):
+		self.email_settings = webnotes.doc("Email Settings", "Email Settings")
+		self.settings = webnotes._dict({
+			"use_ssl": self.email_settings.support_use_ssl,
+			"host": self.email_settings.support_host,
+			"username": self.email_settings.support_username,
+			"password": self.email_settings.support_password
+		})
+	
+	def check_mails(self):
+		self.auto_close_tickets()
+		return webnotes.conn.sql("select user from tabSessions where \
+			time_to_sec(timediff(now(), lastupdate)) < 1800")
+	
+	def process_message(self, mail):
+		if mail.from_email == self.email_settings.fields.get('support_email'):
+			return
+		thread_id = mail.get_thread_id()
+		ticket = None
+
+		if thread_id and webnotes.conn.exists("Support Ticket", thread_id):
+			ticket = webnotes.model_wrapper("Support Ticket", thread_id)
+			ticket.doc.status = 'Open'
+			ticket.doc.save()
+				
+		else:
+			ticket = webnotes.model_wrapper([{
+				"doctype":"Support Ticket",
+				"description": mail.content,
+				"subject": mail.mail["Subject"],
+				"raised_by": mail.from_email,
+				"content_type": mail.content_type,
+				"status": "Open"
+			}])
+			ticket.insert()
+
+			if cint(self.email_settings.send_autoreply):
+				if "mailer-daemon" not in mail.from_email.lower():
+					self.send_auto_reply(ticket.doc)
+
+		mail.save_attachments_in_doc(ticket.doc)
+				
+		make(content=mail.content, sender=mail.from_email, 
+			doctype="Support Ticket", name=ticket.doc.name, 
+			lead = ticket.doc.lead, contact=ticket.doc.contact)
+
+	def send_auto_reply(self, d):
+		signature = self.email_settings.fields.get('support_signature') or ''
+		response = self.email_settings.fields.get('support_autoreply') or ("""
+A new Ticket has been raised for your query. If you have any additional information, please
+reply back to this mail.
+		
+We will get back to you as soon as possible
+----------------------
+Original Query:
+
+""" + d.description + "\n----------------------\n" + cstr(signature))
+
+		sendmail(\
+			recipients = [cstr(d.raised_by)], \
+			sender = cstr(self.email_settings.fields.get('support_email')), \
+			subject = '['+cstr(d.name)+'] ' + cstr(d.subject), \
+			msg = cstr(response))
+		
+	def auto_close_tickets(self):
+		webnotes.conn.sql("""update `tabSupport Ticket` set status = 'Closed' 
+			where status = 'Waiting for Customer' 
+			and date_sub(curdate(),interval 15 Day) > modified""")
+
+def get_support_mails():
+	if cint(webnotes.conn.get_value('Email Settings', None, 'sync_support_mails')):
+		SupportMailbox()
\ 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 159dddd..bbaf95b 100644
--- a/support/doctype/support_ticket/support_ticket.js
+++ b/support/doctype/support_ticket/support_ticket.js
@@ -49,11 +49,17 @@
 		var wrapper = cur_frm.fields_dict['thread_html'].wrapper;
 		
 		var comm_list = wn.model.get("Communication", {"support_ticket": doc.name})
-		comm_list.push({
-			"sender": doc.raised_by,
-			"creation": doc.creation,
-			"modified": doc.creation,
-			"content": doc.description});
+
+		var sortfn = function (a, b) { return (b.creation > a.creation) ? 1 : -1; }
+		comm_list = comm_list.sort(sortfn);
+		
+		if(!comm_list.length || (comm_list[0].sender != doc.raised_by)) {
+			comm_list.push({
+				"sender": doc.raised_by,
+				"creation": doc.creation,
+				"modified": doc.creation,
+				"content": doc.description});
+		}
 					
 		cur_frm.communication_view = new wn.views.CommunicationList({
 			list: comm_list,
@@ -63,16 +69,7 @@
 		})
 
 	},
-	
-	send: function(doc, dt, dn) {
-		$c_obj(make_doclist(doc.doctype, doc.name), 'send_response', '', function(r,rt) {
-			locals[dt][dn].new_response = '';
-			if(!(r.exc || r.server_messages)) {
-				cur_frm.refresh();
-			}
-		});
-	},
-	
+		
 	customer: function(doc, dt, dn) {
 		var callback = function(r,rt) {
 			var doc = locals[cur_frm.doctype][cur_frm.docname];
