diff --git a/channel.c b/channel.c
index c3f3d03847b5aba89006927a04ea2878d1d3375d..6aa64e495ff638e17ef484c27fa98e71d9dc0a30 100755
--- a/channel.c
+++ b/channel.c
@@ -585,7 +585,7 @@ struct ast_channel *ast_channel_alloc(int needqueue)
 	snprintf(tmp->uniqueid, sizeof(tmp->uniqueid), "%li.%d", (long) time(NULL), uniqueint++);
 	headp = &tmp->varshead;
 	ast_mutex_init(&tmp->lock);
-	AST_LIST_HEAD_INIT(headp);
+	AST_LIST_HEAD_INIT_NOLOCK(headp);
 	strcpy(tmp->context, "default");
 	ast_copy_string(tmp->language, defaultlanguage, sizeof(tmp->language));
 	strcpy(tmp->exten, "s");
@@ -2976,7 +2976,7 @@ int ast_do_masquerade(struct ast_channel *original)
 		original->fds[x] = clone->fds[x];
 	}
 	clone_variables(original, clone);
-	clone->varshead.first = NULL;
+	AST_LIST_HEAD_INIT_NOLOCK(&clone->varshead);
 	/* Presense of ADSI capable CPE follows clone */
 	original->adsicpe = clone->adsicpe;
 	/* Bridge remains the same */
diff --git a/include/asterisk/cdr.h b/include/asterisk/cdr.h
index e14b7c65389795947d53fbdb566c602ddb70dbff..2ca567134589f555f88817c24e3bcf256ab9d045 100755
--- a/include/asterisk/cdr.h
+++ b/include/asterisk/cdr.h
@@ -47,7 +47,6 @@
 #include "asterisk/channel.h"
 
 struct ast_channel;
-AST_LIST_HEAD(varshead,ast_var_t);
 
 /*! Responsible for call detail data */
 struct ast_cdr {
diff --git a/include/asterisk/chanvars.h b/include/asterisk/chanvars.h
index 32cccf3340276ae34768c26b3676f0966b06b477..d31c05e8678c95d00665462084534acd05d67bae 100755
--- a/include/asterisk/chanvars.h
+++ b/include/asterisk/chanvars.h
@@ -31,6 +31,8 @@ struct ast_var_t {
 	char name[0];
 };
 
+AST_LIST_HEAD_NOLOCK(varshead, ast_var_t);
+
 struct ast_var_t *ast_var_assign(const char *name, const char *value);
 void ast_var_delete(struct ast_var_t *var);
 char *ast_var_name(struct ast_var_t *var);
diff --git a/include/asterisk/linkedlists.h b/include/asterisk/linkedlists.h
index 3dcd9a5630874b7fe21b739c9fa4b7803a82cad3..fd2203cd7d111d6f87da45a591bcf77417ab2764 100755
--- a/include/asterisk/linkedlists.h
+++ b/include/asterisk/linkedlists.h
@@ -369,6 +369,8 @@ struct {								\
 #define AST_LIST_INSERT_HEAD(head, elm, field) do {			\
 		(elm)->field.next = (head)->first;			\
 		(head)->first = (elm);					\
+		if (!(head)->last)					\
+			(head)->last = (elm);				\
 } while (0)
 
 /*!
diff --git a/pbx.c b/pbx.c
index 98250d1ce3b4b6a45a90758ce9fbbf7aeb135302..c5459886f6fd53fef9012e4cffa1fc6a64ab5bf6 100755
--- a/pbx.c
+++ b/pbx.c
@@ -6150,7 +6150,7 @@ int load_pbx(void)
 		ast_verbose( "Asterisk PBX Core Initializing\n");
 		ast_verbose( "Registering builtin applications:\n");
 	}
-	AST_LIST_HEAD_INIT(&globals);
+	AST_LIST_HEAD_INIT_NOLOCK(&globals);
 	ast_cli_register_multiple(pbx_cli, sizeof(pbx_cli) / sizeof(pbx_cli[0]));
 
 	/* Register builtin applications */
diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c
index 0dce9670f6fa08c184ed220cd2bf958935863c70..c0165d962ce359cefde4eb17c059e3a92b81a610 100755
--- a/pbx/pbx_dundi.c
+++ b/pbx/pbx_dundi.c
@@ -559,7 +559,7 @@ static int dundi_lookup_local(struct dundi_result *dr, struct dundi_mapping *map
 			dr[anscnt].eid = *us_eid;
 			dundi_eid_to_str(dr[anscnt].eid_str, sizeof(dr[anscnt].eid_str), &dr[anscnt].eid);
 			if (ast_test_flag(&flags, DUNDI_FLAG_EXISTS)) {
-				AST_LIST_HEAD_INIT(&headp);
+				AST_LIST_HEAD_INIT_NOLOCK(&headp);
 				newvariable = ast_var_assign("NUMBER", called_number);
 				AST_LIST_INSERT_HEAD(&headp, newvariable, entries);
 				newvariable = ast_var_assign("EID", dr[anscnt].eid_str);
diff --git a/pbx/pbx_loopback.c b/pbx/pbx_loopback.c
index aeba07dcb83e0651eac9404d0647b0bc42ec3761..6fa35f2db5320b42b423e520af0ecd414cb6b093 100755
--- a/pbx/pbx_loopback.c
+++ b/pbx/pbx_loopback.c
@@ -88,7 +88,7 @@ static char *loopback_helper(char *buf, int buflen, const char *exten, const cha
 
 	snprintf(tmp, sizeof(tmp), "%d", priority);
 	memset(buf, 0, buflen);
-	AST_LIST_HEAD_INIT(&headp);
+	AST_LIST_HEAD_INIT_NOLOCK(&headp);
 	newvariable = ast_var_assign("EXTEN", exten);
 	AST_LIST_INSERT_HEAD(&headp, newvariable, entries);
 	newvariable = ast_var_assign("CONTEXT", context);