diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index e3e8a13..3955784 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -29,11 +29,12 @@
 )
 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,
-	update_draft_asset_depreciation_schedules,
+	cancel_asset_depr_schedules,
+	convert_draft_asset_depr_schedules_into_active,
+	get_asset_depr_schedule,
+	get_depr_schedule_from_asset_depr_schedule_of_asset,
+	make_draft_asset_depr_schedules,
+	update_draft_asset_depr_schedules,
 )
 from erpnext.controllers.accounts_controller import AccountsController
 
@@ -47,7 +48,7 @@
 		self.set_missing_values()
 		if not self.split_from:
 			self.prepare_depreciation_data()
-			update_draft_asset_depreciation_schedules(self)
+			update_draft_asset_depr_schedules(self)
 		self.validate_gross_and_purchase_amount()
 		self.validate_expected_value_after_useful_life()
 
@@ -59,13 +60,13 @@
 		self.make_asset_movement()
 		if not self.booked_fixed_asset and self.validate_make_gl_entry():
 			self.make_gl_entries()
-		convert_draft_asset_depreciation_schedules_into_active(self)
+		convert_draft_asset_depr_schedules_into_active(self)
 
 	def on_cancel(self):
 		self.validate_cancellation()
 		self.cancel_movement_entries()
 		self.delete_depreciation_entries()
-		cancel_asset_depreciation_schedules(self)
+		cancel_asset_depr_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)
@@ -73,7 +74,7 @@
 
 	def after_insert(self):
 		if not self.split_from:
-			make_draft_asset_depreciation_schedules(self)
+			make_draft_asset_depr_schedules(self)
 
 	def validate_asset_and_reference(self):
 		if self.purchase_invoice or self.purchase_receipt:
@@ -246,7 +247,7 @@
 		return value_after_depreciation
 
 	def get_from_date(self, finance_book):
-		asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book)
+		asset_depr_schedule = get_asset_depr_schedule(self.name, finance_book)
 
 		if not asset_depr_schedule:
 			return self.available_for_use_date
@@ -357,18 +358,16 @@
 		return depreciation_amount_for_last_row
 
 	def get_depreciation_amount_for_first_row(self, finance_book):
-		asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book)
-
-		asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
-
-		return asset_depr_schedule_doc.get("depreciation_schedule")[0].depreciation_amount
+		return get_depr_schedule_from_asset_depr_schedule_of_asset(self.name, finance_book)[
+			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 = get_asset_depreciation_schedule(self.name, row.finance_book)
+			asset_depr_schedule = get_asset_depr_schedule(self.name, row.finance_book)
 
 			if not asset_depr_schedule:
 				return
@@ -426,7 +425,7 @@
 
 	def delete_depreciation_entries(self):
 		for row in self.get("finance_books"):
-			asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book)
+			asset_depr_schedule = get_asset_depr_schedule(self.name, row.finance_book)
 
 			if not asset_depr_schedule:
 				return
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index 664838d..39ebc8d 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 (
-	get_temp_asset_depreciation_schedule_doc,
+	get_temp_asset_depr_schedule_doc,
 )
 
 
@@ -514,13 +514,13 @@
 
 	row = asset_doc.finance_books[idx - 1]
 
-	temp_asset_depreciation_schedule = get_temp_asset_depreciation_schedule_doc(
+	temp_asset_depreciation_schedule = get_temp_asset_depr_schedule_doc(
 		asset_doc, row, getdate(disposal_date)
 	)
 
-	depr_schedule = temp_asset_depreciation_schedule.get("depreciation_schedule")
-
-	accumulated_depr_amount = depr_schedule[-1].accumulated_depreciation_amount
+	accumulated_depr_amount = temp_asset_depreciation_schedule.get("depreciation_schedule")[
+		-1
+	].accumulated_depreciation_amount
 
 	return flt(
 		flt(asset_doc.gross_purchase_amount) - accumulated_depr_amount,
diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py
index e25d890..5ef8123 100644
--- a/erpnext/assets/doctype/asset/test_asset.py
+++ b/erpnext/assets/doctype/asset/test_asset.py
@@ -882,7 +882,7 @@
 		"""Tests if get_depreciation_amount() returns the right value."""
 
 		from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
-			get_depreciation_amount
+			get_depreciation_amount,
 		)
 
 		asset = create_asset(item_code="Macbook Pro", available_for_use_date="2019-12-31")
@@ -902,8 +902,8 @@
 		depreciation_amount = get_depreciation_amount(asset, 100000, asset.finance_books[0])
 		self.assertEqual(depreciation_amount, 30000)
 
-	def test_make_depreciation_schedule(self):
-		"""Tests if make_depreciation_schedule() returns the right values."""
+	def test_make_depr_schedule(self):
+		"""Tests if make_depr_schedule() returns the right values."""
 
 		asset = create_asset(
 			item_code="Macbook Pro",
@@ -1194,8 +1194,8 @@
 		depr_expense_account.parent_account = "Expenses - _TC"
 		depr_expense_account.save()
 
-	def test_clear_depreciation_schedule(self):
-		"""Tests if clear_depreciation_schedule() works as expected."""
+	def test_clear_depr_schedule(self):
+		"""Tests if clear_depr_schedule() works as expected."""
 
 		asset = create_asset(
 			item_code="Macbook Pro",
@@ -1211,11 +1211,11 @@
 		post_depreciation_entries(date="2021-06-01")
 		asset.load_from_db()
 
-		asset.clear_depreciation_schedule()
+		asset.clear_depr_schedule()
 
 		self.assertEqual(len(asset.schedules), 1)
 
-	def test_clear_depreciation_schedule_for_multiple_finance_books(self):
+	def test_clear_depr_schedule_for_multiple_finance_books(self):
 		asset = create_asset(item_code="Macbook Pro", available_for_use_date="2019-12-31", do_not_save=1)
 
 		asset.calculate_depreciation = 1
@@ -1254,7 +1254,7 @@
 		post_depreciation_entries(date="2020-04-01")
 		asset.load_from_db()
 
-		asset.clear_depreciation_schedule()
+		asset.clear_depr_schedule()
 
 		self.assertEqual(len(asset.schedules), 6)
 
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 144b94d..43f7b4a 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -20,46 +20,44 @@
 	pass
 
 
-def make_draft_asset_depreciation_schedules(asset_doc, date_of_disposal=None, date_of_return=None):
+def make_draft_asset_depr_schedules(asset_doc, date_of_disposal=None, date_of_return=None):
 	for row in asset_doc.get("finance_books"):
 		asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
 
-		prepare_draft_asset_depreciation_schedule_data(
+		prepare_draft_asset_depr_schedule_data(
 			asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 		)
 
 		asset_depr_schedule_doc.insert()
 
 
-def update_draft_asset_depreciation_schedules(
-	asset_doc, date_of_disposal=None, date_of_return=None
-):
+def update_draft_asset_depr_schedules(asset_doc, date_of_disposal=None, date_of_return=None):
 	for row in asset_doc.get("finance_books"):
-		asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
+		asset_depr_schedule = get_asset_depr_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)
 
-		prepare_draft_asset_depreciation_schedule_data(
+		prepare_draft_asset_depr_schedule_data(
 			asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 		)
 
 		asset_depr_schedule_doc.save()
 
 
-def prepare_draft_asset_depreciation_schedule_data(
+def prepare_draft_asset_depr_schedule_data(
 	asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 ):
-	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_draft_asset_depr_schedule_details(asset_depr_schedule_doc, asset_doc.name, row)
+	make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
 	set_accumulated_depreciation(
 		asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 	)
 
 
-def set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset, row):
+def set_draft_asset_depr_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
@@ -70,9 +68,9 @@
 	asset_depr_schedule_doc.status = "Draft"
 
 
-def convert_draft_asset_depreciation_schedules_into_active(asset_doc):
+def convert_draft_asset_depr_schedules_into_active(asset_doc):
 	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_name = get_asset_depr_schedule(asset_doc.name, row.finance_book)
 
 		if not asset_depr_schedule_name:
 			return
@@ -84,48 +82,48 @@
 		asset_depr_schedule.submit()
 
 
-def make_new_active_asset_depreciation_schedules_and_cancel_old_ones(
+def make_new_active_asset_depr_schedules_and_cancel_current_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 = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
+		current_asset_depr_schedule = get_asset_depr_schedule(asset_doc.name, row.finance_book)
 
-		if not old_asset_depr_schedule:
+		if not current_asset_depr_schedule:
 			return
 
-		old_asset_depr_schedule_doc = frappe.get_doc(
-			"Asset Depreciation Schedule", old_asset_depr_schedule
+		current_asset_depr_schedule_doc = frappe.get_doc(
+			"Asset Depreciation Schedule", current_asset_depr_schedule
 		)
 
-		asset_depr_schedule_doc = frappe.copy_doc(old_asset_depr_schedule_doc, ignore_no_copy=False)
+		new_asset_depr_schedule_doc = frappe.copy_doc(
+			current_asset_depr_schedule_doc, ignore_no_copy=False
+		)
 
-		old_asset_depr_schedule.cancel()
+		current_asset_depr_schedule_doc.cancel()
 
-		make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
+		make_depr_schedule(new_asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
 		set_accumulated_depreciation(
-			asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
+			new_asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 		)
 
-		asset_depr_schedule_doc.notes = notes
+		new_asset_depr_schedule_doc.notes = notes
 
-		asset_depr_schedule_doc.submit()
+		new_asset_depr_schedule_doc.submit()
 
 
-def get_temp_asset_depreciation_schedule_doc(
-	asset_doc, row, date_of_disposal=None, date_of_return=None
-):
+def get_temp_asset_depr_schedule_doc(asset_doc, row, date_of_disposal=None, date_of_return=None):
 	asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
 
-	prepare_draft_asset_depreciation_schedule_data(
+	prepare_draft_asset_depr_schedule_data(
 		asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
 	)
 
 	return asset_depr_schedule_doc
 
 
-def cancel_asset_depreciation_schedules(asset_doc):
+def cancel_asset_depr_schedules(asset_doc):
 	for row in asset_doc.get("finance_books"):
-		asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
+		asset_depr_schedule = get_asset_depr_schedule(asset_doc.name, row.finance_book)
 
 		if not asset_depr_schedule:
 			return
@@ -135,7 +133,7 @@
 		asset_depr_schedule_doc.cancel()
 
 
-def get_asset_depreciation_schedule(asset, finance_book):
+def get_asset_depr_schedule(asset, finance_book):
 	return frappe.db.get_value(
 		doctype="Asset Depreciation Schedule",
 		filters=[
@@ -146,7 +144,13 @@
 	)
 
 
-def make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal):
+def get_depr_schedule_from_asset_depr_schedule_of_asset(asset, finance_book):
+	asset_depr_schedule = get_asset_depr_schedule(asset, finance_book)
+	asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
+	return asset_depr_schedule_doc.get("depreciation_schedule")
+
+
+def make_depr_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"
 	):
@@ -155,12 +159,12 @@
 	if not asset_doc.available_for_use_date:
 		return
 
-	start = clear_depreciation_schedule(asset_depr_schedule_doc)
+	start = clear_depr_schedule(asset_depr_schedule_doc)
 
-	_make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal)
+	_make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal)
 
 
-def clear_depreciation_schedule(asset_depr_schedule_doc):
+def clear_depr_schedule(asset_depr_schedule_doc):
 	start = []
 	num_of_depreciations_completed = 0
 	depr_schedule = []
@@ -189,7 +193,7 @@
 	return start
 
 
-def _make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal):
+def _make_depr_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)
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index ca6225f..962e7fb 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -9,7 +9,7 @@
 from erpnext.accounts.general_ledger import make_gl_entries
 from erpnext.assets.doctype.asset.asset import get_asset_account
 from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
-	get_asset_depreciation_schedule,
+	get_depr_schedule_from_asset_depr_schedule_of_asset,
 )
 from erpnext.controllers.accounts_controller import AccountsController
 
@@ -282,11 +282,10 @@
 			asset.number_of_depreciations_booked
 		)
 
-		asset_depr_schedule = get_asset_depreciation_schedule(asset.name, row.finance_book)
-		depr_schedule = asset_depr_schedule.get("depreciation_schedule")
+		depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(asset.name, row.finance_book)
 
 		# the Schedule Date in the final row of the old Depreciation Schedule
-		last_schedule_date = asset_depr_schedule[len(asset_depr_schedule) - 1].schedule_date
+		last_schedule_date = depr_schedule[len(depr_schedule) - 1].schedule_date
 
 		# the Schedule Date in the final row of the new Depreciation Schedule
 		asset.to_date = add_months(last_schedule_date, extra_months)
@@ -316,11 +315,10 @@
 			asset.number_of_depreciations_booked
 		)
 
-		asset_depr_schedule = get_asset_depreciation_schedule(asset.name, row.finance_book)
-		depr_schedule = asset_depr_schedule.get("depreciation_schedule")
+		depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(asset.name, row.finance_book)
 
 		# the Schedule Date in the final row of the modified Depreciation Schedule
-		last_schedule_date = asset_depr_schedule[len(asset_depr_schedule) - 1].schedule_date
+		last_schedule_date = depr_schedule[len(depr_schedule) - 1].schedule_date
 
 		# the Schedule Date in the final row of the original Depreciation Schedule
 		asset.to_date = add_months(last_schedule_date, -extra_months)
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 e61c8f7..bba61e6 100644
--- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
+++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
@@ -5,15 +5,16 @@
 import frappe
 from frappe import _
 from frappe.model.document import Document
-from frappe.utils import cint, date_diff, flt, formatdate, getdate
+from frappe.utils import date_diff, flt, formatdate, getdate
 
 from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
 	get_checks_for_pl_and_bs_accounts,
 )
 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_asset_depr_schedule,
 	get_depreciation_amount,
+	set_accumulated_depreciation,
 )
 
 
@@ -115,8 +116,17 @@
 		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")
+			current_asset_depr_schedule = get_asset_depr_schedule(asset.name, d.finance_book)
+
+			current_asset_depr_schedule_doc = frappe.get_doc(
+				"Asset Depreciation Schedule", current_asset_depr_schedule
+			)
+
+			new_asset_depr_schedule_doc = frappe.copy_doc(
+				current_asset_depr_schedule_doc, ignore_no_copy=False
+			)
+
+			depr_schedule = new_asset_depr_schedule_doc.get("depreciation_schedule")
 
 			if d.depreciation_method in ("Straight Line", "Manual"):
 				end_date = max(s.schedule_date for s in depr_schedule)
@@ -128,7 +138,7 @@
 
 			value_after_depreciation = d.value_after_depreciation
 			for data in depr_schedule:
-				if cint(data.finance_book_id) == d.idx and not data.journal_entry:
+				if not data.journal_entry:
 					if d.depreciation_method in ("Straight Line", "Manual"):
 						days = date_diff(data.schedule_date, from_date)
 						depreciation_amount = days * rate_per_day
@@ -142,10 +152,16 @@
 
 			d.db_update()
 
-		asset.set_accumulated_depreciation(ignore_booked_entry=True)
-		for asset_data in asset.schedules:
-			if not asset_data.journal_entry:
-				asset_data.db_update()
+			set_accumulated_depreciation(new_asset_depr_schedule_doc, asset, d, ignore_booked_entry=True)
+			for asset_data in depr_schedule:
+				if not asset_data.journal_entry:
+					asset_data.db_update()
+
+			current_asset_depr_schedule_doc.cancel()
+
+			new_asset_depr_schedule_doc.notes = "Asset value adjustment"
+
+			new_asset_depr_schedule_doc.submit()
 
 
 @frappe.whitelist()
