diff --git a/dynamics.py b/dynamics.py
index ce8ed25f23877b2fc3061768dee2e96bcf40b962..25637071071b55504f1d59bb402828fe41603193 100644
--- a/dynamics.py
+++ b/dynamics.py
@@ -848,6 +848,9 @@ class AssignmentSame(Assignment):
     def __init__(self):
         pass
 
+    def is_view_resample(self) -> bool:
+        return True
+
     def resample(
         self,
         values,
@@ -931,6 +934,9 @@ class AssignmentToBacked(Assignment):
             self.expressions
         )
 
+    def is_view_resample(self) -> bool:
+        return False
+
     def resample(
         self,
         values,
@@ -1045,6 +1051,9 @@ class AssignmentFromBacked(Assignment):
             self.source_to_target[source_position] = first_target_position
         self.source_to_target[-1] = self.distributions[-1][1]
 
+    def is_view_resample(self) -> bool:
+        return True
+
     def resample(
         self,
         values,
@@ -1161,6 +1170,9 @@ class AssignmentCommon(Assignment):
             last_existing_expression + 1
         )
 
+    def is_view_resample(self) -> bool:
+        return False
+
     def resample(
         self,
         values,
@@ -1419,6 +1431,30 @@ class PeriodDynamic(Dynamic):
         return self.dynamic._all_indices()
 
 
+def is_view_resample(dynamic: Dynamic, target_dynamic: Dynamic) -> bool:
+    if dynamic == target_dynamic:
+        return True
+    elif isinstance(dynamic, TreeDynamic) and isinstance(target_dynamic, TreeDynamic):
+        if dynamic.root() != target_dynamic.root():
+            raise ValueError("Both dynamics have to be part of the same dynamic tree!")
+        assignment, _, _, _, _ = dynamic.dynamic_tree.get_assignment(
+            dynamic, target_dynamic
+        )
+        return assignment.is_view_resample()
+    elif isinstance(dynamic, AggregatedDynamic) and isinstance(
+        target_dynamic, PeriodDynamic
+    ):
+        if dynamic.period_aggregation != target_dynamic.period_aggregation:
+            raise ValueError(
+                f"The aggregated dynamic and the period dynamic have to be part of the same period aggregation!"
+            )
+        return True
+    else:
+        raise ValueError(
+            f"Invalid dynamic type combination {type(dynamic)} -> {type(target_dynamic)}!"
+        )
+
+
 def resample(
     values, dynamic: Dynamic, target_dynamic: Dynamic
 ):  # values: type hinting a np-array, type hinting a np-array