diff --git a/Task_A/src/Enumerable.java b/Task_A/src/Enumerable.java
index 177bce922b7d0268b8951c08ba5690c36647aeb1..1385e4f0d062fa4ff7fc7877c59f8d3d385816e8 100644
--- a/Task_A/src/Enumerable.java
+++ b/Task_A/src/Enumerable.java
@@ -6,14 +6,17 @@ import java.util.Iterator;
 public class Enumerable<T> implements Iterable<T> {
 
 	private Iterator<T> iterator;
+	private Collection<T> collection;
 
 	public Enumerable(Collection<T> collection) {
 		this.iterator = collection.iterator();
+		this.collection = collection;
 	}
 
 	Enumerable<T> where(IPredicate<T> predicate) {
-		Iterator<T> oldIterator = iterator;
-		this.iterator = new Iterator<T>() {
+		Enumerable<T> enumerable = new Enumerable<>(this.collection);
+		Iterator<T> oldIterator = enumerable.iterator();
+		enumerable.iterator = new Iterator<T>() {
 
 			@Override
 			public boolean hasNext() {
@@ -26,10 +29,13 @@ public class Enumerable<T> implements Iterable<T> {
 				while (oldIterator.hasNext() && !predicate.accept(item)) {
 					item = oldIterator.next();
 				}
-				return item;
+				if (predicate.accept(item)) {
+					return item;
+				}
+				return null;
 			}
 		};
-		return this;
+		return enumerable;
 	}
 
 	@Override
@@ -40,8 +46,9 @@ public class Enumerable<T> implements Iterable<T> {
 	void forEach(IAction<T> action) {
 		while (iterator.hasNext()) {
 			T t = (T) iterator.next();
-			action.perform(t);
+			if (t != null) {
+				action.perform(t);
+			}
 		}
 	}
-
 }