Have you tried short am and long pm? I've also kept the nap times fairly rigid-well, we're goverened by school runs anyway and it works for us.
Our day generally goes:
A 6ish
S 9ish- on the way home from school I drop his seat back and see if he needs to nap. He didn't today, but on the days he does I cap it at around 20-30mins.
S 1pm for as long as he needs but I have to be out of the house by 3.05-3.10 for school
BT 7-7.15ish
On a 1 nap day I'll usually get him in bed at more like 12.30-12.45pm as he's really ready for a sleep.
This works for us. Early wakings, I have no idea what to do, we've always had them and just accept it. When he wakes we leave him for as long as poss then when he really starts protesting we bring him in with us and he'll play, sit and chill out, watch tv, etc.