diff --git a/CMakeLists.txt b/CMakeLists.txt
index e9cbddd72a8ab8f0d77d4a20f1ee691f0da78b0e..6ff459f9f3af8cbeca3190e27568bc92c284acd9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,7 +43,7 @@ option(CMAKE_LINK_STATIC "link as much as possible libraries static" OFF)
 #option(CUDA_USE_STATIC_CUDA_RUNTIME "Use the static version of the CUDA runtime library if available" OFF)
 #set(CUDA_USE_STATIC_CUDA_RUNTIME OFF CACHE BOOL "Use the static version of the CUDA runtime library if available" FORCE)
 
-option(CUDA_ENABLE "Enable or disable NVIDIA CUDA support" ON)
+option(CUDA_ENABLE "Enable or disable CUDA support (NVIDIA backend)" ON)
 if(CUDA_ENABLE)
     find_package(CUDA 7.5 QUIET)
 
@@ -155,7 +155,7 @@ list(APPEND CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}")
 # Find OpenCL
 ###############################################################################
 
-option(OpenCL_ENABLE "Enable or disable the requirement of hwloc" ON)
+option(OpenCL_ENABLE "Enable or disable OpenCL spport (AMD GPU support)" ON)
 if(OpenCL_ENABLE)
     find_package(OpenCL QUIET)
     if(OpenCL_FOUND)
@@ -169,6 +169,15 @@ else()
     add_definitions("-DCONF_NO_OPENCL")
 endif()
 
+###############################################################################
+# CPU backend
+###############################################################################
+
+option(CPU_ENABLE "Enable or disable CPU support" ON)
+if(NOT CPU_ENABLE)
+    add_definitions("-DCONF_NO_CPU")
+endif()
+
 ################################################################################
 # Find PThreads
 ################################################################################
diff --git a/backend/BackendConnector.cpp b/backend/BackendConnector.cpp
index bb03e6984dc402fe476fb4f35703cadfe87ae016..6abc3794b5322d1b877482e330e1da8e187df067 100644
--- a/backend/BackendConnector.cpp
+++ b/backend/BackendConnector.cpp
@@ -62,11 +62,6 @@ std::vector<IBackend*>* BackendConnector::thread_starter(miner_work& pWork)
 
 	std::vector<IBackend*>* pvThreads = new std::vector<IBackend*>;
 
-	auto cpuThreads = cpu::minethd::thread_starter(static_cast<uint32_t>(pvThreads->size()), pWork);
-	pvThreads->insert(std::end(*pvThreads), std::begin(cpuThreads), std::end(cpuThreads));
-	if(cpuThreads.size() == 0)
-		printer::inst()->print_msg(L0, "WARNING: backend CPU disabled.");
-
 #ifndef CONF_NO_CUDA
 	Plugin nvidiaPlugin("NVIDIA", "libxmrstak_cuda_backend");
 	std::vector<IBackend*>* nvidiaThreads = nvidiaPlugin.startBackend(static_cast<uint32_t>(pvThreads->size()), pWork);
@@ -82,6 +77,13 @@ std::vector<IBackend*>* BackendConnector::thread_starter(miner_work& pWork)
 	if(amdThreads->size() == 0)
 		printer::inst()->print_msg(L0, "WARNING: backend AMD disabled.");
 #endif
+
+#ifndef CONF_NO_CPU
+	auto cpuThreads = cpu::minethd::thread_starter(static_cast<uint32_t>(pvThreads->size()), pWork);
+	pvThreads->insert(std::end(*pvThreads), std::begin(cpuThreads), std::end(cpuThreads));
+	if(cpuThreads.size() == 0)
+		printer::inst()->print_msg(L0, "WARNING: backend CPU disabled.");
+#endif
 	
 	GlobalStates::iThreadCount = pvThreads->size();
 	return pvThreads;