reordered some things and played a little with xparse