Strange codec problem

Got a REALLY strange codec problem-

my sip.conf looks like this:
disallow=all
allow=alaw
allow=g729
allow=gsm

So you would think that incoming sip calls would choose alaw first, right?
Well actually no.
If I have g729 stated in ANY of my sip trunks, then incoming sip calls choose g729. Even on DID numbers going to extensions fixed at alaw, asterisk picks up at g729 and transcodes.
ONLY when I remove g729 from all my outgoing sip trunks does incoming work in the order I specify in sip.conf

What I want to happen is all outgoing sip choose g729 first, then alaw
Incoming sip needs to be alaw first followed by g729
There shouldnt be any transcoding going on as my end points have one or more of the codecs enabled. Unfortunately in practice asterisk is transcoding everything for some reason, even though there is no need to!

Any ideas anyone ???