diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 9273f01..18e3ffc 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -179,7 +179,8 @@
 			
 			start = self.clear_depreciation_schedule()
 
-			if d.value_after_depreciation: 
+			# value_after_depreciation - current Asset value
+			if d.value_after_depreciation:
 				value_after_depreciation = (flt(d.value_after_depreciation) -
 					flt(self.opening_accumulated_depreciation)) - flt(d.expected_value_after_useful_life)
 			else:
@@ -291,6 +292,7 @@
 							"finance_book_id": d.idx
 						})
 
+	# used when depreciation schedule needs to be modified due to increase in asset life
 	def clear_depreciation_schedule(self):
 		start = 0
 		for n in range(len(self.schedules)):
@@ -300,10 +302,13 @@
 				break
 		return start
 
+
+	# if it returns True, depreciation_amount will not be equal for the first and last rows
 	def check_is_pro_rata(self, row):
 		has_pro_rata = False
-
 		days = date_diff(row.depreciation_start_date, self.available_for_use_date) + 1
+
+		# if frequency_of_depreciation is 12 months, total_days = 365
 		total_days = get_total_days(row.depreciation_start_date, row.frequency_of_depreciation)
 
 		if days < total_days:
@@ -783,9 +788,12 @@
 	depreciation_left = flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)
 
 	if row.depreciation_method in ("Straight Line", "Manual"):
+		# if the Depreciation Schedule is being prepared for the first time
 		if not asset.to_date:
 			depreciation_amount = (flt(row.value_after_depreciation) -
 				flt(row.expected_value_after_useful_life)) / depreciation_left
+
+		# 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)
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index 7864cb7..0befee7 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -47,7 +47,7 @@
 			self.decrease_stock_quantity()
 		if self.capitalize_repair_cost:
 			self.make_gl_entries()
-			if frappe.db.get_value('Asset', self.asset, 'calculate_depreciation'):
+			if frappe.db.get_value('Asset', self.asset, 'calculate_depreciation') and self.increase_in_asset_life:
 				self.modify_depreciation_schedule()
 
 	def check_repair_status(self):
@@ -157,27 +157,33 @@
 		return gl_entries
 
 	def modify_depreciation_schedule(self):
-		if self.increase_in_asset_life:
-			asset = frappe.get_doc('Asset', self.asset)
-			asset.flags.ignore_validate_update_after_submit = True
-			for row in asset.finance_books:
-				row.total_number_of_depreciations += self.increase_in_asset_life/row.frequency_of_depreciation
+		asset = frappe.get_doc('Asset', self.asset)
+		asset.flags.ignore_validate_update_after_submit = True
+		for row in asset.finance_books:
+			row.total_number_of_depreciations += self.increase_in_asset_life/row.frequency_of_depreciation
 
-				asset.edit_dates = ""
-				extra_months = self.increase_in_asset_life % row.frequency_of_depreciation
-				if extra_months != 0:
-					self.calculate_last_schedule_date(asset, row, extra_months)
+			asset.edit_dates = ""
+			extra_months = self.increase_in_asset_life % row.frequency_of_depreciation
+			if extra_months != 0:
+				self.calculate_last_schedule_date(asset, row, extra_months)
 
-			asset.prepare_depreciation_data()
-			asset.save()
+		asset.prepare_depreciation_data()
+		asset.save()
 
 	# to help modify depreciation schedule when increase_in_asset_life is not a multiple of frequency_of_depreciation
 	def calculate_last_schedule_date(self, asset, row, extra_months):
 		asset.edit_dates = "Don't Edit"
 		number_of_pending_depreciations = cint(row.total_number_of_depreciations) - \
 			cint(asset.number_of_depreciations_booked)
+
+		# the Schedule Date in the final row of the old Depreciation Schedule
 		last_schedule_date = asset.schedules[len(asset.schedules)-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)
+
+		# the latest possible date at which the depreciation can occur, without increasing the Total Number of Depreciations
+		# if depreciations happen yearly and the Depreciation Posting Date is 01-01-2020, this could be 01-01-2021, 01-01-2022...
 		schedule_date = add_months(row.depreciation_start_date,
 			number_of_pending_depreciations * cint(row.frequency_of_depreciation))
 
