diff --git a/Makefile b/Makefile
index f9afbb5fa21b18b588e2b71805df3a9165c820b9..f4e9c8a759f89f3eb4e836341b41ffcc04e36b69 100644
--- a/Makefile
+++ b/Makefile
@@ -5,12 +5,13 @@ LIBHQR=src/libhqr.a
 
 default: testing_pivgen testing_treewalk
 
-src/libhqr.o: include/common.h include/libhqr.h
-src/libhqr_dbg.o: include/common.h include/libhqr.h
+src/queue.o:           include/queue.h include/common.h
+src/libhqr.o:          include/common.h include/libhqr.h
+src/libhqr_dbg.o:      include/common.h include/libhqr.h
 src/libhqr_systolic.o: include/common.h include/libhqr.h
-src/treewalk.o: include/common.h include/libhqr.h include/queue.h
+src/treewalk.o:        include/common.h include/libhqr.h include/queue.h
 
-$(LIBHQR): src/libhqr.o src/libhqr_dbg.o src/libhqr_systolic.o src/treewalk.o
+$(LIBHQR): src/libhqr.o src/libhqr_dbg.o src/libhqr_systolic.o src/treewalk.o src/queue.o
 	ar cr $@ $^
 
 %.o : %.c
diff --git a/src/queue.c b/src/queue.c
new file mode 100644
index 0000000000000000000000000000000000000000..e0ce90521153bc993c960d2e85255d2cfebc3867
--- /dev/null
+++ b/src/queue.c
@@ -0,0 +1,122 @@
+/**
+ *
+ * @file queue.c
+ *
+ * File for queue functions.
+ *
+ * @copyright 2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
+ *                 Univ. Bordeaux. All rights reserved.
+ *
+ * @version 1.0.0
+ * @author Raphael Boucherie
+ * @author Mathieu Faverge
+ * @date 2017-04-05
+ *
+ */
+#include "queue.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+/****************************************************
+ *   Generic functions for queue
+ ***************************************************/
+
+libhqr_queue_tile_t *libhqr_queue_tile_new (void)
+{
+   return (NULL);
+}
+
+void libhqr_queue_tile_first (libhqr_queue_tile_t ** queue_tile)
+{
+   if (queue_tile != NULL && *queue_tile != NULL)
+   {
+      while ((*queue_tile)->prev != NULL)
+         libhqr_queue_tile_prev (queue_tile);
+   }
+   return;
+}
+
+void libhqr_queue_tile_prev (libhqr_queue_tile_t ** queue_tile)
+{
+   if (queue_tile != NULL && *queue_tile != NULL)
+      *queue_tile = (*queue_tile)->prev;
+   return;
+}
+
+void libhqr_queue_tile_last (libhqr_queue_tile_t ** queue_tile)
+{
+   if (queue_tile != NULL && *queue_tile != NULL)
+   {
+      while ((*queue_tile)->next != NULL)
+         libhqr_queue_tile_next (queue_tile);
+   }
+   return;
+}
+
+void libhqr_queue_tile_next (libhqr_queue_tile_t ** queue_tile)
+{
+   if (queue_tile != NULL && *queue_tile != NULL)
+      *queue_tile = (*queue_tile)->next;
+   return;
+}
+
+void libhqr_queue_tile_post (libhqr_queue_tile_t ** queue_tile, int numero)
+{
+   if (queue_tile != NULL)
+   {
+      libhqr_queue_tile_t *p_l = NULL;
+      libhqr_queue_tile_t *p_p = NULL;
+
+      libhqr_queue_tile_first (queue_tile);
+      p_l = *queue_tile;
+      p_p = malloc (sizeof (*p_p));
+      if (p_p != NULL)
+      {
+         p_p->numero = numero;
+         p_p->next = p_l;
+         p_p->prev = NULL;
+         if (p_l != NULL)
+            p_l->prev = p_p;
+         *queue_tile = p_p;
+      }
+      else
+      {
+         fprintf (stderr, "Memoire insuffisante\n");
+         exit (EXIT_FAILURE);
+      }
+   }
+   return;
+}
+
+int libhqr_queue_tile_get (libhqr_queue_tile_t ** queue_tile)
+{
+   int ret;
+
+   if (queue_tile != NULL && *queue_tile != NULL)
+   {
+      libhqr_queue_tile_t *p_l = NULL;
+      libhqr_queue_tile_t *p_p = NULL;
+
+      libhqr_queue_tile_last (queue_tile);
+      p_l = *queue_tile;
+      if (p_l != NULL)
+         p_p = p_l->prev;
+      ret = p_l->numero;
+      free (p_l);
+      p_l = NULL;
+      if (p_p != NULL)
+         p_p->next = NULL;
+      *queue_tile = p_p;
+   }
+   return (ret);
+}
+
+void libhqr_queue_tile_delete (libhqr_queue_tile_t ** queue_tile)
+{
+   if (queue_tile != NULL && *queue_tile != NULL)
+   {
+      while (*queue_tile != NULL)
+         libhqr_queue_tile_get (queue_tile);
+   }
+   return;
+}
diff --git a/src/treewalk.c b/src/treewalk.c
index 26183102e68bd1eae8d46c58425b7a796c396241..52c70c478dda6a271a4b58af54bc1beaa1316f59 100644
--- a/src/treewalk.c
+++ b/src/treewalk.c
@@ -2,7 +2,7 @@
  *
  * @file treewalk.c
  *
- * File for queue functions, and algorithm of treewalking.
+ * File for algorithm of treewalking.
  *
  * @copyright 2017 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
  *                 Univ. Bordeaux. All rights reserved.
@@ -15,113 +15,8 @@
  */
 #include "libhqr.h"
 #include "queue.h"
-#include <stdlib.h>
 #include <stdio.h>
 
-/****************************************************
- *   Generic functions for queue
- ***************************************************/
-
-libhqr_queue_tile_t *libhqr_queue_tile_new (void)
-{
-   return (NULL);
-}
-
-void libhqr_queue_tile_first (libhqr_queue_tile_t ** queue_tile)
-{
-   if (queue_tile != NULL && *queue_tile != NULL)
-   {
-      while ((*queue_tile)->prev != NULL)
-         libhqr_queue_tile_prev (queue_tile);
-   }
-   return;
-}
-
-void libhqr_queue_tile_prev (libhqr_queue_tile_t ** queue_tile)
-{
-   if (queue_tile != NULL && *queue_tile != NULL)
-      *queue_tile = (*queue_tile)->prev;
-   return;
-}
-
-void libhqr_queue_tile_last (libhqr_queue_tile_t ** queue_tile)
-{
-   if (queue_tile != NULL && *queue_tile != NULL)
-   {
-      while ((*queue_tile)->next != NULL)
-         libhqr_queue_tile_next (queue_tile);
-   }
-   return;
-}
-
-void libhqr_queue_tile_next (libhqr_queue_tile_t ** queue_tile)
-{
-   if (queue_tile != NULL && *queue_tile != NULL)
-      *queue_tile = (*queue_tile)->next;
-   return;
-}
-
-void libhqr_queue_tile_post (libhqr_queue_tile_t ** queue_tile, int numero)
-{
-   if (queue_tile != NULL)
-   {
-      libhqr_queue_tile_t *p_l = NULL;
-      libhqr_queue_tile_t *p_p = NULL;
-
-      libhqr_queue_tile_first (queue_tile);
-      p_l = *queue_tile;
-      p_p = malloc (sizeof (*p_p));
-      if (p_p != NULL)
-      {
-         p_p->numero = numero;
-         p_p->next = p_l;
-         p_p->prev = NULL;
-         if (p_l != NULL)
-            p_l->prev = p_p;
-         *queue_tile = p_p;
-      }
-      else
-      {
-         fprintf (stderr, "Memoire insuffisante\n");
-         exit (EXIT_FAILURE);
-      }
-   }
-   return;
-}
-
-int libhqr_queue_tile_get (libhqr_queue_tile_t ** queue_tile)
-{
-   int ret;
-
-   if (queue_tile != NULL && *queue_tile != NULL)
-   {
-      libhqr_queue_tile_t *p_l = NULL;
-      libhqr_queue_tile_t *p_p = NULL;
-
-      libhqr_queue_tile_last (queue_tile);
-      p_l = *queue_tile;
-      if (p_l != NULL)
-         p_p = p_l->prev;
-      ret = p_l->numero;
-      free (p_l);
-      p_l = NULL;
-      if (p_p != NULL)
-         p_p->next = NULL;
-      *queue_tile = p_p;
-   }
-   return (ret);
-}
-
-void libhqr_queue_tile_delete (libhqr_queue_tile_t ** queue_tile)
-{
-   if (queue_tile != NULL && *queue_tile != NULL)
-   {
-      while (*queue_tile != NULL)
-         libhqr_queue_tile_get (queue_tile);
-   }
-   return;
-}
-
 /****************************************************
  *   LIBHQR_TREEWALK
  ***************************************************/