diff --git a/configure.ac b/configure.ac
index 38080b9c4778800240adeaa253060f6c0a6f7510..1ac71bea3e27d553daa150b093c2a313c6f73b95 100755
--- a/configure.ac
+++ b/configure.ac
@@ -47,8 +47,8 @@ fi
 prefix="$prefix/openfpm_devices"
 echo "Installation dir is: $prefix"
 
-AC_PROG_RANLIB
-AM_PROG_AR
+LT_INIT
+AC_SUBST([LIBTOOL_DEPS])
 
 # Checks for programs.
 AC_PROG_CXX
diff --git a/src/Makefile.am b/src/Makefile.am
index b4ce638c4196f9ac4c5ac28d312af24e2db5f43c..5ce956d59d613dc1da85a457499b7e5f4a0354d0 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,6 +7,10 @@ endif
 
 LINKLIBS = $(PTHREAD_LIBS) $(OPT_LIBS) $(BOOST_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LIB) $(CUDA_LIBS) $(BOOST_THREAD_LIB)
 
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+libtool: $(LIBTOOL_DEPS)
+	$(SHELL) ./config.status libtool
+
 noinst_PROGRAMS = mem
 mem_SOURCES = main.cpp memory/HeapMemory.cpp $(CUDA_SOURCES) Memleak_check.cpp
 mem_CXXFLAGS = $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include
@@ -22,6 +26,16 @@ libofpmmemory_se2_a_SOURCES = memory/HeapMemory.cpp $(CUDA_SOURCES) memory/PtrMe
 libofpmmemory_se2_a_CXXFLAGS = $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include -DSE_CLASS2
 libofpmmemory_se2_a_CFLAGS = 
 
+lib_LTLIBRARIES = libofpmmemory.la libofpmmemory_se2.la
+libofpmmemory_la_SOURCES = memory/HeapMemory.cpp $(CUDA_SOURCES) memory/PtrMemory.cpp Memleak_check.cpp
+libofpmmemory_la_CXXFLAGS = $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include
+libofpmmemory_la_CFLAGS =
+
+libofpmmemory_se2_la_SOURCES = memory/HeapMemory.cpp $(CUDA_SOURCES) memory/PtrMemory.cpp Memleak_check.cpp
+libofpmmemory_se2_la_CXXFLAGS = $(INCLUDES_PATH) $(BOOST_CPPFLAGS) -I/usr/local/include -DSE_CLASS2
+libofpmmemory_se2_la_CFLAGS =
+
+
 nobase_include_HEADERS = memory/ExtPreAlloc.hpp memory/BHeapMemory.hpp  memory/HeapMemory.hpp memory/memory.hpp memory/PtrMemory.hpp \
 Memleak_check.hpp util/print_stack.hpp ptr_info.hpp \
 util/se_util.hpp
diff --git a/src/memory/ExtPreAlloc.hpp b/src/memory/ExtPreAlloc.hpp
index edc5cf2a9e039bf745368174359d62c8e5c6aaa9..5bcfc8fc18ef879bb0b437212cddc465a362b1b1 100644
--- a/src/memory/ExtPreAlloc.hpp
+++ b/src/memory/ExtPreAlloc.hpp
@@ -8,6 +8,8 @@
 #define EXTPREALLOC_HPP_
 
 #include <stddef.h>
+#include "memory.hpp"
+#include <iostream>
 
 /*! Preallocated memory sequence
  *
diff --git a/src/memory/HeapMemory.cpp b/src/memory/HeapMemory.cpp
index 0d9e5f82f23179a0712e7518fe2c5af7e755511f..aac145355ca88fbf39ac5f5f94ecfef2d5ea3590 100644
--- a/src/memory/HeapMemory.cpp
+++ b/src/memory/HeapMemory.cpp
@@ -11,6 +11,8 @@
 #include <iostream>
 #include <cstdint>
 
+static const int extra_pad = 512;
+
 // If debugging mode include memory leak check
 #ifdef SE_CLASS2
 #include "Memleak_check.hpp"
@@ -26,7 +28,7 @@ bool HeapMemory::allocate(size_t sz)
 {
 	//! Allocate the device memory
 	if (dm == NULL)
-		dmOrig = new byte[sz+alignement];
+		dmOrig = new byte[sz+alignement+extra_pad];
 	else
 		std::cerr << __FILE__ << ":" << __LINE__ << " error memory already allocated\n";
 
@@ -180,7 +182,7 @@ bool HeapMemory::resize(size_t sz)
 	//! Create a new buffer if sz is bigger than the actual size
 	byte * tdm;
 	byte * tdmOrig;
-	tdmOrig = new byte[sz+alignement];
+	tdmOrig = new byte[sz+alignement+extra_pad];
 #ifdef SE_CLASS2
 	check_new(tdmOrig,sz+alignement,HEAPMEMORY_EVENT,0);
 #endif