diff --git a/FireSimulator.cpp b/FireSimulator.cpp
index 8729f9b0ab84b442c786e45a3a0ae91f82f0d2cd..8ac2973b7842600d2f1b8ef44f8483d982db156c 100644
--- a/FireSimulator.cpp
+++ b/FireSimulator.cpp
@@ -16,7 +16,9 @@ FireSimulator::FireSimulator(Image& img, int i, int j) {
 
     assert(img.getPixel(i, j) == Color::Green);
 
-    pImg = &img;
+    Image cpImg(img);
+
+    pImg = &cpImg;
 
     Analyst a(img);
 
@@ -50,6 +52,8 @@ FireSimulator::~FireSimulator() {
 
 vector <Image> FireSimulator::runSimulator(int n) {
 
+    assert(n >= 0);
+
     vector <Image> tab;
 
     tab.push_back(getImage());
@@ -73,7 +77,7 @@ void FireSimulator::nextStage() {
         return;
     }
 
-    extinguishFire();
+    if (experienceTime >= 3) extinguishFire();
 
     vector <int> riskArea = unsafeList();
 
diff --git a/FireSimulator.h b/FireSimulator.h
index 25e67fda0028c8a1bfc41c14d908403fef401306..7e378f0249970662f4766fb76170a83432ee959b 100644
--- a/FireSimulator.h
+++ b/FireSimulator.h
@@ -15,9 +15,13 @@
 
 using std::set;
 
+// Représente un feu sur le pixel k, allumé lors de l'étape lightTime.
 struct Fire {
 
+    // Pixel incendié.
     int k;
+
+    // Naissance de l'incendie sur ce pixel.
     int lightTime;
 };
 
@@ -31,35 +35,67 @@ class FireSimulator {
 
 public:
 
+    // Prépare les données pour une simulation d'incendie sur l'image img, dans la zone
+    // de forêt du pixel k.
     FireSimulator(Image& img, int k);
     
+    // Prépare les données pour une simulation d'incendie sur l'image img, dans la zone
+    // de forêt du pixel de coordonnées (i,j).
     FireSimulator(Image& img, int i, int j);
 
+    // Destructeur, désalloue la mémoire.
     ~FireSimulator();
 
+    // Fais avancer la simulation de n étapes.
+    // Retourne les images de chacune des étapes effectuées.
     vector <Image> runSimulator(int n);
 
+    // Fais avancer la simulation d'une étape.
     void nextStage();
 
+    // Retourne l'image de la simulation à l'étape courante. 
     Image getImage();
 
+    // Retourne l'étape courante.
     int getTime();
 
 private:
 
+    // Repère temporel sur l'état de la simulation. Commence à 0 et s'incrémente à chaque étape.
     int experienceTime;
+
+    // Une copie modifiable de l'image de départ de la simulation.
     Image* pImg;
-    set <int> limitZone, dustZone;
+
+    // Définit la zone de forêt dans laquelle l'incendie se déclare. Il ne peut se propager en dehors.
+    set <int> limitZone;
+
+    // Définit l'ensembe des pixels de cendres, issues d'un incendie qui s'est éteint. Un feu ne peut pas s'y déclarer.
+    set <int> dustZone;
+
+    // Définit la zone incendiée. Chaque pixel dans cette zone y est pour une durée temporaire (3 temps).
     set <Fire> fireZone;
 
     ////////////////////////////////////////////////////////////////////////////////
 
+    // Détermine aléatoirement l'emplacement du départ de feu parmi les pixels de limitZone.
+    // L'ajoute à fireZone. Appelée une fois au début de l'expérience.
     void lightFire();
+
+    // Vérifie quels feux doivent être éteints, les retire de fireZone et les ajoute à dustzone.
+    // Appelée à chaque stade de l'expérience à partir du 3e temps. 
     void extinguishFire();
+
+    // Incrémente experienceTime et actualise l'image courante.
     void runTime();
+
+    // Actualise l'image courante à partir de fireZone et dustZone.
     void refreshImage();
 
+    // Vrai si le pixel de coordonnées (i2, j2) est une zone de forêt qui touche une zone de flammes.
     bool isUnsafe(int i1, int j1, int i2, int j2);
+
+    // Liste de tous les pixels de forêt en contact avec un pixel de flammes.
     vector <int> unsafeList();
 };