diff --git a/patches/patch.py b/patches/patch.py
index 5def7a9..2fbffd8 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -56,17 +56,8 @@
 		pass
 
 	elif patch_no == 40:
-<<<<<<< HEAD
-<<<<<<< HEAD
-
 		import_from_files(record_list=[['material_management','doctype','item']])
-=======
-		
-		import_from_files(record_list=[['stock','doctype','item']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['stock','doctype','item']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
+
 	elif patch_no == 42:
 		acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')")
 		for d in acc:
@@ -134,17 +125,8 @@
 	elif patch_no == 56:
 		sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'")
 	elif patch_no == 57:
-<<<<<<< HEAD
-<<<<<<< HEAD
+		import_from_files(record_list=[['selling','doctype','sales_order_detail']])
 
-		import_from_files(record_list=[['crm','doctype','sales_order_detail']])
-=======
-		
-		import_from_files(record_list=[['selling','doctype','sales_order_detail']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['selling','doctype','sales_order_detail']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 	elif patch_no == 58:
 		# module def patches
 		sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')")
@@ -178,17 +160,8 @@
 		sql("delete from `tabTDS Category Account` where company not in (select name from tabCompany)")
 	elif patch_no == 62:
 		# Import Supplier Quotation
-<<<<<<< HEAD
-<<<<<<< HEAD
-
 		import_from_files(record_list=[['srm','doctype','supplier_quotation']])
-=======
-		
-		import_from_files(record_list=[['buying','doctype','supplier_quotation']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['buying','doctype','supplier_quotation']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
+
 		# Adding Status Filter
 		sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')")
 		# Import Other Charges
@@ -196,17 +169,8 @@
 		import_from_files(record_list=[['setup','doctype','other_charges']])
 	elif patch_no == 63:
 		sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'")
-<<<<<<< HEAD
-<<<<<<< HEAD
-
 		import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']])
-=======
-		
-		import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']])
->>>>>>> stable
-=======
-		import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
+
 	elif patch_no == 64:
 		sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')")
 		sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')")
@@ -387,17 +351,7 @@
 		p.add_permission('Salary Slip', 'Employee', 1, read = 1, match = 'owner')
 	elif patch_no == 79:
 		# Import Modules
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-		import_from_files(record_list=[['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation'],['payroll','doctype','leave_control_panel'],['payroll','doctype','holiday_list'],['payroll','doctype','holiday_list_detail'],['payroll','Module Def','Payroll']])
-=======
-		
-		import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
+		import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','HR']])
 	elif patch_no == 80:
 		# Holiday List
 		sql("update `tabHoliday List Detail` set description = holiday_name")
@@ -450,17 +404,7 @@
 
 	elif patch_no == 81:
 		# Import Modules
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-		import_from_files(record_list=[['payroll','Module Def','Payroll']])
-=======
-		
-		import_from_files(record_list=[['hr','Module Def','Payroll']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['hr','Module Def','Payroll']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
+		import_from_files(record_list=[['hr','Module Def','HR']])
 	elif patch_no == 82:
 		sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'")
 		sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'")
@@ -486,32 +430,13 @@
 		sql("update tabDocPerm set `match` = '' where parent = 'Leave Application' and role = 'HR User'")
 	elif patch_no == 86:
 		# Import Modules
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-		import_from_files(record_list=[['payroll','doctype','leave_type']])
-=======
-		
 		import_from_files(record_list=[['hr','doctype','leave_type']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['hr','doctype','leave_type']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 	elif patch_no == 87:
 		sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'")
 	elif patch_no == 88:
 		# Import Modules
-<<<<<<< HEAD
-<<<<<<< HEAD
+		import_from_files(record_list=[['hr','doctype','leave_allocation']])
 
-		import_from_files(record_list=[['payroll','doctype','leave_allocation']])
-=======
-		
-		import_from_files(record_list=[['hr','doctype','leave_allocation']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['hr','doctype','leave_allocation']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 	elif patch_no == 89:
 		sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'")
 		sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'")
@@ -529,17 +454,7 @@
 		sql("update `tabTable Mapper Detail` set validation_logic = 'qty > ifnull(billed_qty,0) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail'")
 		sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'")
 	elif patch_no == 94:
-<<<<<<< HEAD
-<<<<<<< HEAD
-
-		import_from_files(record_list=[['crm','doctype','sms_center']])
-=======
-		
 		import_from_files(record_list=[['selling','doctype','sms_center']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['selling','doctype','sms_center']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 	elif patch_no == 95:
 		import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']])
 	elif patch_no == 96:
@@ -570,17 +485,8 @@
 	elif patch_no == 103:
 		sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'")
 	elif patch_no == 104:
-<<<<<<< HEAD
-<<<<<<< HEAD
+		import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','HR'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']])
 
-		import_from_files(record_list=[['payroll','search_criteria','stdsrch_00001'],['payroll','search_criteria','stdsrch_00002'],['payroll','search_criteria','stdsrch_00003'],['payroll','Module Def','Payroll'],['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation']])
-=======
-		
-		import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']])
->>>>>>> stable
-=======
-		import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']])
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 	elif patch_no == 105:
 		# Employee Leave Balance
 		sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')")
@@ -1040,17 +946,8 @@
 	elif patch_no == 239:
 		reload_doc('core', 'doctype', 'docfield')
 		reload_doc('core', 'doctype', 'doctype')
-<<<<<<< HEAD
-<<<<<<< HEAD
+		from patches.old_patches.feed_patch import set_subjects_and_tagfields
 
-		from patches.feed_patch import set_subjects_and_tagfields
-=======
-		
-		from patches.old_patches.feed_patch import set_subjects_and_tagfields
->>>>>>> stable
-=======
-		from patches.old_patches.feed_patch import set_subjects_and_tagfields
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 		set_subjects_and_tagfields()
 	elif patch_no == 240:
 		# again for sales order (status)
@@ -1123,18 +1020,8 @@
 		sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'")
 		sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')")
 	elif patch_no == 257:
-<<<<<<< HEAD
-<<<<<<< HEAD
-		from patches.customer_address import run_old_data_sync_patch
-		run_old_data_sync_patch()
-=======
-		from patches.old_patches.customer_address import run_old_data_sync_patch
-		run_old_data_sync_patch()	
->>>>>>> stable
-=======
 		from patches.old_patches.customer_address import run_old_data_sync_patch
 		run_old_data_sync_patch()
->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c
 	elif patch_no == 258:
 		sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'")
 	elif patch_no == 259:
