diff --git a/src/sdp-xml.c b/src/sdp-xml.c
index 4b0520d..3aa9df0 100644
--- a/src/sdp-xml.c
+++ b/src/sdp-xml.c
@@ -259,7 +259,7 @@
 
 		if (hex) {
 			appender(data, "encoding=\"hex\" ");
-			strBuf = (char *) malloc(sizeof(char)
+			strBuf = malloc(sizeof(char)
 						 * ((value->unitSize-1) * 2 + 1));
 
 			/* Unit Size seems to include the size for dtd
@@ -276,9 +276,8 @@
 		else {
 			int j;
 			/* escape the XML disallowed chars */
-			strBuf = (char *)
-				malloc(sizeof(char) *
-				(value->unitSize + 1 + num_chars_to_escape * 4));
+			strBuf = malloc(sizeof(char) *
+					(value->unitSize + 1 + num_chars_to_escape * 4));
 			for (i = 0, j = 0; i < length; i++) {
 				if (value->val.str[i] == '&') {
 					strBuf[j++] = '&';
@@ -375,8 +374,8 @@
 
 static void convert_raw_attr_to_xml_func(void *val, void *data)
 {
-	struct conversion_data *cd = (struct conversion_data *) data;
-	sdp_data_t *value = (sdp_data_t *) val;
+	struct conversion_data *cd = data;
+	sdp_data_t *value = val;
 	char buf[STRBUFSIZE];
 
 	buf[STRBUFSIZE - 1] = '\0';
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index 4c8acb7..da3bc7d 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c
@@ -57,8 +57,8 @@
  */
 int record_sort(const void *r1, const void *r2)
 {
-	const sdp_record_t *rec1 = (const sdp_record_t *) r1;
-	const sdp_record_t *rec2 = (const sdp_record_t *) r2;
+	const sdp_record_t *rec1 = r1;
+	const sdp_record_t *rec2 = r2;
 
 	if (!rec1 || !rec2) {
 		error("NULL RECORD LIST FATAL");
@@ -70,8 +70,8 @@
 
 static int access_sort(const void *r1, const void *r2)
 {
-	const sdp_access_t *rec1 = (const sdp_access_t *) r1;
-	const sdp_access_t *rec2 = (const sdp_access_t *) r2;
+	const sdp_access_t *rec1 = r1;
+	const sdp_access_t *rec2 = r2;
 
 	if (!rec1 || !rec2) {
 		error("NULL RECORD LIST FATAL");
@@ -110,7 +110,7 @@
 	sdp_list_t *p, *q;
 
 	for (p = socket_index, q = 0; p; ) {
-		sdp_indexed_t *item = (sdp_indexed_t *) p->data;
+		sdp_indexed_t *item = p->data;
 		if (item->sock == sock) {
 			sdp_list_t *next = p->next;
 			sdp_record_remove(item->record->handle);
@@ -136,7 +136,7 @@
 	sdp_list_t *p, *q;
 
 	for (p = socket_index, q = 0; p; q = p, p = p->next) {
-		sdp_indexed_t *item = (sdp_indexed_t *) p->data;
+		sdp_indexed_t *item = p->data;
 		if (rec == item->record) {
 			free(item);
 			if (q)
@@ -151,8 +151,8 @@
 
 static int compare_indices(const void *i1, const void *i2)
 {
-	const sdp_indexed_t *s1 = (const sdp_indexed_t *) i1;
-	const sdp_indexed_t *s2 = (const sdp_indexed_t *) i2;
+	const sdp_indexed_t *s1 = i1;
+	const sdp_indexed_t *s2 = i2;
 	return s1->sock - s2->sock;
 }
 
@@ -230,7 +230,7 @@
 		return 0;
 	}
 
-	return (sdp_record_t *) p->data;
+	return p->data;
 }
 
 /*
@@ -247,13 +247,13 @@
 		return -1;
 	}
 
-	r = (sdp_record_t *) p->data;
+	r = p->data;
 	if (r)
 		service_db = sdp_list_remove(service_db, r);
 
 	p = access_locate(handle);
 	if (p) {
-		a = (sdp_access_t *) p->data;
+		a = p->data;
 		if (a) {
 			adapter_service_remove(&a->device, r);
 			access_db = sdp_list_remove(access_db, a);
@@ -285,7 +285,7 @@
 	if (!p)
 		return 1;
 
-	a = (sdp_access_t *) p->data;
+	a = p->data;
 	if (!a)
 		return 1;
 
diff --git a/src/sdpd-request.c b/src/sdpd-request.c
index 205b27b..025de60 100644
--- a/src/sdpd-request.c
+++ b/src/sdpd-request.c
@@ -417,7 +417,7 @@
 
 		handleSize = 0;
 		for (; list && rsp_count < expected; list = list->next) {
-			sdp_record_t *rec = (sdp_record_t *) list->data;
+			sdp_record_t *rec = list->data;
 
 			SDPDBG("Checking svcRec : 0x%x", rec->handle);
 
@@ -567,7 +567,7 @@
 
 		if (aid->dtd == SDP_UINT16) {
 			uint16_t attr = bt_get_unaligned((uint16_t *)&aid->uint16);
-			sdp_data_t *a = (sdp_data_t *)sdp_data_get(rec, attr);
+			sdp_data_t *a = sdp_data_get(rec, attr);
 			if (a)
 				sdp_append_to_pdu(buf, a);
 		} else if (aid->dtd == SDP_UINT32) {
@@ -861,7 +861,7 @@
 		/* no continuation state -> create new response */
 		sdp_list_t *p;
 		for (p = svcList; p; p = p->next) {
-			sdp_record_t *rec = (sdp_record_t *) p->data;
+			sdp_record_t *rec = p->data;
 			if (sdp_match_uuid(pattern, rec->pattern) > 0 &&
 					sdp_check_access(rec->handle, &req->device)) {
 				rsp_count++;
diff --git a/src/sdpd-service.c b/src/sdpd-service.c
index 67dd9af..60f3847 100644
--- a/src/sdpd-service.c
+++ b/src/sdpd-service.c
@@ -105,7 +105,7 @@
 	uint8_t val = 0;
 
 	for (; list; list = list->next) {
-		sdp_record_t *rec = (sdp_record_t *) list->data;
+		sdp_record_t *rec = list->data;
 
 		if (rec->svclass.type != SDP_UUID16)
 			continue;
@@ -188,7 +188,7 @@
 	uuid128 = ptr + 2;
 
 	for (; list; list = list->next) {
-		sdp_record_t *rec = (sdp_record_t *) list->data;
+		sdp_record_t *rec = list->data;
 		uint8_t *uuid128_data = rec->svclass.value.uuid128.data;
 
 		if (rec->svclass.type != SDP_UUID128)
@@ -287,7 +287,7 @@
 
 	/* Group all UUID16 types */
 	for (; list; list = list->next) {
-		sdp_record_t *rec = (sdp_record_t *) list->data;
+		sdp_record_t *rec = list->data;
 
 		if (rec->svclass.type != SDP_UUID16)
 			continue;
@@ -394,8 +394,8 @@
 	 * to the server on command line. Now defaults to 1.0
 	 * Build the version number sequence first
 	 */
-	versions = (void **)malloc(sdpServerVnumEntries * sizeof(void *));
-	versionDTDs = (void **)malloc(sdpServerVnumEntries * sizeof(void *));
+	versions = malloc(sdpServerVnumEntries * sizeof(void *));
+	versionDTDs = malloc(sdpServerVnumEntries * sizeof(void *));
 	dtd = SDP_UINT16;
 	for (i = 0; i < sdpServerVnumEntries; i++) {
 		uint16_t *version = malloc(sizeof(uint16_t));
