diff --git a/include/base/problem/problem.h b/include/base/problem/problem.h
index 938074f78020ebff96905714d70d7f1259a168e1..e6375bff43943585dcdf703155fe6e9ad6697ce2 100644
--- a/include/base/problem/problem.h
+++ b/include/base/problem/problem.h
@@ -3,6 +3,7 @@
 
 // Fwd refs
 namespace wolf{
+class SolverManager;
 class HardwareBase;
 class TrajectoryBase;
 class MapBase;
@@ -33,6 +34,7 @@ enum Notification
  */
 class Problem : public std::enable_shared_from_this<Problem>
 {
+    friend SolverManager; // Enable SolverManager to acces protected functions (consumeXXXNotificationMap())
 
     protected:
         HardwareBasePtr     hardware_ptr_;
@@ -252,9 +254,13 @@ class Problem : public std::enable_shared_from_this<Problem>
          */
         void removeStateBlock(StateBlockPtr _state_ptr);
 
-        /** \brief Returns the map of factor notification to be handled by the solver (the map stored in this is emptied)
+        /** \brief Returns the size of the map of state block notification
          */
-        std::map<StateBlockPtr,Notification> consumeStateBlockNotificationMap();
+        SizeStd getStateBlockNotificationMapSize() const;
+
+        /** \brief Returns if the state block has been notified, and the notification via parameter
+         */
+        bool getStateBlockNotification(const StateBlockPtr& sb_ptr, Notification& notif) const;
 
         /** \brief Notifies a new factor to be added to the solver manager
          */
@@ -264,10 +270,24 @@ class Problem : public std::enable_shared_from_this<Problem>
          */
         void removeFactor(FactorBasePtr _factor_ptr);
 
+        /** \brief Returns the size of the map of factor notification
+         */
+        SizeStd getFactorNotificationMapSize() const;
+
+        /** \brief Returns if the factor has been notified, and the notification via parameter
+         */
+        bool getFactorNotification(const FactorBasePtr& fac_ptr, Notification& notif) const;
+
+    protected:
+        /** \brief Returns the map of state block notification to be handled by the solver (the map stored in this is emptied)
+         */
+        std::map<StateBlockPtr,Notification> consumeStateBlockNotificationMap();
+
         /** \brief Returns the map of factor notification to be handled by the solver (the map stored in this is emptied)
          */
         std::map<FactorBasePtr, Notification> consumeFactorNotificationMap();
 
+    public:
         // Print and check ---------------------------------------
         /**
          * \brief print wolf tree
@@ -311,12 +331,25 @@ inline std::map<StateBlockPtr,Notification> Problem::consumeStateBlockNotificati
     return std::move(state_block_notification_map_);
 }
 
+inline SizeStd Problem::getStateBlockNotificationMapSize() const
+{
+    std::lock_guard<std::mutex> lock(mut_state_block_notifications_);
+    return state_block_notification_map_.size();
+}
+
 inline std::map<FactorBasePtr,Notification> Problem::consumeFactorNotificationMap()
 {
     std::lock_guard<std::mutex> lock(mut_factor_notifications_);
     return std::move(factor_notification_map_);
 }
 
+inline wolf::SizeStd Problem::getFactorNotificationMapSize() const
+{
+    std::lock_guard<std::mutex> lock(mut_factor_notifications_);
+    return factor_notification_map_.size();
+}
+
+
 } // namespace wolf
 
 #endif // PROBLEM_H