diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e2dead251a2cd3c2738bae40c4d650ac3b943a8a
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,32 @@
+cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
+project(openfpm_devices LANGUAGES CXX)
+
+
+set(BOOST_INCLUDE ${Boost_INCLUDE_DIR} CACHE PATH "Include directory for BOOST")
+
+find_package(Boost 1.52.0 REQUIRED unit_test_framework iostreams program_options)
+
+
+if(ENABLE_GPU)
+	enable_language(CUDA)
+	find_package(CUDA)
+endif()
+
+###### CONFIG.h FILE ######
+
+if(CUDA_FOUND)
+	set(DEFINE_CUDA_GPU "#define CUDA_GPU")
+	set(CUDA_SOURCES memory/CudaMemory.cu)
+endif()
+
+if (BOOST_FOUND)
+	set(DEFINE_HAVE_BOOST "#define HAVE_BOOST")
+	set(DEFINE_HAVE_BOOST_IOSTREAMS "#define HAVE_BOOST_IOSTREAMS")
+	set(DEFINE_HAVE_BOOST_PROGRAM_OPTIONS "#define HAVE_BOOST_PROGRAM_OPTIONS")
+	set(DEFINE_HAVE_BOOST_UNIT_TEST_FRAMEWORK "#define HAVE_BOOST_UNIT_TEST_FRAMEWORK")
+endif()
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config/config_cmake.h.in ${CMAKE_CURRENT_SOURCE_DIR}/src/config/config.h)
+
+add_subdirectory (src)
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9c8eaa82f3424060b8095cefa38365e7ebc2221e
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,73 @@
+if(CUDA_FOUND)
+	set(CUDA_SOURCES memory/CudaMemory.cu)
+else()
+	set(CUDA_SOURCES )
+endif()
+
+add_executable(mem main.cpp memory/HeapMemory.cpp ${CUDA_SOURCES} Memleak_check.cpp)
+
+add_library(ofpmmemory STATIC memory/HeapMemory.cpp memory/PtrMemory.cpp Memleak_check.cpp ${CUDA_SOURCES})
+add_library(ofpmmemory_se2 STATIC memory/HeapMemory.cpp memory/PtrMemory.cpp Memleak_check.cpp ${CUDA_SOURCES})
+
+target_compile_definitions(ofpmmemory_se2 PUBLIC SE_CLASS2)
+
+target_compile_options(mem PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:-Xcudafe "--display_error_number --diag_suppress=2885 --diag_suppress=2887  --diag_suppress=2888 --diag_suppress=186 --diag_suppress=111" --expt-extended-lambda>)
+
+target_include_directories (mem PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories (mem PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/config)
+
+target_include_directories (ofpmmemory PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories (ofpmmemory PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/config)
+
+target_include_directories (ofpmmemory_se2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories (ofpmmemory_se2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/config)
+
+target_link_libraries(mem ${Boost_LIBRARIES})
+
+install(TARGETS ofpmmemory ofpmmemory_se2
+	DESTINATION openfpm_devices/lib )
+
+install(FILES memory/ExtPreAlloc.hpp 
+	      memory/BHeapMemory.hpp  
+	      memory/HeapMemory.hpp 
+	      memory/memory.hpp 
+	      memory/PtrMemory.hpp
+	      memory/CudaMemory.cuh
+	      DESTINATION openfpm_devices/include/memory)
+
+install(FILES util/print_stack.hpp
+	DESTINATION openfpm_devices/include/util)
+
+install(FILES Memleak_check.hpp
+	DESTINATION openfpm_devices/include/ )
+
+install(FILES util/se_util.hpp
+        DESTINATION openfpm_devices/include/util)
+
+install(FILES ptr_info.hpp
+	DESTINATION openfpm_devices/include)
+
+
+# Request that particles be built with -std=c++11
+# As this is a public compile feature anything that links to particles
+# will also build with -std=c++11
+target_compile_features(mem PUBLIC cxx_std_11)
+
+
+#if(BUILD_TESTING)
+
+#  add_executable(particle_test test.cu)
+
+#  set_target_properties(particle_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
+#  target_link_libraries(particle_test PRIVATE particles)
+
+#  add_test(NAME particles_10k COMMAND particle_test 10000 )
+#  add_test(NAME particles_256k COMMAND particle_test 256000 )
+
+#  if(APPLE)
+    # We need to add the default path to the driver (libcuda.dylib) as an rpath,
+    # so that the static cuda runtime can find it at runtime.
+    #    set_property(TARGET particle_test PROPERTY BUILD_RPATH ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})
+    #  endif()
+    #endif()
+
diff --git a/src/config/config_cmake.h.in b/src/config/config_cmake.h.in
index a0d62c9edc325fad8f80ce5ca11c06c068f57baf..02de32fc4b93d79ac946dbb08127a707b6f7de44 100644
--- a/src/config/config_cmake.h.in
+++ b/src/config/config_cmake.h.in
@@ -104,6 +104,9 @@ ${DEFINE_HAVE_SYS_TYPES_H}
 /* Define to 1 if you have the <unistd.h> header file. */
 ${DEFINE_HAVE_UNISTD_H}
 
+/* Test TinyObjLoader */
+${DEFINE_HAVE_TINYOBJLOADER}
+
 /* Define to the sub-directory where libtool stores uninstalled libraries. */
 #define LT_OBJDIR ".libs/"