--- a/fuzzylite/test/BenchmarkTest.cpp
+++ b/fuzzylite/test/BenchmarkTest.cpp
@@ -16,7 +16,7 @@
 
 #include "fl/Benchmark.h"
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 #include <vector>
--- a/fuzzylite/test/MainTest.cpp
+++ b/fuzzylite/test/MainTest.cpp
@@ -16,7 +16,7 @@
  
 #define CATCH_CONFIG_RUNNER
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 
 #include "fl/Headers.h"
 
--- a/fuzzylite/test/QuickTest.cpp
+++ b/fuzzylite/test/QuickTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/activation/ThresholdTest.cpp
+++ b/fuzzylite/test/activation/ThresholdTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/hedge/HedgeFunctionTest.cpp
+++ b/fuzzylite/test/hedge/HedgeFunctionTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/imex/FldExporterTest.cpp
+++ b/fuzzylite/test/imex/FldExporterTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/imex/FllImporterTest.cpp
+++ b/fuzzylite/test/imex/FllImporterTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/imex/RScriptExporterTest.cpp
+++ b/fuzzylite/test/imex/RScriptExporterTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 #include <fstream>
 
--- a/fuzzylite/test/norm/NormFunctionTest.cpp
+++ b/fuzzylite/test/norm/NormFunctionTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/term/AggregatedTest.cpp
+++ b/fuzzylite/test/term/AggregatedTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/term/DiscreteTest.cpp
+++ b/fuzzylite/test/term/DiscreteTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/term/FunctionTest.cpp
+++ b/fuzzylite/test/term/FunctionTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
@@ -70,7 +70,7 @@ namespace fl {
         CHECK_THROWS(f.parse(text)->evaluate(&f.variables));
 
         text = "~5 *4/sin(~pi/2)";
-        CHECK(f.parse(text)->evaluate(&f.variables) == Approx(20));
+        CHECK(f.parse(text)->evaluate(&f.variables) == Catch::Approx(20));
 
         f.load(text);
 
--- a/fuzzylite/test/term/TrapezoidTest.cpp
+++ b/fuzzylite/test/term/TrapezoidTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/term/TriangleTest.cpp
+++ b/fuzzylite/test/term/TriangleTest.cpp
@@ -14,7 +14,7 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
 namespace fl {
--- a/fuzzylite/test/variable/VariableTest.cpp
+++ b/fuzzylite/test/variable/VariableTest.cpp
@@ -14,13 +14,15 @@
  fuzzylite is a registered trademark of FuzzyLite Limited.
  */
 
-#include "catch2/catch.hpp"
+#include "catch2/catch_all.hpp"
 #include "fl/Headers.h"
 
-#include <algorithm>    // std::random_shuffle
+#include <algorithm>    // std::shuffle
 
 namespace fl {
 
+    auto rng = std::default_random_engine{ std::random_device{}() };
+
     /**
      * Tests: variable/Variable
      *
@@ -33,7 +35,7 @@ namespace fl {
         for (int i = 0; i <= 20; ++i) {
             variable.addTerm(new Constant(Op::str(i), i - 10));
         }
-        std::random_shuffle(variable.terms().begin(), variable.terms().end());
+        std::shuffle(variable.terms().begin(), variable.terms().end(), rng);
         FL_DBG(variable.toString());
         REQUIRE(variable.numberOfTerms() == 21);
         variable.sort();
@@ -53,7 +55,7 @@ namespace fl {
         for (int i = 0; i <= 20; ++i) {
             variable.addTerm(new Triangle(Op::str(i), i - 1, i, i + 1));
         }
-        std::random_shuffle(variable.terms().begin(), variable.terms().end());
+        std::shuffle(variable.terms().begin(), variable.terms().end(), rng);
         FL_DBG(variable.toString());
         REQUIRE(variable.numberOfTerms() == 21);
         variable.sort();
--- a/fuzzylite/CMakeLists.txt
+++ b/fuzzylite/CMakeLists.txt
@@ -53,16 +53,17 @@ if (MSVC AND CMAKE_CXX_COMPILER_VERSION
     endif()
 endif()
 
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
 if(FL_CPP98)
     add_definitions(-DFL_CPP98)
     if(NOT MSVC)
         #Set C++98 by default in Clang and others
-        add_definitions(-std=c++98)
+        set(CMAKE_CXX_STANDARD 98)
     endif()
 else()
     if(NOT MSVC)
         #Set C++11 by default in Clang and others
-        add_definitions(-std=c++11)
+        set(CMAKE_CXX_STANDARD 11)
     endif()
 endif(FL_CPP98)
 
@@ -96,7 +97,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL
         if (FL_CPP98)
             #set the default to C++98
             #Fix error: 'template<class> class std::auto_ptr' is deprecated with gcc-6
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
+            set(CMAKE_CXX_STANDARD 98)
         endif()
     endif()
     #In GNU gcc 4.7, Op::str(T, std::size_t(0)) raises a warning of type-limits
@@ -197,6 +198,7 @@ if(FL_BUILD_TESTS)
     find_package(Catch2)
     add_executable(fl-test ${fl-headers} ${fl-tests})
     target_link_libraries(fl-test Catch2::Catch2)
+    set_target_properties(fl-test PROPERTIES CXX_STANDARD 14)
     set_target_properties(fl-test PROPERTIES OUTPUT_NAME fuzzylite-tests)
     set_target_properties(fl-test PROPERTIES OUTPUT_NAME fuzzylite-tests IMPORT_PREFIX tmp-) #To prevent LNK1149 in Windows
     set_target_properties(fl-test PROPERTIES DEBUG_POSTFIX -debug)
