diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3d34337f7c4b84fa5d50a652bcf7d9492faefb17..b3e61d4f6c181492860857613e081e5b2270cbd2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,6 +8,9 @@ cmake_minimum_required(VERSION 3.1)
 # Set CMake policies
 cmake_policy(SET CMP0011 NEW)
 cmake_policy(SET CMP0054 NEW)
+if(${CMAKE_VERSION} VERSION_GREATER 3.9.6)
+    cmake_policy(SET CMP0071 NEW)
+endif()
 
 if(WIN32 AND
     NOT ${CMAKE_GENERATOR} STREQUAL Ninja AND
diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake
index 2baaac99654cb26727bc8633307ba9ce97e4ca4d..ef08a8478204e27cee18a9f769a87de92fb871aa 100644
--- a/scripts/cmake/ConanSetup.cmake
+++ b/scripts/cmake/ConanSetup.cmake
@@ -56,7 +56,7 @@ endif()
 execute_process(COMMAND ${CONAN_CMD} --version
     OUTPUT_VARIABLE CONAN_VERSION_OUTPUT)
 string(REGEX MATCH ".*Conan version ([0-9]+\.[0-9]+\.[0-9]+)" FOO "${CONAN_VERSION_OUTPUT}")
-set(CONAN_VERSION_REQUIRED 0.26.0)
+set(CONAN_VERSION_REQUIRED 1.0.0)
 if(${CMAKE_MATCH_1} VERSION_LESS ${CONAN_VERSION_REQUIRED})
     message(FATAL_ERROR "Conan outdated. Installed: ${CONAN_VERSION}, \
         required: ${CONAN_VERSION_REQUIRED}. Consider updating via 'pip \
diff --git a/scripts/cmake/conan/conan.cmake b/scripts/cmake/conan/conan.cmake
index 2a51d3ffb6c4ad98d9806aed51bc11c28102db40..e7b07f422682e0cf52acc96d9f8904d733e5d6cd 100644
--- a/scripts/cmake/conan/conan.cmake
+++ b/scripts/cmake/conan/conan.cmake
@@ -2,30 +2,22 @@ include(CMakeParseArguments)
 
 function(_get_msvc_ide_version result)
     set(${result} "" PARENT_SCOPE)
-    if(${CMAKE_GENERATOR} STREQUAL "Ninja")
-        string(REGEX MATCHALL "[0-9]+" output "$ENV{VisualStudioVersion}")
-        list(GET output 0 _msvc_version)
-        set(${result} ${_msvc_version} PARENT_SCOPE)
+    if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500)
+        set(${result} 8 PARENT_SCOPE)
+    elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600)
+        set(${result} 9 PARENT_SCOPE)
+    elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700)
+        set(${result} 10 PARENT_SCOPE)
+    elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800)
+        set(${result} 11 PARENT_SCOPE)
+    elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900)
+        set(${result} 12 PARENT_SCOPE)
+    elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 1910)
+        set(${result} 14 PARENT_SCOPE)
+    elseif(NOT MSVC_VERSION VERSION_LESS 1910 AND MSVC_VERSION VERSION_LESS 1920)
+        set(${result} 15 PARENT_SCOPE)
     else()
-        if(CMAKE_VS_PLATFORM_TOOLSET)
-            string(REGEX MATCHALL "[0-9]+" output "${CMAKE_VS_PLATFORM_TOOLSET}")
-            list(GET output 0 _toolset_version)
-            if(_toolset_version LESS 142)
-                if ("${_toolset_version}" EQUAL "141")
-                    set(_msvc_version "15")
-                else()
-                    string(SUBSTRING ${_toolset_version} 0 2 _msvc_version)
-                endif()
-                set(${result} ${_msvc_version} PARENT_SCOPE)
-                return()
-            else()
-                message(STATUS "Conan **WARNING** : Unknown MSVC toolset ${_toolset_version}")
-            endif()
-        endif()
-
-        string(REGEX MATCHALL "[0-9]+" output "${CMAKE_GENERATOR}")
-        list(GET output 0 _msvc_version)
-        set(${result} ${_msvc_version} PARENT_SCOPE)
+        message(FATAL_ERROR "Conan: Unknown MSVC compiler version [${MSVC_VERSION}]")
     endif()
 endfunction()
 
@@ -48,9 +40,6 @@ function(conan_cmake_settings result)
         set(_SETTINGS -g cmake)
     endif()
     if(CMAKE_BUILD_TYPE)
-        if(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
-            set(CMAKE_BUILD_TYPE "Release")
-        endif()
         set(_SETTINGS ${_SETTINGS} -s build_type=${CMAKE_BUILD_TYPE})
     else()
         message(FATAL_ERROR "Please specify in command line CMAKE_BUILD_TYPE (-DCMAKE_BUILD_TYPE=Release)")
@@ -58,7 +47,7 @@ function(conan_cmake_settings result)
 
     #handle -s os setting
     if(CMAKE_SYSTEM_NAME)
-    #use default conan os setting if CMAKE_SYSTEM_NAME is not defined
+        #use default conan os setting if CMAKE_SYSTEM_NAME is not defined
         set(CONAN_SYSTEM_NAME ${CMAKE_SYSTEM_NAME})
         if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
             set(CONAN_SYSTEM_NAME Macos)
@@ -73,68 +62,81 @@ function(conan_cmake_settings result)
         endif()
     endif()
 
-    if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
+    get_property(_languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+    if (";${_languages};" MATCHES ";CXX;")
+        set(LANGUAGE CXX)
+        set(USING_CXX 1)
+    elseif (";${_languages};" MATCHES ";C;")
+        set(LANGUAGE C)
+        set(USING_CXX 0)
+    else ()
+        message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.")
+    endif()
+
+    if (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL GNU)
         # using GCC
         # TODO: Handle other params
-        string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
+        string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION})
         list(GET VERSION_LIST 0 MAJOR)
         list(GET VERSION_LIST 1 MINOR)
         set(COMPILER_VERSION ${MAJOR}.${MINOR})
         if(${MAJOR} GREATER 4)
             set(COMPILER_VERSION ${MAJOR})
         endif()
-
-        conan_cmake_detect_gnu_libcxx(_LIBCXX)
-
-        set(_SETTINGS ${_SETTINGS} -s compiler=gcc -s compiler.version=${COMPILER_VERSION} -s compiler.libcxx=${_LIBCXX})
-    elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL AppleClang)
+        set(_SETTINGS ${_SETTINGS} -s compiler=gcc -s compiler.version=${COMPILER_VERSION})
+        if (USING_CXX)
+          conan_cmake_detect_gnu_libcxx(_LIBCXX)
+            set(_SETTINGS ${_SETTINGS} -s compiler.libcxx=${_LIBCXX})
+        endif ()
+    elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL AppleClang)
         # using AppleClang
-        string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
+        string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION})
         list(GET VERSION_LIST 0 MAJOR)
         list(GET VERSION_LIST 1 MINOR)
-        set(_SETTINGS ${_SETTINGS} -s compiler=apple-clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libc++)
-    elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
-        string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
+        set(_SETTINGS ${_SETTINGS} -s compiler=apple-clang -s compiler.version=${MAJOR}.${MINOR})
+        if (USING_CXX)
+            set(_SETTINGS ${_SETTINGS} -s compiler.libcxx=libc++)
+        endif ()
+    elseif (${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL Clang)
+        string(REPLACE "." ";" VERSION_LIST ${CMAKE_${LANGUAGE}_COMPILER_VERSION})
         list(GET VERSION_LIST 0 MAJOR)
         list(GET VERSION_LIST 1 MINOR)
         if(APPLE)
             cmake_policy(GET CMP0025 APPLE_CLANG_POLICY_ENABLED)
             if(NOT APPLE_CLANG_POLICY_ENABLED)
                 message(STATUS "Conan: APPLE and Clang detected. Assuming apple-clang compiler. Set CMP0025 to avoid it")
-                set(_SETTINGS ${_SETTINGS} -s compiler=apple-clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libc++)
+                set(_SETTINGS ${_SETTINGS} -s compiler=apple-clang -s compiler.version=${MAJOR}.${MINOR})
             else()
-                set(_SETTINGS ${_SETTINGS} -s compiler=clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libstdc++)
+                set(_SETTINGS ${_SETTINGS} -s compiler=clang -s compiler.version=${MAJOR}.${MINOR})
             endif()
+            if (USING_CXX)
+                set(_SETTINGS ${_SETTINGS} -s compiler.libcxx=libc++)
+            endif ()
         else()
-            set(_SETTINGS ${_SETTINGS} -s compiler=clang -s compiler.version=${MAJOR}.${MINOR} -s compiler.libcxx=libstdc++)
+            set(_SETTINGS ${_SETTINGS} -s compiler=clang -s compiler.version=${MAJOR}.${MINOR})
+            if (USING_CXX)
+                conan_cmake_detect_gnu_libcxx(_LIBCXX)
+                set(_SETTINGS ${_SETTINGS} -s compiler.libcxx=${_LIBCXX})
+            endif ()
         endif()
-    elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
+    elseif(${CMAKE_${LANGUAGE}_COMPILER_ID} STREQUAL MSVC)
         set(_VISUAL "Visual Studio")
         _get_msvc_ide_version(_VISUAL_VERSION)
         if("${_VISUAL_VERSION}" STREQUAL "")
-            message(FATAL_ERROR "Visual Studio not recognized")
+            message(FATAL_ERROR "Conan: Visual Studio not recognized")
         else()
             set(_SETTINGS ${_SETTINGS} -s compiler=${_VISUAL} -s compiler.version=${_VISUAL_VERSION})
         endif()
 
-        if(${CMAKE_GENERATOR} STREQUAL "Ninja")
-            if($ENV{Platform} STREQUAL "X64" OR MSVC_CXX_ARCHITECTURE_ID MATCHES "64")
-                set(_SETTINGS ${_SETTINGS} -s arch=x86_64)
-            elseif($ENV{Platform} STREQUAL "ARM")
-                message(STATUS "Conan: Using default ARM architecture from MSVC")
-                set(_SETTINGS ${_SETTINGS} -s arch=armv6)
-            else()
-                set(_SETTINGS ${_SETTINGS} -s arch=x86)
-            endif()
-        else()
-            if(${CMAKE_GENERATOR} MATCHES "Win64")
-                set(_SETTINGS ${_SETTINGS} -s arch=x86_64)
-            elseif (${CMAKE_GENERATOR} MATCHES "ARM")
-                message(STATUS "Conan: Using default ARM architecture from MSVC")
-                set(_SETTINGS ${_SETTINGS} -s arch=armv6)
-            else()
-                set(_SETTINGS ${_SETTINGS} -s arch=x86)
-            endif()
+        if (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "64")
+            set(_SETTINGS ${_SETTINGS} -s arch=x86_64)
+        elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "^ARM")
+            message(STATUS "Conan: Using default ARM architecture from MSVC")
+            set(_SETTINGS ${_SETTINGS} -s arch=armv6)
+        elseif (MSVC_${LANGUAGE}_ARCHITECTURE_ID MATCHES "86")
+            set(_SETTINGS ${_SETTINGS} -s arch=x86)
+        else ()
+            message(FATAL_ERROR "Conan: Unknown MSVC architecture [${MSVC_${LANGUAGE}_ARCHITECTURE_ID}]")
         endif()
 
         conan_cmake_detect_vs_runtime(_vs_runtime)
@@ -201,14 +203,15 @@ endfunction()
 
 macro(parse_arguments)
   set(options BASIC_SETUP CMAKE_TARGETS UPDATE KEEP_RPATHS)
-  set(oneValueArgs CONANFILE)
+  set(oneValueArgs CONANFILE DEBUG_PROFILE RELEASE_PROFILE PROFILE)
   set(multiValueArgs REQUIRES OPTIONS IMPORTS BUILD CONAN_COMMAND)
   cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 endmacro()
 
 function(conan_cmake_install)
     # Calls "conan install"
-    # Argument BUILD is equivalant to --build={missing, PkgName,...}
+    # Argument BUILD is equivalant to --build={missing, PkgName,...} or
+    # --build when argument is 'BUILD all' (which builds all packages from source)
     # Argument CONAN_COMMAND, to specify the conan path, e.g. in case of running from source
     # cmake does not identify conan as command, even if it is +x and it is in the path
     parse_arguments(${ARGV})
@@ -227,13 +230,29 @@ function(conan_cmake_install)
     else()
       set(conan_command conan)
     endif()
+    set(CONAN_OPTIONS "")
     if(ARGUMENTS_CONANFILE)
-      set(CONANFILE -f=${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE})
+      set(CONANFILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARGUMENTS_CONANFILE})
+      # A conan file has been specified - apply specified options as well if provided
+      foreach(ARG ${ARGUMENTS_OPTIONS})
+          set(CONAN_OPTIONS ${CONAN_OPTIONS} -o ${ARG})
+      endforeach()
+    else()
+      set(CONANFILE ".")
+    endif()
+    if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARGUMENTS_DEBUG_PROFILE)
+      set(settings -pr ${ARGUMENTS_DEBUG_PROFILE})
+    endif()
+    if(CMAKE_BUILD_TYPE STREQUAL "Release" AND ARGUMENTS_RELEASE_PROFILE)
+      set(settings -pr ${ARGUMENTS_RELEASE_PROFILE})
+    endif()
+    if(ARGUMENTS_PROFILE)
+      set(settings -pr ${ARGUMENTS_PROFILE})
     endif()
     if(ARGUMENTS_UPDATE)
       set(CONAN_INSTALL_UPDATE --update)
     endif()
-    set(conan_args install ${CONANFILE} ${settings} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE})
+    set(conan_args install ${CONANFILE} ${settings} ${CONAN_BUILD_POLICY} ${CONAN_INSTALL_UPDATE} ${CONAN_OPTIONS})
 
     string (REPLACE ";" " " _conan_args "${conan_args}")
     message(STATUS "Conan executing: ${conan_command} ${_conan_args}")
@@ -263,7 +282,7 @@ endfunction()
 function(conan_cmake_generate_conanfile)
   # Generate, writing in disk a conanfile.txt with the requires, options, and imports
   # specified as arguments
-  # This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR
+  # This will be considered as temporary file, generated in CMAKE_CURRENT_BINARY_DIR)
   parse_arguments(${ARGV})
   set(_FN "${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt")
 
diff --git a/scripts/docker/Dockerfile.clang.minimal b/scripts/docker/Dockerfile.clang.minimal
index 63b9d0a3f354777613a3964756eb5b296353ef8f..4cf5a8dc52c9460109cfd7ac658c64bd2aea4377 100644
--- a/scripts/docker/Dockerfile.clang.minimal
+++ b/scripts/docker/Dockerfile.clang.minimal
@@ -14,7 +14,7 @@ RUN apt-get update && apt-get install -y software-properties-common curl \
     xz-utils
 
 RUN python -m pip install --upgrade pip \
-  && python -m pip install cmake conan
+  && python -m pip install cmake conan>=1.0.0
 
 # Ninja
 RUN curl -L -o ninja-linux.zip https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip \
diff --git a/scripts/docker/Dockerfile.gcc.full b/scripts/docker/Dockerfile.gcc.full
index ab95673d4cc55d74c71deb9bb9dd0f33aaacb70e..e49359c53dcc5083774ddbe48b2ff904e1076fb6 100644
--- a/scripts/docker/Dockerfile.gcc.full
+++ b/scripts/docker/Dockerfile.gcc.full
@@ -16,7 +16,7 @@ ENV CC=gcc-4.9
 ENV CXX=g++-4.9
 
 RUN python -m pip install --upgrade pip \
-  && python -m pip install cmake conan
+  && python -m pip install cmake conan>=1.0.0
 
 # Ninja
 RUN curl -L -o ninja-linux.zip https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip \
diff --git a/scripts/docker/Dockerfile.gcc.minimal b/scripts/docker/Dockerfile.gcc.minimal
index 3b14b97d0cc0ae910a8e9221a684c54148f9f7ac..5c0147cbd5fece24d778ba0e21cf3713e74d48c3 100644
--- a/scripts/docker/Dockerfile.gcc.minimal
+++ b/scripts/docker/Dockerfile.gcc.minimal
@@ -16,7 +16,7 @@ ENV CC=gcc-4.9
 ENV CXX=g++-4.9
 
 RUN python -m pip install --upgrade pip \
-  && python -m pip install cmake conan
+  && python -m pip install cmake conan>=1.0.0
 
 # Ninja
 RUN curl -L -o ninja-linux.zip https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip \