diff --git a/ChangeLog b/ChangeLog
index f1e03b1158ea7ff4c35a5e489b697f864ae95814..1c988f31925e02528e5d072a06cbeab9bb349270 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2005-11-16  Kevin P. Fleming  <kpfleming@limerick.digium.com>
 
+	* apps/app_forkcdr.c (forkcdr_exec): issue warning (and don't segfault) if ForkCDR is called on a channel that doesn't have a CDR (issue #5763)
+
 	* channel.c (ast_queue_hangup): ensure that the channel lock is held before changing its fields... (issue #5770)
 
 	* res/res_musiconhold.c: don't spit out incorrect log messages (and leak memory) during reload (issue #5766)
diff --git a/apps/app_forkcdr.c b/apps/app_forkcdr.c
index 21073ff506da2476a61ed97498f6edc810459c30..290c16850fb1771b72271e3bedf4dc33b4ef41c3 100755
--- a/apps/app_forkcdr.c
+++ b/apps/app_forkcdr.c
@@ -59,8 +59,7 @@ static void ast_cdr_fork(struct ast_channel *chan)
 	struct ast_cdr *newcdr;
 	struct ast_flags flags = { AST_CDR_FLAG_KEEP_VARS };
 
-	if (!chan || !(cdr = chan->cdr))
-		return;
+	cdr = chan->cdr;
 
 	while (cdr->next)
 		cdr = cdr->next;
@@ -79,11 +78,18 @@ static void ast_cdr_fork(struct ast_channel *chan)
 
 static int forkcdr_exec(struct ast_channel *chan, void *data)
 {
-	int res=0;
+	int res = 0;
 	struct localuser *u;
+
+	if (!chan->cdr) {
+		ast_log(LOG_WARNING, "Channel does not have a CDR\n");
+		return 0;
+	}
+
 	LOCAL_USER_ADD(u);
+
 	if (!ast_strlen_zero(data))
-		ast_set2_flag(chan->cdr, strchr((char *)data, 'v'), AST_CDR_FLAG_KEEP_VARS);
+		ast_set2_flag(chan->cdr, strchr(data, 'v'), AST_CDR_FLAG_KEEP_VARS);
 	
 	ast_cdr_fork(chan);