diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..fb459c31c27f0ed5b326c460a268f17a455342dc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,64 @@
+# Compiled source #
+###################
+*.com
+*.class
+*.dll
+*.exe
+*.o
+*.so
+
+# Packages #
+############
+# it's better to unpack these files and commit the raw source
+# git has its own built in compression methods
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.zip
+
+# Logs and databases #
+######################
+*.log
+*.sql
+*.sqlite
+
+# OS generated files #
+######################
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+
+###### Other
+
+*.vtk
+*.swp
+install-sh
+AUTHORS
+COPYING
+ChangeLog
+INSTALL
+NEWS
+README
+Makefile
+Makefile.in
+config.status
+config.guess
+config.sub
+configure
+numerics
+**/.deps
+**/src/config
+aclocal.m4
+**/autom4te.cache
+compile
+depcomp
+missing
+src/mem_map
diff --git a/Memleak_check.cpp b/Memleak_check.cpp
deleted file mode 100644
index 0fbe86cdaf6535ffacc8c943a376e125e2174018..0000000000000000000000000000000000000000
--- a/Memleak_check.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "config.h"
-#include "Memleak_check.hpp"
-#include "ptr_info.hpp"
-
-// counter for allocation of new memory
-long int new_data;
-
-// counter to delete memory
-size_t delete_data;
-
-// structure that store all the active pointer
-std::map<byte_ptr, ptr_info> active_ptr;
-
-// Running process id
-long int process_v_cl;
-
-// Process to print
-long int process_to_print = 0;
-
-// A way to stop the color
-std::string col_stop("\e[0m");
-
-// Print a message when allocation with id==msg_on_alloc is performed
-long int msg_on_alloc = -1;
-
-// throw when allocation with id==throw_on_alloc is performed
-long int thr_on_alloc = -1;
diff --git a/Memleak_check.hpp b/Memleak_check.hpp
deleted file mode 100644
index 45b25bf1b1b693a15dffb23b2fffd2c91a4bbbb4..0000000000000000000000000000000000000000
--- a/Memleak_check.hpp
+++ /dev/null
@@ -1,417 +0,0 @@
-#include "config.h"
-#include <iostream>
-#include <map>
-#include <iomanip>
-
-#ifndef MEMLEAK_CHECK_HPP
-#define MEMLEAK_CHECK_HPP
-
-typedef unsigned char * byte_ptr;
-
-#ifdef SE_CLASS2
-
-/////// POSSIBLE EVENTS /////////
-
-#define VCLUSTER_EVENT 0x2001
-
-#define VECTOR_EVENT 0x1102
-#define VECTOR_STD_EVENT 0x1101
-#define GRID_EVENT 0x1100
-
-#define VECTOR_DIST_EVENT 0x4002
-#define GRID_DIST_EVENT   0x4001
-
-#define HEAPMEMORY_EVENT 0x0100
-#define CUDAMEMORY_EVENT 0x0101
-
-/////////////////////////////////
-
-#include "util/se_util.hpp"
-#include "ptr_info.hpp"
-
-#define MEM_ERROR 1300lu
-
-extern long int msg_on_alloc;
-extern long int thr_on_alloc;
-extern std::string col_stop;
-extern long int new_data;
-extern size_t delete_data;
-
-extern std::map<byte_ptr,ptr_info> active_ptr;
-
-extern long int process_v_cl;
-extern long int process_to_print;
-
-/*! \brief Check and remove the active pointer
- *
- * Check and remove the pointer from the active list
- *
- * \param pointer to check and remove
- *
- * \return true if the operation succeded, false if the pointer does not exist
- *
- */
-static bool remove_ptr(const void * ptr)
-{
-	// Check if the pointer exist
-	std::map<byte_ptr, ptr_info>::iterator it = active_ptr.find((byte_ptr)ptr);
-
-	// if the element does not exist, print that something wrong happened and return
-	if ( it == active_ptr.end() )
-	{
-		std::cout << "Error " << __FILE__ << ":" << __LINE__ << " pointer not found " << ptr << "\n";
-		ACTION_ON_ERROR(MEM_ERROR);
-		return false;
-	}
-
-	// erase the pointer
-	active_ptr.erase((byte_ptr)ptr);
-
-	return true;
-}
-
-#define PRJ_DEVICES 0
-#define PRJ_DATA 1
-#define PRJ_VCLUSTER 2
-#define PRJ_IO 3
-#define PRJ_PDATA 4
-
-/*! \brief Get the color for printing unalloc pointers
- *
- * \param project_id id of the project
- * \param size size of the allocation
- * \param col color
- *
- */
-inline static void get_color(size_t project_id, size_t size, std::string & col)
-{
-	if (size == 8)
-	{
-		switch (project_id)
-		{
-		case PRJ_DEVICES:
-			col = std::string("\e[97m");
-			break;
-		case PRJ_DATA:
-			col = std::string("\e[95m");
-			break;
-		case PRJ_VCLUSTER:
-			col = std::string("\e[96m");
-			break;
-		case PRJ_IO:
-			col = std::string("\e[97m");
-			break;
-		case PRJ_PDATA:
-			col = std::string("\e[93m");
-			break;
-		}
-	}
-	else
-	{
-		switch (project_id)
-		{
-		case PRJ_DEVICES:
-			col = std::string("\e[7;92m");
-			break;
-		case PRJ_DATA:
-			col = std::string("\e[7;95m");
-			break;
-		case PRJ_VCLUSTER:
-			col = std::string("\e[7;96m");
-			break;
-		case PRJ_IO:
-			col = std::string("\e[7;97m");
-			break;
-		case PRJ_PDATA:
-			col = std::string("\e[7;93m");
-			break;
-		}
-	}
-}
-
-/*! \brief Given the structure id it convert to a human readable structure string
- *
- * \param project_id id of the project
- * \param prj string that identify the project
- *
- */
-inline static void get_structure(size_t struct_id, std::string & str)
-{
-	switch (struct_id)
-	{
-		case VCLUSTER_EVENT:
-			str = std::string("Vcluster");
-			break;
-		case VECTOR_STD_EVENT:
-			str = std::string("Vector_std");
-			break;
-		case VECTOR_EVENT:
-			str = std::string("Vector_native");
-			break;
-		case GRID_EVENT:
-			str = std::string("Grid");
-			break;
-		case VECTOR_DIST_EVENT:
-			str = std::string("Vector distributed");
-			break;
-		case GRID_DIST_EVENT:
-			str = std::string("Grid distributed");
-			break;
-		case HEAPMEMORY_EVENT:
-			str = std::string("HeapMemory");
-			break;
-		case CUDAMEMORY_EVENT:
-			str = std::string("CudaMemory");
-			break;
-		default:
-			str = std::to_string(struct_id);
-	}
-}
-
-
-/*! \brief Given the project id it convert to a human readable project string
- *
- * \param project_id id of the project
- * \param prj string that identify the project
- *
- */
-inline static void get_project(size_t project_id, std::string & prj)
-{
-	switch (project_id)
-	{
-	case PRJ_DEVICES:
-		prj = std::string("devices");
-		break;
-	case PRJ_DATA:
-		prj = std::string("data");
-		break;
-	case PRJ_VCLUSTER:
-		prj = std::string("vcluster");
-		break;
-	case PRJ_IO:
-		prj = std::string("io");
-		break;
-	case PRJ_PDATA:
-		prj = std::string("pdata");
-		break;
-	}
-}
-
-/*! \brief Print all active structures
- *
- * Print all active structures
- *
- */
-static void print_alloc()
-{
-	std::string col;
-	std::string sid;
-	std::string prj;
-
-	for (std::map<byte_ptr,ptr_info>::iterator it = active_ptr.begin(); it != active_ptr.end(); ++it)
-	{
-		get_color(it->second.project_id,it->second.size,col);
-		get_structure(it->second.struct_id,sid);
-		get_project(it->second.project_id,prj);
-
-		std::cout << col << "Allocated memory " << (void *)it->first << "     size=" << it->second.size << "     id=" << it->second.id << "     structure id=" << std::hex <<  sid << std::dec << "    project id=" << prj << col_stop << "\n";
-	}
-}
-
-/* \brief When the allocation id==break_id is performed, print a message
- *
- * \param break_id
- *
- */
-static void message_on_alloc(long int break_id)
-{
-	msg_on_alloc = break_id;
-}
-
-/* \brief When the allocation id==break_id is performed, throw
- *
- * \param throw_id
- *
- */
-static void throw_on_alloc(long int throw_id)
-{
-	thr_on_alloc = throw_id;
-}
-
-/*! \brief Add the new allocated active pointer
- *
- * Add the new allocated active pointer
- *
- * \param new data active pointer
- * \param sz size of the new allocated memory
- *
- */
-static bool check_new(const void * data, size_t sz, size_t struct_id, size_t project_id)
-{
-	// Add a new pointer
-	new_data++;
-	ptr_info & ptr = active_ptr[(byte_ptr)data];
-	ptr.size = sz;
-	ptr.id = new_data;
-	ptr.struct_id = struct_id;
-	ptr.project_id = project_id;
-
-#ifdef SE_CLASS2_VERBOSE
-	if (process_to_print < 0 || process_to_print == process_v_cl)
-		std::cout << "New data: " << new_data << "   " << data << "\n";
-#endif
-
-	if  (msg_on_alloc == new_data)
-		std::cout << "Detected allocation: " << __FILE__ << ":" << __LINE__ << " id=" << msg_on_alloc << "\n";
-
-	if (thr_on_alloc == new_data)
-		throw MEM_ERROR;
-
-	return true;
-}
-
-/*! \brief check and delete a pointer
- *
- * check and delete a pointer from the list of active pointers
- *
- * \param pointer data
- * \return true if the operation to delete succeed
- *
- */
-static bool check_delete(const void * data)
-{
-	if (data == NULL)	return true;
-	// Delete the pointer
-	delete_data++;
-	bool result = remove_ptr(data);
-
-#ifdef SE_CLASS2_VERBOSE
-	if (process_to_print < 0 || process_to_print == process_v_cl)
-		std::cout << "Delete data: " << delete_data << "   " << data << "\n";
-#endif
-
-	return result;
-}
-
-/*! \brief check if the access is valid
- *
- * check if the access is valid
- *
- * \param ptr pointer we are going to access
- * \param size_access is the size in byte of the data we are fetching
- *
- * \return true if the pointer is valid
- *
- */
-static bool check_valid(const void * ptr, size_t size_access)
-{
-	if (active_ptr.size() == 0)
-	{
-		std::cerr << "Error invalid pointer: " << __FILE__ << ":" << __LINE__ << "  " << ptr << "\n";
-		ACTION_ON_ERROR(MEM_ERROR);
-		return false;
-	}
-
-	// get the upper bound
-
-	std::map<byte_ptr, ptr_info>::iterator l_b = active_ptr.upper_bound((byte_ptr)ptr);
-
-	// if there is no memory that satisfy the request
-	if (l_b == active_ptr.begin())
-	{
-		if (process_to_print < 0 || process_to_print == process_v_cl)
-		{
-			std::cerr << "Error invalid pointer: " << __FILE__ << ":" << __LINE__ << "  " << ptr << "   base allocation id=" << l_b->second.id << "\n";
-			ACTION_ON_ERROR(MEM_ERROR);
-		}
-		return false;
-	}
-
-	//! subtract one
-	l_b--;
-
-	// if there is no memory that satisfy the request
-	if (l_b == active_ptr.end())
-	{
-		if (process_to_print < 0 || process_to_print == process_v_cl)
-		{
-			std::cerr << "Error invalid pointer: " << __FILE__ << ":" << __LINE__ << "  " << ptr << "   base allocation id=" << l_b->second.id  << "\n";
-			ACTION_ON_ERROR(MEM_ERROR);
-		}
-		return false;
-	}
-
-	// check if ptr is in the range
-
-	size_t sz = l_b->second.size;
-
-	if (((unsigned char *)l_b->first) + sz < ((unsigned char *)ptr) + size_access)
-	{
-		if (process_to_print < 0 || process_to_print == process_v_cl)
-		{
-			std::cerr << "Error invalid pointer: " << __FILE__ << ":" << __LINE__ << "  "  << ptr << "   base allocation id=" << l_b->second.id << "\n";
-			ACTION_ON_ERROR(MEM_ERROR);
-		}
-		return false;
-	}
-
-	return true;
-}
-
-
-/*! \brief check if the access is valid
- *
- * check if the access is valid
- *
- * \param ptr pointer we are going to access
- * \param size_access is the size in byte of the data we are fetching
- *
- * \return true if the pointer is valid
- *
- */
-static long int check_whoami(const void * ptr, size_t size_access)
-{
-	if (active_ptr.size() == 0)
-		return -1;
-
-	// get the upper bound
-
-	std::map<byte_ptr, ptr_info>::iterator l_b = active_ptr.upper_bound((byte_ptr)ptr);
-
-	// if there is no memory that satisfy the request
-	if (l_b == active_ptr.begin())
-		return -1;
-
-	//! subtract one
-	l_b--;
-
-	// if there is no memory that satisfy the request
-	if (l_b == active_ptr.end())
-		return -1;
-
-	// check if ptr is in the range
-
-	size_t sz = l_b->second.size;
-
-	if (((unsigned char *)l_b->first) + sz < ((unsigned char *)ptr) + size_access)
-		return -1;
-
-	return l_b->second.id;
-}
-
-/*! \brief In case of Parallel application it set the process that print the
- *
- * \param p_to_print is < 0 (Mean all)
- *
- */
-static void set_process_to_print(long int p_to_print)
-{
-	process_to_print = p_to_print;
-}
-
-#else
-
-
-
-#endif
-#endif
diff --git a/ptr_info.hpp b/ptr_info.hpp
deleted file mode 100644
index 9b28d210d8c075f60c25179815d2697f316f0aa0..0000000000000000000000000000000000000000
--- a/ptr_info.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * ptr_info.hpp
- *
- *  Created on: Nov 19, 2015
- *      Author: i-bird
- */
-
-#ifndef OPENFPM_DEVICES_SRC_PTR_INFO_HPP_
-#define OPENFPM_DEVICES_SRC_PTR_INFO_HPP_
-
-
-struct ptr_info
-{
-	size_t id;
-	size_t struct_id;
-	size_t project_id;
-	size_t size;
-};
-
-
-#endif /* OPENFPM_DEVICES_SRC_PTR_INFO_HPP_ */