diff --git a/erpnext/crm/doctype/appointment/appointment.py b/erpnext/crm/doctype/appointment/appointment.py
index 5d8a30f..5e06486 100644
--- a/erpnext/crm/doctype/appointment/appointment.py
+++ b/erpnext/crm/doctype/appointment/appointment.py
@@ -13,10 +13,9 @@
 
 
 class Appointment(Document):
-	email=''
 
-	def find_lead_by_email(self,email):
-		lead_list = frappe.get_list('Lead', filters = {'email_id':email}, ignore_permissions = True)
+	def find_lead_by_email(self):
+		lead_list = frappe.get_list('Lead', filters = {'email_id':self.email}, ignore_permissions = True)
 		if lead_list:
 			return lead_list[0].name
 		self.email = email
@@ -28,7 +27,7 @@
 		if(number_of_appointments_in_same_slot >= settings.number_of_agents):
 			frappe.throw('Time slot is not available')
 		# Link lead
-		self.lead = self.find_lead_by_email(self.lead)
+		self.lead = self.find_lead_by_email()
 
 	def after_insert(self):
 		# Auto assign
@@ -38,22 +37,35 @@
 			# Create Calendar event
 			self.create_calendar_event()
 		else:
+			# Set status to unverified
+			self.status = 'Unverified'
 			# Send email to confirm
-			verify_url = ''.join([frappe.utils.get_url(),'/book-appointment/verify?email=',self.email,"&appoitnment=",self.name])
+			verify_url = ''.join([frappe.utils.get_url(),'/book-appointment/verify?email=',self.email,'&appoitnment=',self.name])
+			message = ''.join(['Please click the following link to confirm your appointment:']+verify_url)
 			frappe.sendmail(recipients=[self.email], 
-							message=verify_url,
-							subject="")
-			frappe.msgprint("Please check your email to confirm the appointment")
+							message=message,
+							subject=_('Appointment Confirmation'))
+			frappe.msgprint('Please check your email to confirm the appointment')
+
+	def on_update():
+		# Sync Calednar
+		cal_event = frappe.get_doc('Event,self.calendar_event
 
 	def set_verified(self,email):
+		if not email == self.email:
+			frappe.throw('Email verification failed.')
 		# Create new lead
-		self.create_lead(email)
+		self.create_lead()
 		# Create calender event
+		self.status = 'Open'
 		self.create_calendar_event()
-		self.save( ignore_permissions=True )
+		self.save(ignore_permissions=True)
 		frappe.db.commit()
 
 	def create_lead(self,email):
+		# Return if already linked
+		if self.lead:
+			return
 		lead = frappe.get_doc({
 			'doctype':'Lead',
 			'lead_name':self.customer_name,
@@ -61,11 +73,13 @@
 			'notes':self.customer_details,
 			'phone':self.customer_phone_number,
 		})
-		print(lead.insert( ignore_permissions=True ))
+		lead.insert(ignore_permissions=True)
 		# Link lead
 		self.lead = lead.name
 
 	def auto_assign(self):
+		if self._assign:
+			return
 		available_agents = _get_agents_sorted_by_asc_workload(self.scheduled_time.date())
 		for agent in available_agents:
 			if(_check_agent_availability(agent, self.scheduled_time)):
@@ -78,6 +92,8 @@
 			break
 
 	def create_calendar_event(self):
+		if self.appointment:
+			return
 		appointment_event = frappe.get_doc({
 			'doctype': 'Event',
 			'subject': ' '.join(['Appointment with', self.customer_name]),
@@ -85,7 +101,7 @@
 			'status': 'Open',
 			'type': 'Public',
 			'send_reminder': frappe.db.get_single_value('Appointment Booking Settings','email_reminders'),
-			'event_participants': [dict(reference_doctype = "Lead", reference_docname = self.lead)]
+			'event_participants': [dict(reference_doctype = 'Lead', reference_docname = self.lead)]
 		})
 		employee = _get_employee_from_user(self._assign)
 		if employee:
@@ -110,7 +126,6 @@
 			appointment_counter[assigned_to[0]] += 1
 	sorted_agent_list = appointment_counter.most_common()
 	sorted_agent_list.reverse()
-	
 	return sorted_agent_list
 
 def _get_agent_list_as_strings():
@@ -120,7 +135,6 @@
 		agent_list_as_strings.append(agent.user)
 	return agent_list_as_strings
 
-
 def _check_agent_availability(agent_email,scheduled_time):
 	appointemnts_at_scheduled_time = frappe.get_list('Appointment', filters = {'scheduled_time':scheduled_time})
 	for appointment in appointemnts_at_scheduled_time:
@@ -128,7 +142,6 @@
 			return False
 	return True
 
-
 def _get_employee_from_user(user):
 	employee_docname = frappe.db.exists({'doctype':'Employee', 'user_id':user})
 	if employee_docname:
