diff --git a/Code/Seg/BSTools/bsdetectionwidget.cpp b/Code/Seg/BSTools/bsdetectionwidget.cpp
index e06f180088974e5e293ca2a93792de0dc33fab74..82e379a42d3ec0b12b92b3260ac82d6f992b3ca0 100755
--- a/Code/Seg/BSTools/bsdetectionwidget.cpp
+++ b/Code/Seg/BSTools/bsdetectionwidget.cpp
@@ -34,8 +34,7 @@ BSDetectionWidget::BSDetectionWidget (QWidget *parent)
   alternate = 0;
   verbose = false;
   capture = false;
-
-  instanceOfAll = 0;
+  exam = -1;
 }
 
 
@@ -284,9 +283,18 @@ void BSDetectionWidget::keyPressEvent (QKeyEvent *event)
       break;
 
     case Qt::Key_M : // Multi-selection switch
-      detector.switchMultiSelection ();
-      cout << "Multi-selection "
-           << (detector.isMultiSelection () ? "on" : "off") << endl;
+      if (event->modifiers () & Qt::ShiftModifier)
+      {
+        detector.switchMultiSelection ();
+        cout << "Multi-selection "
+             << (detector.isMultiSelection () ? "on" : "off") << endl;
+      }
+      else extractAll ();
+      break;
+
+    case Qt::Key_L : // Next multi-selected segment
+      displayNext (event->modifiers () & Qt::ShiftModifier ? -1 : 1);
+      cout << "Selection du segment " << exam << endl;
       break;
 
     case Qt::Key_Y : // Initial detection extension limitation
@@ -310,7 +318,7 @@ void BSDetectionWidget::keyPressEvent (QKeyEvent *event)
       cout << "Input max width = " << detector.getInputMaxWidth () << endl;
       break;
 
-    case Qt::Key_L : // Output blurred segment min size
+    case Qt::Key_K : // Output blurred segment min size
       detector.setBSminSize (detector.getBSminSize () +
         (event->modifiers () & Qt::ShiftModifier ? -1 : 1));
       extract (true);
@@ -443,14 +451,6 @@ void BSDetectionWidget::keyPressEvent (QKeyEvent *event)
       switchProfileAnalyzer ();
       break;
 
-    case Qt::Key_6 :
-      displayNextOfAll ();
-      break;
-
-    case Qt::Key_7 :
-      extractAll ();
-      break;
-
     case Qt::Key_8 :
       alternateTest ();
       break;
@@ -565,7 +565,7 @@ void BSDetectionWidget::extract ()
 
   if (detector.isMultiSelection ())
   {
-    vector<BlurredSegment *> mbs = detector.getBlurredSegments ();
+    vector<BlurredSegment *> mbs = detector.getBlurredSegments (1);
     vector<BlurredSegment *>::iterator it = mbs.begin ();
     while (it != mbs.end ())
     {
@@ -621,9 +621,8 @@ void BSDetectionWidget::extractAll ()
     if (strucview != NULL) strucview->scene()->update ();
   }
 
-  vector<BlurredSegment *> mbs = detector.getBlurredSegments ();
-  instanceOfAll = mbs.size ();
-  cout << instanceOfAll << " blurred segments detected" << endl;
+  vector<BlurredSegment *> mbs = detector.getBlurredSegments (1);
+  cout << mbs.size () << " blurred segments detected" << endl;
   vector<BlurredSegment *>::iterator it = mbs.begin ();
   while (it != mbs.end ())
   {
@@ -644,6 +643,7 @@ void BSDetectionWidget::extractAll ()
   if (verbose && fixed) displayExtractionResult ();
   fixed = false;
   if (! formerMultiMode) detector.switchMultiSelection ();
+  exam = -1;
 
   if (capture)
   {
@@ -653,19 +653,22 @@ void BSDetectionWidget::extractAll ()
 }
 
 
-void BSDetectionWidget::displayNextOfAll ()
+void BSDetectionWidget::displayNext (int dir)
 {
+  vector<BlurredSegment *> mbs = detector.getBlurredSegments (1);
+  if (mbs.empty ()) return;
+
   augmentedImage = loadedImage;
   QPainter painter (&augmentedImage);
 
-  vector<BlurredSegment *> mbs = detector.getBlurredSegments ();
-  if (++instanceOfAll > (int) (mbs.size ())) instanceOfAll = 0;
+  exam = (exam + dir) % ((int) (mbs.size ()));
   vector<BlurredSegment *>::iterator it = mbs.begin ();
   QColor bsCol = Qt::blue;
   int index = 0;
-  while (index <= instanceOfAll && it != mbs.end ())
+  while (it != mbs.end ())
   {
-    if (index++ == instanceOfAll) bsCol = Qt::green;
+    if (index++ == exam) bsCol = Qt::green;
+    else bsCol = Qt::blue;
 /*
     DigitalStraightSegment *dss = (*it)->getSegment ();
     if (dss != NULL) 
diff --git a/Code/Seg/BSTools/bsdetectionwidget.h b/Code/Seg/BSTools/bsdetectionwidget.h
index b491b772186104da58d47271525e5508989db919..3930f6469282fc535e4baf0ba74fcea686c2d6ab 100755
--- a/Code/Seg/BSTools/bsdetectionwidget.h
+++ b/Code/Seg/BSTools/bsdetectionwidget.h
@@ -168,8 +168,8 @@ private:
   /** Activation of alternate comparative tests (F8). */
   int alternate;
 
-  /** Index of the last blurred segment displayed in a multi-selection. */
-  int instanceOfAll;
+  /** Index of the examined blurred segment in a multi-selection. */
+  int exam;
 
 
   /** Presently loaded image. */
@@ -265,8 +265,9 @@ private:
 
   /**
    * \brief Highlights the next blurred segment in multi-selection mode.
+   * @param dir Increment in the multi-selection.
    */
-  void displayNextOfAll ();
+  void displayNext (int dir);
 
 };
 #endif
diff --git a/Code/Seg/BSTools/bsstructureview.cpp b/Code/Seg/BSTools/bsstructureview.cpp
index 81ce0b946e5641f187850af4a5570b56796556d8..d43e081f99e8f5cab26536c5bca81ff10bccd851 100755
--- a/Code/Seg/BSTools/bsstructureview.cpp
+++ b/Code/Seg/BSTools/bsstructureview.cpp
@@ -216,7 +216,7 @@ bool BSStructureView::processKeyEvent (QKeyEvent *event)
       processed = true;
       break;
 
-    case Qt::Key_L : // Output blurred segment min size
+    case Qt::Key_K : // Output blurred segment min size
       det->setBSminSize (det->getBSminSize () +
         (event->modifiers () & Qt::ShiftModifier ? -1 : 1));
       update ();
diff --git a/Code/Seg/BlurredSegment/bsdetector.cpp b/Code/Seg/BlurredSegment/bsdetector.cpp
index b52db0ef9ec62490c2d2e57f075117502c5519ec..ffd2fe27c785263845fbbf3ea2786f4c71ddb1a1 100755
--- a/Code/Seg/BlurredSegment/bsdetector.cpp
+++ b/Code/Seg/BlurredSegment/bsdetector.cpp
@@ -44,7 +44,6 @@ BSDetector::BSDetector ()
 
   bsini = NULL;
   bsf = NULL;
-  tempo = true;
   resultValue = RESULT_UNDETERMINED;
 }
 
@@ -55,6 +54,12 @@ BSDetector::~BSDetector ()
   delete bst2;
   if (lsf1 != NULL) delete lsf1;
   if (lsf2 != NULL) delete lsf2;
+  if (bsini != NULL) delete bsini;
+  if (bsf != NULL) delete bsf;
+  vector<BlurredSegment *>::iterator it = mbsini.begin ();
+  while (it != mbsini.end ()) delete (*it++);
+  it = mbsf.begin ();
+  while (it != mbsf.end ()) delete (*it++);
 }
 
 
@@ -69,7 +74,10 @@ void BSDetector::setGradientMap (VMap *data)
 void BSDetector::detectAll ()
 {
   // Deletes former blurred segments
-  vector<BlurredSegment *>::iterator it = mbsf.begin ();
+  vector<BlurredSegment *>::iterator it = mbsini.begin ();
+  while (it != mbsini.end ()) delete (*it++);
+  mbsini.clear ();
+  it = mbsf.begin ();
   while (it != mbsf.end ()) delete (*it++);
   mbsf.clear ();
 
@@ -94,7 +102,10 @@ void BSDetector::detectAll ()
 void BSDetector::multidetect (const Pt2i &p1, const Pt2i &p2)
 {
   // Deletes former blurred segments
-  vector<BlurredSegment *>::iterator it = mbsf.begin ();
+  vector<BlurredSegment *>::iterator it = mbsini.begin ();
+  while (it != mbsini.end ()) delete (*it++);
+  mbsini.clear ();
+  it = mbsf.begin ();
   while (it != mbsf.end ()) delete (*it++);
   mbsf.clear ();
 
@@ -121,7 +132,9 @@ void BSDetector::runMultiDetection (const Pt2i &p1, const Pt2i &p2,
     {
       gMap->setMask (bsf->getAllPoints ());
       mbsf.push_back (bsf);
-      tempo = false; // to avoid former BS deletion
+      mbsini.push_back (bsini);
+      bsf = NULL; // to avoid BS deletion
+      bsini = NULL; // to avoid BS deletion
     }
   }
 }
@@ -137,9 +150,8 @@ void BSDetector::detect (const Pt2i &p1, const Pt2i &p2, Pt2i *p0)
   if (prefilteringOn) lsf1->clear ();
   if (filteringOn) lsf2->clear ();
   if (bsini != NULL) delete bsini;
-  if (tempo && bsf != NULL) delete bsf;
+  if (bsf != NULL) delete bsf;
   bsf = NULL;
-  tempo = true;
   if (p1.equals (p2)) return;
 
   // Initial detection based on highest gradient without orientation constraint
@@ -259,9 +271,9 @@ vector<Pt2i> BSDetector::getRejected (int step) const
   vector<Pt2i> res;
   if (step != 0)
   {
-    if (filteringOn) res = lsf2->getAccepted ();
+    if (filteringOn) res = lsf2->getRejected ();
   }
-  else if (prefilteringOn) res = lsf1->getAccepted ();
+  else if (prefilteringOn) res = lsf1->getRejected ();
   return res;
 }
 
diff --git a/Code/Seg/BlurredSegment/bsdetector.h b/Code/Seg/BlurredSegment/bsdetector.h
index f30bc183d9682c48b4dfa65c3c88c868473b41b7..f0ec3c818782cd5bd4d3c97f1b8a844f2edbe954 100755
--- a/Code/Seg/BlurredSegment/bsdetector.h
+++ b/Code/Seg/BlurredSegment/bsdetector.h
@@ -95,14 +95,16 @@ public:
     return (step == 0 ? bsini : bsf); }
 
   /**
-   * \brief Returns the list of detected blurred segments.
+   * \brief Returns the list of detected blurred segments at given step.
+   * @param step Initial step addressed if set to 0, final step otherwise.
    */
-  inline vector<BlurredSegment *> getBlurredSegments () { return (mbsf); }
+  inline vector<BlurredSegment *> getBlurredSegments (int step) {
+    return (step == 0 ? mbsini : mbsf); }
 
   /**
    * \brief Avoids the deletion of the last extracted blurred segent.
    */
-  inline void preserveFormerBlurredSegment () { tempo = false; }
+  inline void preserveFormerBlurredSegment () { bsf = NULL; }
 
   /**
    * \brief Returns the input maximal width of the initial segment.
@@ -412,18 +414,18 @@ private :
   /** Gradient map. */
   VMap *gMap;
 
-  /** Initially detected blurred segment (initial step result). */
-  BlurredSegment *bsini;
   /** Initial rough tracker */
   BSTracker *bst1;
-  /** Flag indicating whether the blurred segment is not registred. */
-  bool tempo;
+  /** Initially detected blurred segment (initial step result). */
+  BlurredSegment *bsini;
+  /** Detected blurred segments in case of multi-detection (initial step). */
+  vector<BlurredSegment *> mbsini;
 
   /** Fine tracker */
   BSTracker *bst2;
   /** Detected blurred segment (final result). */
   BlurredSegment *bsf;
-  /** Detected blurred segments (in case of multi-detection). */
+  /** Detected blurred segments in case of multi-detection (final results). */
   vector<BlurredSegment *> mbsf;
 
   /** Initial segment filtering modality. */
diff --git a/Methode/ctrl.tex b/Methode/ctrl.tex
index fc3b66168e537ab622ed26fadc8a490b118edc7b..022e25a289f5b1dc15713c8bf667b094646fd739 100755
--- a/Methode/ctrl.tex
+++ b/Methode/ctrl.tex
@@ -27,11 +27,15 @@ u & \spa & Actualiser \\
 v && Afficher le r\'esultat \\
 w && Consigne initiale d'\'epaisseur du segment flou \\
 h && Longueur tol\'er\'ee pour les sauts de d\'etection \\
+k && Taille minimale des segments d\'etect\'es \\
+n && R\'esolution de la grille de d\'etection automatique \\
 e && Trait / bord \\
 E && Autre bord \\
 q && Retour d'absence (1 / longueur absence) \\
 Ctrl-c/v/z && Enregistre / Affiche / Supprime les segments \\
-m && Commute la multi-d\'etection \\
+M && Commute la multi-d\'etection \\
+m && D\'etection exhaustive de tous les segments \\
+l && Examine le segment suivant dans une multi-d\'etection \\
 t && Commute l'amincissement progressif \\
 y && Commute le bridage de la premi\`ere \'etape \\
 d && Commute le test de densit\'e \\
@@ -48,7 +52,6 @@ P && Demande la capture de la prochaine extraction \\
 0 && Test avec $P_1$ et $P_2$ impos\'es \\
 9 && Test de performance sur la derni\`ere barre trac\'ee \\
 8 && Tests comparatifs sur diff\'erents contextes de d\'etection \\
-7 && D\'etection exhaustive de tous les segments \\
 \hline \hline
 \multicolumn{3}{|l|}{Fen\^etres d'analyse :} \\
 i && Changement d'info \\