diff --git a/src/main/java/matrix/ConstantMatrixInitializer.java b/src/main/java/matrix/ConstantMatrixInitializer.java
index 88d798b4b1a0e79292168f2a8d6f47024457fdae..344a56f56dd78197515dfe6c302812cda6924e08 100644
--- a/src/main/java/matrix/ConstantMatrixInitializer.java
+++ b/src/main/java/matrix/ConstantMatrixInitializer.java
@@ -2,15 +2,14 @@ package matrix;
 
 public class ConstantMatrixInitializer<T> implements MatrixInitializer<T> {
 
-  // TODO: add instance variables
+  private final T value;
 
   public ConstantMatrixInitializer(T constant) {
-    // TODO
+    this.value = constant;
   }
 
     @Override
     public T initialValueAt(Coordinate coordinate) {
-      // TODO
-      return null;
+    return value;
     }
 }
diff --git a/src/main/java/matrix/ListMatrix.java b/src/main/java/matrix/ListMatrix.java
index a3a4e7d562c43dded22737a89919f85f5eca6040..45ff773a52b1b4f667ec343579dd305bc5a271fb 100644
--- a/src/main/java/matrix/ListMatrix.java
+++ b/src/main/java/matrix/ListMatrix.java
@@ -1,5 +1,6 @@
 package matrix;
 
+import java.util.ArrayList;
 import java.util.List;
 
 
@@ -23,11 +24,19 @@ public class ListMatrix<T> implements Matrix<T> {
    * @param initializer A matrix initializer to set values in the {@link ListMatrix}.
    */
   public ListMatrix(int width, int height, MatrixInitializer<T> initializer) {
-    // TODO
     this.width = 0;
     this.height = 0;
     this.matrix = null;
-    this.initializeWith(initializer); // fills the matrix using initializer
+    this.initializeWith(initializer);
+
+    for (int i = 0; i < height; i++) {
+      List<T> row = new ArrayList<>(width);
+      for (int j = 0; j < width; j++) {
+        row.add(null);
+      }
+      matrix.add(row);
+    }
+    this.initializeWith(initializer);
   }
 
   public ListMatrix(int width, int height, T constant) {
@@ -35,29 +44,30 @@ public class ListMatrix<T> implements Matrix<T> {
   }
 
   private void initializeWith(MatrixInitializer<T> initializer) {
-    // TODO initialize each cell of the matrix, with a value determined by initializer
+    for (int i = 0; i < matrix.size(); i++) {
+      for (int j = 0; j < matrix.get(i).size(); j++) {
+        matrix.get(i).set(j, initializer.initialValueAt(Coordinate.of(i,j)));
+      }
+    }
   }
 
   public int width() {
-    // TODO
-    return 0;
+    return width;
   }
 
   public int height() {
-    // TODO
-    return 0;
+    return height;
   }
 
   @Override
   public T get(int x, int y) {
-    // TODO
-    return null;
+    return matrix.get(x).get(y);
   }
 
 
   @Override
   public void set(int x, int y, T newValue) {
-    // TODO
+    matrix.get(x).set(y, newValue);
   }
 
 }