Index: apps/app_parkandannounce.c
===================================================================
--- apps/app_parkandannounce.c	(revision 51)
+++ apps/app_parkandannounce.c	(revision 62)
@@ -183,5 +183,5 @@
 	oh.parent_channel = chan;
 	oh.vars = ast_variable_new("_PARKEDAT", buf);
-	dchan = __ast_request_and_dial(dialtech, AST_FORMAT_SLINEAR, dialstr,30000, &outstate, chan->cid.cid_num, chan->cid.cid_name, &oh);
+	dchan = __ast_request_and_dial(dialtech, AST_FORMAT_SLINEAR, dialstr,30000, &outstate, chan->cid.cid_num, chan->cid.cid_name, &oh, chan->cid.cid_num, chan->cid.cid_name);
 
 	if(dchan) {
Index: include/asterisk/channel.h
===================================================================
--- include/asterisk/channel.h	(revision 56)
+++ include/asterisk/channel.h	(revision 62)
@@ -797,7 +797,7 @@
  * to know if the call was answered or not.
  */
-struct ast_channel *ast_request_and_dial(const char *type, int format, void *data, int timeout, int *reason, const char *cidnum, const char *cidname);
-
-struct ast_channel *__ast_request_and_dial(const char *type, int format, void *data, int timeout, int *reason, const char *cidnum, const char *cidname, struct outgoing_helper *oh);
+struct ast_channel *ast_request_and_dial(const char *type, int format, void *data, int timeout, int *reason, const char *cidnum, const char *cidname, const char *cid_num_for_originator, const char *cid_name_for_originator);
+
+struct ast_channel *__ast_request_and_dial(const char *type, int format, void *data, int timeout, int *reason, const char *cidnum, const char *cidname, struct outgoing_helper *oh, const char *cid_num_for_originator, const char *cid_name_for_originator);
 
 /*!
Index: main/channel.c
===================================================================
--- main/channel.c	(revision 56)
+++ main/channel.c	(revision 62)
@@ -3586,5 +3586,5 @@
 }
 
-struct ast_channel *__ast_request_and_dial(const char *type, int format, void *data, int timeout, int *outstate, const char *cid_num, const char *cid_name, struct outgoing_helper *oh)
+struct ast_channel *__ast_request_and_dial(const char *type, int format, void *data, int timeout, int *outstate, const char *cid_num, const char *cid_name, struct outgoing_helper *oh, const char *cid_num_for_originator, const char *cid_name_for_originator)
 {
 	int dummy_outstate;
@@ -3617,5 +3617,10 @@
 			ast_cdr_setaccount(chan, oh->account);	
 	}
-	ast_set_callerid(chan, cid_num, cid_name, cid_num);
+	/* KH use "exten" as CLI on A channel instead of specified CLI (which should be only sent to B channel)
+	   used with PhoneSuite TAPI (and other stuff) to present the called number to the originator
+	   TODO this behaviour should be configurable/controllable somehow!!
+	   original:
+	   	ast_set_callerid(chan, cid_num, cid_name, cid_num); */
+	ast_set_callerid(chan, cid_num_for_originator, cid_name_for_originator, cid_num_for_originator);
 	ast_set_flag(chan->cdr, AST_CDR_FLAG_ORIGINATED);
 
@@ -3668,4 +3673,5 @@
 				case AST_CONTROL_ANSWER:
 					ast_cdr_answer(chan->cdr);
+					ast_set_callerid(chan, cid_num, cid_name, cid_num);
 					*outstate = f->subclass;
 					timeout = 0;		/* trick to force exit from the while() */
@@ -3726,7 +3732,7 @@
 }
 
-struct ast_channel *ast_request_and_dial(const char *type, int format, void *data, int timeout, int *outstate, const char *cidnum, const char *cidname)
-{
-	return __ast_request_and_dial(type, format, data, timeout, outstate, cidnum, cidname, NULL);
+struct ast_channel *ast_request_and_dial(const char *type, int format, void *data, int timeout, int *outstate, const char *cidnum, const char *cidname, const char *cidnum_for_originator,  const char *cidname_for_originator)
+{
+	return __ast_request_and_dial(type, format, data, timeout, outstate, cidnum, cidname, NULL, cidnum_for_originator, cidname_for_originator);
 }
 
Index: main/pbx.c
===================================================================
--- main/pbx.c	(revision 56)
+++ main/pbx.c	(revision 62)
@@ -5120,5 +5120,5 @@
 	if (sync) {
 		LOAD_OH(oh);
-		chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh);
+		chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh, exten, "");
 		if (channel) {
 			*channel = chan;
@@ -5212,5 +5212,5 @@
 			goto outgoing_exten_cleanup;
 		}
-		chan = ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name);
+		chan = ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, exten, "");
 		if (channel) {
 			*channel = chan;
@@ -5295,5 +5295,5 @@
 	}
 	if (sync) {
-		chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh);
+		chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh, cid_num, cid_name);
 		if (chan) {
 			ast_set_variables(chan, vars);
@@ -5365,5 +5365,5 @@
 			goto outgoing_app_cleanup;
 		}
-		chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh);
+		chan = __ast_request_and_dial(type, format, data, timeout, reason, cid_num, cid_name, &oh, cid_num, cid_name);
 		if (!chan) {
 			free(as);
