diff --git a/CMakeLists.txt b/CMakeLists.txt
index c3aea116dc6cd11998af70a3e9c02856d0dd2111..0669950223d1f3ae7129bc95cb74ffccf77b614e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,7 +10,7 @@ set (Simox_BUILD_DIRECTORY ${CMAKE_BINARY_DIR} CACHE STRING "Simox build directo
 #set (Simox_BUILD_VirtualRobot TRUE CACHE BOOL "Build Simox VirtualRobot")
 set (Simox_BUILD_Saba TRUE CACHE BOOL "Build Motion Planning library")
 set (Simox_BUILD_GraspStudio TRUE CACHE BOOL "Build Grasp Planning library")
-set (Simox_BUILD_SimDynamics FALSE CACHE BOOL "Build Dynamic Simulation")
+set (Simox_BUILD_SimDynamics TRUE CACHE BOOL "Build Dynamic Simulation")
 
 INCLUDE (config.cmake)
 
@@ -34,23 +34,25 @@ if (Simox_BUILD_GraspStudio)
     list (APPEND Simox_LIBRARIES GraspStudio)
 endif()
 if (Simox_BUILD_SimDynamics)
-    add_subdirectory(SimDynamics)
-    list(APPEND SIMOX_EXPORT_TARGET_LIST SimDynamics)
-    list (APPEND Simox_LIBRARIES SimDynamics)
-    if (SimDynamics_BULLET_OpenGL)
-        list(APPEND SIMOX_EXPORT_TARGET_LIST BulletOpenGLSupport)
+    find_package(Bullet QUIET)
+    if(BULLET_FOUND)
+        add_subdirectory(SimDynamics)
+        list(APPEND SIMOX_EXPORT_TARGET_LIST SimDynamics)
+        list (APPEND Simox_LIBRARIES SimDynamics)
+        if (SimDynamics_BULLET_OpenGL)
+            list(APPEND SIMOX_EXPORT_TARGET_LIST BulletOpenGLSupport)
+        endif()
+
+        list (APPEND Simox_EXTERNAL_LIBRARIES ${Simox_SimDynamics_EXTERNAL_LIBRARIES})
+        list (APPEND Simox_EXTERNAL_INCLUDE_DIRS ${Simox_SimDynamics_INCLUDE_DIRS})
+        #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!")
+        #MESSAGE ("Simox_SimDynamics_COMPILE_FLAGS::: ${Simox_SimDynamics_COMPILE_FLAGS} !!!!!!!!!!!!!!!!")
+        #list (APPEND Simox_EXTERNAL_LIBRARY_FLAGS ${Simox_SimDynamics_COMPILE_FLAGS})
+        set (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} ${Simox_SimDynamics_COMPILE_FLAGS}")
+        #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!")
+    else()
+        message("NOT building SimDynamics since bullet was not found")
     endif()
-
-    list (APPEND Simox_EXTERNAL_LIBRARIES ${Simox_SimDynamics_EXTERNAL_LIBRARIES})
-    list (APPEND Simox_EXTERNAL_INCLUDE_DIRS ${Simox_SimDynamics_INCLUDE_DIRS})
-    #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!")
-    #MESSAGE ("Simox_SimDynamics_COMPILE_FLAGS::: ${Simox_SimDynamics_COMPILE_FLAGS} !!!!!!!!!!!!!!!!")
-    #list (APPEND Simox_EXTERNAL_LIBRARY_FLAGS ${Simox_SimDynamics_COMPILE_FLAGS})
-    set (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} ${Simox_SimDynamics_COMPILE_FLAGS}")
-    #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!")
-
-
-
 endif()
 
   MESSAGE(STATUS "** Simox_EXTERNAL_INCLUDE_DIRS:${Simox_EXTERNAL_INCLUDE_DIRS}")
diff --git a/CMakeModules/BulletCheckPrecision.cmake b/CMakeModules/BulletCheckPrecision.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..93c99b7ada79a1e708b2743f70f688672e070158
--- /dev/null
+++ b/CMakeModules/BulletCheckPrecision.cmake
@@ -0,0 +1,55 @@
+macro(BulletCheckPrecision)
+    message(STATUS "Testing Bullet for use of double precision...")
+    try_compile(
+        _resultDouble
+        ${PROJECT_BINARY_DIR}
+        ${CMAKE_SOURCE_DIR}/CMakeModules/BulletCheckPrecision.cpp
+        CMAKE_FLAGS
+            "-DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}"
+            "-DLINK_LIBRARIES:string=${BULLET_LIBRARIES}"
+            "-DCMAKE_CXX_FLAGS:string=-std=c++11"
+        COMPILE_DEFINITIONS
+            "-DBT_USE_DOUBLE_PRECISION"
+        OUTPUT_VARIABLE _buildOutDouble
+    )
+    if( _resultDouble )
+        message(STATUS "Bullet double precision detected. Automatically defining BT_USE_DOUBLE_PRECISION")
+        set(BULLET_USE_SINGLE_PRECISION OFF CACHE BOOL "" FORCE)
+        add_definitions(-DBT_USE_DOUBLE_PRECISION)
+    else()
+        # Try it *without* -DBT_USE_DOUBLE_PRECISION to make sure it's single...
+        try_compile(
+            _resultSingle
+            ${PROJECT_BINARY_DIR}
+            ${CMAKE_SOURCE_DIR}/CMakeModules/BulletCheckPrecision.cpp
+            CMAKE_FLAGS
+                "-DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}"
+                "-DLINK_LIBRARIES:string=${BULLET_LIBRARIES}"
+            OUTPUT_VARIABLE _buildOutSingle
+        )
+        if( _resultSingle )
+            message(STATUS "Bullet single precision detected. Not defining BT_USE_DOUBLE_PRECISION")
+            set(BULLET_USE_SINGLE_PRECISION ON CACHE BOOL "" FORCE)
+        else()
+            message(ERROR "Unable to determine single or double precision.")
+            message(STATUS "----------------------------------")
+            message(STATUS "Build config for double precision:")
+            message(STATUS "    CMAKE_FLAGS")
+            message(STATUS "        -DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}")
+            message(STATUS "        -DLINK_LIBRARIES:string=${BULLET_LIBRARIES}")
+            message(STATUS "        -DCMAKE_CXX_FLAGS:string=-std=c++11")
+            message(STATUS "    COMPILE_DEFINITIONS")
+            message(STATUS "        -DBT_USE_DOUBLE_PRECISION")
+            message(STATUS "Build output for double precision:")
+            message(STATUS "${_buildOutDouble}")
+            message(STATUS "----------------------------------")
+            message(STATUS "Build config for single precision:")
+            message(STATUS "    CMAKE_FLAGS")
+            message(STATUS "        -DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}")
+            message(STATUS "        -DLINK_LIBRARIES:string=${BULLET_LIBRARIES}")
+            message(STATUS "Build output for single precision:")
+            message(STATUS "${_buildOutSingle}")
+            message(FATAL_ERROR "Unable to determine single or double precision.")
+        endif()
+    endif()
+endmacro()
diff --git a/CMakeModules/BulletCheckPrecision.cpp b/CMakeModules/BulletCheckPrecision.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4e6fb014facd20a7cb4a91a9b4363b8daf9bcbf7
--- /dev/null
+++ b/CMakeModules/BulletCheckPrecision.cpp
@@ -0,0 +1,10 @@
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#include <btBulletCollisionCommon.h>
+
+int main()
+{
+    btVector3 vec(0.0, 1.0, 0.0);
+    btStaticPlaneShape(vec, 0.0);
+
+    return 0;
+}
diff --git a/SimDynamics/CMakeModules/FindBullet.cmake b/CMakeModules/FindBullet.cmake
similarity index 85%
rename from SimDynamics/CMakeModules/FindBullet.cmake
rename to CMakeModules/FindBullet.cmake
index 1f0e645acfe0296e7da4db3118ad4ce8340e26ff..808658d399127c0863609a7e9d2b1d0ab28ac928 100644
--- a/SimDynamics/CMakeModules/FindBullet.cmake
+++ b/CMakeModules/FindBullet.cmake
@@ -3,7 +3,7 @@
 # This script defines:
 #   BULLET_FOUND, set to 1 if found
 #   BULLET_LIBRARIES
-#   BULLET_INCLUDE_DIR
+#   BULLET_INCLUDE_DIRS
 #   BULLET_*_LIBRARY, one for each library (for example, "BULLET_BulletCollision_LIBRARY").
 #   BULLET_*_LIBRARY_debug, one for each library.
 #   BULLET_DEMOS_INCLUDE_DIR - Directory containing the Demos headers
@@ -16,15 +16,15 @@
 # You can also use Bullet out of a source tree by specifying BULLET_SOURCE_DIR
 # and BULLET_BUILD_DIR (in environment or CMake).
 
-
 SET( BULLET_ROOT "" CACHE PATH "Bullet install dir, parent of both header files and binaries." )
 SET( BULLET_BUILD_DIR "" CACHE PATH "Parent directory of Bullet binary file directories such as src/BulletCollision." )
 SET( BULLET_SOURCE_DIR "" CACHE PATH "Parent directory of Bullet header file directories such as src or include." )
 
-#UNSET( BULLET_INCLUDE_DIR CACHE )
-MARK_AS_ADVANCED( BULLET_INCLUDE_DIR )
-FIND_PATH( BULLET_INCLUDE_DIR btBulletCollisionCommon.h
+#UNSET( BULLET_INCLUDE_DIRS CACHE )
+MARK_AS_ADVANCED( BULLET_INCLUDE_DIRS )
+FIND_PATH( BULLET_INCLUDE_DIRS btBulletCollisionCommon.h
     PATHS
+        $ENV{Bullet_DIR}
         ${BULLET_ROOT}
         $ENV{BULLET_ROOT}
         ${BULLET_SOURCE_DIR}
@@ -33,33 +33,34 @@ FIND_PATH( BULLET_INCLUDE_DIR btBulletCollisionCommon.h
     PATH_SUFFIXES
         /BulletCollision
         /src
+        ../src
         /include
         /include/bullet
         /src/BulletCollision
         /include/BulletCollision
         /include/bullet/BulletCollision
     )
-IF( BULLET_INCLUDE_DIR )
-    #SET( BULLET_DEMOS_INCLUDE_DIR ${BULLET_INCLUDE_DIR}/../Demos/OpenGL )
+IF( BULLET_INCLUDE_DIRS )
+    #SET( BULLET_DEMOS_INCLUDE_DIR ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL )
     FIND_PATH( BULLET_OPENGL_INCLUDE_DIR DemoApplication.h
     PATHS
-        ${BULLET_INCLUDE_DIR}
-        ${BULLET_INCLUDE_DIR}/..
-        ${BULLET_INCLUDE_DIR}/../OpenGL
-        ${BULLET_INCLUDE_DIR}/OpenGL
-        ${BULLET_INCLUDE_DIR}/../Demos/OpenGL
+        ${BULLET_INCLUDE_DIRS}
+        ${BULLET_INCLUDE_DIRS}/..
+        ${BULLET_INCLUDE_DIRS}/../OpenGL
+        ${BULLET_INCLUDE_DIRS}/OpenGL
+        ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL
     )
     FIND_PATH( BULLET_DEMOS_INCLUDE_DIR GlutDemoApplication.h
     PATHS
-        ${BULLET_INCLUDE_DIR}
-        ${BULLET_INCLUDE_DIR}/..
-        ${BULLET_INCLUDE_DIR}/../OpenGL
-        ${BULLET_INCLUDE_DIR}/OpenGL
-        ${BULLET_INCLUDE_DIR}/../Demos/OpenGL
+        ${BULLET_INCLUDE_DIRS}
+        ${BULLET_INCLUDE_DIRS}/..
+        ${BULLET_INCLUDE_DIRS}/../OpenGL
+        ${BULLET_INCLUDE_DIRS}/OpenGL
+        ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL
     )
     MESSAGE (STATUS " **** BULLET_OPENGL_INCLUDE_DIR: ${BULLET_OPENGL_INCLUDE_DIR}")
     MESSAGE (STATUS " **** BULLET_DEMOS_INCLUDE_DIR: ${BULLET_DEMOS_INCLUDE_DIR}")
-ENDIF( BULLET_INCLUDE_DIR )
+ENDIF( BULLET_INCLUDE_DIRS )
 
 MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME )
     #UNSET( BULLET_${LIBNAME}_LIBRARY CACHE )
@@ -70,6 +71,7 @@ MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME )
         NAMES
             ${LIBNAME}
         PATHS
+            $ENV{Bullet_DIR}
             ${BULLET_ROOT}
             $ENV{BULLET_ROOT}
             ${BULLET_BUILD_DIR}
@@ -97,6 +99,7 @@ MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME )
             ${LIBNAME}_Debug
             ${LIBNAME}
         PATHS
+            $ENV{Bullet_DIR}
             ${BULLET_ROOT}
             $ENV{BULLET_ROOT}
             ${BULLET_BUILD_DIR}
@@ -149,9 +152,9 @@ MARK_AS_ADVANCED( BULLET_LIBRARIES )
 MARK_AS_ADVANCED( BULLET_LIBRARIES_debug )
 
 SET( BULLET_FOUND 0 )
-IF( BULLET_INCLUDE_DIR AND BULLET_LIBRARIES )
+IF( BULLET_INCLUDE_DIRS AND BULLET_LIBRARIES )
     SET( BULLET_FOUND 1 )
-ENDIF( BULLET_INCLUDE_DIR AND BULLET_LIBRARIES )
+ENDIF( BULLET_INCLUDE_DIRS AND BULLET_LIBRARIES )
 
 
 # Possible future support for collision-only (no dynamics)
diff --git a/SimDynamics/CMakeLists.txt b/SimDynamics/CMakeLists.txt
index 38231e549d7cda724d998029990d1286662edd88..d93890fc29a3ac0186976ca1f580bbfe39c7019a 100644
--- a/SimDynamics/CMakeLists.txt
+++ b/SimDynamics/CMakeLists.txt
@@ -11,7 +11,8 @@ MESSAGE (STATUS "***** CONFIGURING Simox project SimDynamics *****")
 
 GET_FILENAME_COMPONENT (CurrentSimDynamicsPath ${CMAKE_CURRENT_LIST_FILE} PATH)
 SET(SimDynamics_DIR ${CurrentSimDynamicsPath})
-SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SimDynamics_DIR}/CMakeModules)
+
+
 
 INCLUDE (Cxx11Test)
 SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAG}")
@@ -31,27 +32,33 @@ if (SimDynamics_USE_BULLET)
   SET (BULLET_ROOT ${BULLET_ROOT} CACHE PATH "Bullet Path")
   Find_Package(Bullet)
   if (BULLET_FOUND)
-      MESSAGE (STATUS " ** Found Bullet at ${BULLET_INCLUDE_DIR}")
+      MESSAGE (STATUS " ** Found Bullet at ${BULLET_INCLUDE_DIRS}")
+
+
+
       #MESSAGE (STATUS "BULLET_LIBRARIES: ${BULLET_LIBRARIES}")
       #MESSAGE (STATUS "BULLET_OPENGL_INCLUDE_DIR: ${BULLET_OPENGL_INCLUDE_DIR}")
       #MESSAGE (STATUS "BULLET_OpenGLSupport_LIBRARY_debug: ${BULLET_OpenGLSupport_LIBRARY_debug}")
-      SET(SIMDYNAMICS_INCLUDE_DIRS "${BULLET_INCLUDE_DIR}" "${BULLET_INCLUDE_DIR}/bullet") # "${BULLET_DEMOS_INCLUDE_DIR}" "${BULLET_OPENGL_INCLUDE_DIR}")# PARENT_SCOPE)
+      SET(SIMDYNAMICS_INCLUDE_DIRS "${BULLET_INCLUDE_DIRS}" "${BULLET_INCLUDE_DIRS}/bullet") # "${BULLET_DEMOS_INCLUDE_DIR}" "${BULLET_OPENGL_INCLUDE_DIR}")# PARENT_SCOPE)
      	
      	INCLUDE_DIRECTORIES( 
-          ${BULLET_INCLUDE_DIR}
-          ${BULLET_INCLUDE_DIR}/bullet
+          ${BULLET_INCLUDE_DIRS}
+          ${BULLET_INCLUDE_DIRS}/bullet
 		  )
 
-      OPTION( SimDynamics_USE_BULLET_DOUBLE_PRECISION "Use Bullet Engine built with double precision" OFF )
-	  IF (WIN32)
-		OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut"	OFF)
-	  else()
-		OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut"	ON)
-	  endif()
-      IF( SimDynamics_USE_BULLET_DOUBLE_PRECISION )
+      IF (WIN32)
+            OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut"	OFF)
+      else()
+            OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut"	ON)
+      endif()
+
+    include(BulletCheckPrecision)
+    message(STATUS "BULLET_INCLUDE_DIRS ${BULLET_INCLUDE_DIRS}")
+    BulletCheckPrecision()
+      IF( NOT BULLET_USE_SINGLE_PRECISION )
           ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)
           LIST(APPEND SIMDYNAMICS_COMPILE_FLAGS "-DBT_USE_DOUBLE_PRECISION")
-      ENDIF( SimDynamics_USE_BULLET_DOUBLE_PRECISION )
+      ENDIF()
       #MESSAGE(STATUS "BULLET_LIBRARIES:${BULLET_LIBRARIES}")
       SET (SimDynamics_PHYSICS_LIBRARIES "${BULLET_LIBRARIES}")
       SET (SimDynamics_DYNAMICSENGINE TRUE)