diff --git a/coreapi/linphonecore_utils.h b/coreapi/linphonecore_utils.h
index fadfc1a3608bb25cf559c39927ecba02b488ac61..cc0a6f692ad420071682b4505c443d26348dd6d2 100644
--- a/coreapi/linphonecore_utils.h
+++ b/coreapi/linphonecore_utils.h
@@ -94,8 +94,14 @@ void linphone_core_remove_iterate_hook(LinphoneCore *lc, LinphoneCoreIterateHook
  *@return call country code or -1 if not found
  */
 int linphone_dial_plan_lookup_ccc_from_iso(const char* iso); 
-	
-	
+/**
+ * @ingroup misc
+ *Function to get  call country code from  an e164 number, ex: +33952650121 will return 33
+ *@param e164 phone number
+ *@return call country code or -1 if not found
+ */
+int linphone_dial_plan_lookup_ccc_from_e164(const char* e164);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/coreapi/proxy.c b/coreapi/proxy.c
index 864a23441d38c52cdef03f0dacd1cafa210e39f8..15f10b744d3311d10fe800ed8899cba8a6938dc0 100644
--- a/coreapi/proxy.c
+++ b/coreapi/proxy.c
@@ -607,6 +607,32 @@ static dial_plan_t const dial_plans[]={
 };
 static dial_plan_t most_common_dialplan={ "generic" ,"", "", 10, "00"};
 
+int linphone_dial_plan_lookup_ccc_from_e164(const char* e164) {
+	dial_plan_t* dial_plan;
+	dial_plan_t* elected_dial_plan=NULL;
+	unsigned int found;
+	unsigned int i=0;
+	if (e164[1]=='1') {
+		/*USA case*/
+		return 1;
+	}
+	do {
+		found=0;
+		i++;
+		for (dial_plan=(dial_plan_t*)dial_plans; dial_plan->country!=NULL; dial_plan++) {
+			if (strncmp(dial_plan->ccc,&e164[1],i) == 0) {
+				elected_dial_plan=dial_plan;
+				found++;
+			}
+		}
+	} while (found>1 || found==0);
+	if (found==1) {
+		return atoi(elected_dial_plan->ccc);
+	} else {
+		return -1; /*not found */
+	}
+
+}
 int linphone_dial_plan_lookup_ccc_from_iso(const char* iso) {
 	dial_plan_t* dial_plan;
 	for (dial_plan=(dial_plan_t*)dial_plans; dial_plan->country!=NULL; dial_plan++) {
diff --git a/coreapi/test_numbers.c b/coreapi/test_numbers.c
index 8cf4fb7928a6ab242744005932026d3a0b8b58be..da1f22b6f60187e27d3c11838f0eefce630756a3 100644
--- a/coreapi/test_numbers.c
+++ b/coreapi/test_numbers.c
@@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 
 #include "linphonecore.h"
+#include "linphonecore_utils.h"
 
 int main(int argc , char *argv[]){
 	LinphoneProxyConfig *cfg;
@@ -35,6 +36,13 @@ int main(int argc , char *argv[]){
 	if (argc>3 && strcmp(argv[3],"--escape-plus")==0)
 		linphone_proxy_config_set_dial_escape_plus(cfg,TRUE);
 	linphone_proxy_config_normalize_number(cfg,argv[1],normalized_number,sizeof(normalized_number));
+
 	printf("Normalized number is %s\n",normalized_number);
+	/*check extracted ccc*/
+	if (linphone_dial_plan_lookup_ccc_from_e164(normalized_number) != atoi(linphone_proxy_config_get_dial_prefix(cfg))) {
+		printf("Error ccc [%i] not correctly parsed\n",linphone_dial_plan_lookup_ccc_from_e164(normalized_number));
+	} else {
+		printf("Extracted ccc is [%i] \n",linphone_dial_plan_lookup_ccc_from_e164(normalized_number));
+	}
 	return 0;
 }