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))
