diff --git a/common/utils/Makefile.inc b/common/utils/Makefile.inc
index 9bf9f189708fa4e9dea908402f4722478199fab6..606077c2592810a667e2fd59eabc2f20d22f30db 100644
--- a/common/utils/Makefile.inc
+++ b/common/utils/Makefile.inc
@@ -3,6 +3,7 @@ ITTI_DIR = $(COMMON_UTILS_DIR)/itti
 ITTI_OBJS =  $(ITTI_DIR)/intertask_interface.o
 ITTI_OBJS += $(ITTI_DIR)/intertask_interface_dump.o
 ITTI_OBJS += $(ITTI_DIR)/backtrace.o
+ITTI_OBJS += $(ITTI_DIR)/memory_pools.o
 ITTI_OBJS += $(ITTI_DIR)/signals.o
 ITTI_OBJS += $(ITTI_DIR)/timer.o
 
diff --git a/common/utils/itti/memory_pools.c b/common/utils/itti/memory_pools.c
new file mode 100644
index 0000000000000000000000000000000000000000..b6ad2eccf9b04991fd374bc721e016cea6f447e1
--- /dev/null
+++ b/common/utils/itti/memory_pools.c
@@ -0,0 +1,179 @@
+/*******************************************************************************
+
+ Eurecom OpenAirInterface
+ Copyright(c) 1999 - 2012 Eurecom
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms and conditions of the GNU General Public License,
+ version 2, as published by the Free Software Foundation.
+
+ This program is distributed in the hope it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+ The full GNU General Public License is included in this distribution in
+ the file called "COPYING".
+
+ Contact Information
+ Openair Admin: openair_admin@eurecom.fr
+ Openair Tech : openair_tech@eurecom.fr
+ Forums       : http://forums.eurecom.fr/openairinterface
+ Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+ 06410 Biot FRANCE
+
+ *******************************************************************************/
+
+#include <stdint.h>
+
+#include "assertions.h"
+#include "memory_pools.h"
+
+/*------------------------------------------------------------------------------*/
+#define CHARS_TO_UINT32(c1, c2, c3, c4) (((c1) << 24) | ((c2) << 16) | ((c3) << 8) | (c4))
+
+/*------------------------------------------------------------------------------*/
+typedef uint32_t pool_item_start_mark_t;
+typedef uint32_t pool_item_end_mark_t;
+
+typedef uint32_t pool_start_mark_t;
+
+typedef uint32_t pools_start_mark_t;
+
+typedef uint8_t pool_id_t;
+
+typedef struct memory_pool_item_start_s {
+    pool_item_start_mark_t      start_mark;
+
+    uint32_t                    info;
+    pool_id_t                   pool_id;
+
+} memory_pool_item_start_t;
+
+typedef struct memory_pool_item_end_s {
+    pool_item_end_mark_t        end_mark;
+} memory_pool_item_end_t;
+
+typedef struct memory_pool_item_s {
+    memory_pool_item_start_t    start;
+    uint32_t                    data[0];
+    memory_pool_item_end_t      end;
+} memory_pool_item_t;
+
+typedef struct memory_pool_s {
+    pool_start_mark_t           start_mark;
+
+    pool_id_t                   pool_id;
+    uint32_t                    items_number;
+    uint32_t                    item_size;
+    uint32_t                    items_free;
+    uint32_t                    items_free_min;
+    memory_pool_item_t         *items;
+} memory_pool_t;
+
+typedef struct memory_pools_s {
+    pools_start_mark_t          start_mark;
+
+    uint32_t                    pools_number;
+    uint32_t                    pools_defined;
+    memory_pool_t              *pools;
+} memory_pools_t;
+
+/*------------------------------------------------------------------------------*/
+static const uint32_t               MAX_POOLS_NUMBER =      20;
+static const uint32_t               MAX_POOL_ITEMS_NUMBER = 1000 * 1000;
+static const uint32_t               MAX_POOL_ITEM_SIZE =    100 * 1000;
+
+static const pool_item_start_mark_t POOL_ITEM_START_MARK =  CHARS_TO_UINT32 ('P', 'I', 's', 't');
+static const pool_item_end_mark_t   POOL_ITEM_END_MARK =    CHARS_TO_UINT32 ('p', 'i', 'E', 'N');
+
+static const pool_start_mark_t      POOL_START_MARK =       CHARS_TO_UINT32 ('P', '_', 's', 't');
+
+static const pools_start_mark_t     POOLS_START_MARK =      CHARS_TO_UINT32 ('P', 'S', 's', 't');
+
+/*------------------------------------------------------------------------------*/
+
+/*------------------------------------------------------------------------------*/
+
+/*------------------------------------------------------------------------------*/
+
+memory_pools_handle_t *memory_pools_create (uint32_t pools_number)
+{
+    memory_pools_t *memory_pools;
+    uint32_t pool;
+
+    DevCheck (pools_number < MAX_POOLS_NUMBER, pools_number, MAX_POOLS_NUMBER, 0); /* Limit to a reasonable number of pools */
+
+    /* Allocate memory_pools */
+    memory_pools = malloc (sizeof(memory_pools_t));
+    DevAssert (memory_pools != NULL);
+
+    /* Initialize memory_pools */
+    {
+        memory_pools->start_mark    = POOLS_START_MARK;
+        memory_pools->pools_number  = pools_number;
+        memory_pools->pools_defined = 0;
+
+        /* Allocate pools */
+        memory_pools->pools         = calloc (pools_number, sizeof(memory_pool_t));
+        DevAssert (memory_pools->pools != NULL);
+
+        /* Initialize pools */
+        for (pool = 0; pool < pools_number; pool++)
+        {
+            memory_pools->pools[pool].start_mark = POOL_START_MARK;
+        }
+    }
+
+    return ((memory_pools_handle_t) memory_pools);
+}
+
+int memory_pools_add_pool (memory_pools_handle_t *memory_pools_handle, uint32_t pool_items_number, uint32_t pool_item_size)
+{
+    memory_pools_t *memory_pools;
+    memory_pool_t *memory_pool;
+    uint32_t pool;
+    uint32_t item;
+
+    DevCheck (pool_items_number < MAX_POOL_ITEMS_NUMBER, pool_items_number, MAX_POOL_ITEMS_NUMBER, 0);  /* Limit to a reasonable number of items */
+    DevCheck (pool_item_size < MAX_POOL_ITEM_SIZE, pool_item_size, MAX_POOL_ITEM_SIZE, 0);              /* Limit to a reasonable item size */
+
+    /* Recover memory_pools */
+    memory_pools = (memory_pools_t *) memory_pools_handle;
+    DevAssert (memory_pools->start_mark == POOLS_START_MARK);               /* Sanity check on passed handle */
+    DevAssert (memory_pools->pools_defined < memory_pools->pools_number);   /* Check number of already created pools */
+
+    /* Select pool */
+    pool = memory_pools->pools_defined;
+    memory_pool = &memory_pools->pools[pool];
+
+    /* Initialize pool */
+    {
+        memory_pool->pool_id           = pool + 1;
+        memory_pool->items_number      = pool_items_number;
+        memory_pool->item_size         = pool_item_size;
+        memory_pool->items_free        = pool_items_number;
+        memory_pool->items_free_min    = pool_items_number;
+
+        /* Allocate items */
+        memory_pool->items = calloc (pool_items_number, (sizeof(memory_pool_item_t) + pool_item_size));
+        DevAssert (memory_pool->items != NULL);
+
+        /* Initialize items */
+        for (item = 0; pool < pool_items_number; item++)
+        {
+            memory_pool->items[item].start.start_mark  = POOL_ITEM_START_MARK;
+            memory_pool->items[item].start.pool_id     = memory_pool->pool_id;
+            memory_pool->items[item].data[pool_item_size / sizeof(uint32_t)] = POOL_ITEM_END_MARK;
+        }
+    }
+
+    memory_pools->pools_defined ++;
+
+    return (0);
+}
+
diff --git a/common/utils/itti/memory_pools.h b/common/utils/itti/memory_pools.h
new file mode 100644
index 0000000000000000000000000000000000000000..7c70be088348e6f3b70e48b5cf66fb1822ca08fa
--- /dev/null
+++ b/common/utils/itti/memory_pools.h
@@ -0,0 +1,36 @@
+/*******************************************************************************
+
+ Eurecom OpenAirInterface
+ Copyright(c) 1999 - 2012 Eurecom
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms and conditions of the GNU General Public License,
+ version 2, as published by the Free Software Foundation.
+
+ This program is distributed in the hope it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+ The full GNU General Public License is included in this distribution in
+ the file called "COPYING".
+
+ Contact Information
+ Openair Admin: openair_admin@eurecom.fr
+ Openair Tech : openair_tech@eurecom.fr
+ Forums       : http://forums.eurecom.fr/openairinterface
+ Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+ 06410 Biot FRANCE
+
+ *******************************************************************************/
+
+#ifndef MEMORY_POOLS_H_
+#define MEMORY_POOLS_H_
+
+typedef void * memory_pools_handle_t;
+
+#endif /* MEMORY_POOLS_H_ */