Extensions not received for Google Voice + Gizmo + Asterisk

I’m try to arrange a small time self-help system i.e. people call in, press the desired number and get instructions. Since this is for a non-profit org, the free part is quite important.

Here’s my setup:
I have a Google Voice number which I have forwarded to a Gizmo account (G1) which forwards all calls another Gizmo account (G2, through SIP). Asterisk registers G2.

Problem: The initial message plays fine when the user calls through a cell phone. The initial message asks the user to press 1,2,3 etc. Asterisk does not receive the tones for the pressed extension.
i.e. Google Voice => G1 => G2 (Asterisk) = extensions dialed not picked up.

I tried this using G1 to G2 call only. The message plays fine, and the selected extension is recorded by asterisk and the correct help file is played.
G1 => G2 (Asterisk) = extensions dialed are picked up.

I am guessing the dtmfmode value in incorrect. I tried rfc2833, inband, sip-info, auto values. Same result. I also tried switching the value of canreinvite to yes.

sip.conf entries:

 [general]
  dtmfmode=rfc2833
  context=help-test
  srvlookup=yes
  nat=yes
  externip=24.xxx.xxx.xxx
  localnet=192.168.1.0/255.255.255.0
  disallow=all
  allow=ulaw
  allow=alaw
  allow=ilbc
  allow=gsm
  qualify=no
  defaultexpirey=3600
  register=1747xxxxxxx:my_secret@proxy01.sipphone.com
  canreinvite=yes

  [proxy01.sipphone.com]
  type=friend
  context=help-test
  disallow=all
  allow=ulaw
  allow=alaw
  allow=ilbc
  allow=gsm
  dtmfmode=rfc2833
  host=proxy01.sipphone.com
  insecure=port,invite
  secret=my_secret
  username=1747xxxxxxx
  fromuser=1747xxxxxxx
  fromdomain=proxy01.sipphone.com
  canreinvite=no
  qualify=no

extensions.conf

  [help-test]
  exten=s,1,Wait(1)
  exten=s,2,Answer()
  exten=s,3,Wait(1)
  exten=s,n(lbl_help-test_0),Background(help-start)
  exten=s,n,WaitExten(15)
  exten=s,n,Hangup()
  exten=i,1,Playback(pbx-invalid)
  exten=i,n,Goto(s,lbl_help-test_0)
  exten=t,1,Playback(pbx-goodbye)
  exten=t,n,Hangup()
  exten=1,1,Playback("hello-world")

Problem 0:
I have to make that double Gizmo jump because Google Voice => Asterisk (As gizmo number) simply didn’t work. It crashes midway through the dialplan.

Asterisk version : 1.4.18.1 running under VMWare