diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index 8def5bb..6420e80 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -81,9 +81,13 @@
 			webnotes.conn.get_value('Website Settings', None, 'analytics_code')
 		bootinfo['analytics_call'] = \
 			webnotes.conn.get_value('Website Settings', None, 'analytics_call')
+		
 	else:	
 		bootinfo['letter_heads'] = get_letter_heads()
 
+		import webnotes.model.doctype
+		bootinfo['docs'] += webnotes.model.doctype.get('Event')
+
 def get_letter_heads():
 	"""load letter heads with startup"""
 	import webnotes
diff --git a/erpnext/utilities/page/calendar/calendar.css b/erpnext/utilities/page/calendar/calendar.css
index bcf7cce..2f3356f 100644
--- a/erpnext/utilities/page/calendar/calendar.css
+++ b/erpnext/utilities/page/calendar/calendar.css
@@ -156,9 +156,7 @@
 }
 
 div.cal_event {
-	width: 100%;
-	height: 12px;
-	overflow: hidden;
+	overflow-x: hidden;
 	font-size: 11px;
 	color: #00B;
 	margin-bottom: 2px;
diff --git a/erpnext/utilities/page/calendar/calendar.js b/erpnext/utilities/page/calendar/calendar.js
index 6e59f21..ac1ac88 100644
--- a/erpnext/utilities/page/calendar/calendar.js
+++ b/erpnext/utilities/page/calendar/calendar.js
@@ -33,7 +33,6 @@
 Calendar=function() {
 	this.views=[];
 	this.events = {};
-	this.has_event = {};
 	this.events_by_name = {};
 	this.weekdays = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
 }
@@ -57,15 +56,18 @@
 	this.views['Day'] = new Calendar.DayView(this);
 
 	// Month view as initial
-	this.cur_view = this.views['Day'];
-	this.views['Day'].show();
+	this.cur_view = this.views['Month'];
+	this.views['Month'].show();
 	
 }
 
 Calendar.prototype.rename_notify = function(dt, old_name, new_name) {
 	// calendar
-	if(dt = 'Event' && this.has_event[old_name])
-		this.has_event[old_name] = false;	
+	if(dt = 'Event'){		
+		if(this.events_by_name[old_name]) {
+			delete this.events_by_name[old_name];
+		}
+	}
 }
 
 //------------------------------------------------------
@@ -119,19 +121,15 @@
 			
 			// save values
 			d.ev.description = d.widgets['Description'].value;
-			if(d.widgets['Cancel Event'].checked) d.ev.event_type='Cancel';
-			else if(d.widgets['Public Event'].checked) d.ev.event_type='Public';
+			if(d.widgets['Cancel Event'].checked) 
+				d.ev.event_type='Cancel';
+			else if(d.widgets['Public Event'].checked) 
+				d.ev.event_type='Public';
 			
 			me.event_dialog.hide();
 			
 			// if new event
-			if(d.cal_ev)
-				var cal_ev = d.cal_ev;
-			else 
-				var cal_ev = me.set_event(d.ev);
-
-			cal_ev.save();
-			if(me.cur_view)me.cur_view.refresh();			
+			me.save_event(d.ev);
 		}
 		this.event_dialog = d;
 	}
@@ -141,6 +139,20 @@
 	
 }
 
+Calendar.prototype.save_event = function(doc) {
+	var me = this;
+	save_doclist('Event', doc.name, 'Save', function(r) { 
+		var doc = locals['Event'][r.docname];
+		var cal = erpnext.calendar;
+		cal.cur_view.refresh();
+
+		// if cancelled, hide
+		if(doc.event_type=='Cancel') {
+			$(cal.events_by_name[doc.name].body).toggle(false);
+		}
+	});
+}
+
 //------------------------------------------------------
 
 Calendar.prototype.add_event = function() {
@@ -193,7 +205,7 @@
 Calendar.prototype.set_event = function(ev) {
 	// don't duplicate
 	if(this.events_by_name[ev.name]) {
-		return;
+		return this.events_by_name[ev.name];
 	}
 		
 	var dt = dateutil.str_to_obj(ev.event_date);
@@ -204,16 +216,16 @@
 	if(!this.events[y]) this.events[y] = [];
 	if(!this.events[y][m]) this.events[y][m] = [];
 	if(!this.events[y][m][d]) this.events[y][m][d] = [];
-	if(!this.events[y][m][d][cint(cint(ev.event_hour))]) 
+	if(!this.events[y][m][d][cint(ev.event_hour)]) 
 		this.events[y][m][d][cint(ev.event_hour)] = [];
 
 	var cal_ev = new Calendar.CalEvent(ev, this);
 	this.events[y][m][d][cint(ev.event_hour)].push(cal_ev);	
 	this.events_by_name[ev.name] = cal_ev;
-	this.has_event[ev.name] = true;
 	
 	return cal_ev;
 }
+
 //------------------------------------------------------
 
 Calendar.prototype.refresh = function(viewtype){//Sets the viewtype of the Calendar and Calls the View class based on the viewtype
@@ -235,14 +247,11 @@
 
 Calendar.CalEvent= function(doc, cal) {
 	this.body = document.createElement('div');
-	var v = locals['Event'][doc.name].description;
-	if(v==null)v='';
-	this.body.innerHTML = v;
-
+	this.link = $a(this.body, 'a', '', {}, locals['Event'][doc.name].description || '');
 	this.doc = doc;
 	var me = this;
 
-	this.body.onclick = function() {
+	this.link.onclick = function() {
 		if(me.doc.name) {
 			cal.show_event(me.doc, me);
 		}
@@ -252,26 +261,18 @@
 Calendar.CalEvent.prototype.show = function(vu) {
 
 	var t = this.doc.event_type;
-	this.my_class = 'cal_event cal_event_'+ t;
+	this.my_class = 'cal_event_'+ t;
 	
 	if(this.body.parentNode)
 		this.body.parentNode.removeChild(this.body);
 	vu.body.appendChild(this.body);
 	
 	// refresh
-	var v = this.doc.description;
-	if(v==null)v='';
-	this.body.innerHTML = v;
+	this.link.innerHTML = this.doc.description || '';
 	this.body.className = this.my_class;
 }
 
-Calendar.CalEvent.prototype.save = function() {
-	var me = this;
-	save_doclist('Event', me.doc.name, 'Save', function(r) { 
-		me.doc = locals['Event'][r.docname];
-		erpnext.calendar.has_event[r.docname] = true;
-	} );
-}
+
 // ----------
 
 Calendar.View =function() { this.daystep = 0; this.monthstep = 0; }
diff --git a/js/all-app.js b/js/all-app.js
index 4618dad..e62a7e6 100644
--- a/js/all-app.js
+++ b/js/all-app.js
Binary files differ
diff --git a/js/all-web.js b/js/all-web.js
index 0d45a49..4616da6 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -940,7 +940,7 @@
 return locals[dt][newdoc];}
 function make_doclist(dt,dn,deleted){var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
 return dl;}
-var rename_observers=[];function notify_rename_observers(dt,old_name,new_name){try{var old=locals[dt][old_name];old.parent=null;old.__deleted=1;}catch(e){alert("[rename_from_local] No Document for: "+old_name);}
+var rename_observers=[];function notify_rename_observers(dt,old_name,new_name){try{delete locals[dt][old_name];}catch(e){alert("[rename_from_local] No Document for: "+old_name);}
 for(var i=0;i<rename_observers.length;i++){if(rename_observers[i])
 rename_observers[i].rename_notify(dt,old_name,new_name);}}
 var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}}
diff --git a/version.num b/version.num
index 6e1d384..55df208 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-687
\ No newline at end of file
+689
\ No newline at end of file
