public function parse($source=false, $parse_collections=false, $_internal_loop=false)
        {
//          increment the parse count so it has unique identifiers
            self::$_instance += 1;
//          capture the source from the buffer
            if($source === false)
            {
                $source = ob_get_clean();
                $this->_buffer_in_use = true;
                $parse_collections = true;
            }
            
//          collect the tags for processing
            $tags = $this->collectTags($source);
            if(count($tags) > 0)
            {
//              there are tags so process them
                $output = $this->_parseTags($tags);
                if($output && $parse_collections === true)
                {
//                  parse any collected tags if required
                    $output = $this->_processCollectedTags($output);
                }
                if($this->_options['echo_output'] === true)
                {
                    echo $output;
                }
                return $output;
            }
            return $source;
        }