diff --git a/lib/c/experimental/labcomm_sig_parser.c b/lib/c/experimental/labcomm_sig_parser.c
index 23e3758a91fcfc150d1817911c8625110489bef2..7c95b652a96bedee7fda683fbecf007fa89a87e7 100644
--- a/lib/c/experimental/labcomm_sig_parser.c
+++ b/lib/c/experimental/labcomm_sig_parser.c
@@ -401,11 +401,13 @@ int accept_packet(labcomm_sig_parser_t *d) {
 		advancen(d, nbytes);
 		d->current_decl_is_varsize = FALSE; // <-- a conveniance flag in labcomm_sig_parser_t
 		VERBOSE_PRINTF("type_decl ");
+        get_varint(d); //ignore length field
 		accept_signature(d);
 	} else if (type == SAMPLE_DECL) {
 		d->current_decl_is_varsize = FALSE; // <-- a conveniance flag in labcomm_sig_parser_t
 		advancen(d, nbytes);
 		VERBOSE_PRINTF("sample_decl ");
+        get_varint(d); //ignore length field
 		accept_signature(d);
 	} else if(type >= LABCOMM_USER) {
 #ifdef EXIT_WHEN_RECEIVING_DATA
@@ -603,14 +605,19 @@ static int accept_sample_data(labcomm_sig_parser_t *d){
 	accept_user_id(d);
 	unsigned int uid = pop_val(d);	
 	printf("sample data... uid=0x%x\n", uid);
+    int len = get_varint(d); //length field
 #ifdef DEBUG
 	dump_signature(d, uid);
 #endif
+#ifdef SKIP_BY_PARSING
 	labcomm_signature_t *sigt = get_sig_t(d, uid);
 	int encoded_size = sigt->encoded_size(sigt, NULL);
 	INFO_PRINTF("encoded_size from sig: %d\n", encoded_size);
 	labcomm_signature_t *sig = get_sig_t(d, uid);
 	skip_packed_sample_data(d, sig);
+#else
+	advancen(d, len);
+#endif
 	return TRUE;
 }