diff --git a/CMakeLists.txt b/CMakeLists.txt
index 37dc90a..9da8c7f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,7 +5,9 @@
 #------------------------------------------------------------------------------
 
 
-cmake_minimum_required(VERSION 3.11)
+# 3.18.4: Debian Bullsyeye
+# 3.10.2: Ubuntu Bionic
+cmake_minimum_required(VERSION 3.10.2)
 project(lepto LANGUAGES CXX)
 
 
@@ -15,7 +17,7 @@ if( ( "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" ) OR HOST )
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
-   set( QT_COMPONENTS Core Widgets Network Xml )
+   set( QT_COMPONENTS Core Network Xml )
 
    # Check either Qt6 or Qt5
    find_package( QT NAMES Qt5 Qt6 COMPONENTS ${QT_COMPONENTS} REQUIRED )
@@ -25,7 +27,7 @@ if( ( "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" ) OR HOST )
    set( MCU_PLATFORM "linux" )
 endif()
 
-if( PROJECT_IS_TOP_LEVEL )
+if (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) # PROJECT_IS_TOP_LEVEL
    # Let the tests work out of box
    add_definitions(
       -DCONFIG_LEPTO_RING_SUPPORT_VOLATILE=1
@@ -33,7 +35,9 @@ if( PROJECT_IS_TOP_LEVEL )
    )
 endif()
 
-set( USE_LEPTO 1 PARENT_SCOPE )
+if( NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR ) # NOT PROJECT_IS_TOP_LEVEL
+    set( USE_LEPTO 1 PARENT_SCOPE )
+endif()
 
 set(
    headers
diff --git a/include/lepto/signal.hpp b/include/lepto/signal.hpp
index d19f0fb..ebe1ea7 100644
--- a/include/lepto/signal.hpp
+++ b/include/lepto/signal.hpp
@@ -66,7 +66,7 @@ class CFunctor
 {
    friend class CSignal<sigReturn, sigTypes...>;
        typedef const CFunctor<sigReturn, sigTypes...> CConstFunctor;
-       CFunctor *m_next;
+       CFunctor *m_next=nullptr;
    public:
       virtual sigReturn emitSignal( sigTypes ... args ) const = 0;
 };
diff --git a/include/lepto/signalDeferred.hpp b/include/lepto/signalDeferred.hpp
index 42e3472..16e7fc9 100644
--- a/include/lepto/signalDeferred.hpp
+++ b/include/lepto/signalDeferred.hpp
@@ -64,7 +64,7 @@ class CSignalDeferred: public CSignal<sigReturn, sigTypes...>, CEventLoop
          {
             lFatal("CNPS");
          }
-         p.push_back( STuple<sigTypes ...>( my_forward<sigTypes>(args)... ) );
+         p.push_back( STuple<sigTypes ...>( doForward<sigTypes>(args)... ) );
       }
 
       virtual_eventLoop void eventLoop() override_eventLoop
diff --git a/include/lepto/signalPool.hpp b/include/lepto/signalPool.hpp
index ad4dacd..f57a19b 100644
--- a/include/lepto/signalPool.hpp
+++ b/include/lepto/signalPool.hpp
@@ -54,7 +54,7 @@ class CPendingSignal: public CPendingSignalBase
       };
       virtual void shot() // overload;
       {
-         m_signal.emitSignal( m_storedArg );
+         m_signal.emit( m_storedArg );
       };
 };
 
@@ -126,14 +126,14 @@ class CPendingSignalPool
       template <typename sigReturn, typename sigType1>
       void enqueueSignal( CSignal<sigReturn, sigType1> &signal, sigType1 arg)
       {
-         pendingSignalList.push_back( new CPendingSignal( signal, arg ) );
+         pendingSignalList.push_back( new CPendingSignal<sigReturn, sigType1>( signal, arg ) );
          return;
       };
 
       template <typename sigReturn, typename sigType1, typename sigType2>
       void enqueueSignal( CSignal<sigReturn, sigType1, sigType2> &signal, sigType1 arg1, sigType2 arg2)
       {
-         pendingSignalList.push_back( new CPendingSignal2( signal, arg1, arg2 ) );
+         pendingSignalList.push_back( new CPendingSignal2<sigReturn,sigType1,sigType2>( signal, arg1, arg2 ) );
          return;
       };
 
@@ -148,7 +148,7 @@ class CPendingSignalPool
       template <typename sigReturn>
       void enqueueSignal( CSignal<sigReturn> &signal)
       {
-         pendingSignalList.push_back( new CPendingSignal0( signal ) );
+         pendingSignalList.push_back( new CPendingSignal0<sigReturn>( signal ) );
          return;
       };
 };
diff --git a/include/lepto/tuple.hpp b/include/lepto/tuple.hpp
index 3d6c3ce..7d7e74b 100644
--- a/include/lepto/tuple.hpp
+++ b/include/lepto/tuple.hpp
@@ -39,7 +39,7 @@ struct STuple<T, Ts...> {
     STuple<Ts...> tail;
     STuple() = default;
     STuple(T&& h, Ts&&... ts)
-        : head(my_forward<T>(h)), tail(my_forward<Ts>(ts)...) {}
+        : head(doForward<T>(h)), tail(doForward<Ts>(ts)...) {}
 };
 
 // No remaining arguments-> call method
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 68ba6ff..c28590d 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -5,10 +5,10 @@
 #------------------------------------------------------------------------------
 
 
-cmake_minimum_required(VERSION 3.11)
+cmake_minimum_required(VERSION 3.10.2)
 project(lepto_tests)
 
-find_package( Catch2 3 )
+find_package( Catch2 )
 if( NOT Catch2_FOUND )
    find_package( Catch )
    if( NOT Catch_FOUND )
@@ -27,8 +27,12 @@ if( NOT Catch2_FOUND )
    endif( NOT Catch_FOUND )
    add_definitions( "-DCATCH_V1" )
 else( NOT Catch2_FOUND)
-   add_definitions( "-DCATCH_V3" )
-   set( CATCH_LIBRARY "Catch2::Catch2WithMain" )
+   if( EXISTS /usr/include/catch2/catch_test_macros.hpp )
+      add_definitions( "-DCATCH_V3" )
+      set( CATCH_LIBRARY "Catch2::Catch2WithMain" )
+   else( )
+      add_definitions( "-DCATCH_V2" )
+   endif( )
 endif( NOT Catch2_FOUND )
 
 set(
diff --git a/tests/test_ring_threaded.hpp b/tests/test_ring_threaded.hpp
index 483494c..f55ed12 100644
--- a/tests/test_ring_threaded.hpp
+++ b/tests/test_ring_threaded.hpp
@@ -18,7 +18,7 @@
 #include <lepto/bufferRing.hpp>
 #include <QThread>
 #include <QCoreApplication>
-
+#include <QElapsedTimer>
 
 #define TEST_ALL
 #define STOP_ON_FAIL
@@ -96,8 +96,8 @@ class CConsumer: public QThread
 {
    private:
       CRing<SElement> m_ring;
-      CProducer m_producers[ PRODUCERS ];
       bool m_finished[ PRODUCERS ];
+      CProducer *m_producers[ PRODUCERS ];
       int m_counters[ PRODUCERS ];
       int m_loops=0;
       int m_errors=0;
@@ -106,6 +106,8 @@ class CConsumer: public QThread
    public:
       CConsumer()
          :m_ring( RING_SIZE )
+   #if 0
+         ,m_finished{0}
          ,m_producers{
                {0, m_finished[0], m_ring},
                {1, m_finished[1], m_ring},
@@ -126,7 +128,7 @@ class CConsumer: public QThread
                #endif // >= 6
                #endif // >= 4
           }
-         ,m_finished{0}
+                  #endif
          ,m_counters{
                0,
                10000,
@@ -142,13 +144,19 @@ class CConsumer: public QThread
                #endif
              }
       {
+         // Static list does not work with GCC 10.
+         for (int i = 0; i < PRODUCERS; ++i)
+         {
+            m_finished[i]=false;
+            m_producers[i]=new CProducer(i, m_finished[i], m_ring);
+         }
          return;
       }
       void run() override
       {
          for(int i1=0; i1<PRODUCERS; i1++)
          {
-            m_producers[i1].start();
+            m_producers[i1]->start();
          }
 
          if( allProducerFinished() )
@@ -156,7 +164,13 @@ class CConsumer: public QThread
             lWarning("Not plausible");
          }
          int noDAtaCounter=0;
-         QElapsedTimer timer;
+
+         #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
+            QElapsedTimer timer;
+         #else
+            QTimer timer;
+         #endif
+
          timer.start();
          qint64 maxNoData=0;
          
diff --git a/tests/test_signal.cpp b/tests/test_signal.cpp
index 04c6d75..9719675 100644
--- a/tests/test_signal.cpp
+++ b/tests/test_signal.cpp
@@ -26,6 +26,7 @@
 #include <lepto/signal.hpp>
 #include <lepto/signalPool.hpp>
 #include <lepto/signalPoolStatic.hpp>
+#include <lepto/signalDeferred.hpp>
 
 
 #define TEST_ALL
@@ -91,7 +92,7 @@ TEST_CASE( "Signal", "[default]" )
 
       //lHint << "Checking adding to list";
       for(int i1=0; i1<0x10; i1++)
-         sig.emitSignal(0, i1);
+         sig.emit(0, i1);
 
       // 15 + 14 ... + 3 + 2 + 1
       REQUIRE( obj.getCounter() == 0x78 + START_VALUE );
@@ -105,7 +106,7 @@ TEST_CASE( "Signal", "[default]" )
 
       //lHint << "Checking adding to list";
       for(int i1=0; i1<0x10; i1++)
-         sig.emitSignal(i1);
+         sig.emit(i1);
 
       // 15 + 14 ... + 3 + 2 + 1
       REQUIRE( getCounter() == 0x78 + START_VALUE );
@@ -157,6 +158,28 @@ TEST_CASE( "Signal", "[default]" )
 
       REQUIRE( obj.getCounter() == 0x10 + START_VALUE );
    }
+
+   SECTION( "Deferred Signal" )
+   {
+      C1 obj;
+      constexpr int sigCount=0x10;
+      CSignalDeferred<void> sig( sigCount );
+
+      sig.connect(&obj, &C1::_slot3);
+
+      //lHint << "Checking adding to list";
+      for(int i1=0; i1<sigCount; i1++)
+      {
+         sig.emitDeferred();
+      }
+
+      // Nothing should have happen yet
+      REQUIRE( obj.getCounter() == START_VALUE );
+
+      sig.eventLoop();
+
+      REQUIRE( obj.getCounter() == START_VALUE + sigCount );
+   }
 }
 
 
