diff --git a/app/src/main/java/model/ArrayGrid.java b/app/src/main/java/model/ArrayGrid.java
index 0ce83d70767482eb3259b70e16d50e95973968e6..856b6054f53aacb95f2bf91a7197f9b0d6b0d911 100644
--- a/app/src/main/java/model/ArrayGrid.java
+++ b/app/src/main/java/model/ArrayGrid.java
@@ -1,5 +1,7 @@
 package model;
 
+import java.util.Iterator;
+
 public class ArrayGrid implements Grid{
 
     private Cell[][] cells;
@@ -33,6 +35,6 @@ public class ArrayGrid implements Grid{
         }
     }
     public Iterator<Cell> iterator(){
-        return new CellGridIterator(this);
+        return (Iterator<Cell>) new CellGridIterator(this);
     }
 }
diff --git a/app/src/main/java/model/CellGridIterator.java b/app/src/main/java/model/CellGridIterator.java
index 04199f3008a467658dbb1ab3bfcd9d41297523f4..9d0468341fe169d7f294d84e4b0c31d3e989905e 100644
--- a/app/src/main/java/model/CellGridIterator.java
+++ b/app/src/main/java/model/CellGridIterator.java
@@ -1,6 +1,6 @@
 package model;
 
-public class CellGridIterator implements Iterator<Cell>{
+public class CellGridIterator {
     ArrayGrid grid;
     int indixRow;
     int indixColum;
diff --git a/app/src/main/java/model/CyclicColorGenerator.java b/app/src/main/java/model/CyclicColorGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..0aec9a40cfb46d507832b45e986970d70a62b8c0
--- /dev/null
+++ b/app/src/main/java/model/CyclicColorGenerator.java
@@ -0,0 +1,25 @@
+package model;
+
+
+import java.awt.*;
+import javafx.scene.paint.Color;
+import java.util.List;
+
+public class CyclicColorGenerator implements ColorGenerator {
+    List<Color> colors;
+
+    public CyclicColorGenerator(List<Color> colors){
+        this.colors=colors;
+
+    }
+    int count=0;
+
+
+    @Override
+    public Color nextColor(Cell cell) {
+        count++;
+        return this.colors.get(count-1);
+
+    }
+
+}
diff --git a/app/src/main/java/model/GrayGrid.java b/app/src/main/java/model/GrayGrid.java
index 02cb8ee2f6dbc07f694cc48ba5ea0a095fabe8cd..9e7975da64c39084787f9d8d4f343984c6776b3d 100644
--- a/app/src/main/java/model/GrayGrid.java
+++ b/app/src/main/java/model/GrayGrid.java
@@ -1,5 +1,7 @@
 package model;
 
+import java.util.Iterator;
+
 public class GrayGrid implements Grid{
 
     private final int numberOfRows;
@@ -40,4 +42,14 @@ public class GrayGrid implements Grid{
     public int getNumberOfColumns() {
         return numnberOfColumns;
     }
+
+    @Override
+    public void color(ColorGenerator colorGenerator) {
+
+    }
+
+    @Override
+    public Iterator<Cell> iterator() {
+        return null;
+    }
 }
diff --git a/app/src/main/java/model/Grid.java b/app/src/main/java/model/Grid.java
index 75aacc67512e50adc4a765004d5fed7ab55a39f3..b02c149464004c8e4cd7a62bb0da7924aca58be5 100644
--- a/app/src/main/java/model/Grid.java
+++ b/app/src/main/java/model/Grid.java
@@ -27,5 +27,6 @@ public interface  Grid extends Iterable<Cell> {
      * @param colorGenerator the generator used to determine the color of each cell.
      *                       The new color of {@code cell} is obtained by calling the method {@code nextColor}
      */
+    void color(ColorGenerator colorGenerator);
 
 }
diff --git a/app/src/main/java/model/Iterator.java b/app/src/main/java/model/Iterator.java
deleted file mode 100644
index 98e84279a7f4330ac489442adac27d27b53c9f1e..0000000000000000000000000000000000000000
--- a/app/src/main/java/model/Iterator.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package model;
-
-public interface Iterator<Cell> {
-
-
-}
diff --git a/app/src/main/java/model/RandomColorGenerator.java b/app/src/main/java/model/RandomColorGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..da3b70b031fe79c52c368d4eb9edbaf3e3cbb805
--- /dev/null
+++ b/app/src/main/java/model/RandomColorGenerator.java
@@ -0,0 +1,21 @@
+package model;
+
+import javafx.scene.paint.Color;
+import util.RandomUtil;
+
+import java.util.List;
+import java.util.Random;
+
+public class RandomColorGenerator implements ColorGenerator{
+    List<Color> colors;
+    Random radomGenerator;
+
+    public RandomColorGenerator(List<Color>colors,Random radomGenerator){
+        this.colors=colors;
+        this.radomGenerator=radomGenerator;
+    }
+    @Override
+    public Color nextColor(Cell cell) {
+        return RandomUtil.randomElement(this.colors, this.radomGenerator);
+    }
+}
diff --git a/app/src/main/java/model/SquareCell.java b/app/src/main/java/model/SquareCell.java
index 87139cc7dda76c3520648e900570e485725576c4..00c7d6bdbb9ac188e2b322da225eacb9b015ffc1 100644
--- a/app/src/main/java/model/SquareCell.java
+++ b/app/src/main/java/model/SquareCell.java
@@ -9,17 +9,6 @@ public class SquareCell extends AbstractCell{
 
     private List<Cell> neighbours;
 
-    public SquareCell (){
-        Cell DEFAULT_CELL_COLOR;
-    }
-    public SquareCell(Color color){
-        this.setColor(color);
-    }
-    public SquareCell(Color color,List<Cell> neighbours ){
-        this.setColor(color);
-        this.neighbours=  neighbours;
-
-    }
 
     public SquareCell (){
         Cell DEFAULT_CELL_COLOR;
diff --git a/app/src/main/java/model/UniformColorGenerator.java b/app/src/main/java/model/UniformColorGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..12a2efd3c705a333c73e227cfda289b66ebdfb45
--- /dev/null
+++ b/app/src/main/java/model/UniformColorGenerator.java
@@ -0,0 +1,14 @@
+package model;
+
+import javafx.scene.paint.Color;
+
+public class UniformColorGenerator implements ColorGenerator{
+    Color color;
+    public UniformColorGenerator(Color color){
+        this.color=color;
+    }
+    @Override
+    public Color nextColor(Cell cell) {
+        return this.color;
+    }
+}
diff --git a/app/src/main/java/model/UniformExceptOneGenerator.java b/app/src/main/java/model/UniformExceptOneGenerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..e641dcc742cf6aab842abd2af842876e70cdf16c
--- /dev/null
+++ b/app/src/main/java/model/UniformExceptOneGenerator.java
@@ -0,0 +1,26 @@
+package model;
+
+import javafx.scene.paint.Color;
+
+public class UniformExceptOneGenerator implements ColorGenerator{
+    Color uniformColor;
+    Color exceptionColor;
+    public UniformExceptOneGenerator(Color uniformColor, Color exceptionColor){
+        this.uniformColor=uniformColor;
+        this.exceptionColor=exceptionColor;
+
+    }
+
+    int count=0;
+    public Color nextColor(Cell cell) {
+
+        count++;
+        if(count==2){
+            return this.exceptionColor;
+        }
+
+        return this.uniformColor;
+    }
+
+
+}
diff --git a/app/src/main/java/util/RandomUtil.java b/app/src/main/java/util/RandomUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..0936da85df137e3b43d0cf29f70d0f769c8176fb
--- /dev/null
+++ b/app/src/main/java/util/RandomUtil.java
@@ -0,0 +1,17 @@
+package util;
+
+import java.util.List;
+import java.util.Random;
+
+    public class RandomUtil {
+
+        private RandomUtil(){};
+
+        public static <T> T randomElement(T[] elements, Random random){
+            return elements[random.nextInt(elements.length)];
+        }
+        public static <T> T randomElement(List<T> elements, Random random){
+
+            return elements.get(random.nextInt(elements.size()));
+        }
+}
diff --git a/app/src/main/java/view/MatrixPane.java b/app/src/main/java/view/MatrixPane.java
index f20ed0348c4905cb696c5158d80c6710e68109b7..2843295c2523e1bcf389a15d1d1459d87a864fa8 100644
--- a/app/src/main/java/view/MatrixPane.java
+++ b/app/src/main/java/view/MatrixPane.java
@@ -8,6 +8,7 @@ import javafx.scene.layout.GridPane;
 import javafx.scene.paint.Color;
 import javafx.scene.shape.Rectangle;
 import javafx.util.Duration;
+import model.ArrayGrid;
 import model.Cell;
 import model.GrayGrid;
 import model.Grid;
@@ -29,7 +30,7 @@ public class MatrixPane extends GridPane {
         this.numberOfColumns = numberOfColumns;
         this.numberOfRows = numberOfRows;
         // TODO replace by new ArrayGrid(numberOfRows, numberOfColumns)
-        cellGrid = new GrayGrid(numberOfRows, numberOfColumns);
+        cellGrid = new ArrayGrid(numberOfRows, numberOfColumns);
         initMatrix();
     }