diff --git a/dumper/dumper.c b/dumper/dumper.c
index d0923f2..024f718 100644
--- a/dumper/dumper.c
+++ b/dumper/dumper.c
@@ -265,7 +265,7 @@
     exit(1);
 }
 
-void DumpBytes(FILE * fp, const cn_cbor* cbor, int depth)
+void DumpBytes(FILE * fp, const cn_cbor* cbor)
 {
 	int i;
 	int fText = true;
@@ -400,7 +400,7 @@
 		break;
 
 	case CN_CBOR_BYTES:
-		DumpBytes(out, cbor, depth);
+		DumpBytes(out, cbor);
 		if ((pFOO != NULL) && (pFOO->children != NULL)) {
 			const cn_cbor * cbor3 = cn_cbor_decode(cbor->v.bytes, cbor->length CBOR_CONTEXT_PARAM, NULL);
 			if (cbor3 != NULL) {
diff --git a/src/Sign.c b/src/Sign.c
index fbf97bd..283e815 100644
--- a/src/Sign.c
+++ b/src/Sign.c
@@ -130,63 +130,44 @@
 	COSE_SignerInfo * pSigner = NULL;
 	const cn_cbor * cbor;
 	cn_cbor * cbor2 = NULL;
+	HCOSE_SIGNER hSigner = NULL;
+	cn_cbor_errback cbor_error;
 
 	if (!IsValidSignHandle(hSign) || (pkey == NULL)) {
 		if (perr != NULL) perr->err = COSE_ERR_INVALID_PARAMETER;
 	errorReturn:
 		if (cbor2 != NULL) CN_CBOR_FREE((void *) cbor2, context);
-		if (pSigner != NULL) _COSE_Signer_Free(pSigner);
+		if (hSigner != NULL) COSE_Signer_Free(hSigner);
 		return NULL;
 	}
 
-	switch (algId) {
-	case COSE_Algorithm_ECDSA_SHA_256:
-		cbor = cn_cbor_mapget_int(pkey, COSE_Key_Type);
-		CHECK_CONDITION(cbor != NULL, COSE_ERR_INVALID_PARAMETER);
-		CHECK_CONDITION((cbor->type == CN_CBOR_UINT) && (cbor->v.uint == COSE_Key_Type_EC2), COSE_ERR_INVALID_PARAMETER);
-		break;
-
-	default:
-		CHECK_CONDITION(false, COSE_ERR_INVALID_PARAMETER);
-	}
-
 #ifdef USE_CBOR_CONTEXT
 	context = &pMessage->m_message.m_allocContext;
 #endif
 
-	pSigner = (COSE_SignerInfo *)COSE_CALLOC(1, sizeof(COSE_SignerInfo), context);
-	CHECK_CONDITION(pSigner != NULL, COSE_ERR_OUT_OF_MEMORY);
+	hSigner = COSE_Signer_Init(context, perr);
+	if (hSigner == NULL) goto errorReturn;
 
-	if (!_COSE_Init(&pSigner->m_message, COSE_unknown_object, CBOR_CONTEXT_PARAM_COMMA perr)) goto errorReturn;
+
+	cbor2 = cn_cbor_int_create(algId, CBOR_CONTEXT_PARAM_COMMA &cbor_error);
+	CHECK_CONDITION_CBOR(cbor2 != NULL, cbor_error);
+	if (!COSE_Signer_map_put(hSigner, COSE_Header_Algorithm, cbor2, COSE_PROTECT_ONLY, perr)) goto errorReturn;
+	cbor2 = NULL;
 
 	cbor = cn_cbor_mapget_int(pkey, COSE_Key_ID);
 	if (cbor != NULL) {
 		CHECK_CONDITION(cbor->type == CN_CBOR_BYTES, COSE_ERR_INVALID_PARAMETER);
-		cbor2 = cn_cbor_data_create(cbor->v.bytes, (int) cbor->length, CBOR_CONTEXT_PARAM_COMMA NULL);
-		CHECK_CONDITION(cbor2 != NULL, COSE_ERR_CBOR);
-		CHECK_CONDITION(cn_cbor_mapput_int(pSigner->m_message.m_unprotectMap, COSE_Parameter_KID, cbor2, CBOR_CONTEXT_PARAM_COMMA NULL), COSE_ERR_CBOR);
+		cbor2 = cn_cbor_data_create(cbor->v.bytes, (int) cbor->length, CBOR_CONTEXT_PARAM_COMMA &cbor_error);
+		CHECK_CONDITION_CBOR(cbor2 != NULL, cbor_error);
+		if (!COSE_Signer_map_put(hSigner, COSE_Header_KID, cbor2, COSE_UNPROTECT_ONLY, perr)) goto errorReturn;
 		cbor2 = NULL;
 	}
 
-	pSigner->m_pkey = pkey;
+	if (!COSE_Signer_SetKey(hSigner, pkey, perr)) goto errorReturn;
 
-	pSigner->m_signerNext = pMessage->m_signerFirst;
-	pMessage->m_signerFirst = pSigner;
+	if (!COSE_Sign_AddSigner(hSign, hSigner, perr)) goto errorReturn;
 
-	cn_cbor * pSigners = cn_cbor_index(pMessage->m_message.m_cbor, INDEX_SIGNERS);   // M00BUG
-
-	if (pSigners == NULL) {
-		pSigners = cn_cbor_array_create(CBOR_CONTEXT_PARAM_COMMA NULL);
-		CHECK_CONDITION(pSigners != NULL, COSE_ERR_OUT_OF_MEMORY);
-		if (!_COSE_array_replace(&pMessage->m_message, pSigners, INDEX_SIGNERS, CBOR_CONTEXT_PARAM_COMMA NULL)) {
-			CN_CBOR_FREE(pSigners, context);
-			CHECK_CONDITION(false, COSE_ERR_CBOR);
-		}
-	}
-
-	CHECK_CONDITION(cn_cbor_array_append(pSigners, pSigner->m_message.m_cbor, NULL), COSE_ERR_CBOR);
-
-	return (HCOSE_SIGNER)pSigner;
+	return hSigner;
 }
 
 bool COSE_Sign_Sign(HCOSE_SIGN h, cose_errback * perr)
diff --git a/src/openssl.c b/src/openssl.c
index 214214d..7de84f1 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -709,7 +709,6 @@
 	byte rgbDigest[EVP_MAX_MD_SIZE];
 	unsigned int cbDigest = sizeof(rgbDigest);
 	byte  * pbSig = NULL;
-	unsigned int cbSig;
 	const EVP_MD * digest;
 #ifdef USE_CBOR_CONTEXT
 	cn_cbor_context * context = &pSigner->m_message.m_allocContext;
