#define METER_CERT_MAX_SIZE    4096
 #define STATE_MAX_NUM_LICENSES 16
 #define STATE_MAX_NUM_IN_BUNDLE        (uint32_t)8
-#define METER_MAX_NUM_BUNDLES  8
 
 #define __round_mask(x, y) ((__typeof__(x))((y) - 1))
 #define round_up(x, y) ((((x) - 1) | __round_mask(x, y)) + 1)
        uint32_t encoding;
        uint32_t counter;
 };
+#define METER_BUNDLE_SIZE sizeof(struct bundle_encoding_counter)
+#define BUNDLE_COUNT(length) ((length) / METER_BUNDLE_SIZE)
+#define METER_MAX_NUM_BUNDLES                                                  \
+               ((METER_CERT_MAX_SIZE - sizeof(struct meter_certificate)) /     \
+                sizeof(struct bundle_encoding_counter))
 
 struct sdsi_dev {
        struct sdsi_regs regs;
                return -1;
        }
 
-       if (mc->bundle_length > METER_MAX_NUM_BUNDLES * 8)  {
-               fprintf(stderr, "More than %d bundles: %d\n",
-                       METER_MAX_NUM_BUNDLES, mc->bundle_length / 8);
+       if (mc->bundle_length > METER_MAX_NUM_BUNDLES * METER_BUNDLE_SIZE)  {
+               fprintf(stderr, "More than %ld bundles: actual %ld\n",
+                       METER_MAX_NUM_BUNDLES, BUNDLE_COUNT(mc->bundle_length));
                return -1;
        }