diff --git a/Task_A/src/Enumerable.java b/Task_A/src/Enumerable.java
index 177bce922b7d0268b8951c08ba5690c36647aeb1..e6644079059aacc809cf2fc8bc7b3e0b4cea95e8 100644
--- a/Task_A/src/Enumerable.java
+++ b/Task_A/src/Enumerable.java
@@ -6,30 +6,37 @@ 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.collection = collection;
 		this.iterator = collection.iterator();
 	}
 
 	Enumerable<T> where(IPredicate<T> predicate) {
-		Iterator<T> oldIterator = iterator;
-		this.iterator = new Iterator<T>() {
+		Enumerable<T> enumerable = new Enumerable<T>(this.collection);
+		
+		enumerable.iterator = new Iterator<T>() {
+			Iterator<T> iterator = enumerable.iterator();
 
 			@Override
 			public boolean hasNext() {
-				return oldIterator.hasNext();
+				return iterator.hasNext();
 			}
 
 			@Override
 			public T next() {
-				T item = oldIterator.hasNext() ? oldIterator.next() : null;
-				while (oldIterator.hasNext() && !predicate.accept(item)) {
-					item = oldIterator.next();
+				T item = iterator.hasNext() ? iterator.next() : null;
+
+				while (iterator.hasNext() && !predicate.accept(item)) {
+					item = iterator.next();
 				}
-				return item;
+				
+				return predicate.accept(item) ? item : null;
 			}
 		};
-		return this;
+		
+		return enumerable;
 	}
 
 	@Override