diff --git a/README.md b/README.md
index 904db213f2c81634ff7fb081c7a04d3b9155e871..1c0c27cc2b8824ddc94c3b1c10789a7b63c38ce0 100644
--- a/README.md
+++ b/README.md
@@ -34,22 +34,52 @@ Compléter la classe abstraite Observable de manière à pouvoir disposer du mé
 Vérifiez la validité de votre implémentation à l'aide des tests fournis.
 
 ```java
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
+
 public abstract class Observable {
-  public void attach(Observer obs){}
-  public void detach(Observer obs){}
-  protected void notifyObservers(){}
-  protected void notifyObservers(Object data){}
+  public void attach(Observer obs) {
+  }
+
+  public void detach(Observer obs) {
+  }
+
+  protected void notifyObservers() {
+  }
+
+  protected void notifyObservers(Object data) {
+  }
 }
 ```
 
 ## Partie 2 : Application
 
 On souhaite réaliser un premier analyseur de texte simple, qui observes les lignes saisies sur l'entrée standard et se met à jour à chaque nouvelle ligne saisie.
-On devra par exemple pouvoir dérouler le scénario suivant :
+Nous utiliserons le patron observateurs/observé pour l'implémenter.
+
+On va donc disposer d'une classe Texte, encapsulant un Scanner pour traiter un flux, ici l'enrée standard :
+```mermaid
+classDiagram
+  
+  class Texte
+  Texte : +Texte(InputStream)
+  Texte : +startReading() void
+
+  Texte  --> "1" Scanner : #scan
+
+```
+ainsi que d'une classe Analyseur, chargée d'afficher au fur et à mesure la progression sur l'objectif donné, ici simplement en terme de lignes à saisir :
+```mermaid
+classDiagram
+  class Analyseur{  
+      -objectif : int
+  }
+  Analyseur : +do() void
+```
+
+
+On devra par exemple pouvoir dérouler le scénario suivant (pour y parvenir quelques questions ci-dessous pour vous guider) :
 
 ```
-Temps chrono total (en secondes) : 3247
 nombre de lignes : encore 3
 Hello
 nombre de lignes : encore 2
@@ -61,22 +91,35 @@ Ah ?
 C'est déjà fini
 ```
 
-Nous utiliserons le patron observateurs/observé pour l'implémenter.
-* Qu'est-ce qui sera observable ? 
-Créer la classes correspondante en pensant bien à la faire hériter d' *Observable*. 
-* Quel sera l'observateur ?
-Créer la classes correspondante en pensant bien à la faire implémenter *Observer*.
-    * En mode *push*, quelle *data* va-t-on récupérer de l'*Observable* qu'on suit lorsqu'il appellera notre méthode *update(Observable o, Object data)* ?
-    Faîtes en sorte qu'elle soit bien envoyée par l'objet qui sera observé.
-
-
-On va désormais ajouter un deuxième analyseur utilisant les mêmes saisies mais vérifiant un critère plus fin, qu'un caractère ait été saisi un certain nombre de fois.
 
+* Qu'est-ce qui est observable ici ? \
+Faîtes hériter d' *Observable* la classe correspondante.
+* Quel sera l'observateur ? \
+Faîtes implémenter *Observer* à la classe correpsondante.
+* En mode *push*, quelle *data* va-t-on récupérer de l'*Observable* qu'on suit lorsqu'il appellera notre méthode *update(Observable o, Object data)* ? \
+Faîtes en sorte qu'elle soit bien envoyée par l'observable.
+* Dans un *Main*,  instancier les différentes classes nécessaires à obtenir le scénario ci-dessus en pensant bien à gérer l'abonnement et le désabonnement de l'observateur à l'observable.
 
+### Autres analyseurs
+On va désormais ajouter d'autres analyseurs, sur les mêmes saisies, mais vérifiant un critère plus fin, qu'un caractère ait été saisi un certain nombre de fois.
+Créer une classe pour ce faire, de manière à mutualiser le plus possible le code avec **Analyseur**.
 
-
-Note: Des tests sont fournis dans le projet pour que vous vous assuriez que vos classes fonctionnent comme attendu.
-Respectez les noms des packages, classes et méthodes
+```
+nombre de lignes : encore 3
+nombre de a : encore 5
+Hello
+nombre de lignes : encore 2
+nombre de e : encore 4
+The answer is 42
+nombre de lignes : encore 1
+nombre de e : encore 2
+Sayonara
+nombre de lignes atteint
+nombre de e : encore 2
+The end
+nombre de e atteint
+Rideau
+```
 
 
 ## Partie 3 : Propriétés observables
@@ -95,7 +138,7 @@ Vous devez réimplémenter ces mécanismes des propriétés.
 Outre le fait qu'elle soit observable (attach, detach), cette classe doit avoir une propriété à laquelle on peut accéder :
 
 ```java
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 public class ObservableProperty
 
@@ -115,7 +158,7 @@ Vérifier la validité de votre implémentation en exécutant les tests associé
 **Q2.2** Créez la classe ConnectableProperty qui puisse se connecter de façon  mono ou bi-directionnelle :
 
 ```java
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 public class ConnectableProperty extends ObservableProperty
 
@@ -129,5 +172,3 @@ public void unconnectFrom(ConnectableProperty other) {
 }
   ...
 ```
-
-**QBonus** : Dans la partie 1 du sujet, ajouter un bouton permettant d'arrêter et redémarrer un chronomètre en particulier à tout moment.
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observable.java b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observable.java
similarity index 85%
rename from src/main/java/fr/univlille/iut/r304/tp4/q1/Observable.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q1/Observable.java
index 7ad1b00967a3a543400461f458f0c655e2b0a9d6..264f8c55116271d3ba3958a89fa337fa381cbdb3 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observable.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observable.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 
 public abstract class Observable {
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observer.java b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observer.java
similarity index 74%
rename from src/main/java/fr/univlille/iut/r304/tp4/q1/Observer.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q1/Observer.java
index 27d1e30f5e1e5f8a374be4a3b56886a0e92e2934..231d8ab28e65514d4b7aa482a3b6531c80d4bd0a 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q1/Observer.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q1/Observer.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 public interface Observer {
 
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q3/ConnectableProperty.java b/src/main/java/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.java
similarity index 86%
rename from src/main/java/fr/univlille/iut/r304/tp4/q3/ConnectableProperty.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.java
index bd64bc7100f1daf8ff8a99a4a6e2ab50a0710be2..ce7269d5ecfe5adf17694c31683a359b9322d7ca 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q3/ConnectableProperty.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q3/ConnectableProperty.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 public class ConnectableProperty extends ObservableProperty {
 
diff --git a/src/main/java/fr/univlille/iut/r304/tp4/q3/ObservableProperty.java b/src/main/java/fr/univlille/iut/r304/tp3/q3/ObservableProperty.java
similarity index 84%
rename from src/main/java/fr/univlille/iut/r304/tp4/q3/ObservableProperty.java
rename to src/main/java/fr/univlille/iut/r304/tp3/q3/ObservableProperty.java
index d3ff06e7f8dcba716ec3f53eeb7fb2ba6c8d88ef..4fe250c1b28a1036c86d634bbc124f6a0e51fd4c 100644
--- a/src/main/java/fr/univlille/iut/r304/tp4/q3/ObservableProperty.java
+++ b/src/main/java/fr/univlille/iut/r304/tp3/q3/ObservableProperty.java
@@ -1,6 +1,6 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
-import fr.univlille.iut.r304.tp4.q1.Observer;
+import fr.univlille.iut.r304.tp3.q1.Observer;
 
 public class ObservableProperty {
 
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q1/ObserverTestStub.java b/src/test/java/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.java
similarity index 96%
rename from src/test/java/fr/univlille/iut/r304/tp4/q1/ObserverTestStub.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.java
index cf23de1f93b826d9c380b2baa01ead8a45ba2901..7c8849ae1916e67c1f8780fe88116e1285388fd7 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q1/ObserverTestStub.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q1/ObserverTestStub.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 /** ObserverTestStub
  * Can tell whether it was notified or not
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q1/TestQ1.java b/src/test/java/fr/univlille/iut/r304/tp3/q1/TestQ1.java
similarity index 98%
rename from src/test/java/fr/univlille/iut/r304/tp4/q1/TestQ1.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q1/TestQ1.java
index ee751d86eea8cbb44b73c1dadfe616c7368698ca..7973210e4400d2619cf867eac52347ea7c1508e0 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q1/TestQ1.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q1/TestQ1.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q1;
+package fr.univlille.iut.r304.tp3.q1;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ1.java b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ1.java
similarity index 92%
rename from src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ1.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ1.java
index 81957cc27322075bb9a6cf2c11034bd865eefcf5..924c75ba8c2044761d38599291323d384216f082 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ1.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ1.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import fr.univlille.iut.r304.tp4.q1.ObserverTestStub;
+import fr.univlille.iut.r304.tp3.q1.ObserverTestStub;
 
 public class TestQ1 {
     protected ObservableProperty prop;
diff --git a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ2.java b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ2.java
similarity index 98%
rename from src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ2.java
rename to src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ2.java
index 203660aff0d2728b880c9975e88cc1fcba74ee1a..f2830f64b0a480ed34b1682b57f1fec9ce56874b 100644
--- a/src/test/java/fr/univlille/iut/r304/tp4/q3/TestQ2.java
+++ b/src/test/java/fr/univlille/iut/r304/tp3/q3/TestQ2.java
@@ -1,4 +1,4 @@
-package fr.univlille.iut.r304.tp4.q3;
+package fr.univlille.iut.r304.tp3.q3;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;