diff --git a/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java b/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java
index 5de6e62..732c7d5 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core.tests/src/org/eclipse/tracecompass/ctf/core/tests/types/VariantDeclarationTest.java
@@ -84,6 +84,7 @@
         VariantDefinition variantDefinition = new VariantDefinition(
                 variantDeclaration,
                 CtfTestTraceUtils.getTrace(testTrace),
+                tagDef,
                 "tag",
                 "tag",
                 new StringDefinition(
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF b/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF
index f3566fd..7aa5f0f 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF
+++ b/ctf/org.eclipse.tracecompass.ctf.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 2.3.0.qualifier
+Bundle-Version: 2.4.0.qualifier
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.tracecompass.ctf.core;singleton:=true
 Bundle-Activator: org.eclipse.tracecompass.internal.ctf.core.Activator
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java
index d445096..8b53d61 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/AbstractArrayDefinition.java
@@ -15,6 +15,7 @@
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.common.core.math.SaturatedArithmetic;
 import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
 
 /**
@@ -34,8 +35,7 @@
      * @param definitionScope
      *            the definition is in a scope, (normally a struct) what is it?
      * @param fieldName
-     *            the name of the definition. (it is a field in the parent
-     *            scope)
+     *            the name of the definition. (it is a field in the parent scope)
      */
     public AbstractArrayDefinition(IDeclaration declaration, @Nullable IDefinitionScope definitionScope, String fieldName) {
         super(declaration, definitionScope, fieldName);
@@ -56,4 +56,17 @@
      */
     public abstract int getLength();
 
+    @Override
+    public long size() {
+        List<@Nullable Definition> definitions = getDefinitions();
+        if (definitions.isEmpty()) {
+            return 0;
+        }
+        Definition definition = definitions.get(0);
+        if (definition == null) {
+            return 0;
+        }
+        return SaturatedArithmetic.multiply(getLength(), definition.size());
+    }
+
 }
\ No newline at end of file
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java
index 425ca18..df0b113 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/Definition.java
@@ -124,6 +124,11 @@
         return fDefinitionScope;
     }
 
+    @Override
+    public long size() {
+        return getDeclaration().getMaximumSize();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java
index f6733e9..7bbcdbe 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/EnumDefinition.java
@@ -31,7 +31,7 @@
     // Attributes
     // ------------------------------------------------------------------------
 
-    private final long fIntegerValue;
+    private final IntegerDefinition fInteger;
 
     private final String fValue;
 
@@ -55,8 +55,8 @@
             IDefinitionScope definitionScope, @NonNull String fieldName, IntegerDefinition intValue) {
         super(declaration, definitionScope, fieldName);
 
-        fIntegerValue = intValue.getValue();
-        fValue = declaration.query(fIntegerValue);
+        fInteger = intValue;
+        fValue = declaration.query(fInteger.getValue());
     }
 
     // ------------------------------------------------------------------------
@@ -86,7 +86,7 @@
      */
     @Override
     public Long getIntegerValue() {
-        return fIntegerValue;
+        return fInteger.getValue();
     }
 
     @Override
@@ -94,6 +94,11 @@
         return (EnumDeclaration) super.getDeclaration();
     }
 
+    @Override
+    public long size() {
+        return fInteger.size();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
@@ -101,7 +106,7 @@
     @Override
     public String toString() {
         return "{ value = " + getValue() + //$NON-NLS-1$
-                ", container = " + fIntegerValue + //$NON-NLS-1$
+                ", container = " + fInteger.getValue()+ //$NON-NLS-1$
                 " }"; //$NON-NLS-1$
     }
 }
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java
index b8482f1..751a0f6 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/FloatDefinition.java
@@ -72,6 +72,10 @@
         return (FloatDeclaration) super.getDeclaration();
     }
 
+    @Override
+    public long size() {
+        return getDeclaration().getMaximumSize();
+    }
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java
index 29b793c..7d47e43 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IDefinition.java
@@ -39,4 +39,14 @@
      */
     IDeclaration getDeclaration();
 
+    /**
+     * Get the size in bits
+     *
+     * @return the size in bits. Long#MAX_VALUE means unset.
+     * @since 2.4
+     */
+    default long size() {
+        return Long.MAX_VALUE;
+    }
+
 }
\ No newline at end of file
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java
index 72c2e3e..7e19f90 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/IntegerDefinition.java
@@ -89,6 +89,11 @@
     }
 
     @Override
+    public long size() {
+        return getDeclaration().getMaximumSize();
+    }
+
+    @Override
     public String getStringValue() {
         return this.toString();
     }
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java
index ef5d188..3377c65 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StringDefinition.java
@@ -73,6 +73,11 @@
         return fString;
     }
 
+    @Override
+    public long size() {
+        return fString.length();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java
index 48e85e6..eaada94 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/StructDefinition.java
@@ -18,6 +18,7 @@
 import java.util.Map;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.common.core.math.SaturatedArithmetic;
 import org.eclipse.tracecompass.ctf.core.event.scope.IDefinitionScope;
 import org.eclipse.tracecompass.ctf.core.event.scope.ILexicalScope;
 import org.eclipse.tracecompass.ctf.core.event.types.StructDeclaration.InternalDef;
@@ -140,6 +141,15 @@
         return (StructDeclaration) super.getDeclaration();
     }
 
+    @Override
+    public long size() {
+        long size = 0;
+        for (IDefinition def : fDefinitions) {
+            size = SaturatedArithmetic.add(size, def.size());
+        }
+        return size;
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java
index 06f7544..a61e13e 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDeclaration.java
@@ -134,7 +134,7 @@
                     definitionScope.getScopePath().getPath());
         }
         Definition fieldValue = fDeclarationToPopulate.createDefinition(definitionScope, fieldName, input);
-        return new VariantDefinition(this, definitionScope, varFieldName, fieldName, fieldValue);
+        return new VariantDefinition(this, definitionScope, tagDef, varFieldName, fieldName, fieldValue);
     }
 
     /**
diff --git a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java
index 22a1fd2..5af77ba 100644
--- a/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java
+++ b/ctf/org.eclipse.tracecompass.ctf.core/src/org/eclipse/tracecompass/ctf/core/event/types/VariantDefinition.java
@@ -35,6 +35,7 @@
     private final Definition fDefinition;
     private final String fCurrentField;
     private final String fFieldName;
+    private final EnumDefinition fTagDef;
 
     // ------------------------------------------------------------------------
     // Constructors
@@ -47,21 +48,44 @@
      *            the parent declaration
      * @param definitionScope
      *            the parent scope
+     * @param tagDef
+     *            the tagging definition
+     * @param selectedField
+     *            the selected field
+     * @param fieldName
+     *            the field name
+     * @param fieldValue
+     *            the field value
+     * @since 2.4
+     */
+    public VariantDefinition(@NonNull VariantDeclaration declaration, IDefinitionScope definitionScope, EnumDefinition tagDef, String selectedField, @NonNull String fieldName, Definition fieldValue) {
+        super(declaration, definitionScope, fieldName);
+
+        fTagDef = tagDef;
+        fFieldName = fieldName;
+        fCurrentField = selectedField;
+        fDefinition = fieldValue;
+    }
+
+    /**
+     * Constructor
+     *
+     * @param declaration
+     *            the parent declaration
+     * @param definitionScope
+     *            the parent scope
      * @param selectedField
      *            the selected field
      * @param fieldName
      *            the field name
      * @param fieldValue
      *            the field value
+     *            @deprecated use {@link VariantDefinition#VariantDefinition(VariantDeclaration, IDefinitionScope, EnumDefinition, String, String, Definition)} instead or trace splitting will break
      */
+    @Deprecated
     public VariantDefinition(@NonNull VariantDeclaration declaration,
             IDefinitionScope definitionScope, String selectedField, @NonNull String fieldName, Definition fieldValue) {
-        super(declaration, definitionScope, fieldName);
-
-        fFieldName = fieldName;
-        fCurrentField = selectedField;
-        fDefinition = fieldValue;
-
+        this(declaration, definitionScope, new EnumDefinition(new EnumDeclaration(IntegerDeclaration.INT_8_DECL), null, fieldName, new IntegerDefinition(IntegerDeclaration.INT_8_DECL, null, fieldName, -1)), selectedField, fieldName, fieldValue);
     }
 
     // ------------------------------------------------------------------------
@@ -91,6 +115,11 @@
         return fDefinition;
     }
 
+    @Override
+    public long size() {
+        return fDefinition.size() + fTagDef.size();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
