diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 52efc57ab5beb191ace4f386b0e2b336fc7b96ce..045cce1f099409a2ae75deb375101ba46c0a2067 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -76,9 +76,8 @@ stages:
   - fi
   - mkdir -pv build
   - cd build
-  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=ON -DBUILD_TESTS=ON ..
+  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_DEMOS=OFF -DBUILD_TESTS=OFF ..
   - make -j$(nproc)
-  - ctest -j$(nproc)
   - make install
 
 .install_gnssutils_template: &install_gnssutils_definition
@@ -94,7 +93,7 @@ stages:
   - fi
   - mkdir -pv build
   - cd build
-  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=ON -DBUILD_TESTS=ON ..
+  - cmake -DCMAKE_BUILD_TYPE=release-DBUILD_TESTS=ON ..
   - make -j$(nproc)
   - ctest -j$(nproc)
   - make install
@@ -103,7 +102,7 @@ stages:
   - cd $CI_PROJECT_DIR
   - mkdir -pv build
   - cd build
-  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=ON -DBUILD_TESTS=ON ..
+  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_TESTS=ON ..
   - make -j$(nproc)
   - ctest -j$(nproc)
   - make install
diff --git a/include/gnss/processor/processor_gnss_fix.h b/include/gnss/processor/processor_gnss_fix.h
index 56207a68b143e929159d814589a07fd6ffa947da..0af093f1800b98a6e9b0e8cd0cb48d8ea7d42314 100644
--- a/include/gnss/processor/processor_gnss_fix.h
+++ b/include/gnss/processor/processor_gnss_fix.h
@@ -153,7 +153,7 @@ class ProcessorGnssFix : public ProcessorBase
          *
          * The ProcessorTracker only processes incoming captures (it is not called).
          */
-        void processKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance) override {};
+        void processKeyFrame(FrameBasePtr _keyframe_ptr) override {};
 
         /** \brief trigger in capture
          *
@@ -165,7 +165,7 @@ class ProcessorGnssFix : public ProcessorBase
          *
          * The ProcessorTracker only processes incoming captures, then it returns false.
          */
-        bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const double& _time_tolerance) const override {return false;}
+        bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr) const override {return false;}
 
         /** \brief store key frame
         *
diff --git a/include/gnss/processor/processor_gnss_tdcp.h b/include/gnss/processor/processor_gnss_tdcp.h
index f3f9072ec2b906c14c2d065194bcc379a2690339..9c040a1e522c8ea767a3bad7f1c465b3997ae0e4 100644
--- a/include/gnss/processor/processor_gnss_tdcp.h
+++ b/include/gnss/processor/processor_gnss_tdcp.h
@@ -110,7 +110,7 @@ class ProcessorGnssTdcp : public ProcessorBase
          *
          * The ProcessorTracker only processes incoming captures (it is not called).
          */
-        void processKeyFrame(FrameBasePtr _keyframe, const double& _time_tolerance) override;
+        void processKeyFrame(FrameBasePtr _keyframe) override;
 
         /** \brief store key frame
         *
@@ -134,7 +134,7 @@ class ProcessorGnssTdcp : public ProcessorBase
          *
          * The ProcessorTracker only processes incoming captures, then it returns false.
          */
-        bool triggerInKeyFrame(FrameBasePtr _keyframe, const double& _time_tolerance) const override {return true;};
+        bool triggerInKeyFrame(FrameBasePtr _keyframe) const override {return true;};
 
         bool voteForKeyFrame() const override;
 
diff --git a/src/processor/processor_gnss_fix.cpp b/src/processor/processor_gnss_fix.cpp
index 9b4b04f785e3ae1cddd4fe48690e3bc8320f2f80..fb104bf26e458ec4c79136b7008a425d9b7e86ec 100644
--- a/src/processor/processor_gnss_fix.cpp
+++ b/src/processor/processor_gnss_fix.cpp
@@ -93,13 +93,13 @@ void ProcessorGnssFix::processCapture(CaptureBasePtr _capture)
     auto incoming_feature = FeatureBase::emplace<FeatureGnssFix>(incoming_capture_, incoming_pos_out_);
 
     // ALREADY CREATED KF
-    PackKeyFramePtr KF_pack = buffer_pack_kf_.selectPack( incoming_capture_, params_gnss_->time_tolerance);
-    if (KF_pack and last_KF_capture_ and KF_pack->key_frame == last_KF_capture_->getFrame())
-        KF_pack = nullptr;
-    if (KF_pack)
+    FrameBasePtr keyframe = buffer_frame_.select( incoming_capture_->getTimeStamp(), params_gnss_->time_tolerance);
+    if (keyframe and last_KF_capture_ and keyframe == last_KF_capture_->getFrame())
+        keyframe = nullptr;
+    if (keyframe)
     {
-        WOLF_DEBUG("PR ", getName()," - capture ", incoming_capture_->id(), " appended to existing KF " , KF_pack->key_frame->id() , " TS: ", KF_pack->key_frame->getTimeStamp());
-        new_frame = KF_pack->key_frame;
+        WOLF_DEBUG("PR ", getName()," - capture ", incoming_capture_->id(), " appended to existing KF " , keyframe->id() , " TS: ", keyframe->getTimeStamp());
+        new_frame = keyframe;
     }
     // MAKE KF
     else if (permittedKeyFrame() && voteForKeyFrame())
@@ -171,7 +171,7 @@ void ProcessorGnssFix::processCapture(CaptureBasePtr _capture)
 
     // Notify if KF created
     if (KF_created)
-        getProblem()->keyFrameCallback(new_frame, shared_from_this(), params_gnss_->time_tolerance);
+        getProblem()->keyFrameCallback(new_frame, shared_from_this());
 }
 
 FactorBasePtr ProcessorGnssFix::emplaceFactor(FeatureBasePtr _ftr)
diff --git a/src/processor/processor_gnss_tdcp.cpp b/src/processor/processor_gnss_tdcp.cpp
index a9bab653f57f42b58f8cbb8bfe55d3022cda84b0..e19aeed9eb0cabc8ffdb41fd56d9af9a8064ca5f 100644
--- a/src/processor/processor_gnss_tdcp.cpp
+++ b/src/processor/processor_gnss_tdcp.cpp
@@ -44,7 +44,7 @@ ProcessorGnssTdcp::~ProcessorGnssTdcp()
 void ProcessorGnssTdcp::processCapture(CaptureBasePtr _capture)
 {
     if (std::dynamic_pointer_cast<CaptureGnss>(_capture))
-        buffer_capture_.add(_capture->getTimeStamp(), _capture);
+        buffer_capture_.emplace(_capture->getTimeStamp(), _capture);
 
     /*
     // TODO: keep captures in a buffer and deal with KFpacks
@@ -114,7 +114,7 @@ void ProcessorGnssTdcp::processCapture(CaptureBasePtr _capture)
     */
 }
 
-void ProcessorGnssTdcp::processKeyFrame(FrameBasePtr _keyframe, const double& _time_tolerance)
+void ProcessorGnssTdcp::processKeyFrame(FrameBasePtr _keyframe)
 {
     WOLF_INFO("ProcessorGnssTdcp::processKeyFrame()");
 
diff --git a/test/gtest_factor_gnss_fix_2d.cpp b/test/gtest_factor_gnss_fix_2d.cpp
index a88b67bba5682ed1ed5a7fa5e3ad4e390abb3962..98fa09cc5ac8d773fef816e4b06df81e11f57273 100644
--- a/test/gtest_factor_gnss_fix_2d.cpp
+++ b/test/gtest_factor_gnss_fix_2d.cpp
@@ -135,7 +135,7 @@ TEST(FactorGnssFix2dTest, configure_tree)
     // Emplace a frame (FIXED)
     Vector3d frame_pose = (Vector3d() << t_map_base(0), t_map_base(1), o_map_base(0)).finished();
     frame_ptr = problem_ptr->emplaceFrame( TimeStamp(0), frame_pose);
-    problem_ptr->keyFrameCallback(frame_ptr, nullptr, 1.0);
+    problem_ptr->keyFrameCallback(frame_ptr, nullptr);
 
     // Create & process GNSS Fix capture
     CaptureGnssFixPtr cap_gnss_ptr = std::make_shared<CaptureGnssFix>(TimeStamp(0), gnss_sensor_ptr, t_ecef_antena, 1e-3*Matrix3d::Identity());