             return new Stream().concat(mapped);
         }
 
+        /**
+         * Returns new ArrayCollection created from items of current Stream
+         */
         public function get collection():ArrayCollection
         {
             return new ArrayCollection(source.concat());
         }
 
+        /**
+         * Returns new Array created from items of current Stream
+         */
         public function get array():Array
         {
             return source.concat();
         }
 
+        /**
+         * Returns new ArrayList created from items of current Stream
+         */
         public function get list():ArrayList
         {
             return new ArrayList(this.source.concat());
         }
 
-        public function dictionary(name:String, weak:Boolean = false):Dictionary
+        /**
+         * Creates new Dictionary from current Stream using specified property as keys
+         * @param property name of the property to be used as key
+         * @param weak create Dictionary with weak keys
+         * @return A new Dictionary from current Stream using specified property as keys
+         */
+        public function dictionary(property:String, weak:Boolean = false):Dictionary
         {
             var dict:Dictionary = new Dictionary(weak);
             for each (var item:* in source)
             {
-                var value:* = item[name];
+                var value:* = item[property];
                 dict[value] = item;
             }
             return dict;
         }
 
-
-        public function object(name:String):Object
+        /**
+         * Creates new Object from current Stream using specified property as keys
+         * @param property name of the property to be used as key
+         * @return A new Object from current Stream using specified property as keys
+         */
+        public function object(property:String):Object
         {
             var dict:Object = {};
             for each (var item:* in source)
             {
-                var value:* = item[name];
+                var value:* = item[property];
                 dict[value] = item;
             }
             return dict;
         }
 
+        /**
+         * Creates a copy of current Stream
+         * @param deep create deep copy using AMF serialization trick
+         * @return A copy of current Stream
+         */
         public function clone(deep:Boolean = false):Stream
         {
             if (deep)

         * -------------------------------------------
         */

        public function get empty():Boolean
        {
            return length == 0;
        }

        public function skip(count:int):Stream
        {
            return this.slice(count);
        }

        public function get last():*
        {
            return source.length > 0 ? source[source.length - 1] : null;
        }

        public function get first():*
        {
            return source.length > 0 ? source[0] : null;

         * -------------------------------------------
         */

        /**
         * Converts the elements in an array to strings,
         * inserts the specified separator between the elements,
         * concatenates them, and returns the resulting string.
         * @param sep used as separator
         * @return A string consisting of the elements of an array converted to strings
         * and separated by the specified parameter.
         */
        public function join(sep:* = null):String
        {
            return source.join(sep);
