refactored communication and added to Lead / Contact
diff --git a/patches/patch_list.py b/patches/patch_list.py
index f54de50..124fdea 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -683,4 +683,8 @@
 		'patch_module': 'patches.november_2012',
 		'patch_file': 'support_ticket_response_to_communication',
 	},
+	{
+		'patch_module': 'patches.november_2012',
+		'patch_file': 'communication_sender_and_recipient',
+	},
 ]
\ No newline at end of file
diff --git a/public/js/communication.js b/public/js/communication.js
index 5e7a010..ee6cce2 100644
--- a/public/js/communication.js
+++ b/public/js/communication.js
@@ -14,6 +14,7 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+// opts - parent, list, doc, email
 erpnext.CommunicationView = Class.extend({
 	init: function(opts) {
 		this.comm_list = [];
@@ -27,12 +28,20 @@
 	make: function() {
 		var me = this;
 		this.make_body();
-		$.each(this.list, function(i, d) {
-			me.prepare(d);
-			me.make_line(d);
-		});
-		// show first
-		this.comm_list[0].find('.comm-content').toggle(true);
+
+		if(this.list && this.list.length) {
+			$.each(this.list, function(i, d) {
+				me.prepare(d);
+				me.make_line(d);
+			});			
+			// show first
+			this.comm_list[0].find('.comm-content').toggle(true);			
+		} else {
+			this.body.remove()
+			$("<div class='alert'>No Communication with this " 
+				+ this.doc.doctype +" yet.</div>").appendTo(this.wrapper);
+		}
+		
 	},
 	make_body: function() {
 		$(this.parent)
@@ -40,26 +49,73 @@
 			.css({"margin":"10px 0px"});
 			
 		this.wrapper = $("<div><h4>Communication History</h4>\
-			<button class='btn btn-small'>Add Reply</button></p></div>")
+			<div style='margin-bottom: 8px;'>\
+				<button class='btn btn-small' \
+					onclick='cur_frm.communication_view.add_reply()'>\
+				<i class='icon-plus'></i> Add Reply</button></div>\
+			</div>")
 			.appendTo(this.parent);
 			
 		this.body = $("<table class='table table-bordered table-hover table-striped'>")
 			.appendTo(this.wrapper);
 	},
+	add_reply: function() {
+		var me = this;
+		var d = new wn.ui.Dialog({
+			width: 640,
+			title: "Add Reply: " + (this.doc.subject || ""),
+			fields: [
+				{label:"Subject", fieldtype:"Data", reqd: 1},
+				{label:"Message", fieldtype:"Text Editor", reqd: 1, fieldname:"content"},
+				{label:"Send Email", fieldtype:"Check"},
+				{label:"Send", fieldtype:"Button"},
+			]
+		});
+		
+		$(d.fields_dict.send_email.input).attr("checked", "checked")
+		$(d.fields_dict.send.input).click(function() {
+			var args = d.get_values();
+			if(!args) return;
+			wn.call({
+				method:"support.doctype.communication.communication.make",
+				args: $.extend(args, {
+					doctype: me.doc.doctype,
+					name: me.doc.name,
+					lead: me.doc.lead,
+					contact: me.doc.contact,
+					recipients: me.email
+				}),
+				callback: function(r) {
+					d.hide();
+					cur_frm.reload_doc();
+				}
+			});
+		});
+		
+		d.fields_dict.content.input.set_input("<p></p><p></p>=== In response to ===<p></p>" 
+			+ me.list[0].content)
+		$(d.fields_dict.subject.input).val(this.doc.subject || "").change();
+		
+		d.show();
+	},
+
 	prepare: function(doc) {
 		//doc.when = comment_when(this.doc.modified);
 		doc.when = doc.modified;
 		if(doc.content.indexOf("<br>")== -1 && doc.content.indexOf("<p>")== -1) {
 			doc.content = doc.content.replace(/\n/g, "<br>");
 		}
-		doc.email_address = doc.email_address.replace(/</, "&lt;").replace(/>/, "&gt;");
+		if(!doc.sender) doc.sender = "[unknown sender]";
+		doc.sender = doc.sender.replace(/</, "&lt;").replace(/>/, "&gt;");
 		doc.content = doc.content.split("=== In response to ===")[0];
 		doc.content = doc.content.split("-----Original Message-----")[0];
 	},
 	make_line: function(doc) {
 		var me = this;
 		var comm = $(repl('<tr><td title="Click to Expand / Collapse">\
-				<p><b>%(email_address)s on %(when)s</b></p>\
+				<p><b>%(sender)s on %(when)s</b> \
+					<a href="#Form/Communication/%(name)s" style="font-size: 90%">\
+						Show Details</a></p>\
 				<div class="comm-content" style="border-top: 1px solid #ddd; padding: 10px; \
 					display: none;"></div>\
 			</td></tr>', doc))
diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js
index 5bb4ce7..39522f8 100644
--- a/selling/doctype/lead/lead.js
+++ b/selling/doctype/lead/lead.js
@@ -17,9 +17,7 @@
 // Module CRM
 
 wn.require("public/app/js/communication.js");
-
 wn.require('app/utilities/doctype/sms_control/sms_control.js');
-wn.require('app/support/doctype/communication/communication.js');
 
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
 	if(user =='Guest'){
@@ -70,9 +68,11 @@
 	cur_frm.cscript.refresh_custom_buttons(doc);
 	erpnext.hide_naming_series();
 
-	new erpnext.CommunicationView({
+	cur_frm.communication_view = new erpnext.CommunicationView({
 		list: wn.model.get("Communication", {"lead": doc.name}),
-		parent: cur_frm.fields_dict.communication_html.wrapper
+		parent: cur_frm.fields_dict.communication_html.wrapper,
+		doc: doc,
+		email: doc.email_id
 	})
 		
 }
diff --git a/selling/doctype/lead/lead.py b/selling/doctype/lead/lead.py
index 236d337..be11da4 100644
--- a/selling/doctype/lead/lead.py
+++ b/selling/doctype/lead/lead.py
@@ -24,8 +24,6 @@
 
 sql = webnotes.conn.sql
 	
-# -----------------------------------------------------------------------------------------
-
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
diff --git a/selling/doctype/lead/lead.txt b/selling/doctype/lead/lead.txt
index 05292f8..04a3997 100644
--- a/selling/doctype/lead/lead.txt
+++ b/selling/doctype/lead/lead.txt
@@ -4,7 +4,7 @@
   "docstatus": 0, 
   "creation": "2012-11-02 17:16:46", 
   "modified_by": "Administrator", 
-  "modified": "2012-11-26 18:13:22"
+  "modified": "2012-11-27 18:27:47"
  }, 
  {
   "autoname": "naming_series:", 
@@ -37,23 +37,6 @@
   "doctype": "DocType"
  }, 
  {
-  "oldfieldtype": "Section Break", 
-  "colour": "White:FFF", 
-  "doctype": "DocField", 
-  "label": "Basic Info", 
-  "fieldname": "basic_info", 
-  "fieldtype": "Section Break", 
-  "permlevel": 0
- }, 
- {
-  "oldfieldtype": "Column Break", 
-  "doctype": "DocField", 
-  "width": "50%", 
-  "fieldname": "column_break0", 
-  "fieldtype": "Column Break", 
-  "permlevel": 0
- }, 
- {
   "description": "To manage multiple series please go to Setup > Manage Series", 
   "no_copy": 1, 
   "oldfieldtype": "Select", 
@@ -93,19 +76,27 @@
   "permlevel": 0
  }, 
  {
-  "description": "Name of organization from where lead has come", 
-  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "fieldname": "cb6", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "permlevel": 0, 
+  "no_copy": 1, 
+  "oldfieldtype": "Select", 
   "colour": "White:FFF", 
   "doctype": "DocField", 
-  "label": "Company Name", 
-  "oldfieldname": "company_name", 
+  "label": "Status", 
+  "oldfieldname": "status", 
+  "default": "Open", 
   "trigger": "Client", 
-  "fieldname": "company_name", 
-  "fieldtype": "Data", 
-  "search_index": 0, 
-  "reqd": 0, 
-  "in_filter": 1, 
-  "permlevel": 0
+  "fieldname": "status", 
+  "fieldtype": "Select", 
+  "search_index": 1, 
+  "reqd": 1, 
+  "options": "\nOpen\nAttempted to Contact\nContact in Future\nContacted\nInterested\nNot interested\nLead Lost\nConverted", 
+  "in_filter": 1
  }, 
  {
   "description": "Source of the lead. If via a campaign, select \"Campaign\"", 
@@ -125,6 +116,45 @@
   "options": "\nAdvertisement\nBlog\nCampaign\nCall\nCustomer\nExhibition\nSupplier\nWebsite\nEmail"
  }, 
  {
+  "doctype": "DocField", 
+  "fieldname": "communication_history", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "allow_on_submit": 0, 
+  "oldfieldtype": "Table", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Communication HTML", 
+  "oldfieldname": "follow_up", 
+  "fieldname": "communication_html", 
+  "fieldtype": "HTML", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Lead Details", 
+  "fieldname": "sb8", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "description": "Name of organization from where lead has come", 
+  "oldfieldtype": "Data", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Company Name", 
+  "oldfieldname": "company_name", 
+  "trigger": "Client", 
+  "fieldname": "company_name", 
+  "fieldtype": "Data", 
+  "search_index": 0, 
+  "reqd": 0, 
+  "in_filter": 1, 
+  "permlevel": 0
+ }, 
+ {
   "description": "Source of th", 
   "oldfieldtype": "Link", 
   "colour": "White:FFF", 
@@ -160,23 +190,6 @@
   "permlevel": 0
  }, 
  {
-  "permlevel": 0, 
-  "no_copy": 1, 
-  "oldfieldtype": "Select", 
-  "colour": "White:FFF", 
-  "doctype": "DocField", 
-  "label": "Status", 
-  "oldfieldname": "status", 
-  "default": "Open", 
-  "trigger": "Client", 
-  "fieldname": "status", 
-  "fieldtype": "Select", 
-  "search_index": 1, 
-  "reqd": 1, 
-  "options": "\nOpen\nAttempted to Contact\nContact in Future\nContacted\nInterested\nNot interested\nLead Lost\nConverted", 
-  "in_filter": 1
- }, 
- {
   "oldfieldtype": "Select", 
   "colour": "White:FFF", 
   "doctype": "DocField", 
@@ -199,23 +212,6 @@
   "permlevel": 0
  }, 
  {
-  "doctype": "DocField", 
-  "fieldname": "communication_history", 
-  "fieldtype": "Section Break", 
-  "permlevel": 0
- }, 
- {
-  "oldfieldtype": "Table", 
-  "colour": "White:FFF", 
-  "allow_on_submit": 0, 
-  "doctype": "DocField", 
-  "label": "Communication HTML", 
-  "oldfieldname": "follow_up", 
-  "fieldname": "communication_html", 
-  "fieldtype": "HTML", 
-  "permlevel": 0
- }, 
- {
   "oldfieldtype": "Column Break", 
   "doctype": "DocField", 
   "label": "Contact Info", 
diff --git a/support/doctype/communication/communication.py b/support/doctype/communication/communication.py
index 93174e2..f365fe3 100644
--- a/support/doctype/communication/communication.py
+++ b/support/doctype/communication/communication.py
@@ -38,6 +38,72 @@
 		}
 	return {}
 
+@webnotes.whitelist()
+def make(doctype=None, name=None, content=None, subject=None, 
+	sender=None, recipients=None, contact=None, lead=None, 
+	communication_medium="Email", send_email=False):
+	# add to Communication
+
+	sent_via = None
+	
+	d = webnotes.doc('Communication')
+	d.subject = subject
+	d.content = content
+	d.sender = sender or webnotes.conn.get_value("Profile", webnotes.session.user, "email")
+	d.recipients = recipients
+	d.lead = lead
+	d.contact = contact
+	if doctype:
+		sent_via = webnotes.get_obj(doctype, name)
+		d.fields[doctype.replace(" ", "_").lower()] = name
+		
+	set_lead_and_contact(d)
+	d.communication_medium = communication_medium
+	if send_email:
+		send_comm_email(d, sent_via)
+	d.save(1)
+
+def send_comm_email(d, sent_via=None):
+	from webnotes.utils.email_lib import sendmail
+	
+	if sent_via:
+		if hasattr(sent_via, "get_sender"):
+			d.sender = sent_via.get_sender(d)
+		if hasattr(sent_via, "get_subject"):
+			d.subject = sent_via.get_subject(d)
+		if hasattr(sent_via, "get_content"):
+			d.content = sent_via.get_content(d)
+	
+	sendmail(\
+		recipients = d.recipients.split(","), \
+		sender = d.sender, \
+		subject = d.subject, \
+		msg= d.content)
+		
+	if sent_via and hasattr(sent_via, 'on_communication_sent'):
+		sent_via.on_communication_sent(d)
+
+def set_lead_and_contact(d):
+	import email.utils
+	email_addr = email.utils.parseaddr(d.sender)
+	# set contact
+	if not d.contact:
+		d.contact = webnotes.conn.get_value("Contact", {"email_id": email_addr[1]}, "name") or None
+
+	if not d.lead:
+		d.lead = webnotes.conn.get_value("Lead", {"email_id": email_addr[1]}, "name") or None
+
+	if not d.lead and not d.contact:
+		d.lead = make_lead(d, email_addr[0])
+
+def make_lead(d, real_name):
+	lead = webnotes.doc("Lead")
+	lead.lead_name = real_name or d.sender
+	lead.email_id = d.sender
+	lead.source = "Email"
+	lead.save(1)
+	return lead.name
+
 class DocType():
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
diff --git a/support/doctype/communication/communication.txt b/support/doctype/communication/communication.txt
index ea45755..3d249ab 100644
--- a/support/doctype/communication/communication.txt
+++ b/support/doctype/communication/communication.txt
@@ -4,7 +4,7 @@
   "docstatus": 0, 
   "creation": "2012-11-14 12:25:16", 
   "modified_by": "Administrator", 
-  "modified": "2012-11-26 12:41:59"
+  "modified": "2012-11-27 12:24:43"
  }, 
  {
   "autoname": "naming_series:", 
@@ -121,7 +121,6 @@
  {
   "colour": "White:FFF", 
   "doctype": "DocField", 
-  "label": "Related To", 
   "fieldname": "column_break3", 
   "fieldtype": "Column Break", 
   "permlevel": 0
@@ -191,6 +190,20 @@
  }, 
  {
   "doctype": "DocField", 
+  "label": "Recipients", 
+  "fieldname": "recipients", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Sender", 
+  "fieldname": "sender", 
+  "fieldtype": "Data", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
   "label": "Communication Medium", 
   "options": "\nChat\nPhone\nEmail\nSMS\nVisit\nOther", 
   "fieldname": "communication_medium", 
@@ -206,13 +219,6 @@
  }, 
  {
   "doctype": "DocField", 
-  "label": "Email Address", 
-  "fieldname": "email_address", 
-  "fieldtype": "Data", 
-  "permlevel": 0
- }, 
- {
-  "doctype": "DocField", 
   "options": "simple", 
   "fieldname": "section_break2", 
   "fieldtype": "Section Break", 
diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py
index 25eceaa..b477b96 100644
--- a/support/doctype/support_ticket/__init__.py
+++ b/support/doctype/support_ticket/__init__.py
@@ -79,13 +79,13 @@
 				WHERE name=%s AND raised_by REGEXP %s
 				""" , (thread_id, '(' + email_id + ')'))
 			if exists and exists[0] and exists[0][0]:
-				from webnotes.model.code import get_obj
+				st = webnotes.get_obj('Support Ticket', thread_id)
 				
-				st = get_obj('Support Ticket', thread_id)
-				st.make_response_record(content, full_email_id, content_type)
+				from support.doctype.communication.communication import make
 				
-				# to update modified date
-				#webnotes.conn.set(st.doc, 'status', 'Open')
+				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()
 				
diff --git a/support/doctype/support_ticket/support_ticket.js b/support/doctype/support_ticket/support_ticket.js
index b740498..519d343 100644
--- a/support/doctype/support_ticket/support_ticket.js
+++ b/support/doctype/support_ticket/support_ticket.js
@@ -58,13 +58,15 @@
 		
 		var comm_list = wn.model.get("Communication", {"support_ticket": doc.name})
 		comm_list.push({
-			"email_address": doc.raised_by,
+			"sender": doc.raised_by,
 			"modified": doc.creation,
 			"content": doc.description});
 					
-		new erpnext.CommunicationView({
+		cur_frm.communication_view = new erpnext.CommunicationView({
 			list: comm_list,
-			parent: wrapper
+			parent: wrapper,
+			doc: doc,
+			email: doc.raised_by
 		})
 
 	},
diff --git a/support/doctype/support_ticket/support_ticket.py b/support/doctype/support_ticket/support_ticket.py
index e7f3077..6a55755 100644
--- a/support/doctype/support_ticket/support_ticket.py
+++ b/support/doctype/support_ticket/support_ticket.py
@@ -28,105 +28,26 @@
 
 	def onload(self):
 		self.add_communication_list()
-			
-	def send_response(self):
-		"""
-			Adds a new response to the ticket and sends an email to the sender
-		"""
-		if not self.doc.new_response:
-			webnotes.msgprint("Please write something as a response", raise_exception=1)
-		
-		import markdown2
-		self.doc.new_response = markdown2.markdown(self.doc.new_response)
-		
-		subject = '[' + self.doc.name + '] ' + (self.doc.subject or 'No Subject Specified')
-		
-		response = self.doc.new_response + '<p>[Please do not change the subject while responding.]</p>'
-
-		# add last response to new response
-		response += self.last_response()
-
+	
+	def get_sender(self, comm):
+		return webnotes.conn.get_value('Email Settings',None,'support_email')
+	
+	def get_subject(self, comm):
+		return '[' + self.doc.name + '] ' + (comm.doc.subject or 'No Subject Specified')
+	
+	def get_content(self, comm):
 		signature = webnotes.conn.get_value('Email Settings',None,'support_signature')
+		content = comm.doc.content
 		if signature:
-			response += '<p>' + signature + '</p>'
-
-		from webnotes.utils.email_lib import sendmail
+			content += '<p>' + signature + '</p>'
+		return content
 		
-		sendmail(\
-			recipients = [self.doc.raised_by], \
-			sender=webnotes.conn.get_value('Email Settings',None,'support_email'), \
-			subject=subject, \
-			msg=response)
-
-		self.doc.new_response = None
+	def on_communication_sent(self, comm):
 		webnotes.conn.set(self.doc, 'status', 'Waiting for Customer')
-		self.make_response_record(response)
-		self.add_communication_list()
-	
-	def last_response(self):
-		"""return last response"""
-		tmp = webnotes.conn.sql("""select content from `tabCommunication`
-			where support_ticket = %s order by creation desc limit 1
-			""", self.doc.name)
-			
-		if not tmp:
-			tmp = webnotes.conn.sql("""
-				SELECT description from `tabSupport Ticket`
-				where name = %s
-			""", self.doc.name)
-
-		response_title = "=== In response to ==="
-
-		if tmp and tmp[0][0]:
-			return "\n\n" + response_title + "\n\n" + tmp[0][0].split(response_title)[0]
-		else:
-			return ""
-
-		
-	def make_response_record(self, response, from_email = None, content_type='text/plain'):
-		"""
-			Creates a new Communication record
-		"""
-		# add to Communication
-		d = webnotes.doc('Communication')
-		d.subject = self.doc.subject
-		d.email_address = from_email or webnotes.user.name
-		self.set_lead_and_contact(d)
-		d.support_ticket = self.doc.name
-		d.content = response
-		d.communication_medium = "Email"
-		d.save(1)
-	
-	def set_lead_and_contact(self, d):
-		import email.utils
-		email_addr = email.utils.parseaddr(d.email_address)
-		# set contact
-		if self.doc.contact:
-			d.contact = self.doc.contact
-		else:
-			d.contact = webnotes.conn.get_value("Contact", {"email_id": email_addr[1]}, "name") or None
-			if d.contact:
-				webnotes.conn.set(self.doc, "contact", d.contact)
-
-		if self.doc.lead:
-			d.lead = self.doc.lead
-		else:
-			d.lead = webnotes.conn.get_value("Lead", {"email_id": email_addr[1]}, "name") or None
-			if d.lead:
-				webnotes.conn.set(self.doc, "lead", d.lead)
-
-		# not linked to any lead / contact, create new lead
-		if not d.lead and not d.contact:
-			d.lead = self.make_lead(d, email_addr[0])
-			webnotes.conn.set(self.doc, "lead", d.lead)
-		
-	def make_lead(self, d, real_name):
-		d = webnotes.doc("Lead")
-		d.lead_name = real_name or d.email_address
-		d.email_id = d.email_address
-		d.source = "Email"
-		d.save(1)
-		return d.name
+		if comm.doc.lead and not self.doc.lead:
+			webnotes.conn.set(self.doc, 'lead', comm.doc.lead)
+		if comm.doc.contact and not self.doc.contact:
+			webnotes.conn.set(self.doc, 'contact', comm.doc.contact)
 	
 	def close_ticket(self):
 		webnotes.conn.set(self.doc,'status','Closed')
@@ -137,5 +58,5 @@
 		update_feed(self.doc)
 		
 	def on_trash(self):
-		webnotes.conn.sql("""update `tabCommunication set support_ticket="" 
+		webnotes.conn.sql("""update `tabCommunication` set support_ticket="" 
 			where support_ticket=%s`""", self.doc.name)
diff --git a/support/doctype/support_ticket/support_ticket.txt b/support/doctype/support_ticket/support_ticket.txt
index 8259954..3878d27 100644
--- a/support/doctype/support_ticket/support_ticket.txt
+++ b/support/doctype/support_ticket/support_ticket.txt
@@ -4,7 +4,7 @@
   "docstatus": 0, 
   "creation": "2012-11-02 17:17:05", 
   "modified_by": "Administrator", 
-  "modified": "2012-11-26 12:54:25"
+  "modified": "2012-11-27 18:21:06"
  }, 
  {
   "autoname": "naming_series:", 
@@ -100,22 +100,6 @@
  {
   "depends_on": "eval:!doc.__islocal", 
   "doctype": "DocField", 
-  "label": "New Response", 
-  "fieldname": "new_response", 
-  "fieldtype": "Text", 
-  "permlevel": 0
- }, 
- {
-  "depends_on": "eval:!doc.__islocal", 
-  "doctype": "DocField", 
-  "label": "Send", 
-  "fieldname": "send", 
-  "fieldtype": "Button", 
-  "permlevel": 0
- }, 
- {
-  "depends_on": "eval:!doc.__islocal", 
-  "doctype": "DocField", 
   "label": "Thread HTML", 
   "fieldname": "thread_html", 
   "fieldtype": "HTML", 
diff --git a/utilities/doctype/contact/contact.js b/utilities/doctype/contact/contact.js
index 5bf9510..0a33e08 100644
--- a/utilities/doctype/contact/contact.js
+++ b/utilities/doctype/contact/contact.js
@@ -14,6 +14,8 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+wn.require("public/app/js/communication.js");
+
 //--------- ONLOAD -------------
 cur_frm.cscript.onload = function(doc, cdt, cdn) {	
 	cur_frm.add_fetch('customer', 'customer_name', 'customer_name');
@@ -40,6 +42,15 @@
 	}
 }
 
+cur_frm.cscript.refresh = function() {
+	cur_frm.communication_view = new erpnext.CommunicationView({
+		list: wn.model.get("Communication", {"contact": doc.name}),
+		parent: cur_frm.fields_dict.communication_html.wrapper,
+		doc: doc,
+		email: doc.email_id
+	})	
+}
+
 cur_frm.cscript.hide_dialog = function() {
 	if(cur_frm.contact_list)
 		cur_frm.contact_list.run();
diff --git a/utilities/doctype/contact/contact.py b/utilities/doctype/contact/contact.py
index 92adaf4..d980733 100644
--- a/utilities/doctype/contact/contact.py
+++ b/utilities/doctype/contact/contact.py
@@ -21,12 +21,16 @@
 from webnotes.model.doc import Document
 from webnotes import session, form, msgprint, errprint
 
-# -----------------------------------------------------------------------------------------
-class DocType:
+from utilities.transaction_base import TransactionBase
+
+class DocType(TransactionBase):	
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
 
+	def onload(self):
+		self.add_communication_list()
+
 	def autoname(self):
 		if self.doc.customer:
 			self.doc.name = self.doc.first_name + (self.doc.last_name and ' ' + self.doc.last_name or '') + '-' + self.doc.customer
diff --git a/utilities/doctype/contact/contact.txt b/utilities/doctype/contact/contact.txt
index 20aa076..e8813b5 100644
--- a/utilities/doctype/contact/contact.txt
+++ b/utilities/doctype/contact/contact.txt
@@ -4,14 +4,14 @@
   "docstatus": 0, 
   "creation": "2012-08-06 11:15:46", 
   "modified_by": "Administrator", 
-  "modified": "2012-11-24 15:10:53"
+  "modified": "2012-11-27 18:32:42"
  }, 
  {
   "in_create": 0, 
   "default_print_format": "Standard", 
   "doctype": "DocType", 
   "module": "Utilities", 
-  "in_dialog": 1, 
+  "in_dialog": 0, 
   "document_type": "Master", 
   "name": "__common__"
  }, 
@@ -35,23 +35,6 @@
   "doctype": "DocType"
  }, 
  {
-  "oldfieldtype": "Section Break", 
-  "colour": "White:FFF", 
-  "doctype": "DocField", 
-  "label": "Contact Details", 
-  "fieldname": "contact_details", 
-  "fieldtype": "Section Break", 
-  "permlevel": 0
- }, 
- {
-  "oldfieldtype": "Column Break", 
-  "doctype": "DocField", 
-  "width": "50%", 
-  "fieldname": "column_break0", 
-  "fieldtype": "Column Break", 
-  "permlevel": 0
- }, 
- {
   "oldfieldtype": "Data", 
   "doctype": "DocField", 
   "label": "First Name", 
@@ -71,6 +54,54 @@
   "permlevel": 0
  }, 
  {
+  "doctype": "DocField", 
+  "fieldname": "cb00", 
+  "fieldtype": "Column Break", 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "colour": "White:FFF", 
+  "doctype": "DocField", 
+  "label": "Email Id", 
+  "oldfieldname": "email_id", 
+  "fieldname": "email_id", 
+  "fieldtype": "Data", 
+  "search_index": 1, 
+  "reqd": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "oldfieldtype": "Data", 
+  "doctype": "DocField", 
+  "label": "Phone", 
+  "oldfieldname": "contact_no", 
+  "fieldname": "phone", 
+  "fieldtype": "Data", 
+  "reqd": 1, 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "fieldname": "sb00", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Communication HTML", 
+  "fieldname": "communication_html", 
+  "fieldtype": "HTML", 
+  "permlevel": 0
+ }, 
+ {
+  "doctype": "DocField", 
+  "label": "Contact Details", 
+  "fieldname": "contact_details", 
+  "fieldtype": "Section Break", 
+  "permlevel": 0
+ }, 
+ {
   "print_hide": 0, 
   "oldfieldtype": "Link", 
   "colour": "White:FFF", 
@@ -105,9 +136,9 @@
   "permlevel": 0
  }, 
  {
+  "allow_on_submit": 0, 
   "depends_on": "eval:!doc.customer && !doc.sales_partner", 
   "colour": "White:FFF", 
-  "allow_on_submit": 0, 
   "doctype": "DocField", 
   "label": "Supplier Name", 
   "fieldname": "supplier_name", 
@@ -146,28 +177,6 @@
  }, 
  {
   "oldfieldtype": "Data", 
-  "colour": "White:FFF", 
-  "doctype": "DocField", 
-  "label": "Email Id", 
-  "oldfieldname": "email_id", 
-  "fieldname": "email_id", 
-  "fieldtype": "Data", 
-  "search_index": 1, 
-  "reqd": 1, 
-  "permlevel": 0
- }, 
- {
-  "oldfieldtype": "Data", 
-  "doctype": "DocField", 
-  "label": "Phone", 
-  "oldfieldname": "contact_no", 
-  "fieldname": "phone", 
-  "fieldtype": "Data", 
-  "reqd": 1, 
-  "permlevel": 0
- }, 
- {
-  "oldfieldtype": "Data", 
   "doctype": "DocField", 
   "label": "Mobile No", 
   "oldfieldname": "mobile_no",