diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java b/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java
index 70f2248..c3de0e1 100644
--- a/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java
+++ b/AlgebraicDataflowArchitectureModel/src/algorithm/DerivingStorageResources.java
@@ -1,5 +1,32 @@
 package algorithm;
 
-public class DerivingStorageResources {
+import models.algebra.Expression;
+import models.algebra.Position;
+import models.algebra.Type;
+import models.dataConstraintModel.ChannelGenerator;
+import models.dataConstraintModel.ChannelMember;
+import models.dataConstraintModel.DataConstraintModel;
+import models.dataConstraintModel.IdentifierTemplate;
+import models.dataFlowModel.DataFlowModel;
 
+public class DerivingStorageResources {
+	public void run(DataFlowModel model) {
+		DataConstraintModel dcmodel = (DataConstraintModel) model;
+		for(IdentifierTemplate resource:dcmodel.getIdentifierTemplates()) {
+			resource.setResourceStateType(new Type("PULL","pull"));
+		}
+		for (ChannelGenerator generator : dcmodel.getChannelGenerators()) {
+			for (ChannelMember member : generator.getChannelMembers()) {
+				Expression curexp = member.getStateTransition().getCurStateExpression();
+				Expression nextexp = member.getStateTransition().getNextStateExpression();
+				for (Position cuspos : curexp.getVariables().keySet()) {
+					for (Position nextpos : nextexp.getVariables().keySet()) {
+						if (curexp.getVariables().get(cuspos).getName().equals(nextexp.getVariables().get(nextpos).getName())) {
+							member.getIdentifierTemplate().setResourceStateType(new Type("PUSH", "push"));
+						}
+					}
+				}
+			}
+		}
+	}
 }