I've search the forums and internet for this issue but only found very old (2+ years) threads about this. And some 'solutions' or rather work-arounds that all have their own downside.
In the codex on http://codex.wordpress.org/Shortcode_API under Output, I read:
wpautop recognizes shortcode syntax and will attempt not to wrap p or br tags around shortcodes that stand alone on a line by themselves. Shortcodes intended for use in this manner should ensure that the output is wrapped in an appropriate block tag such as <p> or <div>.
That part 'that stand alone on a line by themselves' is key. What if a user does not put that shortcode on a single line but places it at the beginning of a new paragraph line? In that case, the output, even when it is a DIV, gets wrapped inside the P tag together with the text that follows.
Another example: The user put two shortcodes (can even be different kinds) with a space between them together on one single line ? Then again, there are P tags thrown around. But funnily NOT when there is no space between the shortcodes...
The only reasonable solution I found is an old trick:
//move wpautop filter to AFTER shortcode is processed remove_filter( 'the_content', 'wpautop' ); add_filter( 'the_content', 'wpautop' , 99); add_filter( 'the_content', 'shortcode_unautop', 100);
which does seem still effective but it will affect ALL other shortcodes, I suppose...
Is there really no cleaner way?