diff --git a/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt b/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt
index 2341bf8e541e46ad42acef391a083c40f5bc15d4..2f61bb3a0f89aea1e4afebf6f6fea085cb3fc91e 100644
--- a/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt
+++ b/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt
@@ -56,7 +56,7 @@ class TransactionViewModel(
 				Transaction(
 					title = title,
 					owner = currentUserNim,
-					amount = amount,
+					amount = Long.MAX_VALUE,
 					category = category,
 					location = location,
 				)
diff --git a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt
index daccd2f2ab857a915a8bc6098922652b52f7c718..b27b0525dfaddc25287f55631b421f642a356b26 100644
--- a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt
+++ b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt
@@ -64,6 +64,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 	private var isConnectionlost: Boolean = false
 	private var isOnConnectionLostFragment: Boolean = false
 	private var isOnBack: Boolean = false
+	private val connectionRequiredFragmentIds: MutableList<Int> = mutableListOf()
+	private var hasMovedFromConnectionLostFragment: Boolean = false
 
 	private val expiryReceiver = ExpiryBroadcastReceiver()
 
@@ -182,6 +184,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 		).show()
 	}
 
+	private fun addConnectionRequiredFragment(fragmentId: Int) {
+		this.connectionRequiredFragmentIds.add(fragmentId)
 	override fun getEmail(): String {
 		return PreferencesManager.getString(this, "email") ?: ""
 	}
@@ -206,6 +210,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 	}
 
 	private fun configureNavigation() {
+		this.addConnectionRequiredFragment(R.id.scanReceiptFragment)
+
 		val navbar = findViewById<BottomNavigationView>(R.id.navbar)
 		val navHostFragment =
 			supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
@@ -223,8 +229,9 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 
 			destinationListeners.forEach { it.invoke(destination.id) }
 
-			if (destination.id != R.id.ConnectionLostFragment) {
+			if (destination.id != R.id.connectionLostFragment) {
 				isOnConnectionLostFragment = false
+				hasMovedFromConnectionLostFragment = true
 			}
 
 			// handle back navigation
@@ -240,7 +247,9 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 			}
 
 			// remove old ConnectionLostFragment
-			if (isOnConnectionLostFragment && destination.id == R.id.ConnectionLostFragment) {
+			if ((isOnConnectionLostFragment || hasMovedFromConnectionLostFragment)
+				&& destination.id == R.id.connectionLostFragment
+			) {
 				navController.popBackStack()
 				return@addOnDestinationChangedListener
 			}
@@ -274,16 +283,19 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 
 			// handle connection lost fragment
 			if (isConnectionlost) {
-				if (destination.id != R.id.ConnectionLostFragment) {
+				if (destination.id in connectionRequiredFragmentIds) {
+					hasMovedFromConnectionLostFragment = false
 					navController.navigate(R.id.action_global_to_ConnectionLostFragment)
-				} else {
+					return@addOnDestinationChangedListener
+				} else if (destination.id == R.id.connectionLostFragment) {
 					isOnConnectionLostFragment = true
+					hasMovedFromConnectionLostFragment = false
+					return@addOnDestinationChangedListener
 				}
-				return@addOnDestinationChangedListener
 			}
 
 			// ignore existing connection lost page on stack
-			if (destination.id == R.id.ConnectionLostFragment) {
+			if (destination.id == R.id.connectionLostFragment) {
 				navController.popBackStack()
 			}
 
@@ -331,6 +343,13 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 			object :
 				ConnectivityManager.NetworkCallback() {
 				override fun onAvailable(network: Network) {
+					if (isConnectionlost) {
+						showToast(
+							"Connection found",
+							Toast.LENGTH_SHORT
+						)
+					}
+
 					Handler(Looper.getMainLooper()).post {
 						if (isConnectionlost) {
 							isConnectionlost = false
@@ -342,7 +361,14 @@ class MainActivity : AppCompatActivity(), ParentActivityService {
 				override fun onLost(network: Network) {
 					Handler(Looper.getMainLooper()).post {
 						isConnectionlost = true
-						navController.navigate(R.id.action_global_to_ConnectionLostFragment)
+						if (currentFragmentId in connectionRequiredFragmentIds) {
+							navController.navigate(R.id.action_global_to_ConnectionLostFragment)
+						}
+
+						showToast(
+							"Connection lost",
+							Toast.LENGTH_SHORT
+						)
 					}
 				}
 
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 7e7cd9d9f736d99c660618bf8747a86bdef13a31..0ac66761eff02a75236b33cf43ef112705768a6a 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -80,7 +80,7 @@
         android:label="@string/menu_title_charts"
         tools:layout="@layout/fragment_graph" />
     <fragment
-        android:id="@+id/ConnectionLostFragment"
+        android:id="@+id/connectionLostFragment"
         android:name="com.example.bondoman.views.fragments.ConnectionLostFragment"
         tools:layout="@layout/fragment_connection_lost" />
     <fragment
@@ -97,5 +97,5 @@
     </fragment>
     <action
         android:id="@+id/action_global_to_ConnectionLostFragment"
-        app:destination="@id/ConnectionLostFragment" />
+        app:destination="@id/connectionLostFragment" />
 </navigation>