diff --git a/src/main/java/model/CellularAutomatonSimulation.java b/src/main/java/model/CellularAutomatonSimulation.java
index d08c7a4eb05750d514d2929720bba2c0beeeb694..302fe7dd4a22ce84189f9c1926b3477ad5e9c534 100644
--- a/src/main/java/model/CellularAutomatonSimulation.java
+++ b/src/main/java/model/CellularAutomatonSimulation.java
@@ -42,14 +42,12 @@ public class CellularAutomatonSimulation<S extends State<S>>
 
     @Override
     public int numberOfColumns() {
-        //TODO: à compléter
-        return 0;
+        return numberOfColumns();
     }
 
     @Override
     public int numberOfRows() {
-        //TODO: à compléter
-        return 0;
+        return numberOfRows();
     }
 
     /**
@@ -59,7 +57,6 @@ public class CellularAutomatonSimulation<S extends State<S>>
      * @return The cell at the specified coordinate.
      */
     public Cell<S> at(Coordinate coordinate) {
-        //TODO: à compléter
         return null;
     }
 
diff --git a/src/main/java/model/NextGenerationInitializer.java b/src/main/java/model/NextGenerationInitializer.java
index f9462bfbd6fe1b55ad7ee10ada452a78825b6a2e..2fc8e80249a7f4de40ef4de4ea89f5d006fd790a 100644
--- a/src/main/java/model/NextGenerationInitializer.java
+++ b/src/main/java/model/NextGenerationInitializer.java
@@ -4,6 +4,10 @@ import matrix.Coordinate;
 import matrix.MatrixInitializer;
 import matrix.ListMatrix;
 import controller.Simulation;
+import model.automata.GameOfLifeState;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * An initializer for a {@link ListMatrix} of states, where each state is computed based on the value
@@ -13,7 +17,8 @@ import controller.Simulation;
  */
 public class NextGenerationInitializer<S extends State<S>> implements MatrixInitializer<S> {
 
-    //TODO: ajouter les propriétés nécessaires
+    CellularAutomatonSimulation<S> simulation;
+
 
     /** Create a {@link MatrixInitializer} to compute the next generation in
      * a 2D cellular automaton.
@@ -21,13 +26,17 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit
      * @param simulation the {@link Simulation} representing the cellular automaton.
      */
     public NextGenerationInitializer(CellularAutomatonSimulation<S> simulation) {
-        //TODO: à compléter
+        this.simulation = simulation;
     }
 
     @Override
     public S initialValueAt(Coordinate coordinate) {
-        //TODO: à compléter
-        return null;
+        List<Coordinate> coordinates = coordinate.orthogonalNeighbours();
+        List<S> states = new ArrayList<>();
+        for (Coordinate c : coordinates) {
+            states.add(simulation.at(this.wrap(c)).get());
+        }
+        return simulation.at(coordinate).get().update(states);
     }
 
     /** Computes the grid {@link Coordinate} for an arbitrary {@link Coordinate}, even outside
@@ -39,10 +48,9 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit
      * @return a corresponding {@link Coordinate}, that is inside the grid.
      */
     Coordinate wrap(Coordinate coordinate) {
-        //TODO: à compléter
         //Il faut recalculer les coordonnées x et y modulo les dimensions de la grille.
         //Pour le modulo, utiliser la fonction ci-dessous, qui s'assure que le résultat est positif.
-        return null;
+        return new Coordinate(modulo(coordinate.x(), simulation.numberOfColumns()), modulo(coordinate.y(), simulation.numberOfRows()));
     }
 
     /** The non-negative remainder of n divided by d.