diff --git a/lib/plucky/query.rb b/lib/plucky/query.rb
index <HASH>..<HASH> 100644
--- a/lib/plucky/query.rb
+++ b/lib/plucky/query.rb
@@ -14,7 +14,7 @@ module Plucky
     attr_reader    :criteria, :options, :collection
     def_delegator  :criteria, :simple?
     def_delegator  :options,  :fields?
-    def_delegators :to_a, :each, :include?
+    def_delegators :to_a, :include?
 
     def initialize(collection, opts={})
       @collection, @options, @criteria = collection, OptionsHash.new, CriteriaHash.new
@@ -84,6 +84,10 @@ module Plucky
       clone.update(opts).reverse.find_one
     end
 
+    def each
+      find_each.each { |doc| yield(doc) }
+    end
+
     def remove(opts={})
       query = clone.update(opts)
       query.collection.remove(query.criteria.to_hash)
@@ -157,7 +161,7 @@ module Plucky
     alias :exist? :exists?
 
     def to_a
-      all
+      find_each.to_a
     end
 
     def [](key)
Optimize each and to_a to use find_each instead of all.

all loads every doc into memory, find_each creates a cursor and loads as you keep reqeusting.