diff --git a/VirtualRobot/CMakeLists.txt b/VirtualRobot/CMakeLists.txt
index 67225e0d4430b647330205ea80966a27c425abe5..96ab8a56e2e1aeebc3967a907480e60807957b50 100644
--- a/VirtualRobot/CMakeLists.txt
+++ b/VirtualRobot/CMakeLists.txt
@@ -21,7 +21,9 @@ endif()
 
 if (Simox_USE_NLOPT)
     FIND_PACKAGE (NLOPT)
-    ADD_DEFINITIONS(-DUSE_NLOPT)
+    if (NLOPT_FOUND)
+        ADD_DEFINITIONS(-DUSE_NLOPT)
+    endif()
 endif()
 
 ########################### TESTING #####################################
diff --git a/VirtualRobot/EndEffector/EndEffector.cpp b/VirtualRobot/EndEffector/EndEffector.cpp
index b524cbedcfea6a4571538aed850ec6bdbcf35eb4..d653b9549af6e1f87baf879b723bcb947ce6cbf3 100644
--- a/VirtualRobot/EndEffector/EndEffector.cpp
+++ b/VirtualRobot/EndEffector/EndEffector.cpp
@@ -633,6 +633,8 @@ namespace VirtualRobot
         if (!obstacle)
             return 0;
 
+        int contactCount = 0;
+
         for (size_t i = 0; i < statics.size(); i++)
         {
             RobotNodePtr n = statics[i];
@@ -657,9 +659,12 @@ namespace VirtualRobot
                 ci.approachDirectionGlobal = -approachDirGlobal;
 
                 contacts.push_back(ci);
+                contactCount++;
             }
 
         }
+
+        return contactCount;
     }
 
 
diff --git a/VirtualRobot/IK/ConstrainedIK.cpp b/VirtualRobot/IK/ConstrainedIK.cpp
index c64c63929fc5d5c7ec1807edfef36740f46a28df..5dea2473803001f5c3087ca836a1220cfb09c141 100644
--- a/VirtualRobot/IK/ConstrainedIK.cpp
+++ b/VirtualRobot/IK/ConstrainedIK.cpp
@@ -198,7 +198,7 @@ void ConstrainedIK::getUnitableNodes(const RobotNodePtr &robotNode, const RobotN
 RobotPtr ConstrainedIK::buildReducedRobot(const RobotPtr &original)
 {
     std::vector<std::string> names;
-    for(int i = 0; i < nodeSet->getSize(); i++)
+    for(size_t i = 0; i < nodeSet->getSize(); i++)
     {
         names.push_back(nodeSet->getNode(i)->getName());
     }
diff --git a/VirtualRobot/IK/constraints/JointLimitAvoidanceConstraint.cpp b/VirtualRobot/IK/constraints/JointLimitAvoidanceConstraint.cpp
index 56465f7b0f7756a8e951a72a2aceddbec23758a1..fc815bfc5ab5feccb6510750e01ea060b81bedde 100644
--- a/VirtualRobot/IK/constraints/JointLimitAvoidanceConstraint.cpp
+++ b/VirtualRobot/IK/constraints/JointLimitAvoidanceConstraint.cpp
@@ -29,7 +29,7 @@ JointLimitAvoidanceConstraint::JointLimitAvoidanceConstraint(const RobotPtr &rob
     Constraint(nodeSet),
     robot(robot),
     nodeSet(nodeSet),
-    factor(0.001)
+    factor(0.001f)
 {
     // Joint limit avoidance is considered a soft constraint
     addOptimizationFunction(0, true);
@@ -41,7 +41,7 @@ double JointLimitAvoidanceConstraint::optimizationFunction(unsigned int id)
 {
     double value = 0;
 
-    for(int i = 0; i < nodeSet->getSize(); i++)
+    for(size_t i = 0; i < nodeSet->getSize(); i++)
     {
         RobotNodePtr node = nodeSet->getNode(i);
         value += factor * node->getJointValue() * node->getJointValue();
@@ -54,7 +54,7 @@ Eigen::VectorXf JointLimitAvoidanceConstraint::optimizationGradient(unsigned int
 {
     Eigen::VectorXf gradient(nodeSet->getSize());
 
-    for(int i = 0; i < nodeSet->getSize(); i++)
+    for(size_t i = 0; i < nodeSet->getSize(); i++)
     {
         gradient(i) = 2 * factor * nodeSet->getNode(i)->getJointValue();
     }
diff --git a/VirtualRobot/IK/constraints/PoseConstraint.cpp b/VirtualRobot/IK/constraints/PoseConstraint.cpp
index 8a23b4e45a6c0ff0298ccbc30bff6827b067218b..59dfde1f968fe9b56f7d705317f628b8f5f64a0a 100644
--- a/VirtualRobot/IK/constraints/PoseConstraint.cpp
+++ b/VirtualRobot/IK/constraints/PoseConstraint.cpp
@@ -47,7 +47,7 @@ PoseConstraint::PoseConstraint(const RobotPtr& robot, const RobotNodeSetPtr& nod
     cartesianSelection(cartesianSelection),
     tolerancePosition(tolerancePosition),
     toleranceRotation(toleranceRotation),
-    posRotTradeoff(0.1)
+    posRotTradeoff(0.1f)
 {
     ik.reset(new DifferentialIK(nodeSet));
     ik->setGoal(target, eef, cartesianSelection, tolerancePosition, toleranceRotation);
@@ -164,6 +164,7 @@ double PoseConstraint::positionOptimizationFunction()
         case IKSolver::CartesianSelection::Orientation:
             return 0;
     }
+    return 0;
 }
 
 Eigen::VectorXf PoseConstraint::positionOptimizationGradient()
@@ -191,6 +192,7 @@ Eigen::VectorXf PoseConstraint::positionOptimizationGradient()
         case IKSolver::CartesianSelection::Orientation:
             return Eigen::VectorXf::Zero(size);
     }
+    return Eigen::VectorXf::Zero(size);
 }
 
 double PoseConstraint::orientationOptimizationFunction()
@@ -240,4 +242,5 @@ Eigen::VectorXf PoseConstraint::orientationOptimizationGradient()
         case IKSolver::CartesianSelection::All:
             return 2 * rpy.transpose() * J.block(3, 0, 3, size);
     }
+    return Eigen::VectorXf::Zero(size);
 }
diff --git a/VirtualRobot/IK/constraints/TSRConstraint.cpp b/VirtualRobot/IK/constraints/TSRConstraint.cpp
index bfa17da7e9981f6594ab899ad542c108e13a2c7e..5e8491634e7763d8701e6f28a94d5e4326e819cc 100644
--- a/VirtualRobot/IK/constraints/TSRConstraint.cpp
+++ b/VirtualRobot/IK/constraints/TSRConstraint.cpp
@@ -42,7 +42,7 @@ TSRConstraint::TSRConstraint(const RobotPtr& robot, const RobotNodeSetPtr& nodeS
     bounds(bounds),
     toleranceTranslation(1.0f),
     toleranceRotation(0.1f),
-    posRotTradeoff(0.1)
+    posRotTradeoff(0.1f)
 {
     ik.reset(new DifferentialIK(nodeSet));