diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 8f88315d70952db12f84638d54bd1b8ae2d7c300..8458f3a8160d42b2341bf26510c044d8b3c360fb 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -202,7 +202,7 @@ static struct sip_pvt {
 	char peersecret[81];
 	char callerid[256];					/* Caller*ID */
 	char via[256];
-	char accountcode[256];				/* Account code */
+	char accountcode[20];				/* Account code */
 	char our_contact[256];				/* Our contact header */
 	char realm[256];				/* Authorization realm */
 	char nonce[256];				/* Authorization nonce */
@@ -247,7 +247,7 @@ struct sip_user {
 	char context[80];
 	char callerid[80];
 	char methods[80];
-	char accountcode[80];
+	char accountcode[20];
 	unsigned int callgroup;
 	unsigned int pickupgroup;
 	int nat;
@@ -1162,6 +1162,10 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
 		tmp->pvt->bridge = ast_rtp_bridge;
 		tmp->callgroup = i->callgroup;
 		tmp->pickupgroup = i->pickupgroup;
+                if (strlen(i->accountcode))
+                        strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
+                if (i->amaflags)
+                        tmp->amaflags = i->amaflags;
 		if (strlen(i->language))
 			strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
 		i->owner = tmp;