diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp
index 7fbec4d4acbd7612467f0177c41c6d4641fa063c..ed53c1ade53491092ea577105a571c087e7766d0 100644
--- a/src/processor/processor_motion.cpp
+++ b/src/processor/processor_motion.cpp
@@ -452,7 +452,7 @@ VectorComposite ProcessorMotion::getState(const StateStructure& _structure) cons
      */
 
     // Get state of origin
-    const auto& x_origin = getOrigin()->getFrame()->getState();
+    const auto& x_origin = getOrigin()->getFrame()->getState(state_structure_);
 
     // Get most rescent motion
     const auto& motion = last_ptr_->getBuffer().back();
@@ -486,7 +486,19 @@ VectorComposite ProcessorMotion::getState(const StateStructure& _structure) cons
         statePlusDelta(x_origin, delta_preint, last_ptr_->getTimeStamp() - origin_ptr_->getTimeStamp(), state);
     }
 
-    return state;
+    if (_structure == "")
+        return state;
+
+    else
+    {
+        // remove states not requested
+        for (const auto& pair_key_vec : state)
+        {
+            if (_structure.find(pair_key_vec.first) == std::string::npos)
+                state.erase(pair_key_vec.first);
+        }
+        return state;
+    }
 }
 
 
@@ -529,7 +541,7 @@ VectorComposite ProcessorMotion::getState(const TimeStamp& _ts, const StateStruc
 
         // Get state of origin
         CaptureBasePtr cap_orig   = capture_motion->getOriginCapture();
-        const auto& x_origin = cap_orig->getFrame()->getState();
+        const auto& x_origin = cap_orig->getFrame()->getState(state_structure_);
 
         // Get motion at time stamp
         const auto& motion = capture_motion->getBuffer().getMotion(_ts);
@@ -564,8 +576,19 @@ VectorComposite ProcessorMotion::getState(const TimeStamp& _ts, const StateStruc
             statePlusDelta(x_origin, delta_preint, _ts - cap_orig->getTimeStamp(), state);
         }
 
-        // return success
-        return state;
+        if (_structure == "")
+            return state;
+
+        else
+        {
+            // remove states not requested
+            for (const auto& pair_key_vec : state)
+            {
+                if (_structure.find(pair_key_vec.first) == std::string::npos)
+                    state.erase(pair_key_vec.first);
+            }
+            return state;
+        }
 
     }
 }