#ifndef __fpa__Image__SkeletonFilter__h__
 #define __fpa__Image__SkeletonFilter__h__
 
+#include <map>
+
 #include <itkProcessObject.h>
 #include <itkSignedMaurerDistanceMapImageFilter.h>
+
 #include <fpa/Image/Dijkstra.h>
 #include <fpa/Image/Skeleton.h>
 
-/*
-  #include <functional>
-  #include <map>
-
-
-  #include <fpa/Image/MinimumSpanningTree.h>
-
-  #include <itkMinimumMaximumImageCalculator.h>
-  #include <fpa/Image/Functors/Dijkstra/Invert.h>
-*/
-
 namespace fpa
 {
   namespace Image
 
   dijkstra->Update( );
 
   // Compute end-points
+  const _TMST* mst = dijkstra->GetMinimumSpanningTree( );
   std::vector< TIndex > end_points;
   this->_EndPoints(
-    end_points,
-    this->m_DistanceMap->GetOutput( ),
-    dijkstra->GetMinimumSpanningTree( ),
-    dijkstra->GetSkeletonQueue( )
+    end_points, this->m_DistanceMap->GetOutput( ),
+    mst, dijkstra->GetSkeletonQueue( )
     );
+
+  // Create branches
+  TSkeleton* sk = this->GetOutput( );
+  typename std::vector< TIndex >::const_iterator eIt = end_points.begin( );
+  std::map< TIndex, unsigned long, typename TIndex::LexicographicCompare > tags;
+  unsigned long t = 1;
+  for( ; eIt != end_points.end( ); ++eIt )
+  {
+    // Tag path
+    TIndex it = *eIt;
+    TIndex p = mst->GetParent( it );
+    while( it != p )
+    {
+      tags[ it ] = t;
+      it = p;
+      p = mst->GetParent( it );
+
+    } // elihw
+    // TODO: More on it
+
+  } // rof
 }
 
 // -------------------------------------------------------------------------