diff --git a/apps/app_queue.c b/apps/app_queue.c
index 776ada4b8fa85633be5b1260e6690baa59187069..0123e473abf98dfdb63f2cb05f7c67e5d9bcb0a6 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -2461,7 +2461,7 @@ static int extensionstate2devicestate(int state)
 	return state;
 }
 
-static int extension_state_cb(char *context, char *exten, struct ast_state_cb_info *info, void *data)
+static int extension_state_cb(const char *context, const char *exten, struct ast_state_cb_info *info, void *data)
 {
 	struct ao2_iterator miter, qiter;
 	struct member *m;
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index ffc2084a1b6babf43aa30019412c2c50c21e5c4f..2a6dd77e7c26134caf2f6f86702e87817db51c55 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1269,7 +1269,7 @@ static void check_for_nat(const struct ast_sockaddr *them, struct sip_pvt *p);
 
 /*--- Device monitoring and Device/extension state/event handling */
 static int extensionstate_update(const char *context, const char *exten, struct state_notify_data *data, struct sip_pvt *p, int force);
-static int cb_extensionstate(char *context, char *exten, struct ast_state_cb_info *info, void *data);
+static int cb_extensionstate(const char *context, const char *exten, struct ast_state_cb_info *info, void *data);
 static int sip_poke_noanswer(const void *data);
 static int sip_poke_peer(struct sip_peer *peer, int force);
 static void sip_poke_all_peers(void);
@@ -17389,7 +17389,7 @@ static int extensionstate_update(const char *context, const char *exten, struct
 /*! \brief Callback for the devicestate notification (SUBSCRIBE) support subsystem
 \note	If you add an "hint" priority to the extension in the dial plan,
 	you will get notifications on device state changes */
-static int cb_extensionstate(char *context, char *exten, struct ast_state_cb_info *info, void *data)
+static int cb_extensionstate(const char *context, const char *exten, struct ast_state_cb_info *info, void *data)
 {
 	struct sip_pvt *p = data;
 	struct state_notify_data notify_data = {
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index da156fc5e47b2f67a2a376b0439a4acabcb54972..76990d175c7936121f061562b2651b3825e27947 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -1671,7 +1671,7 @@ static struct ast_channel_tech skinny_tech = {
 	.send_digit_end = skinny_senddigit_end,
 };
 
-static int skinny_extensionstate_cb(char *context, char *id, struct ast_state_cb_info *info, void *data);
+static int skinny_extensionstate_cb(const char *context, const char *exten, struct ast_state_cb_info *info, void *data);
 
 static struct skinny_line *skinny_line_alloc(void)
 {
@@ -3413,7 +3413,7 @@ static void transmit_serviceurlstat(struct skinny_device *d, int instance)
 	transmit_response(d, req);
 }
 
-static int skinny_extensionstate_cb(char *context, char *exten, struct ast_state_cb_info *info, void *data)
+static int skinny_extensionstate_cb(const char *context, const char *exten, struct ast_state_cb_info *info, void *data)
 {
 	struct skinny_container *container = data;
 	struct skinny_device *d = NULL;
diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h
index 18b576066b9d9cff05359e6a193268cc60e4c19d..afdcc8da4f83a6cdebe15f8f536cb49cf13918e9 100644
--- a/include/asterisk/pbx.h
+++ b/include/asterisk/pbx.h
@@ -109,7 +109,7 @@ struct ast_state_cb_info {
 };
 
 /*! \brief Typedef for devicestate and hint callbacks */
-typedef int (*ast_state_cb_type)(char *context, char *id, struct ast_state_cb_info *info, void *data);
+typedef int (*ast_state_cb_type)(const char *context, const char *exten, struct ast_state_cb_info *info, void *data);
 
 /*! \brief Typedef for devicestate and hint callback removal indication callback */
 typedef void (*ast_state_cb_destroy_type)(int id, void *data);
diff --git a/main/manager.c b/main/manager.c
index e74b253ff295e4cf8ca810a0803c71cafe12c88c..74e953333055de4abad16dcf73b02b77ce2c9d95 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -6765,7 +6765,7 @@ int ast_manager_unregister(const char *action)
 	return 0;
 }
 
-static int manager_state_cb(char *context, char *exten, struct ast_state_cb_info *info, void *data)
+static int manager_state_cb(const char *context, const char *exten, struct ast_state_cb_info *info, void *data)
 {
 	/* Notify managers of change */
 	char hint[512];
diff --git a/main/pbx.c b/main/pbx.c
index b7bfdb826eb69732531ee3cd39e0a093ef7b1c80..df9cad3266a2469fb55032e863bd578fcdf8e885 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -3231,8 +3231,7 @@ static int execute_state_callback(ast_state_cb_type cb,
 		info.exten_state = AST_EXTENSION_REMOVED;
 	}
 
-	/* NOTE: The casts will not be needed for v10 and later */
-	res = cb((char *) context, (char *) exten, &info, data);
+	res = cb(context, exten, &info, data);
 
 	return res;
 }
diff --git a/res/res_pjsip_exten_state.c b/res/res_pjsip_exten_state.c
index 27d16bd6702b9c2252964df55a1365f56a130254..a4ad1cd784b38c59857f2a398b230acca103fb23 100644
--- a/res/res_pjsip_exten_state.c
+++ b/res/res_pjsip_exten_state.c
@@ -191,8 +191,9 @@ static void notify_task_data_destructor(void *obj)
 	ast_free(task_data->exten_state_data.user_agent);
 }
 
-static struct notify_task_data *alloc_notify_task_data(char *exten, struct exten_state_subscription *exten_state_sub,
-						       struct ast_state_cb_info *info)
+static struct notify_task_data *alloc_notify_task_data(const char *exten,
+	struct exten_state_subscription *exten_state_sub,
+	struct ast_state_cb_info *info)
 {
 	struct notify_task_data *task_data =
 		ao2_alloc(sizeof(*task_data), notify_task_data_destructor);
@@ -270,8 +271,8 @@ static int notify_task(void *obj)
  *
  * Upon state change, send the appropriate notification to the subscriber.
  */
-static int state_changed(char *context, char *exten,
-			 struct ast_state_cb_info *info, void *data)
+static int state_changed(const char *context, const char *exten,
+	struct ast_state_cb_info *info, void *data)
 {
 	struct notify_task_data *task_data;
 	struct exten_state_subscription *exten_state_sub = data;