* headers.mk: add new headers to distribution.
	* mln/algebra/quat.hh: add a new overload of rotate().
	* mln/canvas/labeling/level.hh,
	* mln/canvas/labeling.hh: handle labeling abortion with
	trace::warning.
	* mln/core/internal/graph_psite_base.hh: remove a useless forward
	declaration.
	* mln/io/raw/all.hh: Rewrite, completely wrong...
	* mln/accu/compute.hh,
	* mln/core/image/tr_image.hh,
	* mln/core/site_set/p_queue.hh,
	* mln/io/raw/load.hh,
	* mln/io/raw/save.hh,
	* mln/value/shell.hh: update doc.
	* mln/math/jacobi.hh: add missing casts and fix a bug with macros and
	missing semicolons in for loops.
	* tests/unit_test/Makefile.am,
	* tests/unit_test/mln_convert_impl_from_site_set_to_image.cc,
	* tests/unit_test/mln_core_image_p2p_image.cc,
	* tests/unit_test/mln_core_image_slice_image.cc,
	* tests/unit_test/mln_debug_slices_2d.cc,
	* tests/unit_test/mln_fun_p2p_all.cc,
	* tests/unit_test/mln_fun_p2p_translation.cc,
	* tests/unit_test/mln_level_sort_offsets.cc: add new unit tests.
---
 milena/ChangeLog                                   |   36 ++++++++++++++++++++
 milena/headers.mk                                  |    7 ++++
 milena/mln/accu/compute.hh                         |    4 +-
 milena/mln/algebra/quat.hh                         |   24 ++++++++++---
 milena/mln/canvas/labeling.hh                      |    4 +--
 milena/mln/core/alias/point3d.hh                   |    1 +
 milena/mln/core/image/tr_image.hh                  |   22 +++++-------
 milena/mln/core/internal/graph_psite_base.hh       |    4 --
 milena/mln/core/site_set/p_queue.hh                |    2 +-
 milena/mln/io/raw/all.hh                           |   23 ++++++------
 milena/mln/io/raw/load.hh                          |    1 +
 milena/mln/io/raw/save.hh                          |    2 +
 milena/mln/labeling/level.hh                       |    2 -
 milena/mln/math/jacobi.hh                          |   25 ++++++++++---
 milena/mln/value/shell.hh                          |    2 +-
 milena/tests/unit_test/Makefile.am                 |   14 ++++++++
 .../mln_convert_impl_from_site_set_to_image.cc     |   11 ++++++
 milena/tests/unit_test/mln_core_image_p2p_image.cc |   11 ++++++
 .../tests/unit_test/mln_core_image_slice_image.cc  |   11 ++++++
 milena/tests/unit_test/mln_debug_slices_2d.cc      |   11 ++++++
 milena/tests/unit_test/mln_fun_p2p_all.cc          |   11 ++++++
 milena/tests/unit_test/mln_fun_p2p_translation.cc  |   11 ++++++
 milena/tests/unit_test/mln_level_sort_offsets.cc   |   11 ++++++
 23 files changed, 200 insertions(+), 50 deletions(-)
 create mode 100644 milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
 create mode 100644 milena/tests/unit_test/mln_core_image_p2p_image.cc
 create mode 100644 milena/tests/unit_test/mln_core_image_slice_image.cc
 create mode 100644 milena/tests/unit_test/mln_debug_slices_2d.cc
 create mode 100644 milena/tests/unit_test/mln_fun_p2p_all.cc
 create mode 100644 milena/tests/unit_test/mln_fun_p2p_translation.cc
 create mode 100644 milena/tests/unit_test/mln_level_sort_offsets.cc
diff --git a/milena/ChangeLog b/milena/ChangeLog
index d4ee97a..cdee4a7 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,41 @@
 2009-02-02  Guillaume Lazzara  <z(a)lrde.epita.fr>
 
+	Various small fixes.
+
+	* headers.mk: add new headers to distribution.
+
+	* mln/algebra/quat.hh: add a new overload of rotate().
+
+	* mln/canvas/labeling/level.hh,
+	* mln/canvas/labeling.hh: handle labeling abortion with
+	trace::warning.
+
+	* mln/core/internal/graph_psite_base.hh: remove a useless forward
+	declaration.
+	
+	* mln/io/raw/all.hh: Rewrite, completely wrong...
+
+	* mln/accu/compute.hh,
+	* mln/core/image/tr_image.hh,
+	* mln/core/site_set/p_queue.hh,
+	* mln/io/raw/load.hh,
+	* mln/io/raw/save.hh,
+	* mln/value/shell.hh: update doc.
+
+	* mln/math/jacobi.hh: add missing casts and fix a bug with macros and
+	missing semicolons in for loops.
+
+	* tests/unit_test/Makefile.am,
+	* tests/unit_test/mln_convert_impl_from_site_set_to_image.cc,
+	* tests/unit_test/mln_core_image_p2p_image.cc,
+	* tests/unit_test/mln_core_image_slice_image.cc,
+	* tests/unit_test/mln_debug_slices_2d.cc,
+	* tests/unit_test/mln_fun_p2p_all.cc,
+	* tests/unit_test/mln_fun_p2p_translation.cc,
+	* tests/unit_test/mln_level_sort_offsets.cc: add new unit tests.
+
+2009-02-02  Guillaume Lazzara  <z(a)lrde.epita.fr>
+
 	Add a new overload of make::image3d.
 
 	* mln/make/image3d.hh: create an image3d from a single image.
diff --git a/milena/headers.mk b/milena/headers.mk
index bb97122..d109eb7 100644
--- a/milena/headers.mk
+++ b/milena/headers.mk
@@ -181,6 +181,8 @@ mln/fun/p2b/all.hh \
 mln/fun/p2b/has.hh \
 mln/fun/p2b/big_chess.hh \
 mln/fun/p2b/essential.hh \
+mln/fun/p2p/all.hh \
+mln/fun/p2p/translation.hh \
 mln/fun/p2p/mirror.hh \
 mln/fun/x2p/closest_point.hh \
 mln/fun/x2p/all.hh \
@@ -274,6 +276,7 @@ mln/convert/from_to.hh \
 mln/convert/impl/from_value_to_value.hh \
 mln/convert/impl/all.hh \
 mln/convert/impl/from_double_to_value.hh \
+mln/convert/impl/from_site_set_to_image.hh \
 mln/convert/impl/from_image_to_site_set.hh \
 mln/convert/impl/from_float_to_value.hh \
 mln/convert/impl/from_int_to_value.hh \
@@ -397,6 +400,7 @@ mln/accu/line.hh \
 mln/accu/essential.hh \
 mln/accu/max_h.hh \
 mln/level/compare.hh \
+mln/level/sort_offsets.hh \
 mln/level/transform_inplace.hh \
 mln/level/replace.hh \
 mln/level/apply.hh \
@@ -931,6 +935,8 @@ mln/core/image/image_if.hh \
 mln/core/image/hexa.hh \
 mln/core/image/line_graph_elt_neighborhood.hh \
 mln/core/image/extended.hh \
+mln/core/image/p2p_image.hh \
+mln/core/image/slice_image.hh \
 mln/core/image/image2d_h.hh \
 mln/core/image/image2d.hh \
 mln/core/image/ch_piter.hh \
@@ -1035,6 +1041,7 @@ mln/debug/all.hh \
 mln/debug/println_with_border.hh \
 mln/debug/println.spe.hh \
 mln/debug/colorize.hh \
+mln/debug/slices_2d.hh \
 mln/debug/draw_graph.hh \
 mln/debug/put_word.hh \
 mln/debug/quiet.hh \
diff --git a/milena/mln/accu/compute.hh b/milena/mln/accu/compute.hh
index 69af068..a632fa8 100644
--- a/milena/mln/accu/compute.hh
+++ b/milena/mln/accu/compute.hh
@@ -86,7 +86,7 @@ namespace mln
 
       namespace generic
       {
-	
+
 	template <typename A, typename I>
 	mln_result(A)
 	compute(const Accumulator<A>&, const Image<I>& input_)
@@ -106,7 +106,7 @@ namespace mln
 	}
 
       } // end of namespace mln::accu::impl::generic
-      
+
     } // end of namespace mln::accu::impl
 
 
diff --git a/milena/mln/algebra/quat.hh b/milena/mln/algebra/quat.hh
index 13590d0..9dee769 100644
--- a/milena/mln/algebra/quat.hh
+++ b/milena/mln/algebra/quat.hh
@@ -32,6 +32,8 @@
 /// \file mln/algebra/quat.hh
 ///
 /// Define a class for quaternion algebra values.
+///
+/// \todo Inline computations in rotate routine.
 
 # include <cmath>
 
@@ -194,8 +196,10 @@ namespace mln
       quat& set_unit();
 
       /// Rotate using quaternion definition of a rotation
-      template <unsigned n>
-      algebra::vec<n,float> rotate(const algebra::vec<n,float>& v);
+      template <unsigned n, typename T>
+      algebra::vec<n,float> rotate(const algebra::vec<n,T>& v) const;
+
+      quat rotate(const quat& q) const;
 
       /// Transform into unit quaternion.
       template <typename T>
@@ -257,7 +261,6 @@ namespace mln
     quat slerp_5(const quat& p, const quat& q, float h);
 
 
-
 # ifndef MLN_INCLUDE_ONLY
 
     // Constructors.
@@ -482,14 +485,24 @@ namespace mln
       set_unit(theta(), uv);
     }
 
-    template <unsigned n>
+    template <unsigned n, typename T>
     inline
     algebra::vec<n,float>
-    quat::rotate(const algebra::vec<n,float>& v)
+    quat::rotate(const algebra::vec<n,T>& v) const
     {
+      mln_precondition(is_unit());
       return ((*this) * quat(0. ,v) * (*this).inv()).v();
     }
 
+    inline
+    quat quat::rotate(const quat& q) const
+    {
+      mln_precondition(this->is_unit());
+      mln_precondition(q.is_pure());
+      return (*this) * q * this->inv();
+    }
+
+
     // Operators.
 
     inline
@@ -655,7 +668,6 @@ namespace mln
       return tmp;
     }
 
-
 # endif // ! MLN_INCLUDE_ONLY
 
   } // end of namespace mln::algebra
diff --git a/milena/mln/canvas/labeling.hh b/milena/mln/canvas/labeling.hh
index f6a5299..c8a9e5c 100644
--- a/milena/mln/canvas/labeling.hh
+++ b/milena/mln/canvas/labeling.hh
@@ -124,7 +124,6 @@ namespace mln
 
 	  // Output.
 	  mln_ch_value(I, L) output;
-	  bool status;
 
 	  // Initialization.
 	  {
@@ -181,7 +180,7 @@ namespace mln
 		      {
 			if (nlabels == mln_max(L))
 			  {
-			    status = false;
+			    trace::warning("labeling aborted!");
 			    return output;
 			  }
 			output(p) = ++nlabels;
@@ -190,7 +189,6 @@ namespace mln
 		else
 		  output(p) = output(parent(p));
 	      }
-	    status = true;
 	  }
 
 	  trace::exiting("canvas::impl::generic::labeling");
diff --git a/milena/mln/core/alias/point3d.hh b/milena/mln/core/alias/point3d.hh
index ff88b5d..7ffac8f 100644
--- a/milena/mln/core/alias/point3d.hh
+++ b/milena/mln/core/alias/point3d.hh
@@ -55,6 +55,7 @@ namespace mln
 
     template <typename C, typename E>
     struct subject_impl< const point<grid::cube, C>, E >
+      : subject_point_impl< point<grid::cube, C>, E >
     {
       typedef C coord;
       enum { dim = 3 };
diff --git a/milena/mln/core/image/tr_image.hh b/milena/mln/core/image/tr_image.hh
index 2ace346..a0fb983 100644
--- a/milena/mln/core/image/tr_image.hh
+++ b/milena/mln/core/image/tr_image.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2009 EPITA Research and Development Laboratory
+// (LRDE)
 //
 // This file is part of the Olena Library.  This library is free
 // software; you can redistribute it and/or modify it under the terms
@@ -28,12 +29,10 @@
 #ifndef MLN_CORE_IMAGE_TR_IMAGE_HH
 # define MLN_CORE_IMAGE_TR_IMAGE_HH
 
-/*! \file mln/core/image/tr_image.hh
- *
- *  \brief Definition of the morpher mln::tr_image presenting an image
- *  through a (bijective) transformation.
- *
- */
+/// \file mln/core/image/tr_image.hh
+///
+/// Definition of the morpher mln::tr_image presenting an image
+/// through a (bijective) transformation.
 
 # include <cmath>
 
@@ -41,11 +40,10 @@
 # include <mln/algebra/vec.hh>
 # include <mln/value/set.hh>
 
-
 namespace mln
 {
 
-  // Fwd decl.
+  // Forward declaration.
   template <typename S, typename I, typename T> struct tr_image;
 
   namespace internal
@@ -78,10 +76,8 @@ namespace mln
 
   } // end of namespace mln::trait
 
-  /*! \brief Morpher that makes an image become transformed by a given
-   *  transformation.
-   *
-   */
+  /// Morpher that makes an image become transformed by a given
+  /// transformation.
   template <typename S, typename I, typename T>
   struct tr_image :
     public mln::internal::image_identity< I, mln_pset(I), tr_image<S,I,T> >
diff --git a/milena/mln/core/internal/graph_psite_base.hh b/milena/mln/core/internal/graph_psite_base.hh
index d0df650..3767fd2 100644
--- a/milena/mln/core/internal/graph_psite_base.hh
+++ b/milena/mln/core/internal/graph_psite_base.hh
@@ -39,10 +39,6 @@
 namespace mln
 {
 
-  // Forward declaration.
-  template <typename G, typename F> class p_vertices;
-
-
   namespace internal
   {
 
diff --git a/milena/mln/core/site_set/p_queue.hh b/milena/mln/core/site_set/p_queue.hh
index babc994..d6fc400 100644
--- a/milena/mln/core/site_set/p_queue.hh
+++ b/milena/mln/core/site_set/p_queue.hh
@@ -114,7 +114,7 @@ namespace mln
     /// Push a site \p p in the queue.
     void push(const P& p);
 
-    /// Insertion element associated type. 
+    /// Insertion element associated type.
     typedef P i_element;
 
     /// Insert a site \p p (equivalent as 'push').
diff --git a/milena/mln/io/raw/all.hh b/milena/mln/io/raw/all.hh
index c10fa1a..32d34d7 100644
--- a/milena/mln/io/raw/all.hh
+++ b/milena/mln/io/raw/all.hh
@@ -1,4 +1,4 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
 //
 // This file is part of the Olena Library.  This library is free
 // software; you can redistribute it and/or modify it under the terms
@@ -25,13 +25,12 @@
 // reasons why the executable file might be covered by the GNU General
 // Public License.
 
-#ifndef MLN_IO_PGM_ALL_HH
-# define MLN_IO_PGM_ALL_HH
+#ifndef MLN_IO_RAW_ALL_HH
+# define MLN_IO_RAW_ALL_HH
 
-/*! \file mln/io/pgm/all.hh
- *
- * \brief File that includes all pgm io materials.
- */
+/// \file mln/io/raw/all.hh
+///
+/// File that includes all raw io materials.
 
 
 namespace mln
@@ -39,13 +38,13 @@ namespace mln
 
   namespace io
   {
-    /// Namespace of pgm input/output handling.
-    namespace pgm {}
+    /// Namespace of raw input/output handling.
+    namespace raw {}
   }
 
 }
 
-# include <mln/io/pgm/load.hh>
-# include <mln/io/pgm/save.hh>
+# include <mln/io/raw/load.hh>
+# include <mln/io/raw/save.hh>
 
-#endif // ! MLN_IO_PGM_ALL_HH
+#endif // ! MLN_IO_RAW_ALL_HH
diff --git a/milena/mln/io/raw/load.hh b/milena/mln/io/raw/load.hh
index d6e9077..eb1d789 100644
--- a/milena/mln/io/raw/load.hh
+++ b/milena/mln/io/raw/load.hh
@@ -98,6 +98,7 @@ namespace mln
 	{
 	  I& ima = exact(ima_);
 
+	  // Handle padding.
 	  unsigned data_size = sizeof (mln_value(I)) + sizeof (mln_value(I)) % 2;
 
 	  mln_box_runstart_piter(I) p(ima.domain());
diff --git a/milena/mln/io/raw/save.hh b/milena/mln/io/raw/save.hh
index 83b8fab..06c1f7d 100644
--- a/milena/mln/io/raw/save.hh
+++ b/milena/mln/io/raw/save.hh
@@ -31,6 +31,7 @@
 /// \file mln/io/raw/save.hh
 ///
 /// Save a Milena image by dumping its data to a file.
+/// \todo handle endianness.
 
 # include <iostream>
 # include <fstream>
@@ -82,6 +83,7 @@ namespace mln
         inline
         void save_data(I& ima, std::ofstream& file)
 	{
+	  // Handle padding.
 	  unsigned data_size = sizeof (mln_value(I)) + sizeof (mln_value(I)) % 2;
 
 	  mln_box_runstart_piter(I) p(ima.domain());
diff --git a/milena/mln/labeling/level.hh b/milena/mln/labeling/level.hh
index 8e373ea..17850bc 100644
--- a/milena/mln/labeling/level.hh
+++ b/milena/mln/labeling/level.hh
@@ -171,8 +171,6 @@ namespace mln
 	  level_functor<I> f(input, val);
 	  mln_ch_value(I, L) output = canvas::labeling(input, nbh, f, nlabels);
 
-	  // FIXME: Handle canvas status.
-
 	  trace::exiting("labeling::impl::generic::level");
 	  return output;
 	}
diff --git a/milena/mln/math/jacobi.hh b/milena/mln/math/jacobi.hh
index 0992098..a09e07b 100644
--- a/milena/mln/math/jacobi.hh
+++ b/milena/mln/math/jacobi.hh
@@ -45,17 +45,19 @@ namespace mln
   namespace math
   {
 
-    algebra::quat jacobi(algebra::mat < 4, 4, float >a);
+    algebra::quat
+    jacobi(algebra::mat<4u,4u,float> a);
 
 
 # ifndef MLN_INCLUDE_ONLY
 
   // FIXME: nD ?
 #define rotateJacobi(a,i,j,k,l) g=a(i,j);h=a(k,l);a(i,j)=g-s*(h+g*tau); \
-    a(k,l)=h+s*(g-h*tau)
+    a(k,l)=h+s*(g-h*tau);
 
 
-    algebra::quat jacobi(algebra::mat < 4, 4, float >a)
+    algebra::quat
+    jacobi(algebra::mat<4u,4u,float> a)
     {
       float dd, d[4];
       algebra::mat < 4, 4, float >v(literal::zero);
@@ -106,13 +108,13 @@ namespace mln
               for (iq = ip + 1; iq < 4; iq++)
                 {
                   g = 100.0f * std::fabs(a(ip, iq));
-                  if (i > 4 && std::fabs(d[ip]) + g == std::fabs(d[ip])
-                      && std::fabs(d[iq]) + g == std::fabs(d[iq]))
+                  if (i > 4 && (float)(std::fabs(d[ip]) + g) == (float)std::fabs(d[ip])
+                      && (float)(std::fabs(d[iq]) + g) == (float)std::fabs(d[iq]))
                     a(ip, iq) = 0.0f;
                   else if (std::fabs(a(ip, iq)) > tresh)
                     {
                       h = d[iq] - d[ip];
-                      if (std::fabs(h) + g == std::fabs(h)) // unsafe?
+                      if ((float)(std::fabs(h) + g) == (float)std::fabs(h)) // unsafe?
                         t = (a(ip, iq)) / h;
                       else
                         {
@@ -131,14 +133,25 @@ namespace mln
                       d[ip] -= h;
                       d[iq] += h;
                       a(ip, iq) = 0.0;
+
+		      // DO *NOT* remove these semicolons!!
+		      // rotateJacobi is a macro with 4 function calls.
                       for (j = 0; j <= ip - 1; j++)
+		      {
                         rotateJacobi(a, j, ip, j, iq);
+		      }
                       for (j = ip + 1; j <= iq - 1; j++)
+		      {
                         rotateJacobi(a, ip, j, j, iq);
+		      }
                       for (j = iq + 1; j < 4; j++)
+		      {
                         rotateJacobi(a, ip, j, iq, j);
+		      }
                       for (j = 0; j < 4; j++)
+		      {
                         rotateJacobi(v, j, ip, j, iq);
+		      }
                     }
                 }
             }
diff --git a/milena/mln/value/shell.hh b/milena/mln/value/shell.hh
index 31799f4..e55b210 100644
--- a/milena/mln/value/shell.hh
+++ b/milena/mln/value/shell.hh
@@ -115,7 +115,7 @@ namespace mln
     // Ctor
 
     template <typename F, typename I>
-    shell<F,I>::shell(Image<I> &ima, const mln_site(I) &s)
+    shell<F,I>::shell(Image<I>& ima, const mln_site(I)& s)
       : ima_(exact(ima)), s_(s), v_(F()(exact(ima)(s)))
     {
     }
diff --git a/milena/tests/unit_test/Makefile.am b/milena/tests/unit_test/Makefile.am
index 09177d7..9ad9c7c 100644
--- a/milena/tests/unit_test/Makefile.am
+++ b/milena/tests/unit_test/Makefile.am
@@ -178,6 +178,8 @@ mln_fun_p2b_all \
 mln_fun_p2b_has \
 mln_fun_p2b_big_chess \
 mln_fun_p2b_essential \
+mln_fun_p2p_all \
+mln_fun_p2p_translation \
 mln_fun_p2p_mirror \
 mln_fun_x2p_closest_point \
 mln_fun_x2p_all \
@@ -271,6 +273,7 @@ mln_convert_from_to \
 mln_convert_impl_from_value_to_value \
 mln_convert_impl_all \
 mln_convert_impl_from_double_to_value \
+mln_convert_impl_from_site_set_to_image \
 mln_convert_impl_from_image_to_site_set \
 mln_convert_impl_from_float_to_value \
 mln_convert_impl_from_int_to_value \
@@ -393,6 +396,7 @@ mln_accu_line \
 mln_accu_essential \
 mln_accu_max_h \
 mln_level_compare \
+mln_level_sort_offsets \
 mln_level_transform_inplace \
 mln_level_replace \
 mln_level_apply \
@@ -902,6 +906,8 @@ mln_core_image_image_if \
 mln_core_image_hexa \
 mln_core_image_line_graph_elt_neighborhood \
 mln_core_image_extended \
+mln_core_image_p2p_image \
+mln_core_image_slice_image \
 mln_core_image_image2d_h \
 mln_core_image_image2d \
 mln_core_image_ch_piter \
@@ -999,6 +1005,7 @@ mln_debug_iota \
 mln_debug_all \
 mln_debug_println_with_border \
 mln_debug_colorize \
+mln_debug_slices_2d \
 mln_debug_draw_graph \
 mln_debug_put_word \
 mln_debug_quiet \
@@ -1212,6 +1219,8 @@ mln_fun_p2b_all_SOURCES = mln_fun_p2b_all.cc
 mln_fun_p2b_has_SOURCES = mln_fun_p2b_has.cc
 mln_fun_p2b_big_chess_SOURCES = mln_fun_p2b_big_chess.cc
 mln_fun_p2b_essential_SOURCES = mln_fun_p2b_essential.cc
+mln_fun_p2p_all_SOURCES = mln_fun_p2p_all.cc
+mln_fun_p2p_translation_SOURCES = mln_fun_p2p_translation.cc
 mln_fun_p2p_mirror_SOURCES = mln_fun_p2p_mirror.cc
 mln_fun_x2p_closest_point_SOURCES = mln_fun_x2p_closest_point.cc
 mln_fun_x2p_all_SOURCES = mln_fun_x2p_all.cc
@@ -1305,6 +1314,7 @@ mln_convert_from_to_SOURCES = mln_convert_from_to.cc
 mln_convert_impl_from_value_to_value_SOURCES = mln_convert_impl_from_value_to_value.cc
 mln_convert_impl_all_SOURCES = mln_convert_impl_all.cc
 mln_convert_impl_from_double_to_value_SOURCES = mln_convert_impl_from_double_to_value.cc
+mln_convert_impl_from_site_set_to_image_SOURCES = mln_convert_impl_from_site_set_to_image.cc
 mln_convert_impl_from_image_to_site_set_SOURCES = mln_convert_impl_from_image_to_site_set.cc
 mln_convert_impl_from_float_to_value_SOURCES = mln_convert_impl_from_float_to_value.cc
 mln_convert_impl_from_int_to_value_SOURCES = mln_convert_impl_from_int_to_value.cc
@@ -1427,6 +1437,7 @@ mln_accu_line_SOURCES = mln_accu_line.cc
 mln_accu_essential_SOURCES = mln_accu_essential.cc
 mln_accu_max_h_SOURCES = mln_accu_max_h.cc
 mln_level_compare_SOURCES = mln_level_compare.cc
+mln_level_sort_offsets_SOURCES = mln_level_sort_offsets.cc
 mln_level_transform_inplace_SOURCES = mln_level_transform_inplace.cc
 mln_level_replace_SOURCES = mln_level_replace.cc
 mln_level_apply_SOURCES = mln_level_apply.cc
@@ -1936,6 +1947,8 @@ mln_core_image_image_if_SOURCES = mln_core_image_image_if.cc
 mln_core_image_hexa_SOURCES = mln_core_image_hexa.cc
 mln_core_image_line_graph_elt_neighborhood_SOURCES = mln_core_image_line_graph_elt_neighborhood.cc
 mln_core_image_extended_SOURCES = mln_core_image_extended.cc
+mln_core_image_p2p_image_SOURCES = mln_core_image_p2p_image.cc
+mln_core_image_slice_image_SOURCES = mln_core_image_slice_image.cc
 mln_core_image_image2d_h_SOURCES = mln_core_image_image2d_h.cc
 mln_core_image_image2d_SOURCES = mln_core_image_image2d.cc
 mln_core_image_ch_piter_SOURCES = mln_core_image_ch_piter.cc
@@ -2033,6 +2046,7 @@ mln_debug_iota_SOURCES = mln_debug_iota.cc
 mln_debug_all_SOURCES = mln_debug_all.cc
 mln_debug_println_with_border_SOURCES = mln_debug_println_with_border.cc
 mln_debug_colorize_SOURCES = mln_debug_colorize.cc
+mln_debug_slices_2d_SOURCES = mln_debug_slices_2d.cc
 mln_debug_draw_graph_SOURCES = mln_debug_draw_graph.cc
 mln_debug_put_word_SOURCES = mln_debug_put_word.cc
 mln_debug_quiet_SOURCES = mln_debug_quiet.cc
diff --git a/milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc b/milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
new file mode 100644
index 0000000..6af7096
--- /dev/null
+++ b/milena/tests/unit_test/mln_convert_impl_from_site_set_to_image.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/convert/impl/from_site_set_to_image.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/convert/impl/from_site_set_to_image.hh>
+#include <mln/convert/impl/from_site_set_to_image.hh>
+
+int main()
+{
+  // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_image_p2p_image.cc b/milena/tests/unit_test/mln_core_image_p2p_image.cc
new file mode 100644
index 0000000..83595eb
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_image_p2p_image.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/core/image/p2p_image.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/core/image/p2p_image.hh>
+#include <mln/core/image/p2p_image.hh>
+
+int main()
+{
+  // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_core_image_slice_image.cc b/milena/tests/unit_test/mln_core_image_slice_image.cc
new file mode 100644
index 0000000..2f52ab1
--- /dev/null
+++ b/milena/tests/unit_test/mln_core_image_slice_image.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/core/image/slice_image.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/core/image/slice_image.hh>
+#include <mln/core/image/slice_image.hh>
+
+int main()
+{
+  // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_debug_slices_2d.cc b/milena/tests/unit_test/mln_debug_slices_2d.cc
new file mode 100644
index 0000000..d74679f
--- /dev/null
+++ b/milena/tests/unit_test/mln_debug_slices_2d.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/debug/slices_2d.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/debug/slices_2d.hh>
+#include <mln/debug/slices_2d.hh>
+
+int main()
+{
+  // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_p2p_all.cc b/milena/tests/unit_test/mln_fun_p2p_all.cc
new file mode 100644
index 0000000..f64c24e
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_p2p_all.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/fun/p2p/all.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/fun/p2p/all.hh>
+#include <mln/fun/p2p/all.hh>
+
+int main()
+{
+  // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_fun_p2p_translation.cc b/milena/tests/unit_test/mln_fun_p2p_translation.cc
new file mode 100644
index 0000000..5a1da3a
--- /dev/null
+++ b/milena/tests/unit_test/mln_fun_p2p_translation.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/fun/p2p/translation.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/fun/p2p/translation.hh>
+#include <mln/fun/p2p/translation.hh>
+
+int main()
+{
+  // Nothing.
+}
diff --git a/milena/tests/unit_test/mln_level_sort_offsets.cc b/milena/tests/unit_test/mln_level_sort_offsets.cc
new file mode 100644
index 0000000..a32249e
--- /dev/null
+++ b/milena/tests/unit_test/mln_level_sort_offsets.cc
@@ -0,0 +1,11 @@
+// Unit test for mln/level/sort_offsets.hh.
+// Generated by ./build_unit_test.sh, do not modify.
+
+// Include the file twice, so we detect missing inclusion guards.
+#include <mln/level/sort_offsets.hh>
+#include <mln/level/sort_offsets.hh>
+
+int main()
+{
+  // Nothing.
+}
-- 
1.5.6.5