Shortcode with loop stacks output

Ok…So, I was able to find an example that helped:

function faq() {
    $output="";
    $query = new WP_Query( 'post_type=faqs' );
    if ( $query -> have_posts() ) :
        while ( $query -> have_posts() ) : $query -> the_post();
            $output .= '<h3>'.get_the_title().'</h3>';
            $output .= '<p>'.get_the_content().'</p>';
        endwhile;
    endif;
    wp_reset_postdata();
    return $output;
}
add_shortcode( 'faqs', 'faq' );

This puts everything in the right order and wraps the title tags in an <h2> tags. If I didn’t do something right, or someone has a better suggested solution, please let me know!

** Minor correction to using the_title(); and the_content(); is get_the_title(); and get_the_content(); because if you don’t use those and try and put tags around them the tags show up underneath the text…the issue went away with get_the_title(); and get_the_content();

Thanks,
Josh