diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 6a248b0..e3e8a13 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -29,6 +29,7 @@
 )
 from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
+	cancel_asset_depreciation_schedules,
 	convert_draft_asset_depreciation_schedules_into_active,
 	get_asset_depreciation_schedule,
 	make_draft_asset_depreciation_schedules,
@@ -64,6 +65,7 @@
 		self.validate_cancellation()
 		self.cancel_movement_entries()
 		self.delete_depreciation_entries()
+		cancel_asset_depreciation_schedules(self)
 		self.set_status()
 		self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry")
 		make_reverse_gl_entries(voucher_type="Asset", voucher_no=self.name)
@@ -244,14 +246,14 @@
 		return value_after_depreciation
 
 	def get_from_date(self, finance_book):
-		asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, finance_book)
+		asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book)
 
-		if not asset_depr_schedule_name:
+		if not asset_depr_schedule:
 			return self.available_for_use_date
 
-		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+		asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
 
-		return asset_depr_schedule.get("depreciation_schedule")[-1].schedule_date
+		return asset_depr_schedule_doc.get("depreciation_schedule")[-1].schedule_date
 
 	# if it returns True, depreciation_amount will not be equal for the first and last rows
 	def check_is_pro_rata(self, row):
@@ -355,26 +357,26 @@
 		return depreciation_amount_for_last_row
 
 	def get_depreciation_amount_for_first_row(self, finance_book):
-		asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, finance_book)
+		asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book)
 
-		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+		asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
 
-		return asset_depr_schedule.get("depreciation_schedule")[0].depreciation_amount
+		return asset_depr_schedule_doc.get("depreciation_schedule")[0].depreciation_amount
 
 	def get_value_after_depreciation(self, idx):
 		return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation)
 
 	def validate_expected_value_after_useful_life(self):
 		for row in self.get("finance_books"):
-			asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, row.finance_book)
+			asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book)
 
-			if not asset_depr_schedule_name:
+			if not asset_depr_schedule:
 				return
 
-			asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+			asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
 
 			accumulated_depreciation_after_full_schedule = [
-				d.accumulated_depreciation_amount for d in asset_depr_schedule.get("depreciation_schedule")
+				d.accumulated_depreciation_amount for d in asset_depr_schedule_doc.get("depreciation_schedule")
 			]
 
 			if accumulated_depreciation_after_full_schedule:
@@ -424,14 +426,14 @@
 
 	def delete_depreciation_entries(self):
 		for row in self.get("finance_books"):
-			asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, row.finance_book)
+			asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book)
 
-			if not asset_depr_schedule_name:
+			if not asset_depr_schedule:
 				return
 
-			asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+			asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
 
-			for d in asset_depr_schedule.get("depreciation_schedule"):
+			for d in asset_depr_schedule_doc.get("depreciation_schedule"):
 				if d.journal_entry:
 					frappe.get_doc("Journal Entry", d.journal_entry).cancel()
 					d.db_set("journal_entry", None)
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index 49f167e..664838d 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -11,7 +11,7 @@
 )
 from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry
 from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
-	make_temp_asset_depreciation_schedule,
+	get_temp_asset_depreciation_schedule_doc,
 )
 
 
@@ -514,7 +514,7 @@
 
 	row = asset_doc.finance_books[idx - 1]
 
-	temp_asset_depreciation_schedule = make_temp_asset_depreciation_schedule(
+	temp_asset_depreciation_schedule = get_temp_asset_depreciation_schedule_doc(
 		asset_doc, row, getdate(disposal_date)
 	)
 
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
index 9df4241..144b94d 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -22,52 +22,52 @@
 
 def make_draft_asset_depreciation_schedules(asset_doc, date_of_disposal=None, date_of_return=None):
 	for row in asset_doc.get("finance_books"):
-		asset_depr_schedule = frappe.new_doc("Asset Depreciation Schedule")
+		asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
 
 		prepare_draft_asset_depreciation_schedule_data(
-			asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+			asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 		)
 
-		asset_depr_schedule.insert()
+		asset_depr_schedule_doc.insert()
 
 
 def update_draft_asset_depreciation_schedules(
 	asset_doc, date_of_disposal=None, date_of_return=None
 ):
 	for row in asset_doc.get("finance_books"):
-		asset_depr_schedule_name = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
+		asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
 
-		if not asset_depr_schedule_name:
+		if not asset_depr_schedule:
 			return
 
-		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+		asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
 
 		prepare_draft_asset_depreciation_schedule_data(
-			asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+			asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 		)
 
-		asset_depr_schedule.save()
+		asset_depr_schedule_doc.save()
 
 
 def prepare_draft_asset_depreciation_schedule_data(
-	asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+	asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 ):
-	set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset_doc.name, row)
-	make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal)
+	set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset_doc.name, row)
+	make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
 	set_accumulated_depreciation(
-		asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+		asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 	)
 
 
-def set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset, row):
-	asset_depr_schedule.asset = asset
-	asset_depr_schedule.finance_book = row.finance_book
-	asset_depr_schedule.depreciation_method = row.depreciation_method
-	asset_depr_schedule.total_number_of_depreciations = row.total_number_of_depreciations
-	asset_depr_schedule.frequency_of_depreciation = row.frequency_of_depreciation
-	asset_depr_schedule.rate_of_depreciation = row.rate_of_depreciation
-	asset_depr_schedule.expected_value_after_useful_life = row.expected_value_after_useful_life
-	asset_depr_schedule.status = "Draft"
+def set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset, row):
+	asset_depr_schedule_doc.asset = asset
+	asset_depr_schedule_doc.finance_book = row.finance_book
+	asset_depr_schedule_doc.depreciation_method = row.depreciation_method
+	asset_depr_schedule_doc.total_number_of_depreciations = row.total_number_of_depreciations
+	asset_depr_schedule_doc.frequency_of_depreciation = row.frequency_of_depreciation
+	asset_depr_schedule_doc.rate_of_depreciation = row.rate_of_depreciation
+	asset_depr_schedule_doc.expected_value_after_useful_life = row.expected_value_after_useful_life
+	asset_depr_schedule_doc.status = "Draft"
 
 
 def convert_draft_asset_depreciation_schedules_into_active(asset_doc):
@@ -84,41 +84,55 @@
 		asset_depr_schedule.submit()
 
 
-def make_new_active_asset_depreciation_schedules_from_existing(
+def make_new_active_asset_depreciation_schedules_and_cancel_old_ones(
 	asset_doc, date_of_disposal=None, date_of_return=None, notes=None
 ):
 	for row in asset_doc.get("finance_books"):
-		old_asset_depr_schedule_name = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
+		old_asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
 
-		if not old_asset_depr_schedule_name:
+		if not old_asset_depr_schedule:
 			return
 
-		old_asset_depr_schedule = frappe.get_doc(
-			"Asset Depreciation Schedule", old_asset_depr_schedule_name
+		old_asset_depr_schedule_doc = frappe.get_doc(
+			"Asset Depreciation Schedule", old_asset_depr_schedule
 		)
 
-		asset_depr_schedule = frappe.copy_doc(old_asset_depr_schedule, ignore_no_copy=False)
+		asset_depr_schedule_doc = frappe.copy_doc(old_asset_depr_schedule_doc, ignore_no_copy=False)
 
-		make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal)
+		old_asset_depr_schedule.cancel()
+
+		make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
 		set_accumulated_depreciation(
-			asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+			asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 		)
 
-		asset_depr_schedule.notes = notes
+		asset_depr_schedule_doc.notes = notes
 
-		asset_depr_schedule.submit()
+		asset_depr_schedule_doc.submit()
 
 
-def make_temp_asset_depreciation_schedule(
+def get_temp_asset_depreciation_schedule_doc(
 	asset_doc, row, date_of_disposal=None, date_of_return=None
 ):
-	asset_depr_schedule = frappe.new_doc("Asset Depreciation Schedule")
+	asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
 
 	prepare_draft_asset_depreciation_schedule_data(
-		asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+		asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 	)
 
-	return asset_depr_schedule
+	return asset_depr_schedule_doc
+
+
+def cancel_asset_depreciation_schedules(asset_doc):
+	for row in asset_doc.get("finance_books"):
+		asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
+
+		if not asset_depr_schedule:
+			return
+
+		asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
+
+		asset_depr_schedule_doc.cancel()
 
 
 def get_asset_depreciation_schedule(asset, finance_book):
@@ -132,24 +146,26 @@
 	)
 
 
-def make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal):
-	if row.depreciation_method != "Manual" and not asset_depr_schedule.get("depreciation_schedule"):
-		asset_depr_schedule.depreciation_schedule = []
+def make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal):
+	if row.depreciation_method != "Manual" and not asset_depr_schedule_doc.get(
+		"depreciation_schedule"
+	):
+		asset_depr_schedule_doc.depreciation_schedule = []
 
 	if not asset_doc.available_for_use_date:
 		return
 
-	start = clear_depreciation_schedule(asset_depr_schedule)
+	start = clear_depreciation_schedule(asset_depr_schedule_doc)
 
-	_make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date_of_disposal)
+	_make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal)
 
 
-def clear_depreciation_schedule(asset_depr_schedule):
+def clear_depreciation_schedule(asset_depr_schedule_doc):
 	start = []
 	num_of_depreciations_completed = 0
 	depr_schedule = []
 
-	for schedule in asset_depr_schedule.get("depreciation_schedule"):
+	for schedule in asset_depr_schedule_doc.get("depreciation_schedule"):
 		if len(start) != 0:
 			break
 
@@ -168,12 +184,12 @@
 	if start == []:
 		start = [0]
 	else:
-		asset_depr_schedule.depreciation_schedule = depr_schedule
+		asset_depr_schedule_doc.depreciation_schedule = depr_schedule
 
 	return start
 
 
-def _make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date_of_disposal):
+def _make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal):
 	asset_doc.validate_asset_finance_books(row)
 
 	value_after_depreciation = asset_doc._get_value_after_depreciation(row)
@@ -216,7 +232,7 @@
 
 			if depreciation_amount > 0:
 				add_depr_schedule_row(
-					asset_depr_schedule,
+					asset_depr_schedule_doc,
 					date_of_disposal,
 					depreciation_amount,
 					row.depreciation_method,
@@ -282,7 +298,7 @@
 
 		if depreciation_amount > 0:
 			add_depr_schedule_row(
-				asset_depr_schedule,
+				asset_depr_schedule_doc,
 				schedule_date,
 				depreciation_amount,
 				row.depreciation_method,
@@ -312,14 +328,14 @@
 
 
 def add_depr_schedule_row(
-	asset_depr_schedule,
+	asset_depr_schedule_doc,
 	schedule_date,
 	depreciation_amount,
 	depreciation_method,
 	finance_book,
 	finance_book_id,
 ):
-	asset_depr_schedule.append(
+	asset_depr_schedule_doc.append(
 		"depreciation_schedule",
 		{
 			"schedule_date": schedule_date,
@@ -332,7 +348,7 @@
 
 
 def set_accumulated_depreciation(
-	asset_depr_schedule,
+	asset_depr_schedule_doc,
 	asset_doc,
 	row,
 	date_of_disposal=None,
@@ -341,12 +357,12 @@
 ):
 	straight_line_idx = [
 		d.idx
-		for d in asset_depr_schedule.get("depreciation_schedule")
+		for d in asset_depr_schedule_doc.get("depreciation_schedule")
 		if d.depreciation_method == "Straight Line"
 	]
 	finance_books = []
 
-	for i, d in enumerate(asset_depr_schedule.get("depreciation_schedule")):
+	for i, d in enumerate(asset_depr_schedule_doc.get("depreciation_schedule")):
 		if ignore_booked_entry and d.journal_entry:
 			continue
 
diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
index ae6e2b4..e61c8f7 100644
--- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
+++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
@@ -10,10 +10,11 @@
 from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
 	get_checks_for_pl_and_bs_accounts,
 )
-from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
-	get_depreciation_amount
-)
 from erpnext.assets.doctype.asset.depreciation import get_depreciation_accounts
+from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
+	get_asset_depreciation_schedule,
+	get_depreciation_amount,
+)
 
 
 class AssetValueAdjustment(Document):
@@ -114,20 +115,19 @@
 		for d in asset.finance_books:
 			d.value_after_depreciation = asset_value
 
+			asset_depr_schedule = get_asset_depreciation_schedule(asset.name, d.finance_book)
+			depr_schedule = asset_depr_schedule.get("depreciation_schedule")
+
 			if d.depreciation_method in ("Straight Line", "Manual"):
-				end_date = max(s.schedule_date for s in asset.schedules if cint(s.finance_book_id) == d.idx)
+				end_date = max(s.schedule_date for s in depr_schedule)
 				total_days = date_diff(end_date, self.date)
 				rate_per_day = flt(d.value_after_depreciation) / flt(total_days)
 				from_date = self.date
 			else:
-				no_of_depreciations = len(
-					[
-						s.name for s in asset.schedules if (cint(s.finance_book_id) == d.idx and not s.journal_entry)
-					]
-				)
+				no_of_depreciations = len([s.name for s in depr_schedule if not s.journal_entry])
 
 			value_after_depreciation = d.value_after_depreciation
-			for data in asset.schedules:
+			for data in depr_schedule:
 				if cint(data.finance_book_id) == d.idx and not data.journal_entry:
 					if d.depreciation_method in ("Straight Line", "Manual"):
 						days = date_diff(data.schedule_date, from_date)
