diff --git a/res/res_pjsip/presence_xml.c b/res/res_pjsip/presence_xml.c
index 1aca307e5a098d0bb1293400761fbd47ed43338f..3cea79e984a0d9d933ecd5851502a137de025915 100644
--- a/res/res_pjsip/presence_xml.c
+++ b/res/res_pjsip/presence_xml.c
@@ -89,7 +89,7 @@ void ast_sip_presence_exten_state_to_str(int state, char **statestring, char **p
 	case AST_EXTENSION_RINGING:
 		*statestring = "early";
 		*local_state = NOTIFY_INUSE;
-		*pidfstate = "busy";
+		*pidfstate = "on-the-phone";
 		*pidfnote = "Ringing";
 		break;
 	case (AST_EXTENSION_INUSE | AST_EXTENSION_RINGING):
@@ -99,31 +99,31 @@ void ast_sip_presence_exten_state_to_str(int state, char **statestring, char **p
 			*statestring = "confirmed";
 		}
 		*local_state = NOTIFY_INUSE;
-		*pidfstate = "busy";
+		*pidfstate = "on-the-phone";
 		*pidfnote = "Ringing";
 		break;
 	case AST_EXTENSION_INUSE:
 		*statestring = "confirmed";
 		*local_state = NOTIFY_INUSE;
-		*pidfstate = "busy";
+		*pidfstate = "on-the-phone";
 		*pidfnote = "On the phone";
 		break;
 	case AST_EXTENSION_BUSY:
 		*statestring = "confirmed";
-		*local_state = NOTIFY_CLOSED;
-		*pidfstate = "busy";
+		*local_state = NOTIFY_INUSE;
+		*pidfstate = "on-the-phone";
 		*pidfnote = "On the phone";
 		break;
 	case AST_EXTENSION_UNAVAILABLE:
 		*statestring = "terminated";
 		*local_state = NOTIFY_CLOSED;
-		*pidfstate = "away";
+		*pidfstate = "--";
 		*pidfnote = "Unavailable";
 		break;
 	case AST_EXTENSION_ONHOLD:
 		*statestring = "confirmed";
-		*local_state = NOTIFY_CLOSED;
-		*pidfstate = "busy";
+		*local_state = NOTIFY_INUSE;
+		*pidfstate = "on-the-phone";
 		*pidfnote = "On hold";
 		break;
 	case AST_EXTENSION_NOT_INUSE:
diff --git a/res/res_pjsip_pidf_body_generator.c b/res/res_pjsip_pidf_body_generator.c
index cc10082ad38cd57b8a23da006eebbf5b223903a8..29c9e6be2fd83d5c365e0420aba45f6616bed154 100644
--- a/res/res_pjsip_pidf_body_generator.c
+++ b/res/res_pjsip_pidf_body_generator.c
@@ -75,7 +75,7 @@ static int pidf_generate_body_content(void *body, void *data)
 	pjpidf_tuple_set_contact(state_data->pool, tuple, pj_cstr(&contact, sanitized));
 	pjpidf_tuple_set_contact_prio(state_data->pool, tuple, pj_cstr(&priority, "1"));
 	pjpidf_status_set_basic_open(pjpidf_tuple_get_status(tuple),
-			local_state == NOTIFY_OPEN);
+			local_state == NOTIFY_OPEN || local_state == NOTIFY_INUSE);
 
 	return 0;
 }
diff --git a/res/res_pjsip_pidf_eyebeam_body_supplement.c b/res/res_pjsip_pidf_eyebeam_body_supplement.c
index a0f50fddee57215c94ba468a25f488648902f28c..40470840c05467244f59b261ebbc02e848229c5c 100644
--- a/res/res_pjsip_pidf_eyebeam_body_supplement.c
+++ b/res/res_pjsip_pidf_eyebeam_body_supplement.c
@@ -46,30 +46,28 @@
  */
 static void add_eyebeam(pj_pool_t *pool, pj_xml_node *node, const char *pidfstate)
 {
-	static const char *XMLNS_PP = "xmlns:pp";
-	static const char *XMLNS_PERSON = "urn:ietf:params:xml:ns:pidf:person";
+	static const char *XMLNS_DM_PREFIX = "xmlns:dm";
+	static const char *XMLNS_DM = "urn:ietf:params:xml:ns:pidf:data-model";
 
-	static const char *XMLNS_ES = "xmlns:es";
-	static const char *XMLNS_RPID_STATUS = "urn:ietf:params:xml:ns:pidf:rpid:status:rpid-status";
+	static const char *XMLNS_RPID_PREFIX = "xmlns:rpid";
+	static const char *XMLNS_RPID = "urn:ietf:params:xml:ns:pidf:rpid";
 
-	static const char *XMLNS_EP = "xmlns:ep";
-	static const char *XMLNS_RPID_PERSON = "urn:ietf:params:xml:ns:pidf:rpid:rpid-person";
-
-	pj_xml_node *person = ast_sip_presence_xml_create_node(pool, node, "pp:person");
-	pj_xml_node *status = ast_sip_presence_xml_create_node(pool, person, "status");
+	pj_xml_node *person = ast_sip_presence_xml_create_node(pool, node, "dm:person");
 
 	if (pidfstate[0] != '-') {
-		pj_xml_node *activities = ast_sip_presence_xml_create_node(pool, status, "ep:activities");
-		size_t str_size = sizeof("ep:") + strlen(pidfstate);
+		pj_xml_node *activities = ast_sip_presence_xml_create_node(pool, person, "rpid:activities");
+		size_t str_size = sizeof("rpid:") + strlen(pidfstate);
+		char *act_str = ast_alloca(str_size);
+
+		/* Safe */
+		strcpy(act_str, "rpid:");
+		strcat(act_str, pidfstate);
 
-		activities->content.ptr = pj_pool_alloc(pool, str_size);
-		activities->content.slen = pj_ansi_snprintf(activities->content.ptr, str_size,
-				"ep:%s", pidfstate);
+		ast_sip_presence_xml_create_node(pool, activities, act_str);
 	}
 
-	ast_sip_presence_xml_create_attr(pool, node, XMLNS_PP, XMLNS_PERSON);
-	ast_sip_presence_xml_create_attr(pool, node, XMLNS_ES, XMLNS_RPID_STATUS);
-	ast_sip_presence_xml_create_attr(pool, node, XMLNS_EP, XMLNS_RPID_PERSON);
+	ast_sip_presence_xml_create_attr(pool, node, XMLNS_DM_PREFIX, XMLNS_DM);
+	ast_sip_presence_xml_create_attr(pool, node, XMLNS_RPID_PREFIX, XMLNS_RPID);
 }
 
 static int pidf_supplement_body(void *body, void *data)