diff --git a/CMakeLists.txt b/CMakeLists.txt
index 44e40b639c2328b5512ad4c557a877d4d9cbec8f..91b0a1866ad4835bbdc3db6aec2a8c91a39770a9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,12 +62,15 @@ if(SYSTEM_CRAY)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -dynamic")
 endif()
 
-# Cray systems
+# KNL target
 set(TARGET_KNL OFF CACHE BOOL "target Intel KNL architecture")
 if(TARGET_KNL)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXXOPT_KNL}")
 endif()
 
+# vectorization
+set(TARGET_VECTORIZE OFF CACHE BOOL "generate optimized code that vectorizes with the Intel compiler")
+
 # targets for extermal dependencies
 include(ExternalProject)
 externalproject_add(modparser
diff --git a/mechanisms/CMakeLists.txt b/mechanisms/CMakeLists.txt
index 24b4c3d688aa0769620506aa60b761f4d8d0a98b..9dded83451d6f5f61721b5fe316447988226f1e4 100644
--- a/mechanisms/CMakeLists.txt
+++ b/mechanisms/CMakeLists.txt
@@ -2,13 +2,18 @@ set(mechanisms pas hh expsyn exp2syn)
 
 set(modcc "${CMAKE_BINARY_DIR}/external/bin/modcc")
 
+set(modcc_flags "-t cpu")
+if(TARGET_VECTORIZE)
+    set(modcc_flags ${modcc_flags}  -O)
+endif()
+
 foreach(mech ${mechanisms})
     set(mod "${CMAKE_CURRENT_SOURCE_DIR}/mod/${mech}.mod")
     set(hpp "${CMAKE_CURRENT_SOURCE_DIR}/${mech}.hpp")
     add_custom_command(OUTPUT "${hpp}"
                        DEPENDS modparser "${mod}"
                        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
-                       COMMAND "${modcc}" -t cpu -O -o "${hpp}" "${mod}")
+                       COMMAND ${modcc} ${modcc_flags} ${mod} -o ${hpp})
     set_source_files_properties("${hpp}" PROPERTIES GENERATED TRUE)
     list(APPEND all_mod_hpps "${hpp}")
 endforeach()