diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index b8f368a..6a248b0 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -8,15 +8,14 @@
 import frappe
 from frappe import _
 from frappe.utils import (
-	add_days,
 	add_months,
 	cint,
 	date_diff,
 	flt,
 	get_datetime,
 	get_last_day,
-	is_last_day_of_the_month,
 	getdate,
+	is_last_day_of_the_month,
 	month_diff,
 	nowdate,
 	today,
@@ -28,13 +27,13 @@
 	get_depreciation_accounts,
 	get_disposal_account_and_cost_center,
 )
+from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
-	make_draft_asset_depreciation_schedules,
-	get_asset_depreciation_schedule_name,
 	convert_draft_asset_depreciation_schedules_into_active,
+	get_asset_depreciation_schedule,
+	make_draft_asset_depreciation_schedules,
 	update_draft_asset_depreciation_schedules,
 )
-from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 from erpnext.controllers.accounts_controller import AccountsController
 
 
@@ -245,9 +244,7 @@
 		return value_after_depreciation
 
 	def get_from_date(self, finance_book):
-		asset_depr_schedule_name = get_asset_depreciation_schedule_name(
-			self.name, finance_book
-		)
+		asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, finance_book)
 
 		if not asset_depr_schedule_name:
 			return self.available_for_use_date
@@ -358,7 +355,7 @@
 		return depreciation_amount_for_last_row
 
 	def get_depreciation_amount_for_first_row(self, finance_book):
-		asset_depr_schedule_name = get_asset_depreciation_schedule_name(self.name, finance_book)
+		asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, finance_book)
 
 		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
 
@@ -369,9 +366,7 @@
 
 	def validate_expected_value_after_useful_life(self):
 		for row in self.get("finance_books"):
-			asset_depr_schedule_name = get_asset_depreciation_schedule_name(
-				self.name, row.finance_book
-			)
+			asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, row.finance_book)
 
 			if not asset_depr_schedule_name:
 				return
@@ -379,8 +374,7 @@
 			asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
 
 			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.get("depreciation_schedule")
 			]
 
 			if accumulated_depreciation_after_full_schedule:
@@ -430,9 +424,7 @@
 
 	def delete_depreciation_entries(self):
 		for row in self.get("finance_books"):
-			asset_depr_schedule_name = get_asset_depreciation_schedule_name(
-				self.name, row.finance_book
-			)
+			asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, row.finance_book)
 
 			if not asset_depr_schedule_name:
 				return
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index 9794170..49f167e 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -10,6 +10,9 @@
 	get_checks_for_pl_and_bs_accounts,
 )
 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,
+)
 
 
 def post_depreciation_entries(date=None, commit=True):
@@ -499,24 +502,27 @@
 def get_value_after_depreciation_on_disposal_date(asset, disposal_date, finance_book=None):
 	asset_doc = frappe.get_doc("Asset", asset)
 
-	if asset_doc.calculate_depreciation:
-		asset_doc.prepare_depreciation_data(getdate(disposal_date))
-
-		finance_book_id = 1
-		if finance_book:
-			for fb in asset_doc.finance_books:
-				if fb.finance_book == finance_book:
-					finance_book_id = fb.idx
-					break
-
-		asset_schedules = [
-			sch for sch in asset_doc.schedules if cint(sch.finance_book_id) == finance_book_id
-		]
-		accumulated_depr_amount = asset_schedules[-1].accumulated_depreciation_amount
-
-		return flt(
-			flt(asset_doc.gross_purchase_amount) - accumulated_depr_amount,
-			asset_doc.precision("gross_purchase_amount"),
-		)
-	else:
+	if not asset_doc.calculate_depreciation:
 		return flt(asset_doc.value_after_depreciation)
+
+	idx = 1
+	if finance_book:
+		for d in asset.finance_books:
+			if d.finance_book == finance_book:
+				idx = d.idx
+				break
+
+	row = asset_doc.finance_books[idx - 1]
+
+	temp_asset_depreciation_schedule = make_temp_asset_depreciation_schedule(
+		asset_doc, row, getdate(disposal_date)
+	)
+
+	depr_schedule = temp_asset_depreciation_schedule.get("depreciation_schedule")
+
+	accumulated_depr_amount = depr_schedule[-1].accumulated_depreciation_amount
+
+	return flt(
+		flt(asset_doc.gross_purchase_amount) - accumulated_depr_amount,
+		asset_doc.precision("gross_purchase_amount"),
+	)
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 ae3707b..9df4241 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -2,6 +2,7 @@
 # For license information, please see license.txt
 
 import frappe
+from frappe.model.document import Document
 from frappe.utils import (
 	add_days,
 	add_months,
@@ -9,9 +10,8 @@
 	date_diff,
 	flt,
 	get_last_day,
-	is_last_day_of_the_month
+	is_last_day_of_the_month,
 )
-from frappe.model.document import Document
 
 import erpnext
 
@@ -20,37 +20,47 @@
 	pass
 
 
-def make_draft_asset_depreciation_schedules(asset):
-	for row in asset.get("finance_books"):
+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")
 
-		prepare_draft_asset_depreciation_schedule_data(asset_depr_schedule, asset, row)
-
-
-def update_draft_asset_depreciation_schedules(asset):
-	for row in asset.get("finance_books"):
-		asset_depr_schedule_name = get_asset_depreciation_schedule_name(
-			asset.name, row.finance_book
+		prepare_draft_asset_depreciation_schedule_data(
+			asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
 		)
 
+		asset_depr_schedule.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)
+
 		if not asset_depr_schedule_name:
 			return
 
 		asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
 
-		prepare_draft_asset_depreciation_schedule_data(asset_depr_schedule, asset, row)
+		prepare_draft_asset_depreciation_schedule_data(
+			asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+		)
+
+		asset_depr_schedule.save()
 
 
-def prepare_draft_asset_depreciation_schedule_data(asset_depr_schedule, asset, row):
-	set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset.name, row)
-	make_depreciation_schedule(asset_depr_schedule, asset, row)
-	set_accumulated_depreciation(asset_depr_schedule, asset, row)
-
-	asset_depr_schedule.save()
+def prepare_draft_asset_depreciation_schedule_data(
+	asset_depr_schedule, 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_accumulated_depreciation(
+		asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+	)
 
 
-def set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset_name, row):
-	asset_depr_schedule.asset = asset_name
+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
@@ -60,11 +70,9 @@
 	asset_depr_schedule.status = "Draft"
 
 
-def convert_draft_asset_depreciation_schedules_into_active(asset):
-	for row in asset.get("finance_books"):
-		asset_depr_schedule_name = get_asset_depreciation_schedule_name(
-			asset.name, row.finance_book
-		)
+def convert_draft_asset_depreciation_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)
 
 		if not asset_depr_schedule_name:
 			return
@@ -77,50 +85,63 @@
 
 
 def make_new_active_asset_depreciation_schedules_from_existing(
-	asset, date_of_disposal=None, date_of_return=None
+	asset_doc, date_of_disposal=None, date_of_return=None, notes=None
 ):
-	for row in asset.get("finance_books"):
-		old_asset_depr_schedule_name = get_asset_depreciation_schedule_name(
-			asset.name, row.finance_book
-		)
+	for row in asset_doc.get("finance_books"):
+		old_asset_depr_schedule_name = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
 
 		if not old_asset_depr_schedule_name:
 			return
 
 		old_asset_depr_schedule = frappe.get_doc(
-			"Asset Depreciation Schedule",
-			old_asset_depr_schedule_name
+			"Asset Depreciation Schedule", old_asset_depr_schedule_name
 		)
 
 		asset_depr_schedule = frappe.copy_doc(old_asset_depr_schedule, ignore_no_copy=False)
 
-		make_depreciation_schedule(asset_depr_schedule, asset, row, date_of_disposal)
-		set_accumulated_depreciation(asset_depr_schedule, asset, row, date_of_disposal, date_of_return)
+		make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal)
+		set_accumulated_depreciation(
+			asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+		)
 
-		asset_depr_schedule.save()
+		asset_depr_schedule.notes = notes
+
+		asset_depr_schedule.submit()
 
 
-def make_depreciation_schedule(asset_depr_schedule, asset, row, date_of_disposal=None):
+def make_temp_asset_depreciation_schedule(
+	asset_doc, row, date_of_disposal=None, date_of_return=None
+):
+	asset_depr_schedule = frappe.new_doc("Asset Depreciation Schedule")
+
+	prepare_draft_asset_depreciation_schedule_data(
+		asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return
+	)
+
+	return asset_depr_schedule
+
+
+def get_asset_depreciation_schedule(asset, finance_book):
+	return frappe.db.get_value(
+		doctype="Asset Depreciation Schedule",
+		filters=[
+			["asset", "=", asset],
+			["finance_book", "=", finance_book],
+			["docstatus", "<", 2],
+		],
+	)
+
+
+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 = []
 
-	if not asset.available_for_use_date:
+	if not asset_doc.available_for_use_date:
 		return
 
 	start = clear_depreciation_schedule(asset_depr_schedule)
 
-	_make_depreciation_schedule(asset_depr_schedule, asset, row, start, date_of_disposal)
-
-
-def get_asset_depreciation_schedule_name(asset_name, finance_book):
-	return frappe.db.get_value(
-		doctype="Asset Depreciation Schedule",
-		filters=[
-			["asset", "=", asset_name],
-			["finance_book", "=", finance_book],
-			["docstatus", "<", 2],
-		]
-	)
+	_make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date_of_disposal)
 
 
 def clear_depreciation_schedule(asset_depr_schedule):
@@ -152,17 +173,17 @@
 	return start
 
 
-def _make_depreciation_schedule(asset_depr_schedule, asset, row, start, date_of_disposal):
-	asset.validate_asset_finance_books(row)
+def _make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date_of_disposal):
+	asset_doc.validate_asset_finance_books(row)
 
-	value_after_depreciation = asset._get_value_after_depreciation(row)
+	value_after_depreciation = asset_doc._get_value_after_depreciation(row)
 	row.value_after_depreciation = value_after_depreciation
 
 	number_of_pending_depreciations = cint(row.total_number_of_depreciations) - cint(
-		asset.number_of_depreciations_booked
+		asset_doc.number_of_depreciations_booked
 	)
 
-	has_pro_rata = asset.check_is_pro_rata(row)
+	has_pro_rata = asset_doc.check_is_pro_rata(row)
 	if has_pro_rata:
 		number_of_pending_depreciations += 1
 
@@ -174,12 +195,10 @@
 		if skip_row:
 			continue
 
-		depreciation_amount = get_depreciation_amount(asset, value_after_depreciation, row)
+		depreciation_amount = get_depreciation_amount(asset_doc, value_after_depreciation, row)
 
 		if not has_pro_rata or n < cint(number_of_pending_depreciations) - 1:
-			schedule_date = add_months(
-				row.depreciation_start_date, n * cint(row.frequency_of_depreciation)
-			)
+			schedule_date = add_months(row.depreciation_start_date, n * cint(row.frequency_of_depreciation))
 
 			if should_get_last_day:
 				schedule_date = get_last_day(schedule_date)
@@ -190,8 +209,8 @@
 
 		# if asset is being sold or scrapped
 		if date_of_disposal:
-			from_date = asset.get_from_date(row.finance_book)
-			depreciation_amount, days, months = asset.get_pro_rata_amt(
+			from_date = asset_doc.get_from_date(row.finance_book)
+			depreciation_amount, days, months = asset_doc.get_pro_rata_amt(
 				row, depreciation_amount, from_date, date_of_disposal
 			)
 
@@ -208,11 +227,11 @@
 			break
 
 		# For first row
-		if has_pro_rata and not asset.opening_accumulated_depreciation and n == 0:
+		if has_pro_rata and not asset_doc.opening_accumulated_depreciation and n == 0:
 			from_date = add_days(
-				asset.available_for_use_date, -1
+				asset_doc.available_for_use_date, -1
 			)  # needed to calc depr amount for available_for_use_date too
-			depreciation_amount, days, months = asset.get_pro_rata_amt(
+			depreciation_amount, days, months = asset_doc.get_pro_rata_amt(
 				row, depreciation_amount, from_date, row.depreciation_start_date
 			)
 
@@ -223,20 +242,20 @@
 
 		# For last row
 		elif has_pro_rata and n == cint(number_of_pending_depreciations) - 1:
-			if not asset.flags.increase_in_asset_life:
+			if not asset_doc.flags.increase_in_asset_life:
 				# In case of increase_in_asset_life, the asset.to_date is already set on asset_repair submission
-				asset.to_date = add_months(
-					asset.available_for_use_date,
-					(n + asset.number_of_depreciations_booked) * cint(row.frequency_of_depreciation),
+				asset_doc.to_date = add_months(
+					asset_doc.available_for_use_date,
+					(n + asset_doc.number_of_depreciations_booked) * cint(row.frequency_of_depreciation),
 				)
 
 			depreciation_amount_without_pro_rata = depreciation_amount
 
-			depreciation_amount, days, months = asset.get_pro_rata_amt(
-				row, depreciation_amount, schedule_date, asset.to_date
+			depreciation_amount, days, months = asset_doc.get_pro_rata_amt(
+				row, depreciation_amount, schedule_date, asset_doc.to_date
 			)
 
-			depreciation_amount = asset.get_adjusted_depreciation_amount(
+			depreciation_amount = asset_doc.get_adjusted_depreciation_amount(
 				depreciation_amount_without_pro_rata, depreciation_amount, row.finance_book
 			)
 
@@ -246,7 +265,9 @@
 
 		if not depreciation_amount:
 			continue
-		value_after_depreciation -= flt(depreciation_amount, asset.precision("gross_purchase_amount"))
+		value_after_depreciation -= flt(
+			depreciation_amount, asset_doc.precision("gross_purchase_amount")
+		)
 
 		# Adjust depreciation amount in the last period based on the expected value after useful life
 		if row.expected_value_after_useful_life and (
@@ -271,19 +292,19 @@
 
 
 @erpnext.allow_regional
-def get_depreciation_amount(asset, depreciable_value, row):
+def get_depreciation_amount(asset_doc, depreciable_value, row):
 	if row.depreciation_method in ("Straight Line", "Manual"):
 		# if the Depreciation Schedule is being prepared for the first time
-		if not asset.flags.increase_in_asset_life:
+		if not asset_doc.flags.increase_in_asset_life:
 			depreciation_amount = (
-				flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life)
+				flt(asset_doc.gross_purchase_amount) - flt(row.expected_value_after_useful_life)
 			) / flt(row.total_number_of_depreciations)
 
 		# if the Depreciation Schedule is being modified after Asset Repair
 		else:
 			depreciation_amount = (
 				flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life)
-			) / (date_diff(asset.to_date, asset.available_for_use_date) / 365)
+			) / (date_diff(asset_doc.to_date, asset_doc.available_for_use_date) / 365)
 	else:
 		depreciation_amount = flt(depreciable_value * (flt(row.rate_of_depreciation) / 100))
 
@@ -296,7 +317,7 @@
 	depreciation_amount,
 	depreciation_method,
 	finance_book,
-	finance_book_id
+	finance_book_id,
 ):
 	asset_depr_schedule.append(
 		"depreciation_schedule",
@@ -312,14 +333,15 @@
 
 def set_accumulated_depreciation(
 	asset_depr_schedule,
-	asset,
+	asset_doc,
 	row,
 	date_of_disposal=None,
 	date_of_return=None,
-	ignore_booked_entry=False
+	ignore_booked_entry=False,
 ):
 	straight_line_idx = [
-		d.idx for d in asset_depr_schedule.get("depreciation_schedule")
+		d.idx
+		for d in asset_depr_schedule.get("depreciation_schedule")
 		if d.depreciation_method == "Straight Line"
 	]
 	finance_books = []
@@ -329,8 +351,8 @@
 			continue
 
 		if int(d.finance_book_id) not in finance_books:
-			accumulated_depreciation = flt(asset.opening_accumulated_depreciation)
-			value_after_depreciation = flt(asset.get_value_after_depreciation(d.finance_book_id))
+			accumulated_depreciation = flt(asset_doc.opening_accumulated_depreciation)
+			value_after_depreciation = flt(asset_doc.get_value_after_depreciation(d.finance_book_id))
 			finance_books.append(int(d.finance_book_id))
 
 		depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index d5913c5..ca6225f 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -8,6 +8,9 @@
 import erpnext
 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,
+)
 from erpnext.controllers.accounts_controller import AccountsController
 
 
@@ -279,8 +282,11 @@
 			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")
+
 		# the Schedule Date in the final row of the old Depreciation Schedule
-		last_schedule_date = asset.schedules[len(asset.schedules) - 1].schedule_date
+		last_schedule_date = asset_depr_schedule[len(asset_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)
@@ -310,8 +316,11 @@
 			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")
+
 		# the Schedule Date in the final row of the modified Depreciation Schedule
-		last_schedule_date = asset.schedules[len(asset.schedules) - 1].schedule_date
+		last_schedule_date = asset_depr_schedule[len(asset_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)
