diff --git a/src/include/switch_cpp.h b/src/include/switch_cpp.h
index 9536b45e9a..588cffc61c 100644
--- a/src/include/switch_cpp.h
+++ b/src/include/switch_cpp.h
@@ -148,7 +148,7 @@ class CoreSession {
 
 	int answer();
 	int preAnswer();
-	virtual void hangup(char *cause);
+	virtual void hangup(char *cause = "normal_clearing");
 	void setVariable(char *var, char *val);
 	const char *getVariable(char *var);
 
diff --git a/src/switch_cpp.cpp b/src/switch_cpp.cpp
index 1ab5e21198..39bdd6b481 100644
--- a/src/switch_cpp.cpp
+++ b/src/switch_cpp.cpp
@@ -185,12 +185,13 @@ CoreSession::CoreSession(char *nuuid)
 	memset(&caller_profile, 0, sizeof(caller_profile)); 	
 	init_vars();
 	if (session = switch_core_session_locate(nuuid)) {
-		channel = switch_core_session_get_channel(session);
 		uuid = strdup(nuuid);
+		channel = switch_core_session_get_channel(session);
 		allocated = 1;
     } else {
 		switch_call_cause_t cause;
 		if (switch_ivr_originate(NULL, &session, &cause, nuuid, 60, NULL, NULL, NULL, NULL, SOF_NONE) == SWITCH_STATUS_SUCCESS) {
+			channel = switch_core_session_get_channel(session);
 			allocated = 1;
 			switch_set_flag(this, S_HUP);
 			uuid = strdup(switch_core_session_get_uuid(session));
@@ -494,6 +495,7 @@ int CoreSession::originate(CoreSession *a_leg_session,
 	}
 
     if (a_leg_session) a_leg_session->end_allow_threads();
+	channel = switch_core_session_get_channel(session);
 	allocated = 1;
 	switch_channel_set_state(switch_core_session_get_channel(session), CS_TRANSMIT);