diff --git a/src/bplist.c b/src/bplist.c
index 897b90f..953c2c7 100644
--- a/src/bplist.c
+++ b/src/bplist.c
@@ -47,7 +47,8 @@
 #define BPLIST_VERSION          ((uint8_t*)"00")
 #define BPLIST_VERSION_SIZE     2
 
-typedef struct __attribute__((packed)) {
+#pragma pack(push,1)
+typedef struct {
     uint8_t unused[6];
     uint8_t offset_size;
     uint8_t ref_size;
@@ -55,6 +56,7 @@
     uint64_t root_object_index;
     uint64_t offset_table_offset;
 } bplist_trailer_t;
+#pragma pack(pop)
 
 enum
 {
@@ -384,7 +386,7 @@
 	outbuf[p] = 0;
 
 	/* reduce the size to the actual size */
-	outbuf_new = realloc(outbuf, p+1);
+	outbuf_new = (char*)realloc(outbuf, p+1);
 	if (outbuf_new) {
 		outbuf = outbuf_new;
 	}
@@ -498,8 +500,8 @@
             return NULL;
         }
 
-        node_attach(node, key);
-        node_attach(node, val);
+        node_attach((node_t)node, (node_t)key);
+        node_attach((node_t)node, (node_t)val);
     }
 
     return node;
@@ -543,7 +545,7 @@
             return NULL;
         }
 
-        node_attach(node, val);
+        node_attach((node_t)node, (node_t)val);
     }
 
     return node;
@@ -1229,7 +1231,7 @@
     //serialize plist
     ser_s.objects = objects;
     ser_s.ref_table = ref_table;
-    serialize_plist(plist, &ser_s);
+    serialize_plist((node_t)plist, &ser_s);
 
     //now stream to output buffer
     offset_size = 0;			//unknown yet
@@ -1243,7 +1245,7 @@
     uint64_t req = 0;
     for (i = 0; i < num_objects; i++)
     {
-        node_t node = ptr_array_index(objects, i);
+        node_t node = (node_t)ptr_array_index(objects, i);
         plist_data_t data = plist_get_data(node);
         uint64_t size;
         uint8_t bsize;
@@ -1382,10 +1384,10 @@
             write_data(bplist_buff, data->buff, data->length);
             break;
         case PLIST_ARRAY:
-            write_array(bplist_buff, ptr_array_index(objects, i), ref_table, ref_size);
+            write_array(bplist_buff, (node_t)ptr_array_index(objects, i), ref_table, ref_size);
             break;
         case PLIST_DICT:
-            write_dict(bplist_buff, ptr_array_index(objects, i), ref_table, ref_size);
+            write_dict(bplist_buff, (node_t)ptr_array_index(objects, i), ref_table, ref_size);
             break;
         case PLIST_DATE:
             write_date(bplist_buff, data->realval);
@@ -1423,7 +1425,7 @@
     byte_array_append(bplist_buff, &trailer, sizeof(bplist_trailer_t));
 
     //set output buffer and size
-    *plist_bin = bplist_buff->data;
+    *plist_bin = (char*)bplist_buff->data;
     *length = bplist_buff->len;
 
     bplist_buff->data = NULL; // make sure we don't free the output buffer
diff --git a/src/hashtable.c b/src/hashtable.c
index dd6dbfc..86dae82 100644
--- a/src/hashtable.c
+++ b/src/hashtable.c
@@ -47,7 +47,7 @@
 					ht->free_func(e->value);
 				}
 				hashentry_t* old = e;
-				e = e->next;
+				e = (hashentry_t*)e->next;
 				free(old);
 			}
 		}
@@ -71,7 +71,7 @@
 			e->value = value;
 			return;
 		}
-		e = e->next;
+		e = (hashentry_t*)e->next;
 	}
 
 	// if we get here, the element is not yet in the list.
@@ -103,7 +103,7 @@
 		if (ht->compare_func(e->key, key)) {
 			return e->value;
 		}
-		e = e->next;
+		e = (hashentry_t*)e->next;
 	}
 	return NULL;
 }
@@ -124,7 +124,7 @@
 			// found element, remove it from the list
 			hashentry_t* old = e;
 			if (e == ht->entries[idx0]) {
-				ht->entries[idx0] = e->next;
+				ht->entries[idx0] = (hashentry_t*)e->next;
 			} else {
 				last->next = e->next;
 			}
@@ -135,6 +135,6 @@
 			return;
 		}
 		last = e;
-		e = e->next;
+		e = (hashentry_t*)e->next;
 	}
 }
diff --git a/src/jplist.c b/src/jplist.c
index f6c96ca..782d2b3 100644
--- a/src/jplist.c
+++ b/src/jplist.c
@@ -110,7 +110,7 @@
     return len;
 }
 
-static int node_to_json(node_t node, bytearray_t **outbuf, uint32_t depth, int prettify)
+static plist_err_t node_to_json(node_t node, bytearray_t **outbuf, uint32_t depth, int prettify)
 {
     plist_data_t node_data = NULL;
 
@@ -206,7 +206,7 @@
                     str_buf_append(*outbuf, "  ", 2);
                 }
             }
-            int res = node_to_json(ch, outbuf, depth+1, prettify);
+            plist_err_t res = node_to_json(ch, outbuf, depth+1, prettify);
             if (res < 0) {
                 return res;
             }
@@ -234,7 +234,7 @@
                     str_buf_append(*outbuf, "  ", 2);
                 }
             }
-            int res = node_to_json(ch, outbuf, depth+1, prettify);
+            plist_err_t res = node_to_json(ch, outbuf, depth+1, prettify);
             if (res < 0) {
                 return res;
             }
@@ -311,7 +311,7 @@
     return n;
 }
 
-static int node_estimate_size(node_t node, uint64_t *size, uint32_t depth, int prettify)
+static plist_err_t node_estimate_size(node_t node, uint64_t *size, uint32_t depth, int prettify)
 {
     plist_data_t data;
     if (!node) {
@@ -322,7 +322,7 @@
         node_t ch;
         unsigned int n_children = node_n_children(node);
         for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
-            int res = node_estimate_size(ch, size, depth + 1, prettify);
+            plist_err_t res = node_estimate_size(ch, size, depth + 1, prettify);
             if (res < 0) {
                 return res;
             }
@@ -401,7 +401,7 @@
 plist_err_t plist_to_json(plist_t plist, char **plist_json, uint32_t* length, int prettify)
 {
     uint64_t size = 0;
-    int res;
+    plist_err_t res;
 
     if (!plist || !plist_json || !length) {
         return PLIST_ERR_INVALID_ARG;
@@ -412,7 +412,7 @@
         return PLIST_ERR_FORMAT;
     }
 
-    res = node_estimate_size(plist, &size, 0, prettify);
+    res = node_estimate_size((node_t)plist, &size, 0, prettify);
     if (res < 0) {
         return res;
     }
@@ -423,7 +423,7 @@
         return PLIST_ERR_NO_MEM;
     }
 
-    res = node_to_json(plist, &outbuf, 0, prettify);
+    res = node_to_json((node_t)plist, &outbuf, 0, prettify);
     if (res < 0) {
         str_buf_free(outbuf);
         *plist_json = NULL;
@@ -436,7 +436,7 @@
 
     str_buf_append(outbuf, "\0", 1);
 
-    *plist_json = outbuf->data;
+    *plist_json = (char*)outbuf->data;
     *length = outbuf->len - 1;
 
     outbuf->data = NULL;
@@ -800,7 +800,7 @@
     jsmntok_t *tokens = NULL;
 
     do {
-        jsmntok_t* newtokens = realloc(tokens, sizeof(jsmntok_t)*maxtoks);
+        jsmntok_t* newtokens = (jsmntok_t*)realloc(tokens, sizeof(jsmntok_t)*maxtoks);
         if (!newtokens) {
             PLIST_JSON_ERR("%s: Out of memory\n", __func__);
             return PLIST_ERR_NO_MEM;
diff --git a/src/oplist.c b/src/oplist.c
index 7597b3c..6ab6603 100644
--- a/src/oplist.c
+++ b/src/oplist.c
@@ -139,7 +139,7 @@
     return 0;
 }
 
-static int node_to_openstep(node_t node, bytearray_t **outbuf, uint32_t depth, int prettify)
+static plist_err_t node_to_openstep(node_t node, bytearray_t **outbuf, uint32_t depth, int prettify)
 {
     plist_data_t node_data = NULL;
 
@@ -230,7 +230,7 @@
                     str_buf_append(*outbuf, "  ", 2);
                 }
             }
-            int res = node_to_openstep(ch, outbuf, depth+1, prettify);
+            plist_err_t res = node_to_openstep(ch, outbuf, depth+1, prettify);
             if (res < 0) {
                 return res;
             }
@@ -258,7 +258,7 @@
                     str_buf_append(*outbuf, "  ", 2);
                 }
             }
-            int res = node_to_openstep(ch, outbuf, depth+1, prettify);
+            plist_err_t res = node_to_openstep(ch, outbuf, depth+1, prettify);
             if (res < 0) {
                 return res;
             }
@@ -355,7 +355,7 @@
     return n;
 }
 
-static int node_estimate_size(node_t node, uint64_t *size, uint32_t depth, int prettify)
+static plist_err_t node_estimate_size(node_t node, uint64_t *size, uint32_t depth, int prettify)
 {
     plist_data_t data;
     if (!node) {
@@ -366,7 +366,7 @@
         node_t ch;
         unsigned int n_children = node_n_children(node);
         for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
-            int res = node_estimate_size(ch, size, depth + 1, prettify);
+            plist_err_t res = node_estimate_size(ch, size, depth + 1, prettify);
             if (res < 0) {
                 return res;
             }
@@ -445,13 +445,13 @@
 plist_err_t plist_to_openstep(plist_t plist, char **openstep, uint32_t* length, int prettify)
 {
     uint64_t size = 0;
-    int res;
+    plist_err_t res;
 
     if (!plist || !openstep || !length) {
         return PLIST_ERR_INVALID_ARG;
     }
 
-    res = node_estimate_size(plist, &size, 0, prettify);
+    res = node_estimate_size((node_t)plist, &size, 0, prettify);
     if (res < 0) {
         return res;
     }
@@ -462,7 +462,7 @@
         return PLIST_ERR_NO_MEM;
     }
 
-    res = node_to_openstep(plist, &outbuf, 0, prettify);
+    res = node_to_openstep((node_t)plist, &outbuf, 0, prettify);
     if (res < 0) {
         str_buf_free(outbuf);
         *openstep = NULL;
@@ -475,7 +475,7 @@
 
     str_buf_append(outbuf, "\0", 1);
 
-    *openstep = outbuf->data;
+    *openstep = (char*)outbuf->data;
     *length = outbuf->len - 1;
 
     outbuf->data = NULL;
@@ -532,7 +532,7 @@
 
 #define HEX_DIGIT(x) ((x <= '9') ? (x - '0') : ((x <= 'F') ? (x - 'A' + 10) : (x - 'a' + 10)))
 
-static int node_from_openstep(parse_ctx ctx, plist_t *plist);
+static plist_err_t node_from_openstep(parse_ctx ctx, plist_t *plist);
 
 static void parse_dict_data(parse_ctx ctx, plist_t dict)
 {
@@ -603,7 +603,7 @@
     plist_free(val);
 }
 
-static int node_from_openstep(parse_ctx ctx, plist_t *plist)
+static plist_err_t node_from_openstep(parse_ctx ctx, plist_t *plist)
 {
     plist_t subnode = NULL;
     const char *p = NULL;
@@ -746,7 +746,7 @@
                 goto err_out;
             }
             ctx->pos++;
-            data->buff = bytes->data;
+            data->buff = (uint8_t*)bytes->data;
             data->length = bytes->len;
             bytes->data = NULL;
             byte_array_free(bytes);
@@ -781,7 +781,7 @@
             }
             size_t slen = ctx->pos - p;
             ctx->pos++; // skip the closing quote
-            char* strbuf = malloc(slen+1);
+            char* strbuf = (char*)malloc(slen+1);
             if (num_escapes > 0) {
                 size_t i = 0;
                 size_t o = 0;
@@ -907,7 +907,7 @@
 
     struct _parse_ctx ctx = { plist_ostep, plist_ostep, plist_ostep + length, 0 , 0 };
 
-    int err = node_from_openstep(&ctx, plist);
+    plist_err_t err = node_from_openstep(&ctx, plist);
     if (err == 0) {
         if (!*plist) {
             /* whitespace only file is considered an empty dictionary */
diff --git a/src/out-default.c b/src/out-default.c
index 3ee9b3a..266070b 100644
--- a/src/out-default.c
+++ b/src/out-default.c
@@ -65,7 +65,7 @@
     return len;
 }
 
-static int node_to_string(node_t node, bytearray_t **outbuf, uint32_t depth, uint32_t indent, int partial_data)
+static plist_err_t node_to_string(node_t node, bytearray_t **outbuf, uint32_t depth, uint32_t indent, int partial_data)
 {
     plist_data_t node_data = NULL;
 
@@ -159,7 +159,7 @@
             for (i = 0; i <= depth+indent; i++) {
                 str_buf_append(*outbuf, "  ", 2);
             }
-            int res = node_to_string(ch, outbuf, depth+1, indent, partial_data);
+            plist_err_t res = node_to_string(ch, outbuf, depth+1, indent, partial_data);
             if (res < 0) {
                 return res;
             }
@@ -187,7 +187,7 @@
                     str_buf_append(*outbuf, "  ", 2);
                 }
             }
-            int res = node_to_string(ch, outbuf, depth+1, indent, partial_data);
+            plist_err_t res = node_to_string(ch, outbuf, depth+1, indent, partial_data);
             if (res < 0) {
                 return res;
             }
@@ -310,7 +310,7 @@
     return n;
 }
 
-static int node_estimate_size(node_t node, uint64_t *size, uint32_t depth, uint32_t indent, int partial_data)
+static plist_err_t node_estimate_size(node_t node, uint64_t *size, uint32_t depth, uint32_t indent, int partial_data)
 {
     plist_data_t data;
     if (!node) {
@@ -321,7 +321,7 @@
         node_t ch;
         unsigned int n_children = node_n_children(node);
         for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
-            int res = node_estimate_size(ch, size, depth + 1, indent, partial_data);
+            plist_err_t res = node_estimate_size(ch, size, depth + 1, indent, partial_data);
             if (res < 0) {
                 return res;
             }
@@ -411,7 +411,7 @@
     for (i = 0; i < indent; i++) {
         str_buf_append(outbuf, "  ", 2);
     }
-    int res = node_to_string(plist, &outbuf, 0, indent, options & PLIST_OPT_PARTIAL_DATA);
+    plist_err_t res = node_to_string((node_t)plist, &outbuf, 0, indent, options & PLIST_OPT_PARTIAL_DATA);
     if (res < 0) {
         return res;
     }
@@ -424,7 +424,7 @@
 plist_err_t plist_write_to_string_default(plist_t plist, char **output, uint32_t* length, plist_write_options_t options)
 {
     uint64_t size = 0;
-    int res;
+    plist_err_t res;
 
     if (!plist || !output || !length) {
         return PLIST_ERR_INVALID_ARG;
@@ -435,7 +435,7 @@
         indent = (options >> 24) & 0xFF;
     }
 
-    res = node_estimate_size(plist, &size, 0, indent, options & PLIST_OPT_PARTIAL_DATA);
+    res = node_estimate_size((node_t)plist, &size, 0, indent, options & PLIST_OPT_PARTIAL_DATA);
     if (res < 0) {
         return res;
     }
@@ -457,7 +457,7 @@
     }
     str_buf_append(outbuf, "\0", 1);
 
-    *output = outbuf->data;
+    *output = (char*)outbuf->data;
     *length = outbuf->len - 1;
 
     outbuf->data = NULL;
@@ -479,7 +479,7 @@
         return PLIST_ERR_NO_MEM;
     }
 
-    int res = _plist_write_to_strbuf(plist, outbuf, options);
+    plist_err_t res = _plist_write_to_strbuf(plist, outbuf, options);
     if (res < 0) {
         str_buf_free(outbuf);
         return res;
diff --git a/src/out-limd.c b/src/out-limd.c
index 433ae06..7d861f8 100644
--- a/src/out-limd.c
+++ b/src/out-limd.c
@@ -67,7 +67,7 @@
     return len;
 }
 
-static int node_to_string(node_t node, bytearray_t **outbuf, uint32_t depth, uint32_t indent)
+static plist_err_t node_to_string(node_t node, bytearray_t **outbuf, uint32_t depth, uint32_t indent)
 {
     plist_data_t node_data = NULL;
 
@@ -154,7 +154,7 @@
             }
             size_t sl = sprintf(buf, "%u: ", cnt);
             str_buf_append(*outbuf, buf, sl);
-            int res = node_to_string(ch, outbuf, depth+1, indent);
+            plist_err_t res = node_to_string(ch, outbuf, depth+1, indent);
             if (res < 0) {
                 return res;
             }
@@ -171,7 +171,7 @@
                     str_buf_append(*outbuf, " ", 1);
                 }
             }
-            int res = node_to_string(ch, outbuf, depth+1, indent);
+            plist_err_t res = node_to_string(ch, outbuf, depth+1, indent);
             if (res < 0) {
                 return res;
             }
@@ -278,7 +278,7 @@
     return n;
 }
 
-static int node_estimate_size(node_t node, uint64_t *size, uint32_t depth, uint32_t indent)
+static plist_err_t node_estimate_size(node_t node, uint64_t *size, uint32_t depth, uint32_t indent)
 {
     plist_data_t data;
     if (!node) {
@@ -289,7 +289,7 @@
         node_t ch;
         unsigned int n_children = node_n_children(node);
         for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
-            int res = node_estimate_size(ch, size, depth + 1, indent);
+            plist_err_t res = node_estimate_size(ch, size, depth + 1, indent);
             if (res < 0) {
                 return res;
             }
@@ -369,7 +369,7 @@
     for (i = 0; i < indent; i++) {
         str_buf_append(outbuf, " ", 1);
     }
-    int res = node_to_string(plist, &outbuf, 0, indent);
+    plist_err_t res = node_to_string((node_t)plist, &outbuf, 0, indent);
     if (res < 0) {
         return res;
     }
@@ -382,7 +382,7 @@
 plist_err_t plist_write_to_string_limd(plist_t plist, char **output, uint32_t* length, plist_write_options_t options)
 {
     uint64_t size = 0;
-    int res;
+    plist_err_t res;
 
     if (!plist || !output || !length) {
         return PLIST_ERR_INVALID_ARG;
@@ -393,7 +393,7 @@
         indent = (options >> 24) & 0xFF;
     }
 
-    res = node_estimate_size(plist, &size, 0, indent);
+    res = node_estimate_size((node_t)plist, &size, 0, indent);
     if (res < 0) {
         return res;
     }
@@ -415,7 +415,7 @@
     }
     str_buf_append(outbuf, "\0", 1);
 
-    *output = outbuf->data;
+    *output = (char*)outbuf->data;
     *length = outbuf->len - 1;
 
     outbuf->data = NULL;
@@ -437,7 +437,7 @@
         return PLIST_ERR_NO_MEM;
     }
 
-    int res = _plist_write_to_strbuf(plist, outbuf, options);
+    plist_err_t res = _plist_write_to_strbuf(plist, outbuf, options);
     if (res < 0) {
         str_buf_free(outbuf);
         return res;
diff --git a/src/out-plutil.c b/src/out-plutil.c
index ed71d8f..d85f22c 100644
--- a/src/out-plutil.c
+++ b/src/out-plutil.c
@@ -65,7 +65,7 @@
     return len;
 }
 
-static int node_to_string(node_t node, bytearray_t **outbuf, uint32_t depth)
+static plist_err_t node_to_string(node_t node, bytearray_t **outbuf, uint32_t depth)
 {
     plist_data_t node_data = NULL;
 
@@ -159,7 +159,7 @@
             char indexbuf[16];
             int l = sprintf(indexbuf, "%u => ", cnt);
             str_buf_append(*outbuf, indexbuf, l);
-            int res = node_to_string(ch, outbuf, depth+1);
+            plist_err_t res = node_to_string(ch, outbuf, depth+1);
             if (res < 0) {
                 return res;
             }
@@ -184,7 +184,7 @@
                     str_buf_append(*outbuf, "  ", 2);
                 }
             }
-            int res = node_to_string(ch, outbuf, depth+1);
+            plist_err_t res = node_to_string(ch, outbuf, depth+1);
             if (res < 0) {
                 return res;
             }
@@ -304,7 +304,7 @@
     return n;
 }
 
-static int node_estimate_size(node_t node, uint64_t *size, uint32_t depth)
+static plist_err_t node_estimate_size(node_t node, uint64_t *size, uint32_t depth)
 {
     plist_data_t data;
     if (!node) {
@@ -315,7 +315,7 @@
         node_t ch;
         unsigned int n_children = node_n_children(node);
         for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
-            int res = node_estimate_size(ch, size, depth + 1);
+            plist_err_t res = node_estimate_size(ch, size, depth + 1);
             if (res < 0) {
                 return res;
             }
@@ -390,7 +390,7 @@
 
 static plist_err_t _plist_write_to_strbuf(plist_t plist, strbuf_t *outbuf, plist_write_options_t options)
 {
-    int res = node_to_string(plist, &outbuf, 0);
+    plist_err_t res = node_to_string((node_t)plist, &outbuf, 0);
     if (res < 0) {
         return res;
     }
@@ -403,13 +403,13 @@
 plist_err_t plist_write_to_string_plutil(plist_t plist, char **output, uint32_t* length, plist_write_options_t options)
 {
     uint64_t size = 0;
-    int res;
+    plist_err_t res;
 
     if (!plist || !output || !length) {
         return PLIST_ERR_INVALID_ARG;
     }
 
-    res = node_estimate_size(plist, &size, 0);
+    res = node_estimate_size((node_t)plist, &size, 0);
     if (res < 0) {
         return res;
     }
@@ -431,7 +431,7 @@
     }
     str_buf_append(outbuf, "\0", 1);
 
-    *output = outbuf->data;
+    *output = (char*)outbuf->data;
     *length = outbuf->len - 1;
 
     outbuf->data = NULL;
@@ -453,7 +453,7 @@
         return PLIST_ERR_NO_MEM;
     }
 
-    int res = _plist_write_to_strbuf(plist, outbuf, options);
+    plist_err_t res = _plist_write_to_strbuf(plist, outbuf, options);
     if (res < 0) {
         str_buf_free(outbuf);
         return res;
diff --git a/src/plist.c b/src/plist.c
index ccb7359..d78f748 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -47,6 +47,10 @@
 #include <hashtable.h>
 #include <ptrarray.h>
 
+#ifdef _MSC_VER
+typedef SSIZE_T ssize_t;
+#endif
+
 extern void plist_xml_init(void);
 extern void plist_xml_deinit(void);
 extern void plist_bin_init(void);
@@ -199,7 +203,7 @@
 
 plist_err_t plist_from_memory(const char *plist_data, uint32_t length, plist_t *plist, plist_format_t *format)
 {
-    int res = -1;
+    plist_err_t res = PLIST_ERR_UNKNOWN;
     if (!plist) {
         return PLIST_ERR_INVALID_ARG;
     }
@@ -284,7 +288,7 @@
     if (total == 0) {
         return PLIST_ERR_PARSE;
     }
-    char *buf = malloc(total);
+    char *buf = (char*)malloc(total);
     if (!buf) {
         fclose(f);
         return PLIST_ERR_NO_MEM;
@@ -316,7 +320,7 @@
 {
     if (!node)
         return NULL;
-    return ((node_t)node)->data;
+    return (plist_data_t)((node_t)node)->data;
 }
 
 plist_data_t plist_new_plist_data(void)
@@ -364,10 +368,10 @@
             free(data->buff);
             break;
         case PLIST_ARRAY:
-            ptr_array_free(data->hashtable);
+            ptr_array_free((ptrarray_t*)data->hashtable);
             break;
         case PLIST_DICT:
-            hash_table_destroy(data->hashtable);
+            hash_table_destroy((hashtable_t*)data->hashtable);
             break;
         default:
             break;
@@ -506,7 +510,7 @@
 {
     if (plist)
     {
-        plist_free_node(plist);
+        plist_free_node((node_t)plist);
     }
 }
 
@@ -565,7 +569,7 @@
         /* copy child node */
         plist_t newch = plist_copy_node(ch);
         /* attach to new parent node */
-        node_attach(newnode, newch);
+        node_attach((node_t)newnode, (node_t)newch);
         /* if needed, add child node to lookup table of parent node */
         switch (node_type) {
             case PLIST_ARRAY:
@@ -588,7 +592,7 @@
 
 plist_t plist_copy(plist_t node)
 {
-    return node ? plist_copy_node(node) : NULL;
+    return node ? plist_copy_node((node_t)node) : NULL;
 }
 
 uint32_t plist_array_get_size(plist_t node)
@@ -596,7 +600,7 @@
     uint32_t ret = 0;
     if (node && PLIST_ARRAY == plist_get_node_type(node))
     {
-        ret = node_n_children(node);
+        ret = node_n_children((node_t)node);
     }
     return ret;
 }
@@ -606,11 +610,11 @@
     plist_t ret = NULL;
     if (node && PLIST_ARRAY == plist_get_node_type(node) && n < INT_MAX)
     {
-        ptrarray_t *pa = ((plist_data_t)((node_t)node)->data)->hashtable;
+        ptrarray_t *pa = (ptrarray_t*)((plist_data_t)((node_t)node)->data)->hashtable;
         if (pa) {
             ret = (plist_t)ptr_array_index(pa, n);
         } else {
-            ret = (plist_t)node_nth_child(node, n);
+            ret = (plist_t)node_nth_child((node_t)node, n);
         }
     }
     return ret;
@@ -621,14 +625,14 @@
     plist_t father = plist_get_parent(node);
     if (PLIST_ARRAY == plist_get_node_type(father))
     {
-        return node_child_position(father, node);
+        return node_child_position((node_t)father, (node_t)node);
     }
     return UINT_MAX;
 }
 
 static void _plist_array_post_insert(plist_t node, plist_t item, long n)
 {
-    ptrarray_t *pa = ((plist_data_t)((node_t)node)->data)->hashtable;
+    ptrarray_t *pa = (ptrarray_t*)((plist_data_t)((node_t)node)->data)->hashtable;
     if (pa) {
         /* store pointer to item in array */
         ptr_array_insert(pa, item, n);
@@ -637,9 +641,9 @@
             /* make new lookup array */
             pa = ptr_array_new(128);
             plist_t current = NULL;
-            for (current = (plist_t)node_first_child(node);
+            for (current = (plist_t)node_first_child((node_t)node);
                  pa && current;
-                 current = (plist_t)node_next_sibling(current))
+                 current = (plist_t)node_next_sibling((node_t)current))
             {
                 ptr_array_add(pa, current);
             }
@@ -655,13 +659,13 @@
         plist_t old_item = plist_array_get_item(node, n);
         if (old_item)
         {
-            int idx = plist_free_node(old_item);
+            int idx = plist_free_node((node_t)old_item);
             assert(idx >= 0);
             if (idx < 0) {
                 return;
             }
-            node_insert(node, idx, item);
-            ptrarray_t* pa = ((plist_data_t)((node_t)node)->data)->hashtable;
+            node_insert((node_t)node, idx, (node_t)item);
+            ptrarray_t* pa = (ptrarray_t*)((plist_data_t)((node_t)node)->data)->hashtable;
             if (pa) {
                 ptr_array_set(pa, item, idx);
             }
@@ -673,7 +677,7 @@
 {
     if (node && PLIST_ARRAY == plist_get_node_type(node))
     {
-        node_attach(node, item);
+        node_attach((node_t)node, (node_t)item);
         _plist_array_post_insert(node, item, -1);
     }
 }
@@ -682,7 +686,7 @@
 {
     if (node && PLIST_ARRAY == plist_get_node_type(node) && n < INT_MAX)
     {
-        node_insert(node, n, item);
+        node_insert((node_t)node, n, (node_t)item);
         _plist_array_post_insert(node, item, (long)n);
     }
 }
@@ -694,7 +698,7 @@
         plist_t old_item = plist_array_get_item(node, n);
         if (old_item)
         {
-            ptrarray_t* pa = ((plist_data_t)((node_t)node)->data)->hashtable;
+            ptrarray_t* pa = (ptrarray_t*)((plist_data_t)((node_t)node)->data)->hashtable;
             if (pa) {
                 ptr_array_remove(pa, n);
             }
@@ -708,9 +712,9 @@
     plist_t father = plist_get_parent(node);
     if (PLIST_ARRAY == plist_get_node_type(father))
     {
-        int n = node_child_position(father, node);
+        int n = node_child_position((node_t)father, (node_t)node);
         if (n < 0) return;
-        ptrarray_t* pa = ((plist_data_t)((node_t)father)->data)->hashtable;
+        ptrarray_t* pa = (ptrarray_t*)((plist_data_t)((node_t)father)->data)->hashtable;
         if (pa) {
             ptr_array_remove(pa, n);
         }
@@ -723,7 +727,7 @@
     if (iter)
     {
         *iter = malloc(sizeof(node_t));
-        *((node_t*)(*iter)) = node_first_child(node);
+        *((node_t*)(*iter)) = node_first_child((node_t)node);
     }
 }
 
@@ -751,7 +755,7 @@
     uint32_t ret = 0;
     if (node && PLIST_DICT == plist_get_node_type(node))
     {
-        ret = node_n_children(node) / 2;
+        ret = node_n_children((node_t)node) / 2;
     }
     return ret;
 }
@@ -761,7 +765,7 @@
     if (iter)
     {
         *iter = malloc(sizeof(node_t));
-        *((node_t*)(*iter)) = node_first_child(node);
+        *((node_t*)(*iter)) = node_first_child((node_t)node);
     }
 }
 
@@ -798,7 +802,7 @@
     plist_t father = plist_get_parent(node);
     if (PLIST_DICT == plist_get_node_type(father))
     {
-        plist_get_key_val( (plist_t) node_prev_sibling(node), key);
+        plist_get_key_val( (plist_t) node_prev_sibling((node_t)node), key);
     }
 }
 
@@ -808,7 +812,7 @@
     plist_t father = plist_get_parent(node);
     if (PLIST_DICT == plist_get_node_type(father))
     {
-        ret = (plist_t)node_prev_sibling(node);
+        ret = (plist_t)node_prev_sibling((node_t)node);
     }
     return ret;
 }
@@ -828,16 +832,16 @@
             ret = (plist_t)hash_table_lookup(ht, &sdata);
         } else {
             plist_t current = NULL;
-            for (current = (plist_t)node_first_child(node);
+            for (current = (plist_t)node_first_child((node_t)node);
                 current;
-                current = (plist_t)node_next_sibling(node_next_sibling(current)))
+                current = (plist_t)node_next_sibling(node_next_sibling((node_t)current)))
             {
                 data = plist_get_data(current);
                 assert( PLIST_KEY == plist_get_node_type(current) );
 
                 if (data && !strcmp(key, data->strval))
                 {
-                    ret = (plist_t)node_next_sibling(current);
+                    ret = (plist_t)node_next_sibling((node_t)current);
                     break;
                 }
             }
@@ -849,23 +853,23 @@
 void plist_dict_set_item(plist_t node, const char* key, plist_t item)
 {
     if (node && PLIST_DICT == plist_get_node_type(node)) {
-        node_t old_item = plist_dict_get_item(node, key);
+        plist_t old_item = plist_dict_get_item(node, key);
         plist_t key_node = NULL;
         if (old_item) {
-            int idx = plist_free_node(old_item);
+            int idx = plist_free_node((node_t)old_item);
             assert(idx >= 0);
             if (idx < 0) {
                 return;
             }
-            node_insert(node, idx, item);
-            key_node = node_prev_sibling(item);
+            node_insert((node_t)node, idx, (node_t)item);
+            key_node = node_prev_sibling((node_t)item);
         } else {
             key_node = plist_new_key(key);
-            node_attach(node, key_node);
-            node_attach(node, item);
+            node_attach((node_t)node, (node_t)key_node);
+            node_attach((node_t)node, (node_t)item);
         }
 
-        hashtable_t *ht = ((plist_data_t)((node_t)node)->data)->hashtable;
+        hashtable_t *ht = (hashtable_t*)((plist_data_t)((node_t)node)->data)->hashtable;
         if (ht) {
             /* store pointer to item in hash table */
             hash_table_insert(ht, (plist_data_t)((node_t)key_node)->data, item);
@@ -875,11 +879,11 @@
                 ht = hash_table_new(dict_key_hash, dict_key_compare, NULL);
                 /* calculate the hashes for all entries we have so far */
                 plist_t current = NULL;
-                for (current = (plist_t)node_first_child(node);
+                for (current = (plist_t)node_first_child((node_t)node);
                      ht && current;
-                     current = (plist_t)node_next_sibling(node_next_sibling(current)))
+                     current = (plist_t)node_next_sibling(node_next_sibling((node_t)current)))
                 {
-                    hash_table_insert(ht, ((node_t)current)->data, node_next_sibling(current));
+                    hash_table_insert(ht, ((node_t)current)->data, node_next_sibling((node_t)current));
                 }
                 ((plist_data_t)((node_t)node)->data)->hashtable = ht;
             }
@@ -894,8 +898,8 @@
         plist_t old_item = plist_dict_get_item(node, key);
         if (old_item)
         {
-            plist_t key_node = node_prev_sibling(old_item);
-            hashtable_t* ht = ((plist_data_t)((node_t)node)->data)->hashtable;
+            plist_t key_node = node_prev_sibling((node_t)old_item);
+            hashtable_t* ht = (hashtable_t*)((plist_data_t)((node_t)node)->data)->hashtable;
             if (ht) {
                 hash_table_remove(ht, ((node_t)key_node)->data);
             }
diff --git a/src/ptrarray.c b/src/ptrarray.c
index c499773..3a11031 100644
--- a/src/ptrarray.c
+++ b/src/ptrarray.c
@@ -45,7 +45,7 @@
 	if (!pa || !pa->pdata) return;
 	long remaining = pa->capacity-pa->len;
 	if (remaining == 0) {
-		pa->pdata = realloc(pa->pdata, sizeof(void*) * (pa->capacity + pa->capacity_step));
+		pa->pdata = (void**)realloc(pa->pdata, sizeof(void*) * (pa->capacity + pa->capacity_step));
 		pa->capacity += pa->capacity_step;
 	}
 	if (array_index < 0 || array_index >= pa->len) {
diff --git a/src/xplist.c b/src/xplist.c
index 4833a92..66e1dba 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -133,7 +133,7 @@
     return len;
 }
 
-static int node_to_xml(node_t node, bytearray_t **outbuf, uint32_t depth)
+static plist_err_t node_to_xml(node_t node, bytearray_t **outbuf, uint32_t depth)
 {
     plist_data_t node_data = NULL;
 
@@ -366,7 +366,7 @@
         }
         node_t ch;
         for (ch = node_first_child(node); ch; ch = node_next_sibling(ch)) {
-            int res = node_to_xml(ch, outbuf, depth+1);
+            plist_err_t res = node_to_xml(ch, outbuf, depth+1);
             if (res < 0) return res;
         }
 
@@ -444,7 +444,7 @@
     return n;
 }
 
-static int node_estimate_size(node_t node, uint64_t *size, uint32_t depth)
+static plist_err_t node_estimate_size(node_t node, uint64_t *size, uint32_t depth)
 {
     plist_data_t data;
     if (!node) {
@@ -532,13 +532,13 @@
 plist_err_t plist_to_xml(plist_t plist, char **plist_xml, uint32_t * length)
 {
     uint64_t size = 0;
-    int res;
+    plist_err_t res;
 
     if (!plist || !plist_xml || !length) {
         return PLIST_ERR_INVALID_ARG;
     }
 
-    res = node_estimate_size(plist, &size, 0);
+    res = node_estimate_size((node_t)plist, &size, 0);
     if (res < 0) {
         return res;
     }
@@ -552,7 +552,7 @@
 
     str_buf_append(outbuf, XML_PLIST_PROLOG, sizeof(XML_PLIST_PROLOG)-1);
 
-    res = node_to_xml(plist, &outbuf, 0);
+    res = node_to_xml((node_t)plist, &outbuf, 0);
     if (res < 0) {
         str_buf_free(outbuf);
         *plist_xml = NULL;
@@ -562,7 +562,7 @@
 
     str_buf_append(outbuf, XML_PLIST_EPILOG, sizeof(XML_PLIST_EPILOG));
 
-    *plist_xml = outbuf->data;
+    *plist_xml = (char*)outbuf->data;
     *length = outbuf->len - 1;
 
     outbuf->data = NULL;
@@ -671,14 +671,14 @@
 {
     while (tp) {
         text_part_t *tmp = tp;
-        tp = tp->next;
+        tp = (text_part_t*)tp->next;
         free(tmp);
     }
 }
 
 static text_part_t* text_part_append(text_part_t* parts, const char *begin, size_t length, int is_cdata)
 {
-    text_part_t* newpart = malloc(sizeof(text_part_t));
+    text_part_t* newpart = (text_part_t*)malloc(sizeof(text_part_t));
     assert(newpart);
     parts->next = text_part_init(newpart, begin, length, is_cdata);
     return newpart;
@@ -930,9 +930,9 @@
     text_part_t *tmp = tp;
     while (tp && tp->begin) {
         total_length += tp->length;
-        tp = tp->next;
+        tp = (text_part_t*)tp->next;
     }
-    str = malloc(total_length + 1);
+    str = (char*)malloc(total_length + 1);
     assert(str);
     p = str;
     tp = tmp;
@@ -947,7 +947,7 @@
             }
         }
         p += len;
-        tp = tp->next;
+        tp = (text_part_t*)tp->next;
     }
     *p = '\0';
     if (length) {
@@ -959,7 +959,7 @@
     return str;
 }
 
-static int node_from_xml(parse_ctx ctx, plist_t *plist)
+static plist_err_t node_from_xml(parse_ctx ctx, plist_t *plist)
 {
     char *tag = NULL;
     char *keyname = NULL;
@@ -1067,7 +1067,7 @@
                 goto err_out;
             }
             int taglen = ctx->pos - p;
-            tag = malloc(taglen + 1);
+            tag = (char*)malloc(taglen + 1);
             strncpy(tag, p, taglen);
             tag[taglen] = '\0';
             if (*ctx->pos != '>') {
@@ -1105,7 +1105,7 @@
                     goto err_out;
                 }
 
-                struct node_path_item *path_item = malloc(sizeof(struct node_path_item));
+                struct node_path_item *path_item = (struct node_path_item*)malloc(sizeof(struct node_path_item));
                 if (!path_item) {
                     PLIST_XML_ERR("out of memory when allocating node path item\n");
                     ctx->err++;
@@ -1133,7 +1133,7 @@
                     goto err_out;
                 }
                 struct node_path_item *path_item = node_path;
-                node_path = node_path->prev;
+                node_path = (struct node_path_item*)node_path->prev;
                 free(path_item);
 
                 free(tag);
@@ -1156,7 +1156,7 @@
                     text_part_t *tp = get_text_parts(ctx, tag, taglen, 1, &first_part);
                     if (!tp) {
                         PLIST_XML_ERR("Could not parse text content for '%s' node\n", tag);
-                        text_parts_free(first_part.next);
+                        text_parts_free((text_part_t*)first_part.next);
                         ctx->err++;
                         goto err_out;
                     }
@@ -1165,7 +1165,7 @@
                         char *str_content = text_parts_get_content(tp, 0, NULL, &requires_free);
                         if (!str_content) {
                             PLIST_XML_ERR("Could not get text content for '%s' node\n", tag);
-                            text_parts_free(first_part.next);
+                            text_parts_free((text_part_t*)first_part.next);
                             ctx->err++;
                             goto err_out;
                         }
@@ -1194,7 +1194,7 @@
                     } else {
                         is_empty = 1;
                     }
-                    text_parts_free(tp->next);
+                    text_parts_free((text_part_t*)tp->next);
                 }
                 if (is_empty) {
                     data->intval = 0;
@@ -1207,7 +1207,7 @@
                     text_part_t *tp = get_text_parts(ctx, tag, taglen, 1, &first_part);
                     if (!tp) {
                         PLIST_XML_ERR("Could not parse text content for '%s' node\n", tag);
-                        text_parts_free(first_part.next);
+                        text_parts_free((text_part_t*)first_part.next);
                         ctx->err++;
                         goto err_out;
                     }
@@ -1216,7 +1216,7 @@
                         char *str_content = text_parts_get_content(tp, 0, NULL, &requires_free);
                         if (!str_content) {
                             PLIST_XML_ERR("Could not get text content for '%s' node\n", tag);
-                            text_parts_free(first_part.next);
+                            text_parts_free((text_part_t*)first_part.next);
                             ctx->err++;
                             goto err_out;
                         }
@@ -1225,7 +1225,7 @@
                             free(str_content);
                         }
                     }
-                    text_parts_free(tp->next);
+                    text_parts_free((text_part_t*)tp->next);
                 }
                 data->type = PLIST_REAL;
                 data->length = 8;
@@ -1251,12 +1251,12 @@
                     size_t length = 0;
                     if (!tp) {
                         PLIST_XML_ERR("Could not parse text content for '%s' node\n", tag);
-                        text_parts_free(first_part.next);
+                        text_parts_free((text_part_t*)first_part.next);
                         ctx->err++;
                         goto err_out;
                     }
                     str = text_parts_get_content(tp, 1, &length, NULL);
-                    text_parts_free(first_part.next);
+                    text_parts_free((text_part_t*)first_part.next);
                     if (!str) {
                         PLIST_XML_ERR("Could not get text content for '%s' node\n", tag);
                         ctx->err++;
@@ -1284,7 +1284,7 @@
                     text_part_t *tp = get_text_parts(ctx, tag, taglen, 1, &first_part);
                     if (!tp) {
                         PLIST_XML_ERR("Could not parse text content for '%s' node\n", tag);
-                        text_parts_free(first_part.next);
+                        text_parts_free((text_part_t*)first_part.next);
                         ctx->err++;
                         goto err_out;
                     }
@@ -1293,7 +1293,7 @@
                         char *str_content = text_parts_get_content(tp, 0, NULL, &requires_free);
                         if (!str_content) {
                             PLIST_XML_ERR("Could not get text content for '%s' node\n", tag);
-                            text_parts_free(first_part.next);
+                            text_parts_free((text_part_t*)first_part.next);
                             ctx->err++;
                             goto err_out;
                         }
@@ -1307,7 +1307,7 @@
                             free(str_content);
                         }
                     }
-                    text_parts_free(tp->next);
+                    text_parts_free((text_part_t*)tp->next);
                 }
                 data->type = PLIST_DATA;
             } else if (!strcmp(tag, XPLIST_DATE)) {
@@ -1316,7 +1316,7 @@
                     text_part_t *tp = get_text_parts(ctx, tag, taglen, 1, &first_part);
                     if (!tp) {
                         PLIST_XML_ERR("Could not parse text content for '%s' node\n", tag);
-                        text_parts_free(first_part.next);
+                        text_parts_free((text_part_t*)first_part.next);
                         ctx->err++;
                         goto err_out;
                     }
@@ -1327,7 +1327,7 @@
                         char *str_content = text_parts_get_content(tp, 0, &length, &requires_free);
                         if (!str_content) {
                             PLIST_XML_ERR("Could not get text content for '%s' node\n", tag);
-                            text_parts_free(first_part.next);
+                            text_parts_free((text_part_t*)first_part.next);
                             ctx->err++;
                             goto err_out;
                         }
@@ -1347,7 +1347,7 @@
                             free(str_content);
                         }
                     }
-                    text_parts_free(tp->next);
+                    text_parts_free((text_part_t*)tp->next);
                     data->realval = (double)(timev - MAC_EPOCH);
                 }
                 data->length = sizeof(double);
@@ -1391,7 +1391,7 @@
                     }
                 }
                 if (!is_empty && (data->type == PLIST_DICT || data->type == PLIST_ARRAY)) {
-                    struct node_path_item *path_item = malloc(sizeof(struct node_path_item));
+                    struct node_path_item *path_item = (struct node_path_item*)malloc(sizeof(struct node_path_item));
                     if (!path_item) {
                         PLIST_XML_ERR("out of memory when allocating node path item\n");
                         ctx->err++;
@@ -1416,7 +1416,7 @@
                     goto err_out;
                 }
                 struct node_path_item *path_item = node_path;
-                node_path = node_path->prev;
+                node_path = (struct node_path_item*)node_path->prev;
                 free(path_item);
 
                 parent = ((node_t)parent)->parent;
@@ -1447,7 +1447,7 @@
     /* clean up node_path if required */
     while (node_path) {
         struct node_path_item *path_item = node_path;
-        node_path = path_item->prev;
+        node_path = (struct node_path_item*)path_item->prev;
         free(path_item);
     }
 
