diff --git a/src/main/java/agents/Agent.java b/src/main/java/agents/Agent.java
index 07fba3ca7c4a95a1fad565c22740022945f3b228..fcd55ead1704e7f779be11bd9b460cfd34f00ef8 100644
--- a/src/main/java/agents/Agent.java
+++ b/src/main/java/agents/Agent.java
@@ -1,6 +1,6 @@
 package agents;
 
-public interface Agent {
+import behaviors.Wakeable;
 
-    void wakeUp();
+public interface Agent extends Wakeable {
 }
diff --git a/src/main/java/agents/Agent2D.java b/src/main/java/agents/Agent2D.java
index efc183b074d4b9676452696b70608233d7897348..58d03143159f92ad9a2ae83f2aaf2bfce7edfd05 100644
--- a/src/main/java/agents/Agent2D.java
+++ b/src/main/java/agents/Agent2D.java
@@ -1,8 +1,7 @@
 package agents;
 
-import java.awt.*;
+import behaviors.Positionable2D;
 
-public interface Agent2D extends Agent {
+public interface Agent2D extends Agent, Positionable2D {
 
-    Point getPosition();
 }
diff --git a/src/main/java/agents/FairInfectionRWAgent.java b/src/main/java/agents/FairInfectionRWAgent.java
index 69883ee5c563728aa60cebe34c31d64dcbcf6709..260525253a5526bf4676b742573dfce8e9a9832e 100644
--- a/src/main/java/agents/FairInfectionRWAgent.java
+++ b/src/main/java/agents/FairInfectionRWAgent.java
@@ -7,7 +7,7 @@ import java.awt.*;
 
 public class FairInfectionRWAgent extends RandomWalkingAgent implements SEIRSAgent {
 
-    public FairInfectionRWAgent(Point position, int seed, SEIRSEnvironment environment) {
+    public FairInfectionRWAgent(Point position, long seed, SEIRSEnvironment environment) {
         super(position, seed, environment);
     }
 
@@ -16,7 +16,7 @@ public class FairInfectionRWAgent extends RandomWalkingAgent implements SEIRSAge
         boolean isExposed = false;
         int roll = r.nextInt(10000)+1;
         if (this.environment.getInfectedNeighbors(position).size() != 0) {
-            if (roll <= YamlReader.getParams().getInfectionRate()*10000) {
+            if (roll <= YamlReader.getParams().infectionRate()*10000) {
                 isExposed = true;
             }
         }
diff --git a/src/main/java/agents/RandomWalkingAgent.java b/src/main/java/agents/RandomWalkingAgent.java
index 6cc0bb889f7fc35293ebf60de74697574888a4a6..94187e770f7fe05b9ab615d20f84d1a5ac3a288b 100644
--- a/src/main/java/agents/RandomWalkingAgent.java
+++ b/src/main/java/agents/RandomWalkingAgent.java
@@ -2,35 +2,27 @@ package agents;
 
 import agents.states.SEIRSState;
 import agents.states.SuceptibleSEIRSState;
+import behaviors.Randomized;
 import environment.SEIRSEnvironment;
 import utils.YamlReader;
 
 import java.awt.Point;
-import java.security.SecureRandom;
 import java.util.List;
-import java.util.Random;
 
-@SuppressWarnings("ThrowablePrintedToSystemOut")
-public class RandomWalkingAgent implements SEIRSAgent {
+public class RandomWalkingAgent extends Randomized implements SEIRSAgent {
 
     protected Point position;
-    protected Random r;
     protected final SEIRSEnvironment environment;
     protected SEIRSState state;
 
     private List<Point> authorizedPositions;
     private Point nextPosition;
 
-    public RandomWalkingAgent(Point position, int seed, SEIRSEnvironment environment) {
+    public RandomWalkingAgent(Point position, long seed, SEIRSEnvironment environment) {
+        super(seed);
         this.position = position;
         this.state = new SuceptibleSEIRSState(this);
         this.environment = environment;
-        try{
-            r = SecureRandom.getInstance("SHA1PRNG", "SUN");
-        }catch (Exception e) {
-            System.err.println(e);
-            System.exit(1);
-        }
         r.setSeed(seed);
     }
 
diff --git a/src/main/java/behaviors/Positionable2D.java b/src/main/java/behaviors/Positionable2D.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea57469bc49188d301116367ad3589b977365e8d
--- /dev/null
+++ b/src/main/java/behaviors/Positionable2D.java
@@ -0,0 +1,8 @@
+package behaviors;
+
+import java.awt.*;
+
+public interface Positionable2D {
+
+    Point getPosition();
+}
diff --git a/src/main/java/behaviors/Randomized.java b/src/main/java/behaviors/Randomized.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0cf39fc7656616ee8668cea89be3764320f74d3
--- /dev/null
+++ b/src/main/java/behaviors/Randomized.java
@@ -0,0 +1,21 @@
+package behaviors;
+
+import java.security.SecureRandom;
+import java.util.Random;
+
+public abstract class Randomized {
+
+    protected Random r;
+
+    @SuppressWarnings("ThrowablePrintedToSystemOut")
+    public Randomized(long seed) {
+        try{
+            r = SecureRandom.getInstance("SHA1PRNG", "SUN");
+        }catch (Exception e) {
+            System.err.println(e);
+            System.exit(1);
+        }
+        r.setSeed(seed);
+    }
+
+}
diff --git a/src/main/java/behaviors/Wakeable.java b/src/main/java/behaviors/Wakeable.java
new file mode 100644
index 0000000000000000000000000000000000000000..dfb18696f438cbcecbdf1413030aecf10bb1fe07
--- /dev/null
+++ b/src/main/java/behaviors/Wakeable.java
@@ -0,0 +1,5 @@
+package behaviors;
+
+public interface Wakeable {
+    void wakeUp();
+}
\ No newline at end of file
diff --git a/src/main/java/environment/ChunkedSEIRSEnvironment.java b/src/main/java/environment/ChunkedSEIRSEnvironment.java
index 1bc7f5109c9ddd629d9ced94e129fa0cb6670740..7bfbe659b79c6e7c67d9c4b1f4c4b90ee5dca5fc 100644
--- a/src/main/java/environment/ChunkedSEIRSEnvironment.java
+++ b/src/main/java/environment/ChunkedSEIRSEnvironment.java
@@ -1,9 +1,9 @@
 package environment;
 
-import agents.Agent2D;
 import agents.SEIRSAgent;
 import agents.states.InfectedSEIRSState;
 import agents.states.SEIRSState;
+import behaviors.Positionable2D;
 
 import java.awt.*;
 import java.util.ArrayList;
@@ -79,7 +79,7 @@ public class ChunkedSEIRSEnvironment implements SEIRSEnvironment {
     }
 
     @Override
-    public List<Point> perceiveAuthorizedPositions(Agent2D agent) {
+    public List<Point> perceiveAuthorizedPositions(Positionable2D agent) {
         List<Point> authorizedPosition = new ArrayList<>();
 
         for (int move = 0; move < MAX_MOVEMENT; move++) {
@@ -102,7 +102,7 @@ public class ChunkedSEIRSEnvironment implements SEIRSEnvironment {
     }
 
     @Override
-    public void notifyNewPosition(Point newPosition, Agent2D agent) {
+    public void notifyNewPosition(Point newPosition, Positionable2D agent) {
         if (chunks == null) {
             initiateChunks();
         }
diff --git a/src/main/java/environment/Environment2D.java b/src/main/java/environment/Environment2D.java
index 531dac593f8d02961405f4cdcb9c868e898ac8d5..261a895812a044abc06a586e9a7d7805cda7c8ac 100644
--- a/src/main/java/environment/Environment2D.java
+++ b/src/main/java/environment/Environment2D.java
@@ -1,6 +1,6 @@
 package environment;
 
-import agents.Agent2D;
+import behaviors.Positionable2D;
 
 import java.awt.*;
 import java.util.List;
@@ -20,7 +20,7 @@ public interface Environment2D extends Environment {
     int DOWN_RIGHT = 8;
     int MAX_CHUNK = 9;
 
-    List<Point> perceiveAuthorizedPositions(Agent2D agent);
-    void notifyNewPosition(Point newPosition, Agent2D agent);
+    List<Point> perceiveAuthorizedPositions(Positionable2D agent);
+    void notifyNewPosition(Point newPosition, Positionable2D agent);
     int getSize();
 }
diff --git a/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java b/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java
index 2ec979b1879510bb80ee28a937f8aa0ec2ca8e30..4cfaa5271aa06c9edbfb3d4374b9c9802839091b 100644
--- a/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java
+++ b/src/main/java/environment/WrappingChunkedSEIRSEnvironment.java
@@ -1,7 +1,7 @@
 package environment;
 
-import agents.Agent2D;
 import agents.SEIRSAgent;
+import behaviors.Positionable2D;
 
 import java.awt.*;
 import java.util.ArrayList;
@@ -29,7 +29,7 @@ public class WrappingChunkedSEIRSEnvironment extends ChunkedSEIRSEnvironment imp
     }
 
     @Override
-    public List<Point> perceiveAuthorizedPositions(Agent2D agent) {
+    public List<Point> perceiveAuthorizedPositions(Positionable2D agent) {
         List<Point> authorisedPositions = new ArrayList<>();
         for (int move = 0; move < MAX_MOVEMENT; move++) {
             Point position = getNextPosition(move,agent.getPosition());
diff --git a/src/main/java/models/Parameters.java b/src/main/java/models/Parameters.java
index 7c27d7c0f8a54b94b13ba999f965b504524c5cb0..4f0bc859b90e8d5b94707e8fd0f4f7cec56b5c66 100644
--- a/src/main/java/models/Parameters.java
+++ b/src/main/java/models/Parameters.java
@@ -2,7 +2,7 @@ package models;
 
 @SuppressWarnings("unused")
 public record Parameters(
-        int seed,
+        long seed,
         int population,
         int size,
         int nbOfPatientZero,
diff --git a/src/main/java/scheduler/FairAsynchronousScheduler.java b/src/main/java/scheduler/FairAsynchronousScheduler.java
index 4c5cf0decf777edeb47e258b1767b9fcb9ae9a6b..de564d945497d27fe3702b08999b4dfa4c8d18b7 100644
--- a/src/main/java/scheduler/FairAsynchronousScheduler.java
+++ b/src/main/java/scheduler/FairAsynchronousScheduler.java
@@ -1,6 +1,6 @@
 package scheduler;
 
-import agents.Agent;
+import behaviors.Wakeable;
 
 import java.util.Arrays;
 import java.util.List;
@@ -12,19 +12,19 @@ import java.util.stream.Collectors;
 public class FairAsynchronousScheduler implements Scheduler {
 
     private final ExecutorService executor = Executors.newSingleThreadExecutor();
-    private Queue<Agent> queue;
+    private Queue<Wakeable> queue;
 
     @Override
-    public void init(Agent[] agents) {
+    public void init(Wakeable[] agents) {
         this.queue = new ConcurrentLinkedQueue<>(Arrays.stream(agents).toList());
     }
 
     @Override
     public void doNextCycle() {
-        List<Future<Agent>> results = queue.parallelStream().map(agent -> executor.submit(() -> {agent.wakeUp(); return agent;})).toList();
-        Function<Future<Agent>, Agent> futureTreatment = futureAgent -> {
+        List<Future<Wakeable>> results = queue.parallelStream().map(entity -> executor.submit(() -> {entity.wakeUp(); return entity;})).toList();
+        Function<Future<Wakeable>, Wakeable> futureTreatment = futureEntity -> {
             try {
-                return futureAgent.get();
+                return futureEntity.get();
             } catch (ExecutionException | InterruptedException e) {
                 e.printStackTrace();
             }
diff --git a/src/main/java/scheduler/FairSynchronousScheduler.java b/src/main/java/scheduler/FairSynchronousScheduler.java
index 50df63223cbd9d05efe917cd18010569c459dd12..b99e892d8b33f23f3c5f992b35e92e1f70613652 100644
--- a/src/main/java/scheduler/FairSynchronousScheduler.java
+++ b/src/main/java/scheduler/FairSynchronousScheduler.java
@@ -1,26 +1,17 @@
 package scheduler;
 
-import agents.Agent;
+import behaviors.Randomized;
+import behaviors.Wakeable;
 
-import java.security.SecureRandom;
 import java.util.*;
 
-@SuppressWarnings("ThrowablePrintedToSystemOut")
-public class FairSynchronousScheduler implements Scheduler {
+public class FairSynchronousScheduler extends Randomized implements Scheduler {
 
-    private Agent[] agents;
+    private Wakeable[] agents;
     private Stack<Integer> executionOrder;
-    private Random r;
 
-    public FairSynchronousScheduler(Integer seed) {
-
-        try{
-            r = SecureRandom.getInstance("SHA1PRNG", "SUN");
-        }catch (Exception e) {
-            System.err.println(e);
-            System.exit(1);
-        }
-        r.setSeed(seed);
+    public FairSynchronousScheduler(long seed) {
+        super(seed);
     }
 
     private void generateExecutionOrder() {
@@ -38,7 +29,7 @@ public class FairSynchronousScheduler implements Scheduler {
     }
 
     @Override
-    public void init(Agent[] agents) {
+    public void init(Wakeable[] agents) {
         this.agents = agents;
         executionOrder = new Stack<>();
     }
diff --git a/src/main/java/scheduler/Scheduler.java b/src/main/java/scheduler/Scheduler.java
index bb2437f7d4ed4c41f50fbfb6b235c5e924f18525..670d786367e2f0cedac36c7a94d9feb9d2753754 100644
--- a/src/main/java/scheduler/Scheduler.java
+++ b/src/main/java/scheduler/Scheduler.java
@@ -1,10 +1,10 @@
 package scheduler;
 
-import agents.Agent;
+import behaviors.Wakeable;
 
 public interface Scheduler {
 
-    void init(Agent[] agents);
+    void init(Wakeable[] agents);
     void doNextCycle();
 
 }
diff --git a/src/main/java/sma/SEIRS_SMA.java b/src/main/java/sma/SEIRS_SMA.java
index ffd5778207418c3358b6483d1f11353e82b7e8eb..12f9669f0f7787db3f71d972d2515315c877e9c4 100644
--- a/src/main/java/sma/SEIRS_SMA.java
+++ b/src/main/java/sma/SEIRS_SMA.java
@@ -3,6 +3,7 @@ package sma;
 import agents.FairInfectionRWAgent;
 import agents.SEIRSAgent;
 import agents.states.InfectedSEIRSState;
+import behaviors.Randomized;
 import environment.SEIRSEnvironment;
 import environment.WrappingChunkedSEIRSEnvironment;
 import models.Parameters;
@@ -19,26 +20,38 @@ import view.StatisticsCanvas;
 
 import java.awt.*;
 import java.io.IOException;
-import java.security.SecureRandom;
 import java.time.Duration;
 import java.time.Instant;
 import java.util.Date;
 import java.util.HashMap;
 
-@SuppressWarnings({"InfiniteLoopStatement", "ThrowablePrintedToSystemOut"})
-public class SEIRS_SMA implements SMA{
+@SuppressWarnings("InfiniteLoopStatement")
+public class SEIRS_SMA extends Randomized implements SMA{
 
-    private Parameters parameters;
-    private SEIRSAgent[] agents;
+    private final Parameters parameters;
+    private final SEIRSAgent[] agents;
     private SEIRSEnvironment environment;
     private Scheduler scheduler;
     private StatisticsCanvas statisticsCanvas;
     private DisplaySquaredEnvironment display;
-    private SecureRandom r;
     private final FrameBuilder fb = new FrameBuilder();
 
     private HashMap<String,Integer> stats;
 
+    public SEIRS_SMA(Parameters params) {
+        super(params.seed());
+        parameters = YamlReader.getParams();
+        r.setSeed(parameters.seed());
+        agents = new RandomWalkingAgent[parameters.population()];
+        initEnvironment();
+        initPopulation();
+        infectPatientZero();
+        initScheduler();
+        if (parameters.graphicalMode()) {
+            initGraphics();
+        }
+    }
+
     private void initGraphics() {
         statisticsCanvas = new StatisticsCanvas(300,parameters.size());
         display = new DisplaySquaredEnvironment(environment,agents);
@@ -119,28 +132,6 @@ public class SEIRS_SMA implements SMA{
         }
     }
 
-
-    @Override
-    public void init() {
-        parameters = YamlReader.getParams();
-        try{
-            r = SecureRandom.getInstance("SHA1PRNG", "SUN");
-        }catch (Exception e) {
-            System.err.println(e);
-            System.exit(1);
-        }
-        r.setSeed(parameters.seed());
-        agents = new RandomWalkingAgent[parameters.population()];
-        initEnvironment();
-        initPopulation();
-        infectPatientZero();
-        initScheduler();
-        if (parameters.graphicalMode()) {
-            initGraphics();
-        }
-    }
-
-
     @Override
     public void run() {
         Instant startTime = Instant.now();
@@ -164,8 +155,7 @@ public class SEIRS_SMA implements SMA{
     }
 
     public static void main(String[] args) {
-        SMA sma = new SEIRS_SMA();
-        sma.init();
+        SMA sma = new SEIRS_SMA(YamlReader.getParams());
         sma.run();
     }
 }
diff --git a/src/main/java/sma/SMA.java b/src/main/java/sma/SMA.java
index 1d6ec46a27f130e81cffbe0b35f355d818aad4e0..977ae5dabd0fe04ce768d27d461231d6e22d058d 100644
--- a/src/main/java/sma/SMA.java
+++ b/src/main/java/sma/SMA.java
@@ -1,7 +1,5 @@
 package sma;
 
 public interface SMA{
-
-    void init();
     void run();
 }
diff --git a/src/main/java/view/DisplaySquaredEnvironment.java b/src/main/java/view/DisplaySquaredEnvironment.java
index 5d948df47534f0142e9b12647256f095fbd04d64..9979a7582dccba83661daee319cf5d6514546318 100644
--- a/src/main/java/view/DisplaySquaredEnvironment.java
+++ b/src/main/java/view/DisplaySquaredEnvironment.java
@@ -10,7 +10,6 @@ import java.awt.*;
 
 public class DisplaySquaredEnvironment extends JPanel {
 
-
     private final SEIRSAgent[] SEIRSAgents;
 
     public DisplaySquaredEnvironment(SEIRSEnvironment environment, SEIRSAgent[] SEIRSAgents) {
diff --git a/src/main/java/view/StatisticsCanvas.java b/src/main/java/view/StatisticsCanvas.java
index 0aff6b279c5e080d8a4003e4d79de2acb39a51f9..785c5b5a36feae802c9f69f83e0b7a2e5220ff73 100644
--- a/src/main/java/view/StatisticsCanvas.java
+++ b/src/main/java/view/StatisticsCanvas.java
@@ -15,7 +15,7 @@ public class StatisticsCanvas extends JPanel {
     public StatisticsCanvas(int width,int height) {
         this.setDoubleBuffered(false);
         values = new HashMap<>();
-        total = YamlReader.getParams().getPopulation();
+        total = YamlReader.getParams().population();
         setSize(width, height);
         setVisible(true);
     }
diff --git a/src/main/resources/output.png b/src/main/resources/output.png
index 3ed5fabfa0eedf57027acae44ace198dfc976a4d..69b8e62af45708270f5e740429befd1f656ec7e1 100644
Binary files a/src/main/resources/output.png and b/src/main/resources/output.png differ
diff --git a/src/main/resources/parameters.yaml b/src/main/resources/parameters.yaml
index a7e09b7db38122e90ac2ae1889043a78d7187e6a..78cea5de543adc070cb5755a13862ff21f8807fb 100644
--- a/src/main/resources/parameters.yaml
+++ b/src/main/resources/parameters.yaml
@@ -2,7 +2,7 @@ graphicalMode: true
 incubationRate: 0.3
 infectionRate: 0.8
 looseImmunityRate: 0.008
-recoveryRate: 0.1429
+recoveryRate: 0.14
 nbOfCycles: 2000
 nbOfPatientZero: 1
 population: 3000
@@ -11,4 +11,4 @@ size: 1000
 wrappingWorld : true
 synchronousMode: false
 timeBetweenCycles: 0
-infectionStacks : true
\ No newline at end of file
+infectionStacks : false
\ No newline at end of file