diff --git a/src/main/java/org/petriNet/Main.java b/src/main/java/org/petriNet/Main.java
index 6b889c71006391d4f52e01e6d84cffdd7ca53a30..40a4ca45d95a05ed1720a7eb9b8e157e70287b4f 100644
--- a/src/main/java/org/petriNet/Main.java
+++ b/src/main/java/org/petriNet/Main.java
@@ -1,142 +1,134 @@
 package org.petriNet;
 
-import java.util.Scanner;
-
 public class Main {
 
     public static void main(String[] args) {
-        Scanner scanner = new Scanner(System.in);
-
-        System.out.println("Choose which simulation to run:");
-        System.out.println("1. Standard Petri Network");
-        System.out.println("2. Special Videur Arc Network");
-        System.out.println("3. Special Zero Arc Petri Network");
-        System.out.print("Enter your choice (1/2/3): ");
-
-        int choice = scanner.nextInt();
-
-        switch (choice) {
-            case 1:
-                runStandardPetriNetwork();
-                break;
-            case 2:
-                runSpecialVideur();
-                break;
-            case 3:
-                runSpecialZero();
-                break;
-            default:
-                System.out.println("Invalid choice! Please run the program again.");
-        }
-
-        scanner.close();
-    }
-
-    private static void runStandardPetriNetwork() {
         System.out.println("Running Standard Petri Network Simulation...");
-        // Initialize the Petri network
-        PetriNet petriNetwork = new PetriNet();
-        // Create places
 
-        Place place1 = new Place(3, petriNetwork.generateId(1));
-        Place place2 = new Place(0, petriNetwork.generateId(1));
-        // Add places to the network
+        // CR1
+        PetriNet Mutex = new PetriNet();
+        Arc arc;
 
-        petriNetwork.addPlace(place1);
-        petriNetwork.addPlace(place2);
-        // Create a transition and add it
+        // CP1
+        Place P1 = new Place(0, Mutex.generateId(1));
+        Mutex.addPlace(P1);
 
-        Transition transition1 = new Transition("T1", petriNetwork.generateId(2));
-        petriNetwork.addTransition(transition1);
-        // Create arcs and add them to the network
-        IncomingArc incomingArc = new IncomingArc_Simple(transition1, place1, 1, petriNetwork.generateId(0));
-        petriNetwork.addArc(incomingArc);
-        transition1.addIncomingArc(incomingArc);
+        // CT1
+        Transition T1 = new Transition("T1", Mutex.generateId(2));
+        Mutex.addTransition(T1);
 
-        OutgoingArc outgoingArc = new OutgoingArc(transition1, place2, 1, petriNetwork.generateId(0));
-        petriNetwork.addArc(outgoingArc);
-        transition1.addOutgoingArc(outgoingArc);
+        // CP2
+        Place P2 = new Place(1, Mutex.generateId(1));
+        Mutex.addPlace(P2);
 
-        petriNetwork.displayNetwork();
+        // CT2
+        Transition T2 = new Transition("T2", Mutex.generateId(2));
+        Mutex.addTransition(T2);
 
-        System.out.println("\nActivating transition T1...");
-        petriNetwork.fireTransition(String.valueOf(transition1.getId()));
+        // CP5
+        Place P3 = new Place(0, Mutex.generateId(1));
+        Mutex.addPlace(P3);
 
-        System.out.println("\nState of Petri Network after Transition T1 Activation:");
-        petriNetwork.displayNetwork();
+        // CT3
+        Transition T3 = new Transition("T3", Mutex.generateId(2));
+        Mutex.addTransition(T3);
 
-        System.out.println("\nVerifying state:");
-        System.out.println("Tokens in Place 1 (expected 2): " + place1.getTokenCount());
-        System.out.println("Tokens in Place 2 (expected 1): " + place2.getTokenCount());
-    }
+        // CP4
+        Place P4 = new Place(0, Mutex.generateId(1));
+        Mutex.addPlace(P4);
 
-    private static void runSpecialVideur() {
-        System.out.println("Running Special Videur Transition Simulation...");
+        // CT4
+        Transition T4 = new Transition("T4", Mutex.generateId(2));
+        Mutex.addTransition(T4);
 
-        PetriNet petriNetwork = new PetriNet();
+        // CP5
+        Place P5 = new Place(1, Mutex.generateId(1));
+        Mutex.addPlace(P5);
 
-        Place place1 = new Place(2, petriNetwork.generateId(1));
-        Place place2 = new Place(4, petriNetwork.generateId(1));
+        // CPT1
+        // Create the simple incoming arc to T1 from P1
+        arc = new IncomingArc_Simple(T1, P1, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T1.addIncomingArc((IncomingArc) arc);
 
-        petriNetwork.addPlace(place1);
-        petriNetwork.addPlace(place2);
 
-        Transition transition1 = new Transition("T1", petriNetwork.generateId(2));
-        petriNetwork.addTransition(transition1);
+        // CTP2
+        // Create the simple outgoing arc from T2 to P1
+        arc = new OutgoingArc(T2, P1, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T2.addOutgoingArc((OutgoingArc) arc);
 
-        IncomingArc_Videur incomingArc_videur = new IncomingArc_Videur(transition1, place2, 1, petriNetwork.generateId(0));
-        petriNetwork.addArc(incomingArc_videur);
-        transition1.addIncomingArc(incomingArc_videur);
 
-        OutgoingArc outgoingArc = new OutgoingArc(transition1, place1, 1, petriNetwork.generateId(0));
-        petriNetwork.addArc(outgoingArc);
-        transition1.addOutgoingArc(outgoingArc);
+        // CTP1
+        // Create the simple outgoing arc from T1 to P2
+        arc = new OutgoingArc(T1, P2, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T1.addOutgoingArc((OutgoingArc) arc);
 
-        petriNetwork.displayNetwork();
 
-        System.out.println("\nActivating transition T1...");
-        petriNetwork.fireTransition(String.valueOf(transition1.getId()));
+        // CPT2
+        // Create the simple incoming arc to T2 from P2
+        arc = new IncomingArc_Simple(T2, P2, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T2.addIncomingArc((IncomingArc) arc);
 
-        System.out.println("\nState of Petri Network after Transition T1 Activation:");
-        petriNetwork.displayNetwork();
 
-        System.out.println("\nVerifying state:");
-        System.out.println("Tokens in Place 1 (expected 3): " + place1.getTokenCount());
-        System.out.println("Tokens in Place 2 (expected 0): " + place2.getTokenCount());
-    }
+        // CPT5
+        // Create the simple incoming arc to T1 from P3
+        arc = new IncomingArc_Simple(T1, P3, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T1.addIncomingArc((IncomingArc) arc);
+
+
+        // CTP5
+        // Create the simple outgoing arc from T2 to P3
+        arc = new OutgoingArc(T2, P3, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T2.addOutgoingArc((OutgoingArc) arc);
+
+
+        // CPT6
+        // Create the simple incoming arc to T3 from P3
+        arc = new IncomingArc_Simple(T3, P3, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T3.addIncomingArc((IncomingArc) arc);
+
 
-    private static void runSpecialZero() {
-        System.out.println("Running Special Zero Transition Simulation...");
+        // CTP6
+        // Create the simple outgoing arc from T4 to P3
+        arc = new OutgoingArc(T4, P3, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T4.addOutgoingArc((OutgoingArc) arc);
 
-        PetriNet petriNetwork = new PetriNet();
 
-        Place place1 = new Place(3, petriNetwork.generateId(1));
-        Place place2 = new Place(0, petriNetwork.generateId(1));
+        // CTP3
+        // Create the simple outgoing arc from T3 to P4
+        arc = new OutgoingArc(T3, P4, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T3.addOutgoingArc((OutgoingArc) arc);
 
-        petriNetwork.addPlace(place1);
-        petriNetwork.addPlace(place2);
 
-        Transition transition1 = new Transition("T1", petriNetwork.generateId(2));
-        petriNetwork.addTransition(transition1);
+        // CPT4
+        // Create the simple incoming arc to T4 from P4
+        arc = new IncomingArc_Simple(T4, P4, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T4.addIncomingArc((IncomingArc) arc);
 
-        IncomingArc_Zero incomingArc_zero = new IncomingArc_Zero(transition1, place2, 1, petriNetwork.generateId(0));
-        petriNetwork.addArc(incomingArc_zero);
-        transition1.addIncomingArc(incomingArc_zero);
 
-        OutgoingArc outgoingArc = new OutgoingArc(transition1, place1, 1, petriNetwork.generateId(0));
-        petriNetwork.addArc(outgoingArc);
-        transition1.addOutgoingArc(outgoingArc);
+        // CPT3
+        // Create the simple incoming arc to T3 from P5
+        arc = new IncomingArc_Simple(T3, P5, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T3.addIncomingArc((IncomingArc) arc);
 
-        petriNetwork.displayNetwork();
 
-        System.out.println("\nActivating transition T1...");
-        petriNetwork.fireTransition(String.valueOf(transition1.getId()));
+        // CTP4
+        // Create the simple outgoing arc from T4 to P5
+        arc = new OutgoingArc(T4, P5, 1, Mutex.generateId(0));
+        Mutex.addArc(arc);
+        T4.addOutgoingArc((OutgoingArc) arc);
 
-        System.out.println("\nState of Petri Network after Transition T1 Activation:");
-        petriNetwork.displayNetwork();
 
-        System.out.println("\nVerifying state:");
-        System.out.println("Tokens in Place 1 (expected 4): " + place1.getTokenCount());
-        System.out.println("Tokens in Place 2 (expected 0): " + place2.getTokenCount());
+        Mutex.displayState();
     }
 }
diff --git a/src/main/java/org/petriNet/PetriNet.java b/src/main/java/org/petriNet/PetriNet.java
index 0d2523d71e1b7eadb48c7e7878a49b65ec39eaea..680203ddc70f3e95550b9314604177fa6c1231be 100644
--- a/src/main/java/org/petriNet/PetriNet.java
+++ b/src/main/java/org/petriNet/PetriNet.java
@@ -231,7 +231,27 @@
 			return OutgoingArc;
 		}
 
+		@Override
+		public Place FindPlaceById(int id) {
+			for (Place place : this.places) {
+				if (place.getId() == id) {
+					return place;
+				}
+			}
+			System.out.println("Place not found");
+			return null;
+		}
 
+		@Override
+		public Arc FindArcById(int id) {
+			for (Arc arc : this.arcs) {
+				if (arc.getId() == id) {
+					return arc;
+				}
+			}
+			System.out.println("Arc not found");
+			return null;
+		}
 
 		/**
 		 * Removing a place results in the removal of all arcs linked to it.
@@ -291,17 +311,85 @@
 		public void displayState() {
 			if (this.networkState.equals("No transition fired")) {
 				System.out.println("No transition fired");
-				// Ask the user if they want to fire a transition
 				Scanner scanner = new Scanner(System.in);
-				System.out.println("Do you want to fire a transition? (Y/N)");
-				String response = scanner.nextLine();
-				if (response.equals("Y")) {
-					// Show the Petri Net
-					displayNetwork();
-					// Ask the user for the id of the transition to fire
-					System.out.println("Enter the id of the transition to fire: ");
-					String id = scanner.nextLine();
-					fireTransition(id);
+				while (true) {
+					System.out.println("Choose an option:");
+					System.out.println("1. Display the network");
+					System.out.println("2. Fire a transition");
+					System.out.println("3. Change the number of tokens in a place");
+					System.out.println("4. Change the weight of an arc");
+					System.out.println("5. Change an arc to an IncomingArc_Videur or IncomingArc_Zero");
+					System.out.println("6. Exit");
+					String response = scanner.nextLine();
+
+					switch (response) {
+						case "1":
+							displayNetwork();
+							break;
+						case "2":
+							System.out.println("Enter the id of the transition to fire: ");
+							int transitionId = getIntInput(scanner);
+							fireTransition(String.valueOf(transitionId));
+							break;
+						case "3":
+							System.out.println("Enter the id of the place to change tokens: ");
+							int placeId = getIntInput(scanner);
+							System.out.println("Enter the new number of tokens: ");
+							int tokens = getIntInput(scanner);
+							Place place = this.FindPlaceById(placeId);
+							if (place == null) {
+								break;
+							}
+							place.setTokenCount(tokens);
+							break;
+						case "4":
+							System.out.println("Enter the id of the arc to change weight: ");
+							int arcId = getIntInput(scanner);
+							System.out.println("Enter the new weight: ");
+							int weight = getIntInput(scanner);
+							Arc arc = this.FindArcById(arcId);
+							if (arc == null) {
+								break;
+							}
+							arc.setWeight(weight);
+							break;
+						case "5":
+							System.out.println("Enter the id of the arc to change: ");
+							int arcToChangeId = getIntInput(scanner);
+							Arc arcToChange = this.FindArcById(arcToChangeId);
+							if (arcToChange == null) {
+								break;
+							}
+							if (arcToChange instanceof IncomingArc) {
+								System.out.println("Choose the type of arc to change to:");
+								System.out.println("1. IncomingArc_Videur");
+								System.out.println("2. IncomingArc_Zero");
+								int arcType = getIntInput(scanner);
+								Transition transition = arcToChange.getTransition();
+								Place placeToChange = arcToChange.getPlace();
+								this.removeArc(arcToChange);
+								if (arcType == 1) {
+									IncomingArc_Videur newArc = new IncomingArc_Videur(transition, placeToChange, arcToChange.getWeight(), this.generateId(0));
+									this.addArc(newArc);
+									transition.addIncomingArc(newArc);
+									System.out.println("Arc changed to IncomingArc_Videur.");
+								} else if (arcType == 2) {
+									IncomingArc_Zero newArc = new IncomingArc_Zero(transition, placeToChange, arcToChange.getWeight(), this.generateId(0));
+									this.addArc(newArc);
+									transition.addIncomingArc(newArc);
+									System.out.println("Arc changed to IncomingArc_Zero.");
+								} else {
+									System.out.println("Invalid arc type.");
+								}
+							} else {
+								System.out.println("Arc is not an IncomingArc.");
+							}
+							break;
+						case "6":
+							return; // Exit the method
+						default:
+							System.out.println("Invalid option. Please try again.");
+					}
 				}
 			} else {
 				System.out.println("Transition being validated");
@@ -346,12 +434,24 @@
 			System.out.println("List of arcs:");
 			for (Arc arc : this.arcs) {
 				if (arc instanceof IncomingArc) {
-					System.out.println(arc.getId() + " : simple arc with weight " + arc.getWeight() + " ("
+					System.out.println(arc.getId() + " : "
+							+ (arc instanceof IncomingArc_Videur ? "videur" : (arc instanceof IncomingArc_Zero ? "zero" : "simple arc"))
+							+ " with weight " + arc.getWeight() + " ("
 							+ "Place with Id " + arc.getPlace().getId() + " to " + arc.getTransition().getName() + ")");
 				} else {
-					System.out.println(arc.getId() + " : simple arc with weight " + arc.getWeight() + " ("
+					System.out.println(arc.getId() + " : outgoing arc with weight " + arc.getWeight() + " ("
 							+ arc.getTransition().getName() + " to " + "Place with Id " + arc.getPlace().getId() + ")");
 				}
 			}
 		}
+
+		private int getIntInput(Scanner scanner) {
+			while (!scanner.hasNextInt()) {
+				System.out.println("Invalid input. Please enter an integer.");
+				scanner.next(); // discard invalid input
+			}
+			int input = scanner.nextInt();
+			scanner.nextLine(); // consume the newline character
+			return input;
+		}
 	}
\ No newline at end of file
diff --git a/src/main/java/org/petriNet/PetriNetService.java b/src/main/java/org/petriNet/PetriNetService.java
index 8a5c5aa84dbf09d9452fd4214ee95fdbeaf16547..473a38eafee96987b9c44c22f21b4f1e60ffd75d 100644
--- a/src/main/java/org/petriNet/PetriNetService.java
+++ b/src/main/java/org/petriNet/PetriNetService.java
@@ -14,6 +14,10 @@ public interface PetriNetService {
 
 	void removeArc(Arc arc);
 
+	Place FindPlaceById(int id);
+
+	Arc FindArcById(int id);
+
 	void displayState();
 
 	/**
diff --git a/src/main/java/org/petriNet/Place.java b/src/main/java/org/petriNet/Place.java
index 801a7555163b896db01644670ebc767e469a14bb..77e9fde88a718b156ec0b52980de9bcf3a5f4402 100644
--- a/src/main/java/org/petriNet/Place.java
+++ b/src/main/java/org/petriNet/Place.java
@@ -49,6 +49,5 @@ public class Place {
             this.tokenCount = tokenCount;
         }
     }
-    // A function to find the incoming arcs of a place
 
 }