Re markup, one thing I often wonder about is when div wrappers around block level elements are desirable. Ul and dl are block level, and have basically the same properties as a div. That means that instead of this:
echo '
<div class="buttonlist', !empty($direction) ? ' float' . $direction : '', '"', (empty($buttons) ? ' style="display: none;"' : ''), (!empty($strip_options['id']) ? ' id="' . $strip_options['id'] . '"': ''), '>
<ul>',
It would be perfectly possible to use this:
echo '
<ul class="buttonlist', !empty($direction) ? ' float' . $direction : '', '"', (empty($buttons) ? ' style="display: none;"' : ''), (!empty($strip_options['id']) ? ' id="' . $strip_options['id'] . '"': ''), '>, '
Just as one example. To my mind, 2.0.x had a serious case of divitis in a lot of places.