diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 71070aff450fa41a03a759746d2bc7187255d24c..d7fb090e4ab977cc907d3b624dcbed62ae3fbfeb 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -4,7 +4,7 @@
 # Created by Christoph Junghans and Richard Berger
 cmake_minimum_required(VERSION 3.1)
 
-project(lammps)
+project(lammps LANGUAGES CXX)
 set(SOVERSION 0)
 set(LAMMPS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src)
 set(LAMMPS_LIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lib)
@@ -23,14 +23,22 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS)
   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_CXX_FLAGS)
 
-# remove any style headers in the src dir
-file(GLOB SRC_STYLE_FILES ${LAMMPS_SOURCE_DIR}/style_*.h)
-if(SRC_STYLE_FILES)
-  file(REMOVE ${SRC_STYLE_FILES})
+file(GLOB SRC_FILES ${LAMMPS_SOURCE_DIR}/*.cpp)
+list(SORT SRC_FILES)
+# check for files installed by make-based buildsystem 
+# only run this time consuming check if there are new files
+if(NOT SRC_FILES STREQUAL SRC_FILES_CACHED)
+  file(GLOB SRC_PKG_FILES ${LAMMPS_SOURCE_DIR}/*/*.cpp)
+  message(STATUS "Running check for installed package (this might take a while)")
+  foreach(_SRC SRC_PKG_FILES)
+    get_filename_component(FILENAME "${_SRC}" NAME)
+    if(EXISTS ${LAMMPS_SOURCE_DIR}/${FILENAME})
+      message(FATAL_ERROR "Found packages installed by the make-based buildsystem, please run 'make -C ${LAMMPS_SOURCE_DIR} no-all purge'")
+    endif()
+  endforeach()
+  set(SRC_FILES_CACHED "${SRC_FILES}" CACHE INTERNAL "List of file in LAMMPS_SOURCE_DIR" FORCE)
 endif()
 
-enable_language(CXX)
-
 ######################################################################
 # compiler tests
 # these need ot be done early (before further tests).
@@ -53,16 +61,19 @@ include(GNUInstallDirs)
 set(LAMMPS_LINK_LIBS)
 set(LAMMPS_DEPS)
 set(LAMMPS_API_DEFINES)
-option(ENABLE_MPI "Build MPI version" OFF)
-if(ENABLE_MPI)
+
+find_package(MPI QUIET)
+option(BUILD_MPI "Build MPI version" ${MPI_FOUND})
+if(BUILD_MPI)
   find_package(MPI REQUIRED)
-  include_directories(${MPI_C_INCLUDE_PATH})
+  include_directories(${MPI_CXX_INCLUDE_PATH})
   list(APPEND LAMMPS_LINK_LIBS ${MPI_CXX_LIBRARIES})
   option(LAMMPS_LONGLONG_TO_LONG "Workaround if your system or MPI version does not recognize 'long long' data types" OFF)
   if(LAMMPS_LONGLONG_TO_LONG)
     add_definitions(-DLAMMPS_LONGLONG_TO_LONG)
   endif()
 else()
+  enable_language(C)
   file(GLOB MPI_SOURCES ${LAMMPS_SOURCE_DIR}/STUBS/mpi.c)
   add_library(mpi_stubs STATIC ${MPI_SOURCES})
   include_directories(${LAMMPS_SOURCE_DIR}/STUBS)
@@ -108,14 +119,14 @@ set(OTHER_PACKAGES KIM PYTHON MSCG MPIIO VORONOI POEMS LATTE
   USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM)
 set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU)
 foreach(PKG ${DEFAULT_PACKAGES})
-  option(ENABLE_${PKG} "Build ${PKG} Package" ${ENABLE_ALL})
+  option(PKG_${PKG} "Build ${PKG} Package" ${ENABLE_ALL})
 endforeach()
 foreach(PKG ${ACCEL_PACKAGES} ${OTHER_PACKAGES})
-  option(ENABLE_${PKG} "Build ${PKG} Package" OFF)
+  option(PKG_${PKG} "Build ${PKG} Package" OFF)
 endforeach()
 
 macro(pkg_depends PKG1 PKG2)
-  if(ENABLE_${PKG1} AND NOT ENABLE_${PKG2})
+  if(PKG_${PKG1} AND NOT PKG_${PKG2})
     message(FATAL_ERROR "${PKG1} package needs LAMMPS to be build with ${PKG2}")
   endif()
 endmacro()
@@ -131,31 +142,50 @@ pkg_depends(USER-PHONON KSPACE)
 ######################################################
 # packages with special compiler needs or external libs
 ######################################################
-if(ENABLE_REAX OR ENABLE_MEAM OR ENABLE_USER-QUIP OR ENABLE_USER-QMMM OR ENABLE_LATTE)
+if(PKG_REAX OR PKG_MEAM OR PKG_USER-QUIP OR PKG_USER-QMMM OR PKG_LATTE)
   enable_language(Fortran)
-  include(CheckFortranCompilerFlag)
-  check_Fortran_compiler_flag("-fno-second-underscore" FC_HAS_NO_SECOND_UNDERSCORE)
 endif()
 
-if(ENABLE_KOKKOS OR ENABLE_MSCG)
+if(PKG_MEAM)
+  enable_language(C)
+endif()
+
+if(PKG_KOKKOS OR PKG_MSCG)
   # starting with CMake 3.1 this is all you have to do to enforce C++11
   set(CMAKE_CXX_STANDARD 11) # C++11...
   set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
   set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
 endif()
 
-if(ENABLE_USER-OMP OR ENABLE_KOKKOS OR ENABLE_USER-INTEL)
+find_package(OpenMP QUIET)
+option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND})
+if(BUILD_OMP OR PKG_USER-OMP OR PKG_KOKKOS OR PKG_USER-INTEL)
   find_package(OpenMP REQUIRED)
   set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
   set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
 endif()
 
-if(ENABLE_KSPACE)
-  set(FFT "KISSFFT" CACHE STRING "FFT library for KSPACE package")
-  set_property(CACHE FFT PROPERTY STRINGS KISSFFT FFTW3 MKL FFTW2)
+if(PKG_KSPACE)
+  option(FFT_SINGLE "Use single precision FFT instead of double" OFF)
+  set(FFTW "FFTW3")
+  if(FFT_SINGLE)
+    set(FFTW "FFTW3F")
+    add_definitions(-DFFT_SINGLE)
+  endif()
+  find_package(${FFTW} QUIET)
+  if(${FFTW}_FOUND)
+    set(FFT "${FFTW}" CACHE STRING "FFT library for KSPACE package")
+  else()
+    set(FFT "KISSFFT" CACHE STRING "FFT library for KSPACE package")
+  endif()
+  set_property(CACHE FFT PROPERTY STRINGS KISSFFT ${FFTW} MKL)
   if(NOT FFT STREQUAL "KISSFFT")
     find_package(${FFT} REQUIRED)
-    add_definitions(-DFFT_${FFT})
+    if(NOT FFT STREQUAL "FFTW3F")
+	    add_definitions(-DFFT_FFTW)
+    else()
+      add_definitions(-DFFT_${FFT})
+    endif()
     include_directories(${${FFT}_INCLUDE_DIRS})
     list(APPEND LAMMPS_LINK_LIBS ${${FFT}_LIBRARIES})
   endif()
@@ -166,22 +196,17 @@ if(ENABLE_KSPACE)
   endif()
 endif()
 
-if(ENABLE_MSCG OR ENABLE_USER-ATC OR ENABLE_USER-AWPMD OR ENABLE_USER-QUIP OR ENABLE_LATTE)
+if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
   find_package(LAPACK)
   if(NOT LAPACK_FOUND)
     enable_language(Fortran)
     file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/*.f)
     add_library(linalg STATIC ${LAPACK_SOURCES})
-    include(CheckFortranCompilerFlag)
-    check_Fortran_compiler_flag("-fno-second-underscore" FC_HAS_NO_SECOND_UNDERSCORE)
-    if(FC_HAS_NO_SECOND_UNDERSCORE)
-      target_compile_options(linalg PRIVATE -fno-second-underscore)
-    endif()
     set(LAPACK_LIBRARIES linalg)
   endif()
 endif()
 
-if(ENABLE_PYTHON)
+if(PKG_PYTHON)
   find_package(PythonInterp REQUIRED)
   find_package(PythonLibs REQUIRED)
   add_definitions(-DLMP_PYTHON)
@@ -197,16 +222,25 @@ if(ENABLE_PYTHON)
   endif()
 endif()
 
-find_package(JPEG)
-if(JPEG_FOUND)
+find_package(JPEG QUIET)
+option(WITH_JPEG "Enable JPEG support" ${JPEG_FOUND})
+if(WITH_JPEG)
+  find_package(JPEG REQUIRED)
   add_definitions(-DLAMMPS_JPEG)
   include_directories(${JPEG_INCLUDE_DIR})
   list(APPEND LAMMPS_LINK_LIBS ${JPEG_LIBRARIES})
 endif()
 
-find_package(PNG)
-find_package(ZLIB)
+find_package(PNG QUIET)
+find_package(ZLIB QUIET)
 if(PNG_FOUND AND ZLIB_FOUND)
+  option(WITH_PNG "Enable PNG support" ON)
+else()
+  option(WITH_PNG "Enable PNG support" OFF)
+endif()
+if(WITH_PNG)
+  find_package(PNG REQUIRED)
+  find_package(ZLIB REQUIRED)
   include_directories(${PNG_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS})
   list(APPEND LAMMPS_LINK_LIBS ${PNG_LIBRARIES} ${ZLIB_LIBRARIES})
   add_definitions(-DLAMMPS_PNG)
@@ -214,25 +248,50 @@ endif()
 
 find_program(GZIP_EXECUTABLE gzip)
 find_package_handle_standard_args(GZIP REQUIRED_VARS GZIP_EXECUTABLE)
-if(GZIP_FOUND)
+option(WITH_GZIP "Enable GZIP support" ${GZIP_FOUND})
+if(WITH_GZIP)
+  if(NOT GZIP_FOUND)
+    message(FATAL_ERROR "gzip executable not found")
+  endif()
   add_definitions(-DLAMMPS_GZIP)
 endif()
 
 find_program(FFMPEG_EXECUTABLE ffmpeg)
 find_package_handle_standard_args(FFMPEG REQUIRED_VARS FFMPEG_EXECUTABLE)
-if(FFMPEG_FOUND)
+option(WITH_FFMPEG "Enable FFMPEG support" ${FFMPEG_FOUND})
+if(WITH_FFMPEG)
+  if(NOT FFMPEG_FOUND)
+    message(FATAL_ERROR "ffmpeg executable not found")
+  endif()
   add_definitions(-DLAMMPS_FFMPEG)
 endif()
 
-if(ENABLE_VORONOI)
-  find_package(VORO REQUIRED) #some distros
+if(PKG_VORONOI)
+  option(DOWNLOAD_VORO "Download voro++ (instead of using the system's one)" OFF)
+  if(DOWNLOAD_VORO)
+    include(ExternalProject)
+    ExternalProject_Add(voro_build
+      URL http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz
+      URL_MD5 2338b824c3b7b25590e18e8df5d68af9
+      CONFIGURE_COMMAND "" BUILD_IN_SOURCE 1 INSTALL_COMMAND "" 
+      )
+    ExternalProject_get_property(voro_build SOURCE_DIR)
+    set(VORO_LIBRARIES ${SOURCE_DIR}/src/libvoro++.a)
+    set(VORO_INCLUDE_DIRS ${SOURCE_DIR}/src)
+    list(APPEND LAMMPS_DEPS voro_build)
+  else()
+    find_package(VORO)
+    if(NOT VORO_FOUND)
+      message(FATAL_ERROR "VORO not found, help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it")
+    endif()
+  endif()
   include_directories(${VORO_INCLUDE_DIRS})
   list(APPEND LAMMPS_LINK_LIBS ${VORO_LIBRARIES})
 endif()
 
-if(ENABLE_LATTE)
-  find_package(LATTE QUIET)
-  if(NOT LATTE_FOUND)
+if(PKG_LATTE)
+  option(DOWNLOAD_LATTE "Download latte (instead of using the system's one)" OFF)
+  if(DOWNLOAD_LATTE)
     message(STATUS "LATTE not found - we will build our own")
     include(ExternalProject)
     ExternalProject_Add(latte_build
@@ -244,48 +303,73 @@ if(ENABLE_LATTE)
     ExternalProject_get_property(latte_build INSTALL_DIR)
     set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a)
     list(APPEND LAMMPS_DEPS latte_build)
+  else()
+    find_package(LATTE)
+    if(NOT LATTE_FOUND)
+      message(FATAL_ERROR "LATTE not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it")
+    endif()
   endif()
   list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES} ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
 endif()
 
-if(ENABLE_USER-MOLFILE)
+if(PKG_USER-MOLFILE)
   add_library(molfile INTERFACE)
   target_include_directories(molfile INTERFACE ${LAMMPS_LIB_SOURCE_DIR}/molfile)
   target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS})
   list(APPEND LAMMPS_LINK_LIBS molfile)
 endif()
 
-if(ENABLE_USER-NETCDF)
+if(PKG_USER-NETCDF)
   find_package(NetCDF REQUIRED)
   include_directories(NETCDF_INCLUDE_DIR)
   list(APPEND LAMMPS_LINK_LIBS ${NETCDF_LIBRARY})
   add_definitions(-DLMP_HAS_NETCDF -DNC_64BIT_DATA=0x0020)
 endif()
 
-if(ENABLE_USER-SMD)
-  find_package(Eigen3 REQUIRED)
+if(PKG_USER-SMD)
+  option(DOWNLOAD_Eigen3 "Download Eigen3 (instead of using the system's one)" OFF)
+  if(DOWNLOAD_Eigen3)
+    include(ExternalProject)
+    ExternalProject_Add(Eigen3_build
+      URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz 
+      URL_MD5 1a47e78efe365a97de0c022d127607c3
+      CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DEIGEN_TEST_NOQT=ON
+        -DCMAKE_DISABLE_FIND_PACKAGE_LAPACK=ON -DCMAKE_DISABLE_FIND_PACKAGE_Cholmod=ON -DCMAKE_DISABLE_FIND_PACKAGE_Umfpack=ON -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU=ON
+        -DCMAKE_DISABLE_FIND_PACKAGE_PASTIX=ON -DCMAKE_DISABLE_FIND_PACKAGE_SPQR=ON -DCMAKE_DISABLE_FIND_PACKAGE_Boost=ON -DCMAKE_DISABLE_FIND_PACKAGE_CUDA=ON
+        -DCMAKE_DISABLE_FIND_PACKAGE_FFTW=ON -DCMAKE_DISABLE_FIND_PACKAGE_MPFR=ON -DCMAKE_DISABLE_FIND_PACKAGE_OpenGL=ON
+        )
+    ExternalProject_get_property(Eigen3_build INSTALL_DIR)
+    set(EIGEN3_INCLUDE_DIR ${INSTALL_DIR}/include/eigen3)
+    list(APPEND LAMMPS_DEPS Eigen3_build)
+  else()
+    find_package(Eigen3)
+    if(NOT Eigen3_FOUND)
+      message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_Eigen3=ON to download it")
+    endif()
+  endif()
   include_directories(${EIGEN3_INCLUDE_DIR})
 endif()
 
-if(ENABLE_USER-QUIP)
+if(PKG_USER-QUIP)
   find_package(QUIP REQUIRED)
   list(APPEND LAMMPS_LINK_LIBS ${QUIP_LIBRARIES} ${LAPACK_LIBRARIES} ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
 endif()
 
-if(ENABLE_USER-QMMM)
+if(PKG_USER-QMMM)
+  message(WARNING "Building QMMM with CMake is still experimental")
   find_package(QE REQUIRED)
   include_directories(${QE_INCLUDE_DIRS})
   list(APPEND LAMMPS_LINK_LIBS ${QE_LIBRARIES} ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES})
 endif()
 
-if(ENABLE_USER-VTK)
+if(PKG_USER-VTK)
   find_package(VTK REQUIRED NO_MODULE)
   include(${VTK_USE_FILE})
   add_definitions(-DLAMMPS_VTK)
   list(APPEND LAMMPS_LINK_LIBS ${VTK_LIBRARIES})
 endif()
 
-if(ENABLE_KIM)
+if(PKG_KIM)
   find_package(KIM QUIET)
   if(NOT KIM_FOUND)
     message(STATUS "KIM not found - we will build our own")
@@ -305,7 +389,7 @@ if(ENABLE_KIM)
   include_directories(${KIM_INCLUDE_DIRS})
 endif()
 
-if(ENABLE_MSCG)
+if(PKG_MSCG)
   find_package(GSL REQUIRED)
   set(LAMMPS_LIB_MSCG_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/mscg)
   set(MSCG_TARBALL ${LAMMPS_LIB_MSCG_BIN_DIR}/MS-CG-master.zip)
@@ -329,12 +413,18 @@ if(ENABLE_MSCG)
   target_link_libraries(mscg ${GSL_LIBRARIES} ${LAPACK_LIBRARIES})
 endif()
 
+if(PKG_COMPRESS)
+  find_package(ZLIB REQUIRED)
+  include_directories(${ZLIB_INCLUDE_DIRS})
+  list(APPEND LAMMPS_LINK_LIBS ${ZLIB_LIBRARIES})
+endif()
+
 ########################################################################
 # Basic system tests (standard libraries, headers, functions, types)   #
 ########################################################################
-include(CheckIncludeFile)
+include(CheckIncludeFileCXX)
 foreach(HEADER math.h)
-  check_include_file(${HEADER} FOUND_${HEADER})
+  check_include_file_cxx(${HEADER} FOUND_${HEADER})
   if(NOT FOUND_${HEADER})
     message(FATAL_ERROR "Could not find needed header - ${HEADER}")
   endif(NOT FOUND_${HEADER})
@@ -378,7 +468,7 @@ foreach(PKG ${DEFAULT_PACKAGES} ${OTHER_PACKAGES})
       DetectAndRemovePackageHeader(${LAMMPS_SOURCE_DIR}/${FNAME})
   endforeach()
 
-  if(ENABLE_${PKG})
+  if(PKG_${PKG})
     # detects styles in package and adds them to global list
     RegisterStyles(${${PKG}_SOURCES_DIR})
 
@@ -392,7 +482,7 @@ endforeach()
 ############################################
 foreach(SIMPLE_LIB REAX MEAM POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD
   USER-QMMM)
-  if(ENABLE_${SIMPLE_LIB})
+  if(PKG_${SIMPLE_LIB})
     string(REGEX REPLACE "^USER-" "" PKG_LIB "${SIMPLE_LIB}")
     string(TOLOWER "${PKG_LIB}" PKG_LIB)
     file(GLOB_RECURSE ${PKG_LIB}_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/*.F
@@ -413,40 +503,26 @@ foreach(SIMPLE_LIB REAX MEAM POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD
   endif()
 endforeach()
 
-if(ENABLE_USER-AWPMD)
+if(PKG_USER-AWPMD)
   target_link_libraries(awpmd ${LAPACK_LIBRARIES})
 endif()
 
-if(ENABLE_USER-ATC)
+if(PKG_USER-ATC)
   target_link_libraries(atc ${LAPACK_LIBRARIES})
 endif()
 
-if(ENABLE_USER-H5MD)
+if(PKG_USER-H5MD)
   find_package(HDF5 REQUIRED)
   target_link_libraries(h5md ${HDF5_LIBRARIES})
   target_include_directories(h5md PRIVATE ${HDF5_INCLUDE_DIRS})
 endif()
 
-if(ENABLE_MEAM AND FC_HAS_NO_SECOND_UNDERSCORE)
-  foreach(FSRC ${meam_SOURCES})
-    string(REGEX REPLACE "^.*\\." "" FEXT "${FSRC}")
-    list(FIND CMAKE_Fortran_SOURCE_FILE_EXTENSIONS "${FEXT}" FINDEX)
-    if(FINDEX GREATER -1)
-      set_property(SOURCE ${FSRC} APPEND PROPERTY COMPILE_FLAGS "-fno-second-underscore")
-    endif()
-  endforeach()
-endif()
-
-if(ENABLE_REAX AND FC_HAS_NO_SECOND_UNDERSCORE)
-  target_compile_options(reax PRIVATE -fno-second-underscore)
-endif()
-
 
 ######################################################################
 # packages which selectively include variants based on enabled styles
 # e.g. accelerator packages
 ######################################################################
-if(ENABLE_USER-OMP)
+if(PKG_USER-OMP)
     set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP)
     set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp
                          ${USER-OMP_SOURCES_DIR}/thr_omp.cpp
@@ -463,7 +539,7 @@ if(ENABLE_USER-OMP)
     include_directories(${USER-OMP_SOURCES_DIR})
 endif()
 
-if(ENABLE_KOKKOS)
+if(PKG_KOKKOS)
   set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos)
   set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos)
   add_definitions(-DLMP_KOKKOS)
@@ -499,7 +575,7 @@ if(ENABLE_KOKKOS)
   RegisterNBinStyle(${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.h)
   RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.h)
 
-  if(ENABLE_USER-DPD)
+  if(PKG_USER-DPD)
     get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES)
     list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.cpp)
     RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.h)
@@ -512,7 +588,7 @@ if(ENABLE_KOKKOS)
   include_directories(${KOKKOS_PKG_SOURCES_DIR})
 endif()
 
-if(ENABLE_OPT)
+if(PKG_OPT)
     set(OPT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/OPT)
     set(OPT_SOURCES)
     set_property(GLOBAL PROPERTY "OPT_SOURCES" "${OPT_SOURCES}")
@@ -526,7 +602,7 @@ if(ENABLE_OPT)
     include_directories(${OPT_SOURCES_DIR})
 endif()
 
-if(ENABLE_USER-INTEL)
+if(PKG_USER-INTEL)
     set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL)
     set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/intel_preprocess.h
                            ${USER-INTEL_SOURCES_DIR}/intel_buffers.h
@@ -550,7 +626,7 @@ if(ENABLE_USER-INTEL)
     include_directories(${USER-INTEL_SOURCES_DIR})
 endif()
 
-if(ENABLE_GPU)
+if(PKG_GPU)
     set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU)
     set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h
                     ${GPU_SOURCES_DIR}/fix_gpu.h
@@ -687,6 +763,7 @@ include_directories(${LAMMPS_STYLE_HEADERS_DIR})
 # Actually add executable and lib to build
 ############################################
 add_library(lammps ${LIB_SOURCES})
+list(REMOVE_DUPLICATES LAMMPS_LINK_LIBS)
 target_link_libraries(lammps ${LAMMPS_LINK_LIBS})
 if(LAMMPS_DEPS)
   add_dependencies(lammps ${LAMMPS_DEPS})
@@ -712,31 +789,60 @@ endif()
 # Print package summary
 ##################################
 foreach(PKG ${DEFAULT_PACKAGES} ${OTHER_PACKAGES} ${ACCEL_PACKAGES})
-  if(ENABLE_${PKG})
+  if(PKG_${PKG})
     message(STATUS "Building package: ${PKG}")
   endif()
 endforeach()
 
 string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE)
+get_directory_property(CPPFLAGS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
+include(FeatureSummary)
+feature_summary(INCLUDE_QUIET_PACKAGES WHAT ALL)
 message(STATUS "<<< Build configuration >>>
    Build type       ${CMAKE_BUILD_TYPE}
    Install path     ${CMAKE_INSTALL_PREFIX}
    Compilers and Flags:
    C++ Compiler     ${CMAKE_CXX_COMPILER}
        Type         ${CMAKE_CXX_COMPILER_ID}
-   C++ Flags        ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}")
+       Version      ${CMAKE_CXX_COMPILER_VERSION}
+   C++ Flags        ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}
+   Defines          ${CPPFLAGS}")
 get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
-if(LANGUAGES MATCHES ".*Fortran.*")
+list (FIND LANGUAGES "Fortran" _index)
+if (${_index} GREATER -1)
   message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} 
            Type     ${CMAKE_Fortran_COMPILER_ID}
+           Version  ${CMAKE_Fortran_COMPILER_VERSION}
    Fortran Flags    ${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${BTYPE}}")
 endif()
-message(STATUS "Linker flags:
+list (FIND LANGUAGES "C" _index)
+if (${_index} GREATER -1)
+  message(STATUS "C Compiler ${CMAKE_C_COMPILER} 
+     Type     ${CMAKE_C_COMPILER_ID}
+     Version  ${CMAKE_C_COMPILER_VERSION}
+     C Flags  ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}")
+endif()
+if(CMAKE_EXE_LINKER_FLAGS)
+  message(STATUS "Linker flags:
    Executable      ${CMAKE_EXE_LINKER_FLAGS}")
+  endif()
 if(BUILD_SHARED_LIBS)
-  message(STATUS "Shared libries  ${CMAKE_SHARED_LINKER_FLAGS}")
+  message(STATUS "Shared libraries  ${CMAKE_SHARED_LINKER_FLAGS}")
 else()
-  message(STATUS "Static libries  ${CMAKE_STATIC_LINKER_FLAGS}")
+  message(STATUS "Static libraries  ${CMAKE_STATIC_LINKER_FLAGS}")
 endif()
 message(STATUS "Link libraries: ${LAMMPS_LINK_LIBS}")
-
+if(BUILD_MPI)
+  message(STATUS "Using mpi with headers in ${MPI_CXX_INCLUDE_PATH} and ${MPI_CXX_LIBRARIES}")
+endif()
+if(ENABLED_GPU)
+  message(STATUS "GPU Api: ${GPU_API}")
+  if(GPU_API STREQUAL "CUDA")
+    message(STATUS "GPU Arch: ${GPU_ARCH}")
+  elseif(GPU_API STREQUAL "OpenCL")
+    message(STATUS "OCL Tune: ${OCL_TUNE}")
+  endif()
+endif()
+if(PKG_KSPACE)
+	message(STATUS "Using ${FFT} as FFT")
+endif()
diff --git a/cmake/Modules/FindFFTW2.cmake b/cmake/Modules/FindFFTW2.cmake
deleted file mode 100644
index c77e6cf8e9d126d5ebb4223e6e7cf53ef25b60b2..0000000000000000000000000000000000000000
--- a/cmake/Modules/FindFFTW2.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
-# - Find fftw2
-# Find the native FFTW2 headers and libraries.
-#
-#  FFTW2_INCLUDE_DIRS - where to find fftw2.h, etc.
-#  FFTW2_LIBRARIES    - List of libraries when using fftw2.
-#  FFTW2_FOUND        - True if fftw2 found.
-#
-
-find_path(FFTW2_INCLUDE_DIR fftw.h)
-
-find_library(FFTW2_LIBRARY NAMES fftw)
-
-set(FFTW2_LIBRARIES ${FFTW2_LIBRARY})
-set(FFTW2_INCLUDE_DIRS ${FFTW2_INCLUDE_DIR})
-
-include(FindPackageHandleStandardArgs)
-# handle the QUIETLY and REQUIRED arguments and set FFTW2_FOUND to TRUE
-# if all listed variables are TRUE
-
-find_package_handle_standard_args(FFTW2 DEFAULT_MSG FFTW2_LIBRARY FFTW2_INCLUDE_DIR)
-
-mark_as_advanced(FFTW2_INCLUDE_DIR FFTW2_LIBRARY )
diff --git a/cmake/Modules/FindFFTW3F.cmake b/cmake/Modules/FindFFTW3F.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..92d1e85e791ec362a15909bd09dccdc046efc2a5
--- /dev/null
+++ b/cmake/Modules/FindFFTW3F.cmake
@@ -0,0 +1,25 @@
+# - Find fftw3f
+# Find the native FFTW3F headers and libraries.
+#
+#  FFTW3F_INCLUDE_DIRS - where to find fftw3f.h, etc.
+#  FFTW3F_LIBRARIES    - List of libraries when using fftw3f.
+#  FFTW3F_FOUND        - True if fftw3f found.
+#
+
+find_package(PkgConfig)
+
+pkg_check_modules(PC_FFTW3F fftw3f)
+find_path(FFTW3F_INCLUDE_DIR fftw3.h HINTS ${PC_FFTW3F_INCLUDE_DIRS})
+
+find_library(FFTW3F_LIBRARY NAMES fftw3f HINTS ${PC_FFTW3F_LIBRARY_DIRS})
+
+set(FFTW3F_LIBRARIES ${FFTW3F_LIBRARY})
+set(FFTW3F_INCLUDE_DIRS ${FFTW3F_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set FFTW3F_FOUND to TRUE
+# if all listed variables are TRUE
+
+find_package_handle_standard_args(FFTW3F DEFAULT_MSG FFTW3F_LIBRARY FFTW3F_INCLUDE_DIR)
+
+mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY )
diff --git a/src/error.cpp b/src/error.cpp
index 3c8d8bb34cda52a888342a6165f7a19424f91991..2ab816c992ac910fd0a2dd789a1c08d3f9da2576 100644
--- a/src/error.cpp
+++ b/src/error.cpp
@@ -21,6 +21,20 @@
 
 using namespace LAMMPS_NS;
 
+// helper function to truncate a string to a segment starting with "src/";
+
+static const char *truncpath(const char *path)
+{
+   if (path) {
+     int len = strlen(path);
+     for (int i = len-4; i > 0; --i) {
+	if (strncmp("src/",path+i,4) == 0)
+          return path+i;
+     }
+   }
+   return path;
+}
+
 /* ---------------------------------------------------------------------- */
 
 Error::Error(LAMMPS *lmp) : Pointers(lmp) {
@@ -42,9 +56,9 @@ void Error::universe_all(const char *file, int line, const char *str)
 
   if (universe->me == 0) {
     if (universe->uscreen) fprintf(universe->uscreen,
-                                   "ERROR: %s (%s:%d)\n",str,file,line);
+                                   "ERROR: %s (%s:%d)\n",str,truncpath(file),line);
     if (universe->ulogfile) fprintf(universe->ulogfile,
-                                    "ERROR: %s (%s:%d)\n",str,file,line);
+                                    "ERROR: %s (%s:%d)\n",str,truncpath(file),line);
   }
 
   if (output) delete output;
@@ -73,7 +87,7 @@ void Error::universe_one(const char *file, int line, const char *str)
 {
   if (universe->uscreen)
     fprintf(universe->uscreen,"ERROR on proc %d: %s (%s:%d)\n",
-            universe->me,str,file,line);
+            universe->me,str,truncpath(file),line);
 
 #ifdef LAMMPS_EXCEPTIONS
   char msg[100];
@@ -93,7 +107,7 @@ void Error::universe_warn(const char *file, int line, const char *str)
 {
   if (universe->uscreen)
     fprintf(universe->uscreen,"WARNING on proc %d: %s (%s:%d)\n",
-            universe->me,str,file,line);
+            universe->me,str,truncpath(file),line);
 }
 
 /* ----------------------------------------------------------------------
@@ -116,10 +130,10 @@ void Error::all(const char *file, int line, const char *str)
     if (input && input->line) lastcmd = input->line;
     if (screen) fprintf(screen,"ERROR: %s (%s:%d)\n"
                         "Last command: %s\n",
-                        str,file,line,lastcmd);
+                        str,truncpath(file),line,lastcmd);
     if (logfile) fprintf(logfile,"ERROR: %s (%s:%d)\n"
                          "Last command: %s\n",
-                         str,file,line,lastcmd);
+                         str,truncpath(file),line,lastcmd);
   }
 
 #ifdef LAMMPS_EXCEPTIONS
@@ -158,15 +172,15 @@ void Error::one(const char *file, int line, const char *str)
   if (input && input->line) lastcmd = input->line;
   if (screen) fprintf(screen,"ERROR on proc %d: %s (%s:%d)\n"
                       "Last command: %s\n",
-                      me,str,file,line,lastcmd);
+                      me,str,truncpath(file),line,lastcmd);
   if (logfile) fprintf(logfile,"ERROR on proc %d: %s (%s:%d)\n"
                        "Last command: %s\n",
-                       me,str,file,line,lastcmd);
+                       me,str,truncpath(file),line,lastcmd);
 
   if (universe->nworlds > 1)
     if (universe->uscreen)
       fprintf(universe->uscreen,"ERROR on proc %d: %s (%s:%d)\n",
-              universe->me,str,file,line);
+              universe->me,str,truncpath(file),line);
 
 #ifdef LAMMPS_EXCEPTIONS
   char msg[100];
@@ -184,9 +198,9 @@ void Error::one(const char *file, int line, const char *str)
 
 void Error::warning(const char *file, int line, const char *str, int logflag)
 {
-  if (screen) fprintf(screen,"WARNING: %s (%s:%d)\n",str,file,line);
+  if (screen) fprintf(screen,"WARNING: %s (%s:%d)\n",str,truncpath(file),line);
   if (logflag && logfile) fprintf(logfile,"WARNING: %s (%s:%d)\n",
-                                  str,file,line);
+                                  str,truncpath(file),line);
 }
 
 /* ----------------------------------------------------------------------
@@ -196,8 +210,8 @@ void Error::warning(const char *file, int line, const char *str, int logflag)
 
 void Error::message(const char *file, int line, const char *str, int logflag)
 {
-  if (screen) fprintf(screen,"%s (%s:%d)\n",str,file,line);
-  if (logflag && logfile) fprintf(logfile,"%s (%s:%d)\n",str,file,line);
+  if (screen) fprintf(screen,"%s (%s:%d)\n",str,truncpath(file),line);
+  if (logflag && logfile) fprintf(logfile,"%s (%s:%d)\n",str,truncpath(file),line);
 }
 
 /* ----------------------------------------------------------------------