I was just looking into using macroexp.el and found some features that I felt were lacking. These were: 1. accepting multiple forms in `macroexp-if' and `macroexp-let*', 2. flattening of `progn's in `macroexp-progn' and `macroexp-unprogn', 3. getting rid of branches in `macroexp-if' in case the TEST is constant (and consequently a way to tell whether a constant form is nil or non-nil). I've went through the rest of macroexp.el and haven't found anything else that stood out, though I might change my mind as I keep using it. I've attached a patch for possible implementations of these, though this is mostly so that I put this out there as a suggestion; considering how many things depend on macroexp.el there might be good reasons why these features are not worth the effort and possible bugs that come about due to these changes.