diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index ef9e6e3beb03ef72aaa27a959398ad3ae21d1bb6..17c446c9e5351d4060f00e37b62e8a4c7192b457 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1222,8 +1222,8 @@ static unsigned int global_cos_sip;		/*!< 802.1p class of service for SIP packet
 static unsigned int global_cos_audio;		/*!< 802.1p class of service for audio RTP packets */
 static unsigned int global_cos_video;		/*!< 802.1p class of service for video RTP packets */
 static unsigned int global_cos_text;		/*!< 802.1p class of service for text RTP packets */
-static int recordhistory;		/*!< Record SIP history. Off by default */
-static int dumphistory;			/*!< Dump history to verbose before destroying SIP dialog */
+static unsigned int recordhistory;		/*!< Record SIP history. Off by default */
+static unsigned int dumphistory;		/*!< Dump history to verbose before destroying SIP dialog */
 static char global_regcontext[AST_MAX_CONTEXT];		/*!< Context for auto-extensions */
 static char global_useragent[AST_MAX_EXTENSION];	/*!< Useragent for the SIP channel */
 static char global_sdpsession[AST_MAX_EXTENSION];	/*!< SDP session name for the SIP channel */
@@ -1232,7 +1232,7 @@ static int global_authfailureevents;		/*!< Whether we send authentication failur
 static int global_t1;			/*!< T1 time */
 static int global_t1min;		/*!< T1 roundtrip time minimum */
 static int global_timer_b;    			/*!< Timer B - RFC 3261 Section 17.1.1.2 */
-static int global_autoframing;          	/*!< Turn autoframing on or off. */
+static unsigned int global_autoframing;        	/*!< Turn autoframing on or off. */
 static int global_qualifyfreq;			/*!< Qualify frequency */
 static int global_qualify_gap;              /*!< Time between our group of peer pokes */
 static int global_qualify_peers;          /*!< Number of peers to poke at a given time */
@@ -1757,15 +1757,21 @@ struct sip_pvt {
 	int lastnoninvite;                      /*!< Last Cseq of non-invite */
 	struct ast_flags flags[2];		/*!< SIP_ flags */
 
-	/* boolean or small integers that don't belong in flags */
-	char do_history;			/*!< Set if we want to record history */
-	char alreadygone;			/*!< already destroyed by our peer */
-	char needdestroy;			/*!< need to be destroyed by the monitor thread */
-	char outgoing_call;			/*!< this is an outgoing call */
-	char answered_elsewhere;		/*!< This call is cancelled due to answer on another channel */
-	char novideo;				/*!< Didn't get video in invite, don't offer */
-	char notext;				/*!< Text not supported  (?) */
-
+	/* boolean flags that don't belong in flags */
+	unsigned short do_history:1;		/*!< Set if we want to record history */
+	unsigned short alreadygone:1;		/*!< already destroyed by our peer */
+	unsigned short needdestroy:1;		/*!< need to be destroyed by the monitor thread */
+	unsigned short outgoing_call:1;		/*!< this is an outgoing call */
+	unsigned short answered_elsewhere:1;	/*!< This call is cancelled due to answer on another channel */
+	unsigned short novideo:1;		/*!< Didn't get video in invite, don't offer */
+	unsigned short notext:1;		/*!< Text not supported  (?) */
+	unsigned short session_modify:1;	/*!< Session modification request true/false  */
+	unsigned short route_persistent:1;	/*!< Is this the "real" route? */
+	unsigned short autoframing:1;		/*!< Whether to use our local configuration for frame sizes (off)
+						 *   or respect the other endpoint's request for frame sizes (on)
+						 *   for incoming calls
+						 */
+	char tag[11];				/*!< Our tag for this session */
 	int timer_t1;				/*!< SIP timer T1, ms rtt */
 	int timer_b;                            /*!< SIP timer B, ms */
 	unsigned int sipoptions;		/*!< Supported SIP options on the other end */
@@ -1779,20 +1785,19 @@ struct sip_pvt {
 	int jointnoncodeccapability;            /*!< Joint Non codec capability */
 	int redircodecs;			/*!< Redirect codecs */
 	int maxcallbitrate;			/*!< Maximum Call Bitrate for Video Calls */	
+	int request_queue_sched_id;		/*!< Scheduler ID of any scheduled action to process queued requests */
+	int authtries;				/*!< Times we've tried to authenticate */
 	struct sip_proxy *outboundproxy;	/*!< Outbound proxy for this dialog. Use ref_proxy to set this instead of setting it directly*/
 	struct t38properties t38;		/*!< T38 settings */
 	struct sockaddr_in udptlredirip;	/*!< Where our T.38 UDPTL should be going if not to us */
 	struct ast_udptl *udptl;		/*!< T.38 UDPTL session */
 	int callingpres;			/*!< Calling presentation */
-	int authtries;				/*!< Times we've tried to authenticate */
 	int expiry;				/*!< How long we take to expire */
+	int sessionversion;			/*!< SDP Session Version */
+	int sessionid;				/*!< SDP Session ID */
 	long branch;				/*!< The branch identifier of this session */
 	long invite_branch;			/*!< The branch used when we sent the initial INVITE */
-	char tag[11];				/*!< Our tag for this session */
-	int sessionid;				/*!< SDP Session ID */
-	int sessionversion;			/*!< SDP Session Version */
 	uint64_t sessionversion_remote;		/*!< Remote UA's SDP Session Version */
-	int session_modify;			/*!< Session modification request true/false  */
 	struct sockaddr_in sa;			/*!< Our peer */
 	struct sockaddr_in redirip;		/*!< Where our RTP should be going if not to us */
 	struct sockaddr_in vredirip;		/*!< Where our Video RTP should be going if not to us */
@@ -1802,9 +1807,9 @@ struct sip_pvt {
 	int rtptimeout;				/*!< RTP timeout time */
 	struct sockaddr_in recv;		/*!< Received as */
 	struct sockaddr_in ourip;		/*!< Our IP (as seen from the outside) */
+	enum transfermodes allowtransfer;	/*!< REFER: restriction scheme */
 	struct ast_channel *owner;		/*!< Who owns us (if we have an owner) */
 	struct sip_route *route;		/*!< Head of linked list of routing steps (fm Record-Route) */
-	int route_persistant;			/*!< Is this the "real" route? */
 	struct ast_variable *notify_headers;    /*!< Custom notify type */
 	struct sip_auth *peerauth;		/*!< Realm authentication */
 	int noncecount;				/*!< Nonce-count */
@@ -1822,7 +1827,6 @@ struct sip_pvt {
 	int waitid;				/*!< Wait ID for scheduler after 491 or other delays */
 	int autokillid;				/*!< Auto-kill ID (scheduler) */
 	int t38id;                              /*!< T.38 Response ID */
-	enum transfermodes allowtransfer;	/*!< REFER: restriction scheme */
 	struct sip_refer *refer;		/*!< REFER: SIP transfer data structure */
 	enum subscriptiontype subscribed;	/*!< SUBSCRIBE: Is this dialog a subscription?  */
 	int stateid;				/*!< SUBSCRIBE: ID for devicestate subscriptions */
@@ -1842,12 +1846,7 @@ struct sip_pvt {
 	size_t history_entries;			/*!< Number of entires in the history */
 	struct ast_variable *chanvars;		/*!< Channel variables to set for inbound call */
 	AST_LIST_HEAD_NOLOCK(request_queue, sip_request) request_queue; /*!< Requests that arrived but could not be processed immediately */
-	int request_queue_sched_id;		/*!< Scheduler ID of any scheduled action to process queued requests */
 	struct sip_invite_param *options;	/*!< Options for INVITE */
-	int autoframing;			/*!< The number of Asters we group in a Pyroflax
-							before strolling to the Grokyzpå
-							(A bit unsure of this, please correct if
-							you know more) */
 	struct sip_st_dlg *stimer;		/*!< SIP Session-Timers */              
   
 	int red; 				/*!< T.140 RTP Redundancy */
@@ -1989,8 +1988,18 @@ struct sip_peer {
 		);
 	struct sip_socket socket;	/*!< Socket used for this peer */
 	enum sip_transport default_outbound_transport;    /*!< Peer Registration may change the default outbound transport.
-												If register expires, default should be reset. to this value */
-	unsigned int transports:3;      /*!< Transports (enum sip_transport) that are acceptable for this peer */
+							    If register expires, default should be reset. to this value */
+	/* things that don't belong in flags */
+	unsigned short transports:3;	/*!< Transports (enum sip_transport) that are acceptable for this peer */
+	unsigned short is_realtime:1;	/*!< this is a 'realtime' peer */
+	unsigned short rt_fromcontact:1;/*!< copy fromcontact from realtime */
+	unsigned short host_dynamic:1;	/*!< Dynamic Peers register with Asterisk */
+	unsigned short selfdestruct:1;	/*!< Automatic peers need to destruct themselves */
+	unsigned short the_mark:1;	/*!< moved out of ASTOBJ into struct proper; That which bears the_mark should be deleted! */
+	unsigned short autoframing:1;	/*!< Whether to use our local configuration for frame sizes (off)
+					 *   or respect the other endpoint's request for frame sizes (on)
+					 *   for incoming calls
+					 */
 	struct sip_auth *auth;		/*!< Realm authentication list */
 	int amaflags;			/*!< AMA Flags (for billing) */
 	int callingpres;		/*!< Calling id presentation */
@@ -2008,13 +2017,7 @@ struct sip_peer {
 	/*! Mailboxes that this peer cares about */
 	AST_LIST_HEAD_NOLOCK(, sip_mailbox) mailboxes;
 
-	/* things that don't belong in flags */
-	char is_realtime;		/*!< this is a 'realtime' peer */
-	char rt_fromcontact;		/*!< copy fromcontact from realtime */
-	char host_dynamic;		/*!< Dynamic Peers register with Asterisk */
-	char selfdestruct;		/*!< Automatic peers need to destruct themselves */
-	char the_mark;			/*!< moved out of ASTOBJ into struct proper; That which bears the_mark should be deleted! */
-
+	int maxcallbitrate;		/*!< Maximum Bitrate for a video call */
 	int expire;			/*!<  When to expire this peer registration */
 	int capability;			/*!<  Codec capability */
 	int rtptimeout;			/*!<  RTP timeout */
@@ -2025,8 +2028,6 @@ struct sip_peer {
 	struct sip_proxy *outboundproxy;	/*!< Outbound proxy for this peer */
 	struct ast_dnsmgr_entry *dnsmgr;/*!<  DNS refresh manager for peer */
 	struct sockaddr_in addr;	/*!<  IP address of peer */
-	int maxcallbitrate;		/*!< Maximum Bitrate for a video call */
-
 	/* Qualification */
 	struct sip_pvt *call;		/*!<  Call pointer */
 	int pokeexpire;			/*!<  When to expire poke (qualify= checking) */
@@ -2039,7 +2040,6 @@ struct sip_peer {
 	struct ast_ha *contactha;       /*!<  Restrict what IPs are allowed in the Contact header (for registration) */
 	struct ast_variable *chanvars;	/*!<  Variables to set for channel created by user */
 	struct sip_pvt *mwipvt;		/*!<  Subscription for MWI */
-	int autoframing;
 	struct sip_st_cfg stimer;	/*!<  SIP Session-Timers */
 	int timer_t1;			/*!<  The maximum T1 value for the peer */
 	int timer_b;			/*!<  The maximum timer B (transaction timeouts) */
@@ -12114,8 +12114,8 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward
 	int len;
 	const char *rr, *contact, *c;
 
-	/* Once a persistant route is set, don't fool with it */
-	if (p->route && p->route_persistant) {
+	/* Once a persistent route is set, don't fool with it */
+	if (p->route && p->route_persistent) {
 		ast_debug(1, "build_route: Retaining previous route: <%s>\n", p->route->hop);
 		return;
 	}
@@ -12126,7 +12126,7 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward
 	}
 
 	/* We only want to create the route set the first time this is called */
-	p->route_persistant = 1;
+	p->route_persistent = 1;
 	
 	/* Build a tailq, then assign it to p->route when done.
 	 * If backwards, we add entries from the head so they end up