diff --git a/app/src/main/java/com/example/cupcake/FlavorFragment.kt b/app/src/main/java/com/example/cupcake/FlavorFragment.kt
index 928148455e56b623c66ad230426c1229b88d4c83..35f2bf25193ea75124850e8053e607e06e5cf12f 100644
--- a/app/src/main/java/com/example/cupcake/FlavorFragment.kt
+++ b/app/src/main/java/com/example/cupcake/FlavorFragment.kt
@@ -54,6 +54,11 @@ class FlavorFragment : Fragment() {
         }
     }
 
+    fun cancelOrder() {
+        sharedViewModel.resetOrder()
+        findNavController().navigate(R.id.action_flavorFragment_to_startFragment)
+    }
+
     /**
      * Navigate to the next screen to choose pickup date.
      */
diff --git a/app/src/main/java/com/example/cupcake/PickupFragment.kt b/app/src/main/java/com/example/cupcake/PickupFragment.kt
index 0a7f09f40c507b27af567990cfcc05e12b4e2457..47831c4a4c1f39b3037d0970fc177512accec558 100644
--- a/app/src/main/java/com/example/cupcake/PickupFragment.kt
+++ b/app/src/main/java/com/example/cupcake/PickupFragment.kt
@@ -54,6 +54,11 @@ class PickupFragment : Fragment() {
         }
     }
 
+    fun cancelOrder() {
+        sharedViewModel.resetOrder()
+        findNavController().navigate(R.id.action_pickupFragment_to_startFragment)
+    }
+
     /**
      * Navigate to the next screen to see the order summary.
      */
diff --git a/app/src/main/java/com/example/cupcake/SummaryFragment.kt b/app/src/main/java/com/example/cupcake/SummaryFragment.kt
index dcdf4a72e7557c8dbfdd39af9a779e1f0aad95c5..a68fb73d0177745cd2fbe1fb2d0dcbe83cd31c03 100644
--- a/app/src/main/java/com/example/cupcake/SummaryFragment.kt
+++ b/app/src/main/java/com/example/cupcake/SummaryFragment.kt
@@ -23,6 +23,7 @@ import android.view.ViewGroup
 import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.findNavController
 import com.example.cupcake.databinding.FragmentSummaryBinding
 
 /**
@@ -55,6 +56,11 @@ class SummaryFragment : Fragment() {
         }
     }
 
+    fun cancelOrder() {
+        sharedViewModel.resetOrder()
+        findNavController().navigate(R.id.action_summaryFragment_to_startFragment)
+    }
+
     /**
      * Submit the order by sharing out the order details to another app via an implicit intent.
      */
diff --git a/app/src/main/res/layout/fragment_flavor.xml b/app/src/main/res/layout/fragment_flavor.xml
index e3816eb5ef5c19e10da9531f3bbe54f5073cb0e7..c1f62200f8f4ce09b086e0737014e10afe686f2e 100644
--- a/app/src/main/res/layout/fragment_flavor.xml
+++ b/app/src/main/res/layout/fragment_flavor.xml
@@ -114,6 +114,7 @@
                 android:id="@+id/cancel_button"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
+                android:onClick="@{() -> flavorFragment.cancelOrder()}"
                 android:text="@string/cancel"
                 android:layout_marginEnd="@dimen/side_margin"
                 style="?attr/materialButtonOutlinedStyle"
diff --git a/app/src/main/res/layout/fragment_pickup.xml b/app/src/main/res/layout/fragment_pickup.xml
index fbba9bab8ad0742fc0868b2be99ee622d713d80c..15bac555e40746f6a9575aaad6f2030e1fce194b 100644
--- a/app/src/main/res/layout/fragment_pickup.xml
+++ b/app/src/main/res/layout/fragment_pickup.xml
@@ -109,6 +109,7 @@
             <Button
                 android:id="@+id/cancel_button"
                 style="?attr/materialButtonOutlinedStyle"
+                android:onClick="@{() -> pickupFragment.cancelOrder()}"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginEnd="@dimen/side_margin"
diff --git a/app/src/main/res/layout/fragment_summary.xml b/app/src/main/res/layout/fragment_summary.xml
index b7ad9e47582fc78c4ea39e337fb04c5ef8a65d27..7dac7af231919878e3beaa03e3c587a70678a109 100644
--- a/app/src/main/res/layout/fragment_summary.xml
+++ b/app/src/main/res/layout/fragment_summary.xml
@@ -144,6 +144,7 @@
             <Button
                 android:id="@+id/cancel_button"
                 style="?attr/materialButtonOutlinedStyle"
+                android:onClick="@{() -> summaryFragment.cancelOrder()}"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/margin_between_elements"
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 99c61b10698cbadf21ce0df89d54f3a7da2c00bb..4a6b71ba6ee9478d3097cc5c822c1b5104457ab9 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -37,7 +37,9 @@
             app:destination="@id/pickupFragment" />
         <action
             android:id="@+id/action_flavorFragment_to_startFragment"
-            app:destination="@id/startFragment" />
+            app:destination="@id/startFragment"
+            app:popUpTo="@id/startFragment"
+            app:popUpToInclusive="true" />
     </fragment>
     <fragment
         android:id="@+id/pickupFragment"
@@ -49,7 +51,9 @@
             app:destination="@id/summaryFragment" />
         <action
             android:id="@+id/action_pickupFragment_to_startFragment"
-            app:destination="@id/startFragment" />
+            app:destination="@id/startFragment"
+            app:popUpTo="@id/startFragment"
+            app:popUpToInclusive="true" />
     </fragment>
     <fragment
         android:id="@+id/summaryFragment"
@@ -58,6 +62,8 @@
         tools:layout="@layout/fragment_summary" >
         <action
             android:id="@+id/action_summaryFragment_to_startFragment"
-            app:destination="@id/startFragment" />
+            app:destination="@id/startFragment"
+            app:popUpTo="@id/startFragment"
+            app:popUpToInclusive="true" />
     </fragment>
 </navigation>
\ No newline at end of file