diff --git a/public/js/communication.js b/public/js/communication.js
new file mode 100644
index 0000000..5e7a010
--- /dev/null
+++ b/public/js/communication.js
@@ -0,0 +1,75 @@
+// 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/>.
+
+erpnext.CommunicationView = Class.extend({
+	init: function(opts) {
+		this.comm_list = [];
+		$.extend(this, opts);
+		
+		this.list.sort(function(a, b) { return new Date(a.modified) > new Date(b.modified) 
+			? -1 : 1 })
+				
+		this.make();
+	},
+	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);
+	},
+	make_body: function() {
+		$(this.parent)
+			.html("")
+			.css({"margin":"10px 0px"});
+			
+		this.wrapper = $("<div><h4>Communication History</h4>\
+			<button class='btn btn-small'>Add Reply</button></p></div>")
+			.appendTo(this.parent);
+			
+		this.body = $("<table class='table table-bordered table-hover table-striped'>")
+			.appendTo(this.wrapper);
+	},
+	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;");
+		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>\
+				<div class="comm-content" style="border-top: 1px solid #ddd; padding: 10px; \
+					display: none;"></div>\
+			</td></tr>', doc))
+			.appendTo(this.body)
+			.css({"cursor":"pointer"})
+			.click(function() {
+				$(this).find(".comm-content").toggle();
+			});
+		
+		this.comm_list.push(comm);
+		comm.find(".comm-content").html(doc.content);
+	}
+})
