diff --git a/src/CounterSign.c b/src/CounterSign.c
index 7047aa0..14c9a02 100644
--- a/src/CounterSign.c
+++ b/src/CounterSign.c
@@ -25,8 +25,6 @@
 		return true;
 	}
 
-	_COSE_RemoveFromList(&CountersignRoot, &pSigner->m_signer.m_message);
-
 	_COSE_SignerInfo_Release(&pSigner->m_signer);
 
 	COSE_FREE(pSigner, &pSigner->m_signer.m_message.m_allocContext);
@@ -54,7 +52,11 @@
 	CHECK_CONDITION(cbor->type == CN_CBOR_ARRAY, COSE_ERR_INVALID_PARAMETER);
 	if (!_COSE_SignerInfo_Init_From_Object(
 			cbor, &pobj->m_signer, CBOR_CONTEXT_PARAM_COMMA perr)) {
-		goto errorReturn;
+		_COSE_SignerInfo_Release(&pobj->m_signer);
+		if (pIn == NULL) {
+			COSE_FREE(pobj, context);
+		}
+		return NULL;
 	}
 
 	if (pIn == NULL) {
@@ -112,6 +114,8 @@
 		return true;
 	}
 
+	_COSE_RemoveFromList(&CountersignRoot, &p->m_signer.m_message);
+	
 	fRet = _COSE_CounterSign_Free(p);
 
 errorReturn:
@@ -127,8 +131,7 @@
 	COSE_CounterSign* pSigner = (COSE_CounterSign*)hSigner;
 
 	CHECK_CONDITION(IsValidCounterSignHandle(hSigner), COSE_ERR_INVALID_HANDLE);
-	CHECK_CONDITION(pSigner->m_signer.m_message.m_counterSigners == NULL,
-		COSE_ERR_INVALID_PARAMETER);
+	CHECK_CONDITION(pSigner->m_next == NULL, COSE_ERR_INVALID_PARAMETER);
 
 	pSigner->m_next = pMessage->m_counterSigners;
 	pMessage->m_counterSigners = pSigner;
diff --git a/src/SignerInfo.c b/src/SignerInfo.c
index 8d117c5..0fd4204 100644
--- a/src/SignerInfo.c
+++ b/src/SignerInfo.c
@@ -123,11 +123,9 @@
 	return pSigner;
 
 errorReturn:
-	if (pSigner != NULL) {
+	if (pSigner != NULL && pIn == NULL) {
 		_COSE_SignerInfo_Release(pSigner);
-		if (pIn == NULL) {
-			COSE_FREE(pSigner, context);
-		}
+		COSE_FREE(pSigner, context);
 	}
 	return NULL;
 }
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 58b5ceb..18dd494 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,6 +1,6 @@
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dist_dir}/test)
 
-add_executable(cose_test test.c json.c encrypt.c sign.c context.c mac_test.c)
+add_executable(cose_test test.c json.c encrypt.c sign.c context.c mac_test.c CounterSign_test.c)
 
 target_link_libraries(cose_test PRIVATE cose-c::cose-c cn-cbor::cn-cbor)
 
@@ -176,3 +176,10 @@
   NAME Memory-sign-eddsa
   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
   COMMAND cose_test --memory Examples/eddsa-examples/eddsa-01.json)
+
+if(COSE_C_INCLUDE_COUNTERSIGN)
+  add_test(
+    NAME Memory-Countersign
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+    COMMAND cose_test --memory Examples/countersign/mac0-01.json)
+endif()
diff --git a/test/CounterSign_test.c b/test/CounterSign_test.c
new file mode 100644
index 0000000..3b9d53a
--- /dev/null
+++ b/test/CounterSign_test.c
@@ -0,0 +1,87 @@
+//  encrypt.c
+
+#define _CRT_SECURE_NO_WARNINGS
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <cose/cose.h>
+#include <cose/cose_configure.h>
+#include <cn-cbor/cn-cbor.h>
+
+#include "test.h"
+#include "cose_int.h"
+
+void CounterSign_Corners()
+{
+	HCOSE_COUNTERSIGN hCounterSign = NULL;
+	HCOSE_COUNTERSIGN hBadHandle = NULL;
+	HCOSE_COUNTERSIGN hNULL = NULL;
+	cose_errback cose_error;
+	byte rgb[10];
+
+	cn_cbor *cn = cn_cbor_int_create(5, CBOR_CONTEXT_PARAM_COMMA NULL);
+	
+	hCounterSign = COSE_CounterSign_Init(CBOR_CONTEXT_PARAM_COMMA NULL);
+	hBadHandle = (HCOSE_COUNTERSIGN)COSE_CALLOC(1, sizeof(COSE), context);
+	HCOSE_SIGN1 hSign1 =
+		COSE_Sign1_Init(0, CBOR_CONTEXT_PARAM_COMMA & cose_error);
+
+	//  Look for invalid parameter
+	//		Null handle checks
+	//		bad handle checks
+	//		null pointers
+
+	CHECK_FAILURE(
+		COSE_CounterSign_map_get_int(hNULL, 1, COSE_BOTH, &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	CHECK_FAILURE(
+		COSE_CounterSign_map_get_int(hNULL, 1, COSE_BOTH, &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	CHECK_FAILURE(
+		COSE_CounterSign_map_get_int(hCounterSign, 1, COSE_BOTH, &cose_error),
+		COSE_ERR_INVALID_PARAMETER, CFails++);
+
+	CHECK_FAILURE(COSE_CounterSign_map_put_int(
+					  hNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	CHECK_FAILURE(COSE_CounterSign_map_put_int(
+					  hNULL, 1, cn, COSE_PROTECT_ONLY, &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	CHECK_FAILURE(COSE_CounterSign_map_put_int(
+					  hNULL, 1, NULL, COSE_PROTECT_ONLY, &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	CHECK_FAILURE(COSE_CounterSign_map_put_int(hCounterSign, 1, cn,
+					  COSE_PROTECT_ONLY | COSE_UNPROTECT_ONLY, &cose_error),
+		COSE_ERR_INVALID_PARAMETER, CFails++);
+
+	CHECK_FAILURE(COSE_Sign1_add_countersignature(hSign1, hBadHandle, &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	((COSE_CounterSign *)hCounterSign)->m_next = (COSE_CounterSign *)hBadHandle;
+	CHECK_FAILURE(
+		COSE_Sign1_add_countersignature(hSign1, hCounterSign, &cose_error),
+		COSE_ERR_INVALID_PARAMETER, CFails++);
+	CHECK_FAILURE(COSE_Sign1_get_countersignature(hSign1, 3, &cose_error),
+		COSE_ERR_INVALID_PARAMETER, CFails++);
+	((COSE_CounterSign *)hCounterSign)->m_next = NULL;
+	COSE_Sign1_add_countersignature(hSign1, hCounterSign, &cose_error);
+	CHECK_FAILURE(COSE_Sign1_get_countersignature(hSign1, 3, &cose_error),
+		COSE_ERR_INVALID_PARAMETER, CFails++);
+
+	CHECK_FAILURE(
+		COSE_CounterSign_SetExternal(hNULL, rgb, sizeof(rgb), &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	CHECK_FAILURE(
+		COSE_CounterSign_SetExternal(hBadHandle, rgb, sizeof(rgb), &cose_error),
+		COSE_ERR_INVALID_HANDLE, CFails++);
+	COSE_CounterSign_SetExternal(hCounterSign, rgb, sizeof(rgb), &cose_error);
+	
+	
+	CHECK_RETURN(!COSE_CounterSign_Free(hBadHandle), false, CFails++);
+
+	COSE_CounterSign_Free(hCounterSign);
+	COSE_Sign1_Free(hSign1);
+
+
+	
+}
diff --git a/test/test.c b/test/test.c
index b943227..1af4a38 100644
--- a/test/test.c
+++ b/test/test.c
@@ -865,6 +865,9 @@
 #if INCLUDE_ENCRYPT || INCLUDE_MAC
 	Recipient_Corners();
 #endif
+#if INCLUDE_COUNTERSIGNATURE
+	CounterSign_Corners();
+#endif
 }
 
 void RunMemoryTest(const char* szFileName)
@@ -906,6 +909,12 @@
 				if (IsContextEmpty(context) != 0) {
 					CFails += 1;
 				}
+#ifndef NDEBUG
+				if (!AreListsEmpty()) {
+					CFails += 1;
+					break;
+				}
+#endif
 				FreeContext(context);
 			}
 
@@ -919,6 +928,12 @@
 				if (IsContextEmpty(context) != 0) {
 					CFails += 1;
 				}
+#ifndef NDEBUG
+				if (!AreListsEmpty()) {
+					CFails += 1;
+					break;
+				}
+#endif
 				FreeContext(context);
 			}
 #else
diff --git a/test/test.h b/test/test.h
index 7fefe47..19a402f 100644
--- a/test/test.h
+++ b/test/test.h
@@ -21,6 +21,7 @@
 void Enveloped_Corners();
 void Encrypt_Corners();
 void Recipient_Corners();
+void CounterSign_Corners();
 
 //  sign.c
 
