$wp_query issue when trying to create a virtual page

I found this and it works. The big difference is that it checks if $post count == 0 and the creates the virtual page which will then allow all the other queries to function as normal.

<?php /*
Plugin Name: Virtual Page
Plugin URI: http://davejesch.com
Description: Create a virtual page with content
Author: Dave Jesch
Author URI: http://davejesch.com
Version: 1.0
*/

if (!class_exists('DJVirtualPage'))
{
class DJVirtualPage
{
    private $slug = NULL;
    private $title = NULL;
    private $content = NULL;
    private $author = NULL;
    private $date = NULL;
    private $type = NULL;

    public function __construct($args)
    {
        if (!isset($args['slug']))
            throw new Exception('No slug given for virtual page');

        $this->slug = $args['slug'];
        $this->title = isset($args['title']) ? $args['title'] : '';
        $this->content = isset($args['content']) ? $args['content'] : '';
        $this->author = isset($args['author']) ? $args['author'] : 1;
        $this->date = isset($args['date']) ? $args['date'] : current_time('mysql');
        $this->dategmt = isset($args['date']) ? $args['date'] : current_time('mysql', 1);
        $this->type = isset($args['type']) ? $args['type'] : 'page';

        add_filter('the_posts', array(&$this, 'virtualPage'));
    }

    // filter to create virtual page content
    public function virtualPage($posts)
    {
        global $wp, $wp_query;

        if (count($posts) == 0 &&
            (strcasecmp($wp->request, $this->slug) == 0 || $wp->query_vars['page_id'] == $this->slug))
        {
            //create a fake post intance
            $post = new stdClass;
            // fill properties of $post with everything a page in the database would have
            $post->ID = -1;                          // use an illegal value for page ID
            $post->post_author = $this->author;       // post author id
            $post->post_date = $this->date;           // date of post
            $post->post_date_gmt = $this->dategmt;
            $post->post_content = $this->content;
            $post->post_title = $this->title;
            $post->post_excerpt="";
            $post->post_status="publish";
            $post->comment_status="closed";        // mark as closed for comments, since page doesn't exist
            $post->ping_status="closed";           // mark as closed for pings, since page doesn't exist
            $post->post_password = '';               // no password
            $post->post_name = $this->slug;
            $post->to_ping = '';
            $post->pinged = '';
            $post->modified = $post->post_date;
            $post->modified_gmt = $post->post_date_gmt;
            $post->post_content_filtered = '';
            $post->post_parent = 0;
            $post->guid = get_home_url("https://wordpress.stackexchange.com/" . $this->slug);
            $post->menu_order = 0;
            $post->post_tyle = $this->type;
            $post->post_mime_type="";
            $post->comment_count = 0;

            // set filter results
            $posts = array($post);

            // reset wp_query properties to simulate a found page
            $wp_query->is_page = TRUE;
            $wp_query->is_singular = TRUE;
            $wp_query->is_home = FALSE;
            $wp_query->is_archive = FALSE;
            $wp_query->is_category = FALSE;
            unset($wp_query->query['error']);
            $wp_query->query_vars['error'] = '';
            $wp_query->is_404 = FALSE;
        }

        return ($posts);
    }
}
}

function dj_create_virtual()
{
$url = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), "https://wordpress.stackexchange.com/");
if ($url == 'dave-virtual-page')
{
    $args = array('slug' => 'dave-virtual-page',
            'title' => 'Dave\'s Virtual Page',
            'content' => "This can be generated content, or static content<br />
        Whatever you put here will appear on your virtual page.");
    $pg = new DJVirtualPage($args);
}
}
add_action('init', 'dj_create_virtual');

tech