diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java
index 56a18ff..b6ae64d 100644
--- a/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java
+++ b/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java
@@ -1,6 +1,7 @@
 package algorithm;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 
 import models.*;
 import models.algebra.Expression;
@@ -22,6 +23,7 @@
 public class CodeGenerator {
 	static public ArrayList<String> doGenerate(ResourceDependencyGraph graph) {
 		ArrayList<String> codes = new ArrayList<>();
+		ArrayList<ResourceNode> resources = StoreResourceCheck(graph);
 		IResourceStateAccessor pushAccessor = new IResourceStateAccessor() {
 			@Override
 			public Expression getCurrentStateAccessorFor(IdentifierTemplate target, IdentifierTemplate from) {
@@ -52,8 +54,9 @@
 				return getter;
 			}
 		};
+		
 		codes.add("public class Main {");
-		for (Node n : graph.getNodes()) {
+		for (ResourceNode n : resources) {
 			ResourceNode resource = (ResourceNode) n;
 			String str = "\t" + "private "
 					+ resource.getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase()
@@ -195,4 +198,43 @@
 		}
 		return codes;
 	}
+	
+	static private ArrayList<ResourceNode> StoreResourceCheck(ResourceDependencyGraph graph) {
+		ArrayList<ResourceNode> resources = new ArrayList<>();
+		for(Node n:graph.getNodes()) {
+			ResourceNode rn = (ResourceNode) n;
+			boolean flag = true;
+			for(Edge e:rn.getOutEdges()) {
+				ResourceDependency re = (ResourceDependency) e;
+				if(((PushPullAttribute)re.getAttribute()).getOptions().get(0) == PushPullValue.PUSH) {
+					flag = false;
+				}
+			}
+			for(Edge e:rn.getInEdges()) {
+				ResourceDependency re = (ResourceDependency) e;
+				if(((PushPullAttribute)re.getAttribute()).getOptions().get(0) != PushPullValue.PUSH) {
+					flag = false;
+				}
+			}
+			if(flag) resources.add(rn);
+		}
+		return resources;
+	}
+	
+	static private ArrayList<ResourceNode> trackNode(ResourceNode rn) {
+		ArrayList<ResourceNode> resources = new ArrayList<>();
+		for(Edge e:rn.getOutEdges()) {
+			ResourceDependency re = (ResourceDependency) e;
+			if(((PushPullAttribute)re.getAttribute()).getOptions().get(0) == PushPullValue.PUSH) {
+				return trackNode((ResourceNode) re.getDestination());
+			}
+		}
+		for(Edge e:rn.getInEdges()) {
+			ResourceDependency re = (ResourceDependency) e;
+			if(((PushPullAttribute)re.getAttribute()).getOptions().get(0) != PushPullValue.PUSH) {
+				return trackNode((ResourceNode) re.getSource());
+			}
+		}
+		return resources;
+	}
 }