diff --git a/src/main/java/model/NextGenerationInitializer.java b/src/main/java/model/NextGenerationInitializer.java
index ad03fdf0a14dc41e72f1bfbd4beb976bcf212a9f..73cd6132abf6e072dc34fa22a177ba6d376a515b 100644
--- a/src/main/java/model/NextGenerationInitializer.java
+++ b/src/main/java/model/NextGenerationInitializer.java
@@ -15,7 +15,7 @@ import java.util.List;
  */
 public class NextGenerationInitializer<S extends State<S>> implements MatrixInitializer<S> {
 
-    //TODO: ajouter les propriétés nécessaires
+    private final CellularAutomatonSimulation<S> simulation;
 
     /** Create a {@link MatrixInitializer} to compute the next generation in
      * a 2D cellular automaton.
@@ -23,13 +23,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> neighbours = coordinate.orthodiagonalNeighbours();
+        List<S> states = new ArrayList<>();
+        for (Coordinate neighbour : neighbours) {
+            states.add(this.simulation.at(wrap(neighbour)).get());
+        }
+        return this.simulation.at(coordinate).get().update(states);
     }
 
     /** Computes the grid {@link Coordinate} for an arbitrary {@link Coordinate}, even outside
@@ -41,10 +45,10 @@ 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(),this.simulation.numberOfColumns()),
+                modulo(coordinate.y(),this.simulation.numberOfRows())
+        );
     }
 
     /** The non-negative remainder of n divided by d.