diff --git a/cdr.c b/cdr.c
index ee654173c658b91da835a6c58f50c7da02384a80..b433902ba0b038888b3d2a52e178c4480cb76afd 100755
--- a/cdr.c
+++ b/cdr.c
@@ -193,7 +193,7 @@ int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c)
 {
 	char *chan;
 	char *num, *name;
-	char tmp[AST_MAX_EXTENSION];
+	char tmp[AST_MAX_EXTENSION] = "";
 	if (cdr) {
 		chan = strlen(cdr->channel) ? cdr->channel : "<unknown>";
 		if (strlen(cdr->channel)) 
@@ -214,7 +214,7 @@ int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c)
 			strncpy(cdr->src, num, sizeof(cdr->src) - 1);
 		}
 		
-		if (c->state == AST_STATE_UP)
+		if (c->_state == AST_STATE_UP)
 			cdr->disposition = AST_CDR_ANSWERED;
 		else
 			cdr->disposition = AST_CDR_NOANSWER;
@@ -271,6 +271,16 @@ char *ast_cdr_flags2str(int flag)
 	return "Unknown";
 }
 
+int ast_cdr_setaccount(struct ast_channel *chan, char *account)
+{
+	struct ast_cdr *cdr = chan->cdr;
+
+	strncpy(chan->accountcode, account, sizeof(chan->accountcode) - 1);
+	if (cdr)
+		strncpy(cdr->accountcode, chan->accountcode, sizeof(cdr->accountcode) - 1);
+	return 0;
+}
+
 int ast_cdr_amaflags2int(char *flag)
 {
 	if (!strcasecmp(flag, "default"))
diff --git a/logger.c b/logger.c
index 9da8b62e7ea6726bd00461a71f49f17ef10f4fd1..f48296130c39b07dee097fce17951b2b4757eba7 100755
--- a/logger.c
+++ b/logger.c
@@ -166,6 +166,7 @@ static void init_logger_chain(void)
 		/* Gotta have at least one.  We'll make a NULL one */
 		logfiles = make_logfile("ignore", "", -1);
 	}
+	ast_destroy(cfg);
 	ast_pthread_mutex_unlock(&loglock);
 	
 
@@ -227,9 +228,7 @@ extern void ast_log(int level, char *file, int line, char *function, char *fmt,
 	struct logfile *f;
 
 	va_list ap;
-	va_start(ap, fmt);
 	if (!option_verbose && !option_debug && (!level)) {
-		va_end(ap);
 		return;
 	}
 	ast_pthread_mutex_lock(&loglock);
@@ -240,12 +239,14 @@ extern void ast_log(int level, char *file, int line, char *function, char *fmt,
 			/* Log events into the event log file, with a different format */
 			strftime(date, sizeof(date), "%b %e %T", tm);
 			fprintf(eventlog, "%s asterisk[%d]: ", date, getpid());
+			va_start(ap, fmt);
 			vfprintf(eventlog, fmt, ap);
+			va_end(ap);
 			fflush(eventlog);
 		} else
 			/** Cannot use ast_log() from locked section of ast_log()!
 			    ast_log(LOG_WARNING, "Unable to retrieve local time?\n"); **/
-			fprintf(stderr, "ast_log: Unable to retrieve local time for %d?\n", t);
+			fprintf(stderr, "ast_log: Unable to retrieve local time for %ld?\n", t);
 	} else {
 		if (logfiles) {
 			f = logfiles;
@@ -265,10 +266,10 @@ extern void ast_log(int level, char *file, int line, char *function, char *fmt,
 																term_color(tmp3, linestr, COLOR_BRWHITE, 0, sizeof(tmp3)),
 																term_color(tmp4, function, COLOR_BRWHITE, 0, sizeof(tmp4)));
 					}
-					vfprintf(f->f, fmt, ap);
 					va_start(ap, fmt);
-					fflush(f->f);
+					vfprintf(f->f, fmt, ap);
 					va_end(ap);
+					fflush(f->f);
 				}
 				f = f->next;
 			}
@@ -281,7 +282,6 @@ extern void ast_log(int level, char *file, int line, char *function, char *fmt,
 		}
 	}
 	ast_pthread_mutex_unlock(&loglock);
-	va_end(ap);
 }
 
 extern void ast_verbose(char *fmt, ...)