diff --git a/include/cmp_max_used_bits.h b/include/cmp_max_used_bits.h
index ba9db083a6c5d4de814a83f8fabfc2a0f4461656..ac936c757a1dc4b5e8ff99b54e97eb32482a3854 100644
--- a/include/cmp_max_used_bits.h
+++ b/include/cmp_max_used_bits.h
@@ -22,6 +22,10 @@
 #include <stdint.h>
 
 
+/* Up to this number (not included), the maximum used bits registry versions cannot be used by the user. */
+#define CMP_MAX_USED_BITS_RESERVED_VERSIONS 32
+
+
 /* predefined maximum used bits registry constants */
 extern const struct cmp_max_used_bits MAX_USED_BITS_SAFE;
 extern const struct cmp_max_used_bits MAX_USED_BITS_V1;
diff --git a/lib/cmp_max_used_bits_list.c b/lib/cmp_max_used_bits_list.c
index f302bb6a056fbf7a3c543640371749aa723b7c20..dfcec17a1856829e03a9a41feecaef150f10f121 100644
--- a/lib/cmp_max_used_bits_list.c
+++ b/lib/cmp_max_used_bits_list.c
@@ -79,9 +79,10 @@ int cmp_max_used_bits_list_add(struct cmp_max_used_bits const *item)
 
 	if (!item)
 		return -1;
-	if (item->version <= 16)
+	if (item->version < CMP_MAX_USED_BITS_RESERVED_VERSIONS)
 		return -1;
 
+	/* check for an existing entry */
 	list_for_each_entry(item_ptr, &max_used_bits_list, list) {
 		if (item_ptr->data.version == item->version) {
 			item_ptr->data = *item; /* replace existing list entry */
diff --git a/test/cmp_icu/test_decmp.c b/test/cmp_icu/test_decmp.c
index 4b12d08ba8f0981319f7e1f1ff52238c73519500..37d31092a4d6b6cfec6edab459e9ff2f18087b0d 100644
--- a/test/cmp_icu/test_decmp.c
+++ b/test/cmp_icu/test_decmp.c
@@ -1420,7 +1420,7 @@ void test_cmp_ent_write_cmp_pars(void)
 	cfg.cmp_par_mean = 7;
 	cfg.cmp_par_variance = 8;
 	cfg.cmp_par_pixels_error = 9;
-	cfg.max_used_bits = NULL; /* test without max_used_bits registry */
+	cfg.max_used_bits = cmp_max_used_bits_list_get(42);
 
 	/* create a compression entity */
 	size = cmp_ent_create(NULL, cfg.data_type, cfg.cmp_mode == CMP_MODE_RAW, 12);
@@ -1439,7 +1439,7 @@ void test_cmp_ent_write_cmp_pars(void)
 	TEST_ASSERT_EQUAL_INT(cmp_cal_size_of_data(cfg.samples, cfg.data_type), cmp_ent_get_original_size(ent));
 	TEST_ASSERT_EQUAL_INT(cfg.cmp_mode, cmp_ent_get_cmp_mode(ent));
 	TEST_ASSERT_EQUAL_INT(cfg.model_value, cmp_ent_get_model_value(ent));
-	TEST_ASSERT_EQUAL_INT(0, cmp_ent_get_max_used_bits_version(ent));
+	TEST_ASSERT_EQUAL_INT(max_used_bits.version, cmp_ent_get_max_used_bits_version(ent));
 	TEST_ASSERT_EQUAL_INT(cfg.round, cmp_ent_get_lossy_cmp_par(ent));
 
 
@@ -1460,7 +1460,6 @@ void test_cmp_ent_write_cmp_pars(void)
 	TEST_ASSERT_FALSE(error);
 	cfg.icu_output_buf = cmp_ent_get_data_buf(ent); /* quick fix that both cfg are equal */
 	cfg.buffer_length = 12; /* quick fix that both cfg are equal */
-	cfg.max_used_bits = &MAX_USED_BITS_SAFE; /* quick fix that both cfg are equal */
 	TEST_ASSERT_EQUAL_MEMORY(&cfg, &cfg_read, sizeof(struct cmp_cfg));
 
 	free(ent);
diff --git a/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c b/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c
index 98d06072b694a6fd1fe2013d585c133fe413cc11..1ffd4e4f4866b06a7521503ae7320988bab2c005 100644
--- a/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c
+++ b/test/cmp_max_used_bits/test_cmp_max_used_bits_list.c
@@ -18,12 +18,12 @@
 
 
 #include <string.h>
-#include <dlfcn.h>
 
 #include <unity.h>
 
 #include <cmp_max_used_bits_list.h>
 
+#ifndef __sparc__
 /* if set the mock malloc will fail (return NULL) */
 static int malloc_fail;
 
@@ -32,6 +32,7 @@ static int malloc_fail;
  * mock of the malloc function; can controlled with the global malloc_fail variable
  * see:https://jayconrod.com/posts/23/tutorial--function-interposition-in-linux
  */
+#include <dlfcn.h>
 
 void* malloc(size_t size)
 {
@@ -49,6 +50,7 @@ void* malloc(size_t size)
 	fprintf(stderr, "malloc(%zu)\n", size);
 	return real_malloc(size);
 }
+#endif
 
 
 /**
@@ -60,31 +62,31 @@ void* malloc(size_t size)
 
 void test_cmp_max_used_bits_list(void)
 {
-	struct cmp_max_used_bits i_17, i_21, i_22, i_23, i_255, i_0;
+	struct cmp_max_used_bits i_32, i_34, i_35, i_36, i_255, i_0;
 	struct cmp_max_used_bits *p;
 	int return_val;
 
 	/* set up max_used_bits item */
-	memset(&i_17, 17, sizeof(struct cmp_max_used_bits));
-	i_17.version = 17;
-	memset(&i_21, 21, sizeof(struct cmp_max_used_bits));
-	i_21.version = 21;
-	memset(&i_22, 22, sizeof(struct cmp_max_used_bits));
-	i_22.version = 22;
-	memset(&i_23, 23, sizeof(struct cmp_max_used_bits));
-	i_23.version = 23;
+	memset(&i_32, 32, sizeof(struct cmp_max_used_bits));
+	i_32.version = 32;
+	memset(&i_34, 34, sizeof(struct cmp_max_used_bits));
+	i_34.version = 34;
+	memset(&i_35, 35, sizeof(struct cmp_max_used_bits));
+	i_35.version = 35;
+	memset(&i_36, 36, sizeof(struct cmp_max_used_bits));
+	i_36.version = 36;
 	memset(&i_255, 0xFF, sizeof(struct cmp_max_used_bits));
 	i_255.version = 255;
 	memset(&i_0, 0, sizeof(struct cmp_max_used_bits));
 	i_0.version = 0;
 
-	return_val = cmp_max_used_bits_list_add(&i_17);
+	return_val = cmp_max_used_bits_list_add(&i_32);
 	TEST_ASSERT_EQUAL_INT(return_val, 0);
-	return_val = cmp_max_used_bits_list_add(&i_21);
+	return_val = cmp_max_used_bits_list_add(&i_34);
 	TEST_ASSERT_EQUAL_INT(return_val, 0);
-	return_val = cmp_max_used_bits_list_add(&i_22);
+	return_val = cmp_max_used_bits_list_add(&i_35);
 	TEST_ASSERT_EQUAL_INT(return_val, 0);
-	return_val = cmp_max_used_bits_list_add(&i_23);
+	return_val = cmp_max_used_bits_list_add(&i_36);
 	TEST_ASSERT_EQUAL_INT(return_val, 0);
 	return_val = cmp_max_used_bits_list_add(&i_255);
 	TEST_ASSERT_EQUAL_INT(return_val, 0);
@@ -94,29 +96,29 @@ void test_cmp_max_used_bits_list(void)
 	TEST_ASSERT_EQUAL_INT(return_val, -1);
 	return_val = cmp_max_used_bits_list_add(&i_0);
 	TEST_ASSERT_EQUAL_INT(return_val, -1);
-	i_0.version = 16;
+	i_0.version = CMP_MAX_USED_BITS_RESERVED_VERSIONS-1;
 	return_val = cmp_max_used_bits_list_add(&i_0);
 	TEST_ASSERT_EQUAL_INT(return_val, -1);
 
-	p = cmp_max_used_bits_list_get(17);
-	TEST_ASSERT_EQUAL_INT(p->version, 17);
-	TEST_ASSERT(!memcmp(p, &i_17, sizeof(struct cmp_max_used_bits)));
+	p = cmp_max_used_bits_list_get(32);
+	TEST_ASSERT_EQUAL_INT(p->version, 32);
+	TEST_ASSERT(!memcmp(p, &i_32, sizeof(struct cmp_max_used_bits)));
 
-	p = cmp_max_used_bits_list_get(23);
-	TEST_ASSERT_EQUAL_INT(p->version, 23);
-	TEST_ASSERT(!memcmp(p, &i_23, sizeof(struct cmp_max_used_bits)));
+	p = cmp_max_used_bits_list_get(36);
+	TEST_ASSERT_EQUAL_INT(p->version, 36);
+	TEST_ASSERT(!memcmp(p, &i_36, sizeof(struct cmp_max_used_bits)));
 
-	p = cmp_max_used_bits_list_get(22);
-	TEST_ASSERT_EQUAL_INT(p->version, 22);
-	TEST_ASSERT(!memcmp(p, &i_22, sizeof(struct cmp_max_used_bits)));
+	p = cmp_max_used_bits_list_get(35);
+	TEST_ASSERT_EQUAL_INT(p->version, 35);
+	TEST_ASSERT(!memcmp(p, &i_35, sizeof(struct cmp_max_used_bits)));
 
 	p = cmp_max_used_bits_list_get(255);
 	TEST_ASSERT_EQUAL_INT(p->version, 255);
 	TEST_ASSERT(!memcmp(p, &i_255, sizeof(struct cmp_max_used_bits)));
 
-	p = cmp_max_used_bits_list_get(21);
-	TEST_ASSERT_EQUAL_INT(p->version, 21);
-	TEST_ASSERT(!memcmp(p, &i_21, sizeof(struct cmp_max_used_bits)));
+	p = cmp_max_used_bits_list_get(34);
+	TEST_ASSERT_EQUAL_INT(p->version, 34);
+	TEST_ASSERT(!memcmp(p, &i_34, sizeof(struct cmp_max_used_bits)));
 
 	p = cmp_max_used_bits_list_get(0);
 	TEST_ASSERT_EQUAL_INT(p->version, 0);
@@ -135,30 +137,30 @@ void test_cmp_max_used_bits_list(void)
 
 
 	/* overwrite a list item */
-	memset(&i_22, 0x42, sizeof(struct cmp_max_used_bits));
-	i_22.version = 22;
-	return_val = cmp_max_used_bits_list_add(&i_22);
+	memset(&i_35, 0x42, sizeof(struct cmp_max_used_bits));
+	i_35.version = 35;
+	return_val = cmp_max_used_bits_list_add(&i_35);
 	TEST_ASSERT_EQUAL_INT(return_val, 1);
-	p = cmp_max_used_bits_list_get(22);
-	TEST_ASSERT_EQUAL_INT(p->version, 22);
-	TEST_ASSERT(!memcmp(p, &i_22, sizeof(struct cmp_max_used_bits)));
+	p = cmp_max_used_bits_list_get(35);
+	TEST_ASSERT_EQUAL_INT(p->version, 35);
+	TEST_ASSERT(!memcmp(p, &i_35, sizeof(struct cmp_max_used_bits)));
 
 	/* delete item */
-	cmp_max_used_bits_list_delet(22);
-	p = cmp_max_used_bits_list_get(22);
+	cmp_max_used_bits_list_delet(35);
+	p = cmp_max_used_bits_list_get(35);
 	TEST_ASSERT_NULL(p);
 
-	cmp_max_used_bits_list_delet(21);
-	p = cmp_max_used_bits_list_get(21);
+	cmp_max_used_bits_list_delet(34);
+	p = cmp_max_used_bits_list_get(34);
 	TEST_ASSERT_NULL(p);
 
 	/* empty item */
 	cmp_max_used_bits_list_empty();
-	p = cmp_max_used_bits_list_get(23);
+	p = cmp_max_used_bits_list_get(36);
 	TEST_ASSERT_NULL(p);
 
 	cmp_max_used_bits_list_empty();
-	p = cmp_max_used_bits_list_get(21);
+	p = cmp_max_used_bits_list_get(34);
 	TEST_ASSERT_NULL(p);
 
 	p = cmp_max_used_bits_list_get(0);
@@ -169,18 +171,20 @@ void test_cmp_max_used_bits_list(void)
 	TEST_ASSERT_EQUAL_INT(p->version, 1);
 	TEST_ASSERT(!memcmp(p, &MAX_USED_BITS_V1, sizeof(struct cmp_max_used_bits)));
 
-	return_val = cmp_max_used_bits_list_add(&i_23);
+	return_val = cmp_max_used_bits_list_add(&i_36);
 	TEST_ASSERT_EQUAL_INT(return_val, 0);
 
-	p = cmp_max_used_bits_list_get(23);
-	TEST_ASSERT_EQUAL_INT(p->version, 23);
-	TEST_ASSERT(!memcmp(p, &i_23, sizeof(struct cmp_max_used_bits)));
+	p = cmp_max_used_bits_list_get(36);
+	TEST_ASSERT_EQUAL_INT(p->version, 36);
+	TEST_ASSERT(!memcmp(p, &i_36, sizeof(struct cmp_max_used_bits)));
 
 	cmp_max_used_bits_list_empty();
 
 	/* error case */
+#ifndef __sparc__
 	malloc_fail = 1;
-	return_val = cmp_max_used_bits_list_add(&i_23);
+	return_val = cmp_max_used_bits_list_add(&i_36);
 	TEST_ASSERT_EQUAL_INT(return_val, -1);
 	malloc_fail = 0;
+#endif
 }