diff --git a/.gitignore b/.gitignore
index 89b9e01..94ef967 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,9 +55,12 @@
 *.vcxproj
 *.vcxproj.filters
 *.opensdf
+*.VC.db
+*.VC.opendb
 
 # CMake and CTest directories
 project_cn-cbor-prefix
+project_embedtls-prefix
 Testing
 dist
 test/test.cbor
diff --git a/.travis.yml b/.travis.yml
index dc9ecf0..d509d95 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,10 +9,13 @@
 env:
   - USE_CONTEXT=ON
   - USE_CONTEXT=OFF
+  - USE_CONTEXT=OFF USE_EMBED_TLS=ON
 matrix:
   exclude:
     - compiler: gcc
       env: USE_CONTEXT=OFF
+    - compiler: gcc
+      env: USE_CONTEXT=OFF USE_EMBED_TLS=ON
 addons:
   apt:
     sources:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 863bc27..96fabba 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,6 +25,7 @@
 option ( coveralls_send "Send data to coveralls site" OFF )
 option (build_docs      "Create docs using Doxygen" ${DOXYGEN_FOUND} )
 option (build_shared_libs "Build Shared Libraries" ON)
+option (use_embedtls    "Use MBedTLS for the Crypto Package" OFF)
 
 set ( dist_dir          ${CMAKE_BINARY_DIR}/dist )
 set ( prefix            ${CMAKE_INSTALL_PREFIX} )
@@ -117,6 +118,23 @@
 set_property (TARGET cn-cbor PROPERTY IMPORTED_LOCATION "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}cn-cbor${CMAKE_SHARED_LIBRARY_SUFFIX}")
 add_dependencies(cn-cbor project_cn-cbor)
 
+if (use_embedtls)
+   add_definitions( -DUSE_MBED_TLS )
+   ExternalProject_Add(
+     project_embedtls
+     GIT_REPOSITORY https://github.com/ARMmbed/mbedtls
+     CMAKE_ARGS -DENABLED_PROGRAMS=OFF -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -Dcoveralls=OFF -Dbuild_shared_libs=${build_shared_libs} -Dfatal_warnings=OFF -DENABLE_TESTING=OFF
+     INTALL_DIR "${dist_dir}"
+     UPDATE_DISCONNECTED 1
+   )
+
+   ExternalProject_Get_Property(project_embedtls install_dir)
+   include_directories( "${install_dir}/include" )
+   add_library( embedtls STATIC IMPORTED)
+   set_property (TARGET embedtls PROPERTY IMPORTED_LOCATION "${install_dir}/lib/${CMAKE_SHARED_MODULE_PREFIX}embedtls${CMAKE_SHARED_LIBRARY_SUFFIX}")
+   add_dependencies(embedtls project_embedtls)
+endif ()
+
 
 ## include the parts
 add_subdirectory(src)
diff --git a/src/Cose.c b/src/Cose.c
index 2de060e..dd2bb1a 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -406,14 +406,14 @@
 
 HCOSE_COUNTERSIGN _COSE_CounterSign_get(COSE * pMessage, int iSigner, cose_errback * perr)
 {
-	COSE_SignerInfo * pSigner = pMessage->m_counterSigners;
+	COSE_CounterSign * pSigner = pMessage->m_counterSigners;
 	int i;
 
-	for (i = 0; i < iSigner; i++, pSigner = pSigner->m_signerNext) {
+	for (i = 0; i < iSigner; i++, pSigner = pSigner->m_next) {
 		CHECK_CONDITION(pSigner != NULL, COSE_ERR_INVALID_PARAMETER);
 	}
 
-	return pSigner;
+	return (HCOSE_COUNTERSIGN) pSigner;
 
 errorReturn:
 	return false;
@@ -425,8 +425,8 @@
 	cn_cbor_errback cbor_err;
 	COSE_CounterSign * pSigner = NULL;
 	cn_cbor * pcnProtected = NULL;
-	cn_cbor * pcn;
-	cn_cbor * pcn2;
+	cn_cbor * pcn = NULL;
+	cn_cbor * pcn2 = NULL;
 
 	if (pMessage->m_counterSigners == NULL) return true;
 
@@ -439,14 +439,16 @@
 	pcnProtected = _COSE_arrayget_int(pMessage, INDEX_PROTECTED);
 	CHECK_CONDITION(pcnProtected != NULL, COSE_ERR_INTERNAL);
 
-	for (pSigner = pMessage->m_counterSigners; pSigner != NULL; pSigner = pSigner->m_signer.m_signerNext) {
+	for (pSigner = pMessage->m_counterSigners; pSigner != NULL; pSigner = pSigner->m_next) {
+		CHECK_CONDITION(pSigner->m_signer.m_signerNext == NULL, COSE_ERR_INTERNAL);
+
 		pcn = cn_cbor_data_create(pcnProtected->v.bytes, pcnProtected->v.count, CBOR_CONTEXT_PARAM_COMMA &cbor_err);
 		CHECK_CONDITION_CBOR(pcnProtected != NULL, cbor_err);
 
 		pcn2 = cn_cbor_clone(pcnBody, CBOR_CONTEXT_PARAM_COMMA &cbor_err);
 		CHECK_CONDITION_CBOR(pcnBody != NULL, cbor_err);
 
-		if (!_COSE_Signer_sign(pSigner, pcnBody, pcn2, perr)) goto errorReturn;
+		if (!_COSE_Signer_sign(&pSigner->m_signer, pcnBody, pcn2, perr)) goto errorReturn;
 		pcn = NULL;
 		pcn2 = NULL;
 
diff --git a/src/configure.h b/src/configure.h
index 183ca31..2ca1024 100644
--- a/src/configure.h
+++ b/src/configure.h
@@ -89,7 +89,16 @@
 #define USE_ECDSA_SHA_512
 
 
-#define USE_OPEN_SSL 1
-#define USE_BCRYPT 0
+#if defined(USE_MBED_TLS)
+#if defined(USE_OPEN_SSL) || defined(USE_BCRYPT)
+#error Only Define One Crypto Package
+#endif
+#elif defined(USE_BCRYPT)
+#if defined(USE_OPENSSL)
+#error Only Define One Crypto Package
+#endif
+#elif !defined(USE_OPEN_SSL)
+#define USE_OPEN_SSL
+#endif
 
-//#define USE_COUNTER_SIGNATURES
+#define USE_COUNTER_SIGNATURES
diff --git a/src/cose_int.h b/src/cose_int.h
index 72a2bd5..b4033a5 100644
--- a/src/cose_int.h
+++ b/src/cose_int.h
@@ -5,7 +5,7 @@
 
 #ifdef USE_COUNTER_SIGNATURES
 struct _COSE_COUNTER_SIGN;
-typedef struct _COSE_COUNTER_SIGN COSE_Counter_Sign;
+typedef struct _COSE_COUNTER_SIGN COSE_CounterSign;
 #endif
 
 typedef struct _COSE {
@@ -26,7 +26,7 @@
 #endif
 	struct _COSE * m_handleList;
 #ifdef USE_COUNTER_SIGNATURES
-	COSE_Counter_Sign * m_counterSigners;
+	COSE_CounterSign * m_counterSigners;
 #endif
 } COSE;
 
@@ -90,6 +90,7 @@
 #ifdef USE_COUNTER_SIGNATURES
 typedef struct _COSE_COUNTER_SIGN {
 	COSE_SignerInfo m_signer;
+	COSE_CounterSign * m_next;
 } COSE_CounterSign;
 #endif
 
diff --git a/test/encrypt.c b/test/encrypt.c
index 541fdec..24141d5 100644
--- a/test/encrypt.c
+++ b/test/encrypt.c
@@ -213,6 +213,15 @@
 
 	if (!SetSendingAttributes((HCOSE)hEncObj, pEnveloped, Attributes_Enveloped_protected)) goto returnError;
 
+#if 0
+	const cn_cbor * pCounterSign = cn_cbor_mapget_string(pEnveloped, "countersign");
+	if (pCounterSign != NULL) {
+		HCOSE_COUNTERSIGN hCSign = BuildCounterSign(pCounterSign);
+		if (hCSign == NULL) goto returnError;
+		if (!COSE_Enveloped_AddCounterSigner(hEncObj, hCSign, NULL)) goto returnError;
+	}
+#endif
+
 	const cn_cbor * pAlg = COSE_Enveloped_map_get_int(hEncObj, 1, COSE_BOTH, NULL);
 	if (pAlg == NULL) goto returnError;
 
diff --git a/test/mac_test.c b/test/mac_test.c
index 455a395..eb288af 100644
--- a/test/mac_test.c
+++ b/test/mac_test.c
@@ -130,8 +130,6 @@
 
 	if (!SetSendingAttributes((HCOSE)hMacObj, pMac, Attributes_MAC_protected)) goto returnError;
 
-	const cn_cbor * pAlg = COSE_Mac_map_get_int(hMacObj, 1, COSE_BOTH, NULL);
-
 	const cn_cbor * pRecipients = cn_cbor_mapget_string(pMac, "recipients");
 	if ((pRecipients == NULL) || (pRecipients->type != CN_CBOR_ARRAY)) goto returnError;
 
@@ -347,8 +345,6 @@
 
 	if (!SetSendingAttributes((HCOSE)hMacObj, pMac, Attributes_MAC0_protected)) goto returnError;
 
-	const cn_cbor * pAlg = COSE_Mac0_map_get_int(hMacObj, 1, COSE_BOTH, NULL);
-
 	const cn_cbor * pRecipients = cn_cbor_mapget_string(pMac, "recipients");
 	if ((pRecipients == NULL) || (pRecipients->type != CN_CBOR_ARRAY)) goto returnError;
 
diff --git a/test/sign.c b/test/sign.c
index 6bb1e6b..1ed188d 100644
--- a/test/sign.c
+++ b/test/sign.c
@@ -124,8 +124,6 @@
 
 	if (!SetSendingAttributes((HCOSE)hSignObj, pSign, Attributes_Sign_protected)) goto returnError;
 
-	const cn_cbor * pAlg = COSE_Sign_map_get_int(hSignObj, 1, COSE_BOTH, NULL);
-
 	const cn_cbor * pSigners = cn_cbor_mapget_string(pSign, "signers");
 	if ((pSigners == NULL) || (pSigners->type != CN_CBOR_ARRAY)) goto returnError;
 
@@ -326,8 +324,6 @@
 
 	if (!SetSendingAttributes((HCOSE)hSignObj, pSign, Attributes_Sign0_protected)) goto returnError;
 
-	const cn_cbor * pAlg = COSE_Sign0_map_get_int(hSignObj, 1, COSE_BOTH, NULL);
-
 	cn_cbor * pkey = BuildKey(cn_cbor_mapget_string(pSign, "key"), false);
 	if (pkey == NULL) goto returnError;
 
