diff --git a/include/cn-cbor/cn-cbor.h b/include/cn-cbor/cn-cbor.h
index 7b7a2db..4e8dfb8 100644
--- a/include/cn-cbor/cn-cbor.h
+++ b/include/cn-cbor/cn-cbor.h
@@ -14,15 +14,15 @@
 #include <stddef.h>
 #endif
 
-#ifndef MYLIB_EXPORT
+#ifndef CN_CBOR_EXPORT
 #if defined(_WIN32)
 #if defined(CN_CBOR_IS_DLL)
-#define MYLIB_EXPORT __declspec(dllimport)
+#define CN_CBOR_EXPORT __declspec(dllimport)
 #else
-#define MYLIB_EXPORT
+#define CN_CBOR_EXPORT
 #endif /* CN_CBOR_IS_DLL */
 #else  /* defined (_WIN32) */
-#define MYLIB_EXPORT
+#define CN_CBOR_EXPORT
 #endif
 #endif
 
@@ -196,7 +196,7 @@
  *
  * @todo: turn into a function to make the type safety more clear?
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 extern const char* cn_cbor_error_str[];
 
 /**
@@ -267,7 +267,7 @@
  *
  */
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 void cn_cbor_dont_free_data(cn_cbor* cbor);
 
 /**
@@ -283,7 +283,7 @@
  * @param[out] errp         Error, if NULL is returned
  * @return                  The parsed CBOR structure, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_decode(const uint8_t* buf, size_t len CBOR_CONTEXT, cn_cbor_errback* errp);
 
 /**
@@ -293,7 +293,7 @@
  * @param[in]  key          The string to look up in the map
  * @return                  The matching value, or NULL if the key is not found
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_mapget_string(const cn_cbor* cb, const char* key);
 
 /**
@@ -303,7 +303,7 @@
  * @param[in]  key          The int to look up in the map
  * @return                  The matching value, or NULL if the key is not found
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_mapget_int(const cn_cbor* cb, int key);
 
 /**
@@ -313,7 +313,7 @@
  * @param[in]  idx          The array index
  * @return                  The matching value, or NULL if the index is invalid
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_index(const cn_cbor* cb, unsigned int idx);
 
 /**
@@ -324,7 +324,7 @@
  * @param[in]  cb           The CBOR value to free.  May be NULL, or a root object.
  * @param[in]  CBOR_CONTEXT Allocation context (only if USE_CBOR_CONTEXT is defined)
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 void cn_cbor_free(cn_cbor* cb CBOR_CONTEXT);
 
 /**
@@ -349,7 +349,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created map, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_map_create(CBOR_CONTEXT_COMMA cn_cbor_errback* errp);
 
 /**
@@ -362,7 +362,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created object, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_data_create(const uint8_t* data, int len CBOR_CONTEXT, cn_cbor_errback* errp);
 
 /**
@@ -376,7 +376,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created object, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_data_create2(const uint8_t* data, int len, int flags CBOR_CONTEXT, cn_cbor_errback* errp);
 
 /**
@@ -392,7 +392,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created object, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_string_create(const char* data, CBOR_CONTEXT_COMMA cn_cbor_errback* errp);
 
 /**
@@ -409,7 +409,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created object, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_string_create2(const char* data, int flags CBOR_CONTEXT, cn_cbor_errback* errp);
 
 /**
@@ -420,7 +420,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created object, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_int_create(int64_t value CBOR_CONTEXT, cn_cbor_errback* errp);
 
 #ifndef CBOR_NO_FLOAT
@@ -517,7 +517,7 @@
  * @param[in]   errp          Error; if NULL is returned
  * @return                    The created object or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_chunked_create(int type, CBOR_CONTEXT_COMMA cn_cbor_errback* errp);
 
 /**
@@ -528,7 +528,7 @@
  * @param[in]   errp          Error; if FALSE is returned
  * @return                    True if successfully appended
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_chunked_append(cn_cbor* cb_array, cn_cbor* cb_value, cn_cbor_errback* errp);
 
 /**
@@ -541,7 +541,7 @@
  * @param[out]  errp         Error
  * @return                   True on success
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_map_put(cn_cbor* cb_map, cn_cbor* cb_key, cn_cbor* cb_value, cn_cbor_errback* errp);
 
 /**
@@ -555,7 +555,7 @@
  * @param[out]  errp         Error
  * @return                   True on success
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_mapput_int(cn_cbor* cb_map, int64_t key, cn_cbor* cb_value CBOR_CONTEXT, cn_cbor_errback* errp);
 
 /**
@@ -572,7 +572,7 @@
  * @param[out]  errp         Error
  * @return                   True on success
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_mapput_string(cn_cbor* cb_map, const char* key, cn_cbor* cb_value CBOR_CONTEXT, cn_cbor_errback* errp);
 
 /**
@@ -590,7 +590,7 @@
  * @param[out]  errp         Error
  * @return                   True on success
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_mapput_string2(cn_cbor* cb_map,
 	const char* key,
 	cn_cbor* cb_value,
@@ -604,7 +604,7 @@
  * @param[out]  errp         Error, if NULL is returned
  * @return                   The created object, or NULL on error
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_array_create(CBOR_CONTEXT_COMMA cn_cbor_errback* errp);
 
 /**
@@ -615,7 +615,7 @@
  * @param[out]  errp      Error
  * @return                True on success
  */
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_array_append(cn_cbor* cb_array, cn_cbor* cb_value, cn_cbor_errback* errp);
 
 /**
diff --git a/src/cn-cbor.c b/src/cn-cbor.c
index 0db1851..7c9ecbf 100644
--- a/src/cn-cbor.c
+++ b/src/cn-cbor.c
@@ -29,13 +29,13 @@
 		goto fail;         \
 	} while (0)
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 void cn_cbor_dont_free_data(cn_cbor *cbor)
 {
 	cbor->flags |= CN_CBOR_FL_EXT_DATA;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 void cn_cbor_free(cn_cbor *cb CBOR_CONTEXT)
 {
 	cn_cbor *p = (cn_cbor *)cb;
@@ -352,7 +352,7 @@
 	return 0;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor *cn_cbor_decode(const unsigned char *buf, size_t len CBOR_CONTEXT, cn_cbor_errback *errp)
 {
 	cn_cbor catcher = {CN_CBOR_INVALID, 0, {0}, 0, NULL, NULL, NULL, NULL};
diff --git a/src/cn-create.c b/src/cn-create.c
index 85c58d7..2142a3f 100644
--- a/src/cn-create.c
+++ b/src/cn-create.c
@@ -24,7 +24,7 @@
 		return NULL;                               \
 	}
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_simple_create(int simpleValue, CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	if (24 <= simpleValue && simpleValue <= 31) {
@@ -58,7 +58,7 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_tag_create(int tag, cn_cbor* child, CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	cn_cbor* ret;
@@ -72,7 +72,7 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_map_create(CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	cn_cbor* ret;
@@ -84,13 +84,13 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_data_create(const uint8_t* data, int len, CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	return cn_cbor_data_create2(data, len, CN_CBOR_FL_EXT_DATA CBOR_CONTEXT_PARAM, errp);
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_data_create2(const uint8_t* data, int len, int flags CBOR_CONTEXT, cn_cbor_errback* errp)
 {
 	cn_cbor* ret = NULL;
@@ -103,13 +103,13 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_string_create(const char* data, CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	return cn_cbor_string_create2(data, CN_CBOR_FL_EXT_DATA CBOR_CONTEXT_PARAM, errp);
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_string_create2(const char* data, int flags CBOR_CONTEXT, cn_cbor_errback* errp)
 {
 	cn_cbor* ret = NULL;
@@ -123,7 +123,7 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_int_create(int64_t value CBOR_CONTEXT, cn_cbor_errback* errp)
 {
 	cn_cbor* ret;
@@ -184,7 +184,7 @@
 	return true;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_map_put(cn_cbor* cb_map, cn_cbor* cb_key, cn_cbor* cb_value, cn_cbor_errback* errp)
 {
 	// Make sure input is a map. Otherwise
@@ -198,7 +198,7 @@
 	return _append_kv(cb_map, cb_key, cb_value);
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_mapput_int(cn_cbor* cb_map, int64_t key, cn_cbor* cb_value CBOR_CONTEXT, cn_cbor_errback* errp)
 {
 	cn_cbor* cb_key;
@@ -218,13 +218,13 @@
 	return _append_kv(cb_map, cb_key, cb_value);
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_mapput_string(cn_cbor* cb_map, const char* key, cn_cbor* cb_value CBOR_CONTEXT, cn_cbor_errback* errp)
 {
 	return cn_cbor_mapput_string2(cb_map, key, cb_value, CN_CBOR_FL_EXT_DATA CBOR_CONTEXT_PARAM, errp);
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_mapput_string2(cn_cbor* cb_map,
 	const char* key,
 	cn_cbor* cb_value,
@@ -246,7 +246,7 @@
 	return _append_kv(cb_map, cb_key, cb_value);
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_array_create(CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	cn_cbor* ret;
@@ -258,7 +258,7 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_array_append(cn_cbor* cb_array, cn_cbor* cb_value, cn_cbor_errback* errp)
 {
 	// Make sure input is an array.
@@ -282,7 +282,7 @@
 	return true;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_chunked_create(int type, CBOR_CONTEXT_COMMA cn_cbor_errback* errp)
 {
 	cn_cbor* ret;
@@ -306,7 +306,7 @@
 	return ret;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 bool cn_cbor_chunked_append(cn_cbor* cb_array, cn_cbor* cb_value, cn_cbor_errback* errp)
 {
 	// Make sure input is an array.
diff --git a/src/cn-error.c b/src/cn-error.c
index 6aae83e..425eda4 100644
--- a/src/cn-error.c
+++ b/src/cn-error.c
@@ -1,6 +1,6 @@
 #include "dll-export.h"
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 const char *cn_cbor_error_str[] = {"CN_CBOR_NO_ERROR", "CN_CBOR_ERR_OUT_OF_DATA", "CN_CBOR_ERR_NOT_ALL_DATA_CONSUMED",
 	"CN_CBOR_ERR_ODD_SIZE_INDEF_MAP", "CN_CBOR_ERR_BREAK_OUTSIDE_INDEF", "CN_CBOR_ERR_MT_UNDEF_FOR_INDEF",
 	"CN_CBOR_ERR_RESERVED_AI", "CN_CBOR_ERR_WRONG_NESTING_IN_INDEF_STRING", "CN_CBOR_ERR_INVALID_PARAMETER",
diff --git a/src/cn-get.c b/src/cn-get.c
index ced2243..878a219 100644
--- a/src/cn-get.c
+++ b/src/cn-get.c
@@ -6,7 +6,7 @@
 
 #include "cn-cbor/cn-cbor.h"
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_mapget_int(const cn_cbor* cb, int key)
 {
 	cn_cbor* cp;
@@ -32,7 +32,7 @@
 	return NULL;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_mapget_string(const cn_cbor* cb, const char* key)
 {
 	cn_cbor* cp = NULL;
@@ -59,7 +59,7 @@
 	return NULL;
 }
 
-MYLIB_EXPORT
+CN_CBOR_EXPORT
 cn_cbor* cn_cbor_index(const cn_cbor* cb, unsigned int idx)
 {
 	cn_cbor* cp;
diff --git a/src/dll-export.h b/src/dll-export.h
index 0457951..470fdbd 100644
--- a/src/dll-export.h
+++ b/src/dll-export.h
@@ -12,12 +12,12 @@
 
 #if defined(_WIN32)
 #if defined(CN_CBOR_IS_DLL)
-#define MYLIB_EXPORT __declspec(dllexport)
+#define CN_CBOR_EXPORT __declspec(dllexport)
 #else
-#define MYLIB_EXPORT
+#define CN_CBOR_EXPORT
 #endif /* cn_cbor_EXPORTS */
 #else  /* defined (_WIN32) */
-#define MYLIB_EXPORT
+#define CN_CBOR_EXPORT
 #endif
 
 #endif /* _cn_cbor_DLLDEFINES_H_ */
