diff --git a/.mbedignore b/.mbedignore
new file mode 100644
index 0000000..658827d
--- /dev/null
+++ b/.mbedignore
@@ -0,0 +1,4 @@
+dumper/*
+test/*
+cmake/*
+Coverity_Model.c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1867068..679ee0c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -174,6 +174,7 @@
 
 ## include the parts
 add_subdirectory(src)
+add_subdirectory(include)
 add_subdirectory(test)
 add_subdirectory(dumper)
 
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
new file mode 100644
index 0000000..898676a
--- /dev/null
+++ b/include/CMakeLists.txt
@@ -0,0 +1,2 @@
+install ( DIRECTORY ../include DESTINATION .
+          PATTERN CMakeLists.txt EXCLUDE )
diff --git a/src/cose.h b/include/cose.h
similarity index 97%
rename from src/cose.h
rename to include/cose.h
index 5f0a414..0b2ef02 100644
--- a/src/cose.h
+++ b/include/cose.h
@@ -1,5 +1,10 @@
 #include <cn-cbor/cn-cbor.h>
 #include "configure.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
 typedef unsigned char byte;
 
 typedef struct _cose * HCOSE;
@@ -241,12 +246,13 @@
 
 
 bool COSE_Encrypt_SetContent(HCOSE_ENCRYPT cose, const byte * rgbContent, size_t cbContent, cose_errback * errp);
-byte * COSE_Encrypt_GetContent(HCOSE_ENCRYPT cose, size_t * pcbContent, cose_errback * errp);
+const byte * COSE_Encrypt_GetContent(HCOSE_ENCRYPT cose, size_t * pcbContent, cose_errback * errp);
 bool COSE_Encrypt_SetExternal(HCOSE_ENCRYPT hcose, const byte * pbExternalData, size_t cbExternalData, cose_errback * perr);
 
 bool COSE_Encrypt_encrypt(HCOSE_ENCRYPT cose, const byte * pbKey, size_t cbKey, cose_errback * perror);
 bool COSE_Encrypt_decrypt(HCOSE_ENCRYPT, const byte * pbKey, size_t cbKey, cose_errback * perr);
 
+HCOSE_ENCRYPT COSE_Encrypt_Init_From_Object(cn_cbor * cbor, CBOR_CONTEXT_COMMA cose_errback * perr);
 
 //
 //
@@ -338,3 +344,7 @@
 extern cn_cbor * cn_cbor_bool_create(int boolValue, CBOR_CONTEXT_COMMA cn_cbor_errback * errp);
 extern cn_cbor * cn_cbor_null_create(CBOR_CONTEXT_COMMA cn_cbor_errback * errp);
 
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 095270c..8e7ba3e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -31,6 +31,7 @@
 
 target_include_directories ( cose-c PRIVATE ${OPENSSL_INCLUDE_DIR} )
 target_include_directories ( cose-c PUBLIC ${dist_dir}/include )
+target_include_directories ( cose-c PUBLIC ../include )
 target_include_directories ( cose-c PRIVATE ../src )
 
 target_link_libraries ( cose-c PRIVATE ${OPENSSL_LIBRARIES} )
diff --git a/src/Cose.c b/src/Cose.c
index 5e86c71..1e4d3cc 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -1,5 +1,7 @@
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 
 #include "cose.h"
 #include "cose_int.h"
diff --git a/src/Encrypt.c b/src/Encrypt.c
index 04f4645..5967245 100644
--- a/src/Encrypt.c
+++ b/src/Encrypt.c
@@ -3,7 +3,11 @@
 */
 
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#else
+#include <stddef.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 
@@ -300,6 +304,7 @@
 		CHECK_CONDITION(cbKeyIn == cbitKey / 8, COSE_ERR_INVALID_PARAMETER);
 		pbKey = pbKeyIn;
 	}
+#ifdef INCLUDE_ENCRYPT
 	else {
 		//  Allocate the key if we have not already done so
 
@@ -332,6 +337,7 @@
 			CHECK_CONDITION(pRecip != NULL, COSE_ERR_NO_RECIPIENT_FOUND);
 		}
 	}
+#endif // INCLUDE_ENCRYPT
 
 	//  Build authenticated data
 
@@ -539,6 +545,7 @@
 		pbKey = pbKeyIn;
 		cbKey = cbKeyIn;
 	}
+#ifdef INCLUDE_ENCRYPT
 	else {
 		//  If we are doing direct encryption - then recipient generates the key
 
@@ -566,12 +573,14 @@
 		}
 		pbKey = pbKeyNew;
 	}
+#endif // INCLUDE_ENCRYPT
 
 	//  Build protected headers
 
 	const cn_cbor * cbProtected = _COSE_encode_protected(&pcose->m_message, perr);
 	if (cbProtected == NULL) goto errorReturn;
 
+
 #ifdef USE_COUNTER_SIGNATURES
 	//  Setup Counter Signatures
 	if (!_COSE_CountSign_create(&pcose->m_message, NULL, CBOR_CONTEXT_PARAM_COMMA perr)) {
@@ -655,9 +664,11 @@
 		FAIL_CONDITION(COSE_ERR_UNKNOWN_ALGORITHM);
 	}
 
+#ifdef INCLUDE_ENCRYPT        
 	for (pri = pcose->m_recipientFirst; pri != NULL; pri = pri->m_recipientNext) {
 		if (!_COSE_Recipient_encrypt(pri, pbKey, cbKey, perr)) goto errorReturn;
 	}
+#endif // INCLUDE_ENCRYPT
 
 	//  Figure out the clean up
 
@@ -854,6 +865,18 @@
 	*ppbAAD = pbAuthData;
 	*pcbAAD = cbAuthData;
 
+#if 0
+        {
+            printf("Encrypt* AAD = ");
+            int iX;
+            for (iX=0; iX < cbAuthData; iX++) {
+                printf("%02x ", pbAuthData[iX]);
+            }
+            printf("\n");
+        }
+#endif
+        
+
 	return true;
 
 errorReturn:
diff --git a/src/Encrypt0.c b/src/Encrypt0.c
index b6a85ec..189bbc7 100644
--- a/src/Encrypt0.c
+++ b/src/Encrypt0.c
@@ -3,7 +3,9 @@
 */
 
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 
@@ -63,6 +65,36 @@
 #endif
 
 #if INCLUDE_ENCRYPT0
+HCOSE_ENCRYPT COSE_Encrypt_Init_From_Object(cn_cbor * cbor, CBOR_CONTEXT_COMMA cose_errback * perr)
+{
+    COSE_Encrypt * pobj;
+
+    cose_errback error = { 0 };
+    if (perr == NULL) perr = &error;
+
+    pobj = (COSE_Encrypt *) COSE_CALLOC(1, sizeof(COSE_Encrypt), context);
+    if (pobj == NULL) {
+        perr->err = COSE_ERR_OUT_OF_MEMORY;
+    errorReturn:
+        if (pobj != NULL) {
+            _COSE_Encrypt_Release(pobj);
+            COSE_FREE(pobj, context);
+        }
+        return NULL;
+    }
+
+    if (!_COSE_Init_From_Object(&pobj->m_message, cbor, CBOR_CONTEXT_PARAM_COMMA perr)) {
+        goto errorReturn;
+    }
+
+    _COSE_InsertInList(&EncryptRoot, &pobj->m_message);
+
+    return(HCOSE_ENCRYPT) pobj;
+    
+}
+#endif
+
+#if INCLUDE_ENCRYPT0
 HCOSE_ENCRYPT _COSE_Encrypt_Init_From_Object(cn_cbor * cbor, COSE_Encrypt * pIn, CBOR_CONTEXT_COMMA cose_errback * perr)
 {
 	COSE_Encrypt * pobj = pIn;
@@ -151,6 +183,19 @@
 	return false;
 }
 
+const byte * COSE_Encrypt_GetContent(HCOSE_ENCRYPT h, size_t * pcbContent, cose_errback * perror)
+{
+    COSE_Encrypt * cose = (COSE_Encrypt *) h;
+    if (!IsValidEncryptHandle(h) || (pcbContent == NULL)) {
+        if (perror != NULL) perror->err = COSE_ERR_INVALID_PARAMETER;
+        return false;
+    }
+
+    *pcbContent = cose->cbContent;
+    return cose->pbContent;
+}
+
+
 bool COSE_Encrypt_SetContent(HCOSE_ENCRYPT h, const byte * rgb, size_t cb, cose_errback * perror)
 {
 	if (!IsValidEncryptHandle(h) || (rgb == NULL)) {
diff --git a/src/MacMessage.c b/src/MacMessage.c
index c0d5695..62be761 100644
--- a/src/MacMessage.c
+++ b/src/MacMessage.c
@@ -3,7 +3,9 @@
 */
 
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 #include <string.h>
diff --git a/src/MacMessage0.c b/src/MacMessage0.c
index f8e25f0..47ed015 100644
--- a/src/MacMessage0.c
+++ b/src/MacMessage0.c
@@ -3,7 +3,9 @@
 */
 
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 #include <stdio.h>
 #include <assert.h>
 #include <string.h>
diff --git a/src/Recipient.c b/src/Recipient.c
index a89a707..7ada624 100644
--- a/src/Recipient.c
+++ b/src/Recipient.c
@@ -1,5 +1,7 @@
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 
 #include "cose.h"
 #include "cose_int.h"
diff --git a/src/SignerInfo.c b/src/SignerInfo.c
index 60c928f..0f7d7b3 100644
--- a/src/SignerInfo.c
+++ b/src/SignerInfo.c
@@ -3,7 +3,9 @@
 */
 
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 
 #include "cose.h"
 #include "cose_int.h"
diff --git a/src/cbor.c b/src/cbor.c
index 8cac226..abaf47c 100644
--- a/src/cbor.c
+++ b/src/cbor.c
@@ -1,6 +1,8 @@
 #include "cn-cbor/cn-cbor.h"
 #include <stdlib.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 
 #define INIT_CB(v) \
   if (errp) {errp->err = CN_CBOR_NO_ERROR;} \
diff --git a/src/cose_int.h b/src/cose_int.h
index 129b7da..2cd8a6b 100644
--- a/src/cose_int.h
+++ b/src/cose_int.h
@@ -1,3 +1,5 @@
+#ifndef __COSE_INT_H__
+#define __COSE_INT_H__
 #include <assert.h>
 
 // These definitions are here because they aren't required for the public
@@ -280,3 +282,4 @@
 
 
 #define COSE_CounterSign_object 1000
+#endif // __COSE_INT_H__
diff --git a/src/mbedtls.c b/src/mbedtls.c
index f4a6e0d..2180f61 100644
--- a/src/mbedtls.c
+++ b/src/mbedtls.c
@@ -4,7 +4,9 @@
 #include "crypto.h"
 
 #include <assert.h>
+#ifndef __MBED__
 #include <memory.h>
+#endif
 #include <stdlib.h>
 
 #ifdef USE_MBED_TLS
diff --git a/test/encrypt.c b/test/encrypt.c
index cf3a283..20c9a3e 100644
--- a/test/encrypt.c
+++ b/test/encrypt.c
@@ -361,7 +361,8 @@
 
 /********************************************/
 #if INCLUDE_ENCRYPT0
-int _ValidateEncrypt(const cn_cbor * pControl, const byte * pbEncoded, size_t cbEncoded)
+
+int _ValidateEncrypt(const cn_cbor * pControl, const byte * pbEncoded, size_t cbEncoded, cn_cbor * pcnEncoded)
 {
 	const cn_cbor * pInput = cn_cbor_mapget_string(pControl, "input");
 	const cn_cbor * pFail;
@@ -387,8 +388,14 @@
 
 	pRecipients = pRecipients->first_child;
 
-	hEnc = (HCOSE_ENCRYPT)COSE_Decode(pbEncoded, cbEncoded, &type, COSE_encrypt_object, CBOR_CONTEXT_PARAM_COMMA NULL);
-	if (hEnc == NULL) { if (fFailBody) return 0; else  goto returnError; }
+	if (pcnEncoded == NULL) {
+		hEnc = (HCOSE_ENCRYPT)COSE_Decode(pbEncoded, cbEncoded, &type, COSE_encrypt_object, CBOR_CONTEXT_PARAM_COMMA NULL);
+		if (hEnc == NULL) { if (fFailBody) return 0; else  goto returnError; }
+	}
+	else {
+		hEnc = COSE_Encrypt_Init_From_Object(pcnEncoded, CBOR_CONTEXT_PARAM_COMMA NULL);
+		if (hEnc == NULL) { if (fFailBody) return 0; else  goto returnError; }
+	}
 
 	if (!SetReceivingAttributes((HCOSE)hEnc, pEncrypt, Attributes_Encrypt_protected)) goto returnError;
 
@@ -415,6 +422,10 @@
 			fAlgSupport = false;
 		}
 		else if ((pFail != NULL) && (pFail->type != CN_CBOR_TRUE)) fFail = true;
+
+                size_t cb;
+                byte * pb;
+                pb = COSE_Encrypt_GetContent(hEnc, &cb, NULL);
 	}
 	else {
 		if (fAlgSupport) {
@@ -450,8 +461,15 @@
 {
 	int cbEncoded;
 	byte * pbEncoded = GetCBOREncoding(pControl, &cbEncoded);
+	int fRet;
 
-	return _ValidateEncrypt(pControl, pbEncoded, cbEncoded);
+	fRet = _ValidateEncrypt(pControl, pbEncoded, cbEncoded, NULL);
+	if (!fRet) return fRet;
+
+	cn_cbor * cbor = cn_cbor_decode(pbEncoded, cbEncoded, CBOR_CONTEXT_PARAM_COMMA NULL);
+	if (cbor == NULL) return false;
+
+	return _ValidateEncrypt(pControl, NULL, 0, cbor);
 }
 
 int BuildEncryptMessage(const cn_cbor * pControl)
@@ -497,7 +515,7 @@
 
 	COSE_Encrypt_Free(hEncObj);
 
-	int f = _ValidateEncrypt(pControl, rgb, cb);
+	int f = _ValidateEncrypt(pControl, rgb, cb, NULL);
 	free(rgb);
 	return f;
 
