diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index c69ca085e..74785d340 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -1,161 +1,171 @@
 cmake_minimum_required(VERSION 3.1)
 
 project(lammps)
 set(SOVERSION 0)
 set(LAMMPS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/../src)
 set(LAMMPS_LIB_SOURCE_DIR ${CMAKE_SOURCE_DIR}/../lib)
 
+# Cmake modules/macros are in a subdirectory to keep this file cleaner
 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/Modules)
 
 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_C_FLAGS)
   #release comes with -O3 by default
   set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
 endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_C_FLAGS)
 
 enable_language(CXX)
 
 ######################################################################
 # compiler tests
 # these need ot be done early (before further tests).
 #####################################################################
 
 include(CheckCCompilerFlag)
 
 ########################################################################
 # User input options                                                   #
 ########################################################################
 option(BUILD_SHARED_LIBS "Build shared libs" OFF)
 include(GNUInstallDirs)
 
 set(LAMMPS_LINK_LIBS)
 option(ENABLE_MPI "Build MPI version" OFF)
 if(ENABLE_MPI)
   find_package(MPI REQUIRED)
   include_directories(${MPI_C_INCLUDE_PATH})
   list(APPEND LAMMPS_LINK_LIBS ${MPI_CXX_LIBRARIES})
 endif()
 
 find_package(UnixCommands)
 
 option(CMAKE_VERBOSE_MAKEFILE "Verbose makefile" OFF)
 
-set(PACKAGES ASPHERE REAX)
+set(PACKAGES ASPHERE KSPACE REAX)
 foreach(PKG ${PACKAGES})
   option(ENABLE_${PKG} "Build ${PKG} Package" OFF)
 endforeach()
 
 set(ACCEL_PACKAGES USER-OMP)
 foreach(PKG ${ACCEL_PACKAGES})
   option(ENABLE_${PKG} "Build ${PKG} Package" OFF)
 endforeach()
 
+if(ENABLE_KSPACE)
+  find_package(FFTW3)
+  if(FFTW3_FOUND)
+    add_definitions(-DFFT_FFTW3)
+    include_directories(${FFTW3_INCLUDE_DIRS})
+    list(APPEND LAMMPS_LINK_LIBS ${FFTW3_LIBRARIES})
+  endif()
+endif()
+
 find_package(JPEG)
 if(JPEG_FOUND)
   add_definitions(-DLAMMPS_JPEG)
   include_directories(${JPEG_INCLUDE_DIR})
   list(APPEND LAMMPS_LINK_LIBS ${JPEG_LIBRARIES})
 endif()
 
 find_package(PNG)
 find_package(ZLIB)
 if(PNG_FOUND AND ZLIB_FOUND)
   include_directories(${PNG_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS})
   list(APPEND LAMMPS_LINK_LIBS ${PNG_LIBRARIES} ${ZLIB_LIBRARIES})
   add_definitions(-DLAMMPS_PNG)
 endif()
 
 find_program(GZIP gzip)
 if(GZIP)
   add_definitions(-DLAMMPS_GZIP)
 endif()
 
 ########################################################################
 # Basic system tests (standard libraries, headers, functions, types)   #
 ########################################################################
 include(CheckIncludeFile)
 foreach(HEADER math.h)
   check_include_file(${HEADER} FOUND_${HEADER})
   if(NOT FOUND_${HEADER})
     message(FATAL_ERROR "Could not find needed header - ${HEADER}")
   endif(NOT FOUND_${HEADER})
 endforeach(HEADER)
 
 set(MATH_LIBRARIES "m" CACHE STRING "math library")
 mark_as_advanced( MATH_LIBRARIES )
 include(CheckLibraryExists)
 foreach(FUNC sin cos)
   check_library_exists(${MATH_LIBRARIES} ${FUNC} "" FOUND_${FUNC}_${MATH_LIBRARIES})
   if(NOT FOUND_${FUNC}_${MATH_LIBRARIES})
     message(FATAL_ERROR "Could not find needed math function - ${FUNC}")
   endif(NOT FOUND_${FUNC}_${MATH_LIBRARIES})
 endforeach(FUNC)
 list(APPEND LAMMPS_LINK_LIBS ${MATH_LIBRARIES})
 
 ######################################
 # Include the following subdirectory # 
 ######################################
 
 #Do NOT go into src to not conflict with old Makefile build system
 #add_subdirectory(src)
 
 file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/*.cpp)
 file(GLOB LMP_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp)
 list(REMOVE_ITEM LIB_SOURCES ${LMP_SOURCES})
 
 if(NOT ENABLE_MPI)
   file(GLOB MPI_SOURCES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.c)
   list(APPEND LIB_SOURCES ${MPI_SOURCES})
   include_directories(${LAMMPS_SOURCE_DIR}/STUBS)
 endif()
 
 include(StyleHeaderUtils)
 RegisterStyles(${LAMMPS_SOURCE_DIR})
 
 # packages which include entire content when enabled
 
 foreach(PKG ${PACKAGES})
   if(ENABLE_${PKG})
     set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG})
 
     # detects styles in package and adds them to global list
     RegisterStyles(${${PKG}_SOURCES_DIR})
 
     file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/*.cpp)
     list(APPEND LIB_SOURCES ${${PKG}_SOURCES})
     include_directories(${${PKG}_SOURCES_DIR})
   endif()
 endforeach()
 
 # packages which selectively include variants based on enabled styles
 # e.g. accelerator packages
 
 # TODO
 
 if(ENABLE_REAX)
   enable_language(Fortran)
   file(GLOB REAX_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/reax/*.F)
   list(APPEND LIB_SOURCES ${REAX_SOURCES})
   include_directories(${LAMMPS_LIB_SOURCE_DIR}/reax)
 endif()
 
 
 ######################################################
 # Generate style headers based on global list of
 # styles registered during package selection           
 ######################################################
 set(LAMMPS_STYLE_HEADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/styles)
 
 GenerateStyleHeaders(${LAMMPS_STYLE_HEADERS_DIR})
 
 include_directories(${LAMMPS_SOURCE_DIR})
 include_directories(${LAMMPS_STYLE_HEADERS_DIR})
 
 
 add_library(lammps ${LIB_SOURCES})
 target_link_libraries(lammps ${LAMMPS_LINK_LIBS})
 set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
 install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
 add_executable(lmp ${LMP_SOURCES})
 target_link_libraries(lmp lammps)
 install(TARGETS lammps DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/cmake/Modules/FindFFTW3.cmake b/cmake/Modules/FindFFTW3.cmake
new file mode 100644
index 000000000..552bcc425
--- /dev/null
+++ b/cmake/Modules/FindFFTW3.cmake
@@ -0,0 +1,25 @@
+# - Find fftw3
+# Find the native FFTW3 headers and libraries.
+#
+#  FFTW3_INCLUDE_DIRS - where to find fftw3.h, etc.
+#  FFTW3_LIBRARIES    - List of libraries when using fftw3.
+#  FFTW3_FOUND        - True if fftw3 found.
+#
+
+find_package(PkgConfig)
+
+pkg_check_modules(PC_FFTW3 fftw3)
+find_path(FFTW3_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3_INCLUDE_DIRS})
+
+find_library(FFTW3_LIBRARY NAMES fftw3 HINTS ${PC_FFTW3_LIBRARY_DIRS})
+
+set(FFTW3_LIBRARIES ${FFTW3_LIBRARY})
+set(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE
+# if all listed variables are TRUE
+
+find_package_handle_standard_args(FFTW3 DEFAULT_MSG FFTW3_LIBRARY FFTW3_INCLUDE_DIR)
+
+mark_as_advanced(FFTW3_INCLUDE_DIR FFTW3_LIBRARY )