diff --git a/src/Cose.c b/src/Cose.c
index dd2bb1a..930f42e 100644
--- a/src/Cose.c
+++ b/src/Cose.c
@@ -36,16 +36,7 @@
 	CHECK_CONDITION_CBOR(pobj->m_cbor != NULL, errState);
 	pobj->m_ownMsg = 1;
 
-#ifdef TAG_IN_ARRAY
-	if (msgType > 0) {
-		cn_cbor * cn = cn_cbor_int_create(msgType, CBOR_CONTEXT_PARAM_COMMA &errState);
-		CHECK_CONDITION_CBOR(cn != NULL, errState);
-		CHECK_CONDITION_CBOR(cn_cbor_array_append(pobj->m_cbor, cn, &errState), errState);
-		pobj->m_msgType = msgType;
-	}
-#else
 	pobj->m_msgType = msgType;
-#endif
 
 	pobj->m_unprotectMap = cn_cbor_map_create(CBOR_CONTEXT_PARAM_COMMA &errState);
 	CHECK_CONDITION_CBOR(pobj->m_unprotectMap != NULL, errState);
@@ -72,9 +63,6 @@
 {
 	const cn_cbor * pmap = NULL;
 	cn_cbor_errback errState; // = { 0 };
-#ifdef TAG_IN_ARRAY
-	cn_cbor * cbor;
-#endif // TAG_IN_ARRAY
 	cn_cbor_errback cbor_error;
 
 #ifdef USE_CBOR_CONTEXT
@@ -83,19 +71,10 @@
 	pobj->m_cborRoot = pcbor;
 	pobj->m_cbor = pcbor;
 
-#ifdef TAG_IN_ARRAY
-	cbor = cn_cbor_index(pobj->m_cbor, 0);
-	CHECK_CONDITION(cbor != NULL, COSE_ERR_INVALID_PARAMETER);
-
-	if (cbor->type == CN_CBOR_UINT) {
-		pobj->m_msgType = (int) cbor->v.uint;
-	}
-#else
 	//  Check if we have a tag
 	if (pcbor->type == CN_CBOR_TAG) {
 		pcbor = pobj->m_cbor = pcbor->first_child;
 	}
-#endif
 
 	pmap = _COSE_arrayget_int(pobj, INDEX_PROTECTED);
 
@@ -146,9 +125,6 @@
 {
 	cn_cbor * cbor = NULL;
 	cn_cbor * cborRoot = NULL;
-#ifdef TAG_IN_ARRAY
-	const cn_cbor * pType = NULL;
-#endif
 	cn_cbor_errback cbor_err;
 	HCOSE h;
 
@@ -157,14 +133,6 @@
 	cbor = cborRoot = cn_cbor_decode(rgbData, cbData, CBOR_CONTEXT_PARAM_COMMA &cbor_err);
 	CHECK_CONDITION_CBOR(cbor != NULL, cbor_err);
 
-#ifdef TAG_IN_ARRAY
-	CHECK_CONDITION(cbor->type == CN_CBOR_ARRAY, COSE_ERR_INVALID_PARAMETER);
-
-	pType = cn_cbor_index(cbor, 0);
-	CHECK_CONDITION(((pType != NULL) && (pType->type == CN_CBOR_UINT)), COSE_ERR_INVALID_PARAMETER);
-    *ptype = pType->v.sint;
-#else // ! TAG_IN_ARRAY
-
 	if (cbor->type == CN_CBOR_TAG) {
 		if (struct_type != 0) {
                     CHECK_CONDITION(struct_type == (COSE_object_type) cbor->v.sint, COSE_ERR_INVALID_PARAMETER);
@@ -180,7 +148,6 @@
 	}
 
 	CHECK_CONDITION(cbor->type == CN_CBOR_ARRAY, COSE_ERR_INVALID_PARAMETER);
-#endif // TAG_IN_ARRAY
 
 	switch (*ptype) {
 	case COSE_enveloped_object:
@@ -357,11 +324,7 @@
 	cn_cbor_context * context = &pMessage->m_allocContext;
 #endif // USE_CBOR_CONTEXT
 
-#ifdef TAG_IN_ARRAY
-	pProtected = cn_cbor_index(pMessage->m_cbor, INDEX_PROTECTED + (pMessage->m_msgType == 0 ? 0 : 1));
-#else
 	pProtected = cn_cbor_index(pMessage->m_cbor, INDEX_PROTECTED);
-#endif
 	if ((pProtected != NULL) &&(pProtected->type != CN_CBOR_INVALID)) {
 	errorReturn:
 		if (pbProtected != NULL) COSE_FREE(pbProtected, context);
@@ -476,17 +439,11 @@
 
 bool _COSE_array_replace(COSE * pMessage, cn_cbor * cb_value, int index, CBOR_CONTEXT_COMMA cn_cbor_errback * errp)
 {
-#ifdef TAG_IN_ARRAY
-	if (pMessage->m_msgType != 0) index += 1;
-#endif
 	return cn_cbor_array_replace(pMessage->m_cbor, cb_value, index, CBOR_CONTEXT_PARAM_COMMA errp);
 }
 
 cn_cbor * _COSE_arrayget_int(COSE * pMessage, int index)
 {
-#ifdef TAG_IN_ARRAY
-	if (pMessage->m_msgType != 0) index += 1;
-#endif
 	return cn_cbor_index(pMessage->m_cbor, index);
 }
 
diff --git a/src/Recipient.c b/src/Recipient.c
index b970106..1ba5f2c 100644
--- a/src/Recipient.c
+++ b/src/Recipient.c
@@ -88,15 +88,7 @@
 	pRecipient = (COSE_RecipientInfo *)COSE_CALLOC(1, sizeof(COSE_RecipientInfo), context);
 	CHECK_CONDITION(pRecipient != NULL, COSE_ERR_OUT_OF_MEMORY);
 
-#ifdef USE_ARRAY
 	CHECK_CONDITION(cbor->type == CN_CBOR_ARRAY, COSE_ERR_INVALID_PARAMETER);
-#else
-	if (cbor->type != CN_CBOR_MAP) {
-		if (errp != NULL) errp->err = COSE_ERR_INVALID_PARAMETER;
-		COSE_FREE(pRecipient, context);
-		return NULL;
-	}
-#endif
 
 	if (_COSE_Enveloped_Init_From_Object(cbor, &pRecipient->m_encrypt, CBOR_CONTEXT_PARAM_COMMA perr) == NULL) {
 		goto errorReturn;
diff --git a/src/cose.h b/src/cose.h
index 12be235..d63ce12 100644
--- a/src/cose.h
+++ b/src/cose.h
@@ -334,3 +334,5 @@
 extern cn_cbor * cn_cbor_clone(const cn_cbor * pIn, CBOR_CONTEXT_COMMA cn_cbor_errback * perr);
 extern cn_cbor * cn_cbor_tag_create(int tag, cn_cbor * child, CBOR_CONTEXT_COMMA cn_cbor_errback * perr);
 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);
+
