diff --git a/src/tp2/ArdoiseMagique/Ardoise.java b/src/tp2/ArdoiseMagique/Ardoise.java
index 1492247..46e2f64 100644
--- a/src/tp2/ArdoiseMagique/Ardoise.java
+++ b/src/tp2/ArdoiseMagique/Ardoise.java
@@ -46,7 +46,6 @@ public class Ardoise extends JPanel {
             oldx = x;
             oldy = y;
 
-            System.out.println("tried to put a "+(color==BLACK?"black":"white")+" pixel at "+Integer.toString(x)+" "+Integer.toString(x));
             pixelArray[x][y] = color;
             repaint();
         }
diff --git a/src/tp2/ArdoiseMagique/ArdoiseMagique.java b/src/tp2/ArdoiseMagique/ArdoiseMagique.java
index 6306416..5e49b8a 100644
--- a/src/tp2/ArdoiseMagique/ArdoiseMagique.java
+++ b/src/tp2/ArdoiseMagique/ArdoiseMagique.java
@@ -1,56 +1,91 @@
-package tp2.ArdoiseMagique;
+package tp2.ArdoiseMagique; /**
+ * ArdoiseMagique.java
+ *
+ * @author <a href="mailto:gery.casiez@lifl.fr">Gery Casiez</a>
+ * @version
+ */
 
-import javax.swing.*;
 import java.awt.*;
-import java.awt.event.*;
-
-public class ArdoiseMagique extends JFrame {
-
-    public ArdoiseMagique() {
-        super();
-        this.setLocationRelativeTo(null);
-
-        Ardoise ard = new Ardoise();
-        ard.addMouseMotionListener(new MouseMotionAdapter() {
-            @Override
-            public void mouseDragged(MouseEvent e) {
-                super.mouseDragged(e);
-                Ardoise a = (Ardoise) e.getSource();
-                if (SwingUtilities.isLeftMouseButton(e)) {
-                    a.setPixel(
-                        e.getX(),
-                        e.getY(),
-                        Ardoise.BLACK
-                    );
-                } else if (SwingUtilities.isRightMouseButton(e)) {
-                    a.wipe();
-                }
-            }
-        });
-
-        ard.addMouseListener(new MouseAdapter() {
-            @Override
-            public void mouseReleased(MouseEvent e) {
-                Ardoise src = (Ardoise) e.getSource();
-                if (SwingUtilities.isLeftMouseButton(e)) {
-                    src.resetOld();
-                } else if (SwingUtilities.isRightMouseButton(e)){
-                    src.wipe();
-                }
-            }
-        });
-        ard.setPreferredSize(new Dimension(1000,600));
-        this.add(ard);
-
-        this.setResizable(false);
-        this.pack();
-
-        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        this.setVisible(true);
-    }
+import javax.swing.*;
+import java.util.ArrayList;
+import java.util.Iterator;
 
-    public static void main(String[] args) {
-        new ArdoiseMagique();
-    }
+class Point {
+  public Integer x,y;
+
+  Point() {
+    x = 0;
+    y = 0;
+  }
+
+  Point(Integer x, Integer y) {
+    this.x = x;
+    this.y = y;
+  }
+}
+
+class Curve {
+  public ArrayList<Point> points;
+
+  Curve() {
+    points = new ArrayList<Point>();
+  }
+
+  public void addPoint(Point P) {
+    points.add(P);
+  }
+
+  public void clear() {
+    points.clear();
+  }
+}
 
+public class ArdoiseMagique extends JPanel {
+  private ArrayList<Curve> curves;
+
+  public ArdoiseMagique(){
+    curves = new ArrayList<Curve>();
+    curves.add(new Curve());
+    setBackground(Color.white);
+  }
+
+  public void addPoint(Integer x, Integer y) {
+    curves.get(curves.size()-1).addPoint(new Point(x,y));
+    repaint();
+  }
+
+  public void newCurve() {
+    curves.add(new Curve());
+  }
+
+  public void clear() {
+    curves.clear();
+    curves.add(new Curve());
+    repaint();
+  }
+
+  public void paintComponent(Graphics g) {
+    Point Pprev, Pcurrent;
+    super.paintComponent(g);
+
+    Iterator<Curve> itcurve = curves.iterator();
+
+    Pprev = new Point();
+
+    // Pour chaque courbe
+    while (itcurve.hasNext()) {
+      Iterator<Point> it = itcurve.next().points.iterator();
+
+      if (it.hasNext()) {
+        Pprev = it.next();
+      }
+
+      // Dessine les points d'une courbe
+      while (it.hasNext()) {
+        Pcurrent = it.next();
+        g.drawLine(Pprev.x,Pprev.y, Pcurrent.x, Pcurrent.y);
+        Pprev = Pcurrent;
+      }
+    }
+  }
 }
diff --git a/src/tp2/ArdoiseMagique/Main.java b/src/tp2/ArdoiseMagique/Main.java
new file mode 100644
index 0000000..fe36d37
--- /dev/null
+++ b/src/tp2/ArdoiseMagique/Main.java
@@ -0,0 +1,56 @@
+package tp2.ArdoiseMagique;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+
+public class Main extends JFrame {
+
+    public Main() {
+        super();
+        this.setLocationRelativeTo(null);
+
+        Ardoise ard = new Ardoise();
+        ard.addMouseMotionListener(new MouseMotionAdapter() {
+            @Override
+            public void mouseDragged(MouseEvent e) {
+                super.mouseDragged(e);
+                Ardoise a = (Ardoise) e.getSource();
+                if (SwingUtilities.isLeftMouseButton(e)) {
+                    a.setPixel(
+                        e.getX(),
+                        e.getY(),
+                        Ardoise.BLACK
+                    );
+                } else if (SwingUtilities.isRightMouseButton(e)) {
+                    a.wipe();
+                }
+            }
+        });
+
+        ard.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                Ardoise src = (Ardoise) e.getSource();
+                if (SwingUtilities.isLeftMouseButton(e)) {
+                    src.resetOld();
+                } else if (SwingUtilities.isRightMouseButton(e)){
+                    src.wipe();
+                }
+            }
+        });
+        ard.setPreferredSize(new Dimension(1000,600));
+        this.add(ard);
+
+        this.setResizable(false);
+        this.pack();
+
+        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        this.setVisible(true);
+    }
+
+    public static void main(String[] args) {
+        new Main();
+    }
+
+}
diff --git a/src/tp2/ArdoiseMagique/Main2.java b/src/tp2/ArdoiseMagique/Main2.java
new file mode 100644
index 0000000..955b2aa
--- /dev/null
+++ b/src/tp2/ArdoiseMagique/Main2.java
@@ -0,0 +1,57 @@
+package tp2.ArdoiseMagique;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+
+public class Main2 extends JFrame {
+
+    public Main2 () {
+        super();
+        this.setLocationRelativeTo(null);
+
+        ArdoiseMagique ard = new ArdoiseMagique();
+        ard.addMouseMotionListener(new MouseMotionAdapter() {
+            @Override
+            public void mouseDragged(MouseEvent e) {
+                super.mouseDragged(e);
+                ArdoiseMagique a = (ArdoiseMagique) e.getSource();
+                if (SwingUtilities.isLeftMouseButton(e)) {
+                    a.addPoint(
+                        e.getX(),
+                        e.getY()
+                    );
+                } else if (SwingUtilities.isRightMouseButton(e)) {
+                    a.clear();
+                }
+            }
+        });
+
+        ard.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseReleased(MouseEvent e) {
+                ArdoiseMagique src = (ArdoiseMagique) e.getSource();
+                if (SwingUtilities.isLeftMouseButton(e)) {
+                    src.newCurve();
+                } else if (SwingUtilities.isRightMouseButton(e)){
+                    src.clear();
+                }
+            }
+        });
+        ard.setPreferredSize(new Dimension(1000,600));
+        this.add(ard);
+
+        this.setResizable(false);
+        this.pack();
+
+        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        this.setVisible(true);
+    }
+
+
+    public static void main(String[] args) {
+        new Main2();
+    }
+}
diff --git a/src/tp2/cr b/src/tp2/cr
deleted file mode 100644
index 444b6ee..0000000
--- a/src/tp2/cr
+++ /dev/null
@@ -1,48 +0,0 @@
-L'intégralité du tp a été réalisé. la suite du compte rendu décrit les difficultés rencontrées.
-
-Question 1:
-Il a été n peu difficile d'obtenir une interface qui ressemble vraiment à l'énoncé car les principes
-de setSize et de pack du tp précédent n'avaient pas été bien compris, pour augmenter la taille de la
-police de JLabel, il a également fallu chercher un peu sur le net.
-
-Question 2, 3, 4, 5, 6:
-Je n'ai pas vraiment rencontré de difficultés pour ces questions, j'avais déjà fait ce genre de choses auparavant.
-
-Question 7:
-Il y avait un bug au début ou j'avais oublié de mettre
-un message par défault pour le label, il n'y avait donc rien d'affiché quand on lançait le programme.
-
-Question 8:
-J'ai beaucoup eu de mal sur cette question car je n'avais pas vu le fichier ArdoiseMagique pour gérer le dessin.
-J'ai donc fait mon propre composant ArdoiseMagique ce qui a pris beaucoup de temps.
-La tâche était particulièrement difficile car lorsque l'on reste appuyé sur le clic gauche de la souris et
-qu'on la déplace, l'évènement correspondant à un déplacement de la souris n'est pas appelé sur chaque pixel,
-il faut donc faire de l'interpolation. j'ai donc utilisé l'algorithme
-de la ligne de Bresenhan (https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)
-qui permet de calculer tous les pixel formant une ligne entre deux pixels. Cette solution n'est d'ailleurs pas
-la meilleure pour un petit nombre de points car cela relie simplement deux points par une ligne droite et cela donne
-un résultat qui ne ressemble pas à la capture d'écran du sujet.
-
-Question 9:
-Pour cette question, je n'arrivais pas à faire en sorte, dans la partie droite de l'interface,
-que le JPanel prenne la hauteur restante car j'avais mis un boxlayout au départ, j'ai donc simplement changé pour un
-borderlayout avec le champ de texte au dessus et le jpanel au centre.
-
-Question 10:
-Il a été difficile de trouver une architecture "propre" et qui fonctionne pour cette question.
-J'ai fini par créer un composant ColorPicker qui hérite de JPanel et auquel j'ai ajouté chaque
-élément en attribut ainsi qu'une méthode updateAll qui met à jour l'état de tous les composants
-à partir des valeurs r, g et b qui sont aussi des attributs.
-
---Listener pour les Sliders
-Au départ, j'avais utilisé un ChangeListener pour détecter lorsque l'utilisateur change la valeur.
-J'ai finalement opté pour un MouseAdapter car la methode stateChanged était appelée à chaque fois que l'on
-changeait la valeur du slider ce qui pouvait occasioner des bugs voire des boucles infinies lorsque l'on change
-plusieurs composantes à la fois (r, g, b).
-
---Listener pour les champs de texte
-j'avais au départ trouvé une solution qui consistait à utiliser des DocumentListener
-Mais cette solution comportait le même problème que pour les slider.
-J'ai donc opté pour un KeyBoardAdapter où j'ai redéfini la méthode keyReleased,
-l'actualisation de l'interface se fait donc lorsque l'on relâche une touche.
-
diff --git a/src/tp2/cr.md b/src/tp2/cr.md
new file mode 100644
index 0000000..dc6e098
--- /dev/null
+++ b/src/tp2/cr.md
@@ -0,0 +1,59 @@
+### L'intégralité du tp a été réalisé. la suite du compte rendu décrit les difficultés rencontrées.
+
+
+# Évènements
+## Question 1:
+Il a été un peu difficile d'obtenir une interface qui ressemble vraiment à l'énoncé car les principes
+de setSize et de pack du tp précédent n'avaient pas été bien compris, pour augmenter la taille de la
+police du JLabel, il a également fallu chercher un peu sur le net.
+
+## Question 2, 3, 4, 5, 6:
+Je n'ai pas vraiment rencontré de difficultés pour ces questions, j'avais déjà fait ce genre de choses auparavant.
+
+# Méthode getSource
+## Question 7:
+Je n'avais pas mis de texte au départ pour le JLabel, lors du pack(), 
+la JFrame a donc alloué tout l'espace aux 3 boutons. Par conséquent, lorsque l'on clique
+sur un bouton pour la première fois, le JLabel prend subitement de la place ce qui a pour effet de décaler
+les boutons vers le bas ce qui les rends inaccessibles. J'ai résolu ce problème en mettant " " comme texte
+par défaut au JLabel avant d'appeler pack().
+On aurait aussi pu rendre la fenêtre redimensonnable. 
+
+# Aplication : Ardoise magique
+## Question 8:
+J'ai beaucoup eu de mal sur cette question car je n'avais pas vu au départ le fichier ArdoiseMagique donné avec
+le sujet pour gérer le dessin. J'ai donc fait mon propre composant Ardoise ce qui a pris beaucoup de temps.
+La tâche était particulièrement difficile car lorsque l'on reste appuyé sur le clic gauche de la souris et
+qu'on la déplace, l'évènement correspondant à un déplacement de la souris n'est pas appelé sur chaque pixel,
+il faut donc faire de l'interpolation. j'ai donc utilisé l'algorithme de la ligne de Bresenhan (https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)
+qui permet de calculer tous les pixel formant une ligne entre deux pixels. Cette solution n'est d'ailleurs pas
+la meilleure pour un petit nombre de points car cela relie simplement deux points par une ligne droite et cela donne
+un résultat qui ne ressemble pas à la capture d'écran du sujet.
+
+Au final j'ai fait une deuxième version dans Main2 qui utilise le fichier donnée avec le sujet
+et le résultat fonctionne comme prévu.
+
+# Sélecteur de couleur
+## Question 9:
+Pour cette question, je n'arrivais pas à faire en sorte, dans la partie droite de l'interface,
+que le JPanel prenne toute la hauteur disponible car j'avais mis un boxlayout au départ, j'ai donc simplement changé pour un
+borderlayout avec le champ de texte au dessus et le jpanel au centre.
+
+## Question 10:
+Il a été difficile de trouver une architecture "propre" et qui fonctionne pour cette question.
+J'ai fini par créer un composant ColorPicker qui hérite de JPanel et auquel j'ai ajouté chaque
+élément en attribut ainsi qu'une méthode updateAll qui met à jour l'état de tous les composants
+à partir des valeurs r, g et b qui sont aussi des attributs.
+
+### Listener pour les Sliders
+Au départ, j'avais utilisé un ChangeListener pour détecter lorsque l'utilisateur change la valeur.
+J'ai finalement opté pour un MouseAdapter car la méthode stateChanged était appelée à chaque fois que l'on
+changeait la valeur du slider ce qui pouvait occasioner des bugs voire des boucles infinies lorsque l'on changeait
+plusieurs composantes (r, g, b) à la fois.
+
+### Listener pour les champs de texte
+j'avais au départ trouvé une solution qui consistait à utiliser des DocumentListener
+Mais cette solution comportait le même problème que pour les slider.
+J'ai donc opté pour un KeyBoardAdapter où j'ai redéfini la méthode keyReleased,
+l'actualisation de l'interface se fait donc lorsque l'on relâche une touche.
+
diff --git a/src/tp2/evenements/FenetreIncrementer.java b/src/tp2/evenements/FenetreIncrementer.java
index c32973a..543892f 100644
--- a/src/tp2/evenements/FenetreIncrementer.java
+++ b/src/tp2/evenements/FenetreIncrementer.java
@@ -48,8 +48,7 @@ public class FenetreIncrementer extends JFrame{
 
     private class ReponseAuClic implements ActionListener {
 
-        public ReponseAuClic() {
-        }
+        public ReponseAuClic() {}
 
         @Override
         public void actionPerformed(ActionEvent e) {
diff --git a/src/tp2/getSource/MultiButt.java b/src/tp2/getSource/MultiButt.java
index 059ff14..8913d28 100644
--- a/src/tp2/getSource/MultiButt.java
+++ b/src/tp2/getSource/MultiButt.java
@@ -16,18 +16,18 @@ public class MultiButt extends JFrame {
         BoxLayout layout = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
         this.setLayout(layout);
 
-        this.label = new JLabel("Bouton 0");
+        this.label = new JLabel(" ");
         label.setFont(new Font("SansSerif", Font.PLAIN, 25));
 
         JPanel topPanel = new JPanel();
         topPanel.add(label);
         this.add(topPanel);
 
-        ActionListener listener = new ReponseAuClic2();
+        ActionListener listener = new ClicListener();
 
         for (int i = 0;i < nbButtons; ++i){
             JPanel tmp = new JPanel();
-            JButton butt = new JButton("Bouton "+Integer.toString(i));
+            JButton butt = new JButton("Bouton "+ i);
             butt.addActionListener(listener);
             tmp.add(butt);
             this.add(tmp);
@@ -40,9 +40,9 @@ public class MultiButt extends JFrame {
         this.setVisible(true);
     }
 
-    private class ReponseAuClic2 implements ActionListener {
+    private class ClicListener implements ActionListener {
 
-        public ReponseAuClic2() {
+        public ClicListener() {
         }
 
         @Override
--
libgit2 0.21.2