diff --git a/include/core/sensor/spec_state_sensor.h b/include/core/sensor/spec_state_sensor.h
index c8ea62affc3009528ea7c3b271200a4a2810f24e..c1391a5349c12f7f8a893de3d3e97b5252b2f1b4 100644
--- a/include/core/sensor/spec_state_sensor.h
+++ b/include/core/sensor/spec_state_sensor.h
@@ -53,13 +53,7 @@ class SpecStateSensor : public SpecState
         std::string print(const std::string& _spaces = "") const override;
 };
 
-class SpecSensorComposite : public SpecCompositeTemplate<SpecStateSensor>
-{
-    public:
-        using SpecCompositeTemplate::SpecCompositeTemplate;
-
-        SpecComposite getSpecComposite() const;
-};
+typedef TemplateComposite<SpecStateSensor> SpecSensorComposite;
 
 inline bool SpecStateSensor::isDynamic() const { return dynamic_; }
 
diff --git a/include/core/state_block/spec_composite.h b/include/core/state_block/spec_composite.h
index f53b296fdc215ef0b088d06c0d6c2503c6c540cf..f0bda4d634c2d1e19b6bffa0be90d17abba61fda 100644
--- a/include/core/state_block/spec_composite.h
+++ b/include/core/state_block/spec_composite.h
@@ -65,27 +65,38 @@ class SpecState
         virtual std::string print(const std::string& _spaces = "") const;
 };
 
-template <typename SPEC>
-class SpecCompositeTemplate : public std::unordered_map<char, SPEC>
+template <typename T>
+class TemplateComposite : public std::unordered_map<char, T>
 {
     public:
-        using unordered_map<char, SPEC>::unordered_map;
+        using unordered_map<char, T>::unordered_map;
 
-        SpecCompositeTemplate(const YAML::Node& _n);
-        virtual ~SpecCompositeTemplate() = default;
+        TemplateComposite(const YAML::Node& _n);
+        virtual ~TemplateComposite() = default;
 
         VectorComposite getState() const;
 
-        void emplace(char _key, const SPEC& _spec);
+        template <typename OTHER_T>
+        TemplateComposite<OTHER_T> cast() const
+        {
+            TemplateComposite<OTHER_T> casted_composite;
+            for (auto pair : *this)
+            {
+                casted_composite.emplace(pair.first, static_cast<OTHER_T>(pair.second));
+            }
+            return casted_composite;
+        }
+
+        void emplace(char _key, const T& _spec);
 
         std::string print() const;
 };
 
-typedef SpecCompositeTemplate<SpecState> SpecComposite;
+typedef TemplateComposite<SpecState> SpecComposite;
 
 
-template <typename SPEC>
-SpecCompositeTemplate<SPEC>::SpecCompositeTemplate(const YAML::Node& _n)
+template <typename T>
+TemplateComposite<T>::TemplateComposite(const YAML::Node& _n)
 {
     if (not _n.IsMap())
     {
@@ -93,18 +104,18 @@ SpecCompositeTemplate<SPEC>::SpecCompositeTemplate(const YAML::Node& _n)
     }
     for (auto spec_pair : _n)
     {
-        this->emplace(spec_pair.first.as<char>(), SPEC(spec_pair.second));
+        this->emplace(spec_pair.first.as<char>(), T(spec_pair.second));
     }
 }
 
-template <typename SPEC>
-void SpecCompositeTemplate<SPEC>::emplace(char _key, const SPEC& _spec)
+template <typename T>
+void TemplateComposite<T>::emplace(char _key, const T& _spec)
 {
     this->insert({_key,_spec});
 }
 
-template <typename SPEC>
-VectorComposite SpecCompositeTemplate<SPEC>::getState() const
+template <typename T>
+VectorComposite TemplateComposite<T>::getState() const
 {
     VectorComposite states;
     for (auto spec_pair : *this)
@@ -114,8 +125,14 @@ VectorComposite SpecCompositeTemplate<SPEC>::getState() const
     return states;
 }
 
-template <typename SPEC>
-std::string SpecCompositeTemplate<SPEC>::print() const
+// template <typename T, typename OTHER_T>
+// TemplateComposite<OTHER_T> TemplateComposite<T>::cast() const
+// {
+//     return TemplateComposite<OTHER_T>();
+// }
+
+template <typename T>
+std::string TemplateComposite<T>::print() const
 {
     std::string output;
     
diff --git a/src/sensor/sensor_base.cpp b/src/sensor/sensor_base.cpp
index bdcfc17b0a5c94b48705d9e876ee1a469286b998..b2a5f8ee65c25fe2479e35b768de29419282328f 100644
--- a/src/sensor/sensor_base.cpp
+++ b/src/sensor/sensor_base.cpp
@@ -73,6 +73,10 @@ SensorBase::SensorBase(const std::string& _type,
         if (prior.isDynamic())
             setDriftStd(key, prior.getDriftStd());
     }
+
+    WOLF_INFO(_priors.print());
+    auto base_prior = _priors.cast<SpecState>();
+    WOLF_INFO(base_prior.print());
 }
 
 SensorBase::~SensorBase()
diff --git a/src/sensor/spec_state_sensor.cpp b/src/sensor/spec_state_sensor.cpp
index 281338cc66a9f0f12bfa58839935a99762f6643a..524d6003233a4031608d799ea6748c395d5a2e7e 100644
--- a/src/sensor/spec_state_sensor.cpp
+++ b/src/sensor/spec_state_sensor.cpp
@@ -27,19 +27,6 @@
 namespace wolf
 {
 
-SpecComposite SpecSensorComposite::getSpecComposite() const
-{
-    SpecComposite spec_composite;
-    for (auto spec_sensor_pair : *this)
-    {
-        spec_composite.emplace(spec_sensor_pair.first, SpecState(spec_sensor_pair.second.getType(), 
-                                                                 spec_sensor_pair.second.getState(),
-                                                                 spec_sensor_pair.second.getMode(),
-                                                                 spec_sensor_pair.second.getNoiseStd()));
-    }
-    return spec_composite;
-}
-
 SpecStateSensor::SpecStateSensor(const std::string&     _type,
                                  const Eigen::VectorXd& _state,
                                  const std::string&     _mode,
diff --git a/src/state_block/has_state_blocks.cpp b/src/state_block/has_state_blocks.cpp
index 67f6a6fa7a5204c3e827113cafea638644de6a1f..2f59aa27eef3604d78b79e90fa22cfa33bc1a581 100644
--- a/src/state_block/has_state_blocks.cpp
+++ b/src/state_block/has_state_blocks.cpp
@@ -57,10 +57,13 @@ HasStateBlocks::HasStateBlocks(const SpecComposite& _specs)
 
 StateBlockPtr HasStateBlocks::addStateBlock(const char& _sb_key, const StateBlockPtr& _sb, ProblemPtr _problem)
 {
-    assert(state_block_map_.count(_sb_key) == 0 && state_block_const_map_.count(_sb_key) == 0 && "Trying to add a state block with an existing type! Use setStateBlock instead.");
+    assert(state_block_map_.count(_sb_key) == 0 and
+           state_block_const_map_.count(_sb_key) == 0 and
+           "Trying to add a state block with an existing type! Use setStateBlock instead.");
+
     state_block_map_.emplace(_sb_key, _sb);
     state_block_const_map_.emplace(_sb_key, _sb);
-    if (!isInStructure(_sb_key))
+    if (not isInStructure(_sb_key))
         appendToStructure(_sb_key);
 
     // conditionally register to problem