diff --git a/utilities/page/calendar/calendar.js b/utilities/page/calendar/calendar.js
index cac5ec8..aab8f0b 100644
--- a/utilities/page/calendar/calendar.js
+++ b/utilities/page/calendar/calendar.js
@@ -20,6 +20,8 @@
 // OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // 
 
+wn.provide("erpnext.calendar");
+
 pscript.onload_calendar = function(wrapper) {
 	wn.ui.make_app_page({
 		parent: wrapper,
@@ -31,7 +33,81 @@
 	wn.require('lib/js/lib/fullcalendar/fullcalendar.js');
 }
 
-pscript.update_event = function(event) {
+pscript.onshow_calendar = function(wrapper) {
+	if(!wrapper.setup_complete) {
+		erpnext.calendar.setup(wrapper);
+	} else {
+		$("#fullcalendar").fullCalendar("refetchEvents");
+	}
+}
+
+erpnext.calendar.setup = function(wrapper) {
+	wn.model.with_doctype("Event", function() {
+		$('<div id="fullcalendar">').appendTo($(wrapper).find('.layout-main')).fullCalendar({
+			header: {
+				left: 'prev,next today',
+				center: 'title',
+				right: 'month,agendaWeek,agendaDay'
+			},
+			editable: true,
+			selectable: true,
+			selectHelper: true,
+			events: function(start, end, callback) {
+				wn.call({
+					method: 'utilities.page.calendar.calendar.get_events',
+					type: "GET",
+					args: {
+						start: dateutil.obj_to_str(start),
+						end: dateutil.obj_to_str(end),
+						company: wn.user.get_default("company")[0],
+						employee: wn.user.get_default("employee")[0]
+					},
+					callback: function(r) {
+						var events = r.message;
+						$.each(events, function(i, d) { 
+							d.editable = d.owner==user;
+							var options = erpnext.calendar.event_options[d.doctype];
+							if(options && options.prepare)
+								options.prepare(d);
+						});
+						callback(events);
+					}
+				})
+			},
+			eventClick: function(event, jsEvent, view) {
+				// edit event description or delete
+				var options = erpnext.calendar.event_options[event.doctype];
+				if(options && options.click)
+					options.click(event);
+			},
+			eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
+				erpnext.calendar.update_event(event);
+			},
+			eventResize: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
+				erpnext.calendar.update_event(event);
+			},
+			select: function(startDate, endDate, allDay, jsEvent, view) {
+				if(jsEvent.day_clicked && view.name=="month")
+					return;
+				var event = wn.model.get_new_doc("Event");
+				event.starts_on = wn.datetime.get_datetime_as_string(startDate);
+				event.ends_on = wn.datetime.get_datetime_as_string(endDate);
+				event.all_day = allDay ? 1 : 0;
+				wn.set_route("Form", "Event", event.name);
+			},
+			dayClick: function(date, allDay, jsEvent, view) {
+				jsEvent.day_clicked = true;
+				$("#fullcalendar").fullCalendar("gotoDate", date)
+				return false;
+			}
+		});
+	});
+
+	wrapper.setup_complete = true;
+	
+}
+
+erpnext.calendar.update_event = function(event) {
 	wn.model.remove_from_locals("Event", event.id);
 	wn.call({
 		module: "utilities",
@@ -40,6 +116,7 @@
 		args: {
 			"start": wn.datetime.get_datetime_as_string(event.start),
 			"end": wn.datetime.get_datetime_as_string(event.end),
+			"all_day": event.allDay,
 			"name": event.id
 		},
 		callback: function(r) {
@@ -50,57 +127,31 @@
 	});
 }
 
-
-pscript.onshow_calendar = function(wrapper) {
-	if(!wrapper.setup_complete) {
-		$('<div id="fullcalendar">').appendTo($(wrapper).find('.layout-main')).fullCalendar({
-			header: {
-				left: 'prev,next today',
-				center: 'title',
-				right: 'month,agendaWeek,agendaDay'
-			},
-			editable: true,
-			events: function(start, end, callback) {
-				wn.call({
-					method: 'utilities.page.calendar.calendar.get_events',
-					type: "GET",
-					args: {
-						start: dateutil.obj_to_str(start),
-						end: dateutil.obj_to_str(end)
-					},
-					callback: function(r) {
-						var events = r.message;
-						$.each(events, function(i, d) { 
-							d.editable = d.owner==user;
-							d.allDay = false; 
-						});
-						callback(events);
-					}
-				})
-			},
-			dayClick: function(date, allDay, jsEvent, view) {
-				// if current date, show popup to create a new event
-				var ev = wn.model.create('Event')
-				ev.doc.set('start', date);
-				ev.doc.set('end', new Date(date));
-				ev.doc.set('all_day', 1);
-
-			},
-			eventClick: function(calEvent, jsEvent, view) {
-				// edit event description or delete
-				wn.set_route("Form", "Event", calEvent.id);
-			},
-			eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
-				pscript.update_event(event);
-			},
-			eventResize: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
-				pscript.update_event(event);
+erpnext.calendar.event_options = {
+	"Leave Block List Date": {
+		prepare: function(d) {
+			d.color = "#aaa";
+		}
+	},
+	"Event": {
+		prepare: function(d) {
+			if(d.event_type=="Public") {
+				d.color = "#57AF5B";
 			}
-		});
-
-		wrapper.setup_complete = true;
-	} else {
-		$("#fullcalendar").fullCalendar("refetchEvents");
+		},
+		click: function(event) {
+			wn.set_route("Form", "Event", event.id);
+		}
+	},
+	"Leave Application": {
+		prepare: function(d) {
+			d.color = "#4F9F96";
+		},
+		click: function(event) {
+			if(event.employee==wn.user.get_default("employee")[0]) {
+				wn.set_route("Form", "Leave Application", event.id);
+			}
+		}
 	}
 }
 
diff --git a/utilities/page/calendar/calendar.py b/utilities/page/calendar/calendar.py
index 09b3297..06d4385 100644
--- a/utilities/page/calendar/calendar.py
+++ b/utilities/page/calendar/calendar.py
@@ -1,29 +1,83 @@
 from __future__ import unicode_literals
 
 import webnotes
+from webnotes import _
 
 @webnotes.whitelist()
-def get_events(start, end):
+def get_events(start, end, employee=None, company=None):
 	roles = webnotes.get_roles()
 	events = webnotes.conn.sql("""select name as `id`, subject as title, 
-		starts_on as `start`, ends_on as `end`, "Event" as doctype, owner 
-		from tabEvent where event_date between %s and %s 
+		starts_on as `start`, ends_on as `end`, "Event" as doctype, owner,
+		all_day as allDay, event_type 
+		from tabEvent where (
+			(starts_on between %s and %s)
+			or (ends_on between %s and %s)
+		)
 		and (event_type='Public' or owner=%s
 		or exists(select * from `tabEvent User` where 
 			`tabEvent User`.parent=tabEvent.name and person=%s)
 		or exists(select * from `tabEvent Role` where 
 			`tabEvent Role`.parent=tabEvent.name 
-			and `tabEvent Role`.role in ('%s')))""" % ('%s', '%s', '%s', '%s',
-			"', '".join(roles)), (start, end, 
-			webnotes.session.user, webnotes.session.user), as_dict=1, debug=1)
-	
+			and `tabEvent Role`.role in ('%s')))""" % ('%s', '%s', '%s', '%s', '%s', '%s', 
+			"', '".join(roles)), (start, end, start, end,
+			webnotes.session.user, webnotes.session.user), as_dict=1)
+			
+
+	if employee:
+		add_block_dates(events, start, end, employee, company)
+		add_department_leaves(events, start, end, employee, company)
+
 	return events
-			
-	block_days = webnotes.conn.sql("""select block_date as `start`,
-		name as `id`, reason as `title`, "Holiday List Block Date" as doctype,
-		where block_date between %s and %s
-		and """)
-			
+
+def add_department_leaves(events, start, end, employee, company):
+	department = webnotes.conn.get_value("Employee", employee, "department")
+	
+	if not department:
+		return
+	
+	# department leaves
+	department_employees = webnotes.conn.sql_list("select name from tabEmployee where department=%s", 
+		department)
+	
+	for d in webnotes.conn.sql("""select name, from_date, to_date, employee_name, half_day, 
+		status, employee
+		from `tabLeave Application` where
+		(from_date between %s and %s or to_date between %s and %s)
+		and docstatus < 2
+		and status!="Rejected"
+		and employee in ('%s')""" % ("%s", "%s", "%s", "%s", "', '".join(department_employees)), 
+			(start, end, start, end), as_dict=True):
+			events.append({
+				"id": d.name,
+				"employee": d.employee,
+				"doctype": "Leave Application",
+				"start": d.from_date,
+				"end": d.to_date,
+				"allDay": True,
+				"status": d.status,
+				"title": _("Leave by") + " " +  d.employee_name + \
+					(d.half_day and _(" (Half Day)") or "")
+			})
+	
+
+def add_block_dates(events, start, end, employee, company):
+	# block days
+	from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
+
+	cnt = 0
+	block_dates = get_applicable_block_dates(start, end, employee, company, all_lists=True)
+
+	for block_date in block_dates:
+		events.append({
+			"doctype": "Leave Block List Date",
+			"start": block_date.block_date,
+			"title": _("Leave Blocked") + ": " + block_date.reason,
+			"id": "_" + str(cnt),
+			"allDay": True
+		})
+		cnt+=1
+	
+
 @webnotes.whitelist()
 def update_event(name, start, end):
 	webnotes.conn.sql("""update tabEvent set starts_on=%s, ends_on=%s where 
