diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java
index 8ad41af9ea02426b509e8b1da0d22d8475b29efb..3c94cbcb7bc9d92b8b3ec9baa07bc9b1ffe2c039 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/controller/TrackingController.java
@@ -32,19 +32,18 @@ public class TrackingController {
     @RequestMapping(path = "/new-drago-location", method = RequestMethod.POST)
     public String handleNewDrago(Model model, 
                                 @RequestParam(value = "dragoLocation", required = true) String dragoLocation) {
-        
-    
-        // TODO: implement drago location handler
 
+        // TODO: implement drago location handler
+        trackingService.handleNewEventLocation("Moving Drago",dragoLocation);
         return "redirect:/tracking";
     }
 
     @RequestMapping(path = "/new-sweets-location", method = RequestMethod.POST)
     public String handleNewSweets(Model model, 
                                 @RequestParam(value = "sweetsLocation", required = true) String sweetsLocation) {
-        
-    
+
         // TODO: implement sweets location handler
+        trackingService.handleNewEventLocation("Moving Sweets", sweetsLocation);
         return "redirect:/tracking";
     }
 }
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java
index b244054b1a2de29f5d1f0b1523635b50535970b4..da0b5445571468a31430d9591133745c7181187b 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/Courier.java
@@ -5,32 +5,41 @@ import java.util.List;
 public class Courier implements RoadUser {
 
     private String name;
+    private  int speed;
+    private List<String> allowedRoutes;
 
     /*
         speed: the speed of the courier
         allowedRoutes: name of all possible routes this courier can visit
     */
     public Courier(String name, int speed, List<String> allowedRoutes) {
-        
         this.name = name;
+        this.speed = speed;
+        this.allowedRoutes = allowedRoutes;
         // TODO complete me
     }
 
     @Override
     public void handleNotification(String notificationFrom, String location) {
         // TODO complete me
-        
+        if(notificationFrom.equals("Drago Monitor")){
+            int indexLocationDrago = allowedRoutes.indexOf(location);
+            allowedRoutes.remove(indexLocationDrago);
+        }else if(notificationFrom.equals("Sweets Monitor")){
+            int indexLocationSweets = allowedRoutes.indexOf(location);
+            allowedRoutes.add(0,location);
+            allowedRoutes.remove(indexLocationSweets+1);
+        }
     }
 
     @Override
     public int getSpeed() {
         // TODO complete me
-        return 0;
+        return this.speed;
     }
 
     @Override
     public String getName() {
-        return name;
+        return this.name;
     }
-    
 }
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java
index b03924051a64fdc850120dec1918970862f520ee..b4549d4deae30c1ff666e6740a070ad6dae56060 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoHunter.java
@@ -5,30 +5,45 @@ import java.util.List;
 public class DragoHunter implements RoadUser {
 
     private String name;
+    private  int speed;
+    private List<String> allowedRoutes;
+
     /*
         speed: the speed of the courier
         allowedRoutes: name of all possible routes this courier can visit
     */
     public DragoHunter(String name, int speed, List<String> allowedRoutes) {
-        this.name = name; 
+        this.name = name;
+        this.speed = speed;
+        this.allowedRoutes = allowedRoutes;
         // TODO complete me
     }
 
     @Override
     public void handleNotification(String notificationFrom, String location) {
         // TODO complete me
-        
+        //Diasumsikan bahwa Drago Hunter akan memprioritaskan drago daripada sweets
+        //Prioritas tidak dijelaskan pada requirement
+        if(notificationFrom.equals("Drago Monitor")){
+            int indexLocationDrago = allowedRoutes.indexOf(location);
+            allowedRoutes.add(0,location);
+            allowedRoutes.remove(indexLocationDrago+1);
+        }else if(notificationFrom.equals("Sweets Monitor")){
+            int indexLocationSweets = allowedRoutes.indexOf(location);
+            allowedRoutes.add(0,location);
+            allowedRoutes.remove(indexLocationSweets+1);
+        }
     }
 
     @Override
     public int getSpeed() {
         // TODO complete me
-        return 0;
+        return this.speed;
     }
 
     @Override
     public String getName() {
-        return name;
+        return this.name;
     }
     
 }
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java
index 0c443de55d5d97562ab31e7fcd05cdfc3b4c8b2a..dfa2a982a92100ef7c121f6a4172114e86dda6f9 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/DragoMonitor.java
@@ -1,17 +1,23 @@
 package id.ac.ui.cs.advprog.tutorial1.tracking.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class DragoMonitor implements EventMonitor {
 
+    List<RoadUser> roadUsers = new ArrayList<>();
     @Override
     public void addRoadUser(RoadUser roadUser) {
         // TODO Auto-generated method stub
-        
+        this.roadUsers.add(roadUser);
     }
 
     @Override
     public void notifyRoadUsers(String newDragoLocation) {
         // TODO Auto-generated method stub
-        
+        for (RoadUser roadUser: roadUsers) {
+            roadUser.handleNotification(this.getName(), newDragoLocation);
+        }
     }
 
     @Override
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java
index d71cb402a25af2caa36478f5b6c13b8a275fa4ce..4a5c143bee431b865b6e887666ec1cf0da4c63c3 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/EventMonitor.java
@@ -1,5 +1,7 @@
 package id.ac.ui.cs.advprog.tutorial1.tracking.core;
 
+import java.util.List;
+
 public interface EventMonitor {
     
     void addRoadUser(RoadUser roadUser);
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java
index 707e87b49a283b927f48462c4ffb7c912277557f..e32d80735325a2294a7771e35c0c557be6c37928 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/core/SweetsMonitor.java
@@ -1,17 +1,23 @@
 package id.ac.ui.cs.advprog.tutorial1.tracking.core;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class SweetsMonitor implements EventMonitor {
 
+    List<RoadUser> roadUsers = new ArrayList<>();
     @Override
     public void addRoadUser(RoadUser roadUser) {
         // TODO Auto-generated method stub
-        
+        this.roadUsers.add(roadUser);
     }
 
     @Override
     public void notifyRoadUsers(String newSweetsLocation) {
         // TODO Auto-generated method stub
-        
+        for (RoadUser roadUser: roadUsers) {
+            roadUser.handleNotification(this.getName(), newSweetsLocation);
+        }
     }
 
     @Override
diff --git a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java
index 57c3582b0e214fb8b336fe1e446780e091e36fbf..fc15023392af3b6e2c540d480fccf123f2282093 100644
--- a/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java
+++ b/src/main/java/id/ac/ui/cs/advprog/tutorial1/tracking/service/TrackingServiceImpl.java
@@ -27,7 +27,11 @@ public class TrackingServiceImpl implements TrackingService {
     @Override
     public void handleNewEventLocation(String eventName, String location) {
         // TODO Auto-generated method stub
-        
+        if(eventName.equals("Moving Drago")){
+            eventMonitorRepository.findByName("Drago Monitor").notifyRoadUsers(location);
+        }else if(eventName.equals("Moving Sweets")){
+            eventMonitorRepository.findByName("Sweets Monitor").notifyRoadUsers(location);
+        }
     }
     
 }