diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py
index 6e228abe8a09fe32a27d1ec5d6cecbc6eb248af1..d9ca54c855a9bd304fcc9c7f81ccb26392fa9cff 100644
--- a/python/dune/perftool/sumfact/vectorization.py
+++ b/python/dune/perftool/sumfact/vectorization.py
@@ -155,6 +155,29 @@ def stringify_vectorization_strategy(strategy):
     return result
 
 
+def short_stringify_vectorization_strategy(strategy):
+    """ A short string decribing the vectorization strategy. This is used
+    in costmodel validation plots to describe what a data point does
+    """
+    qp, strategy = strategy
+
+    def _short(k):
+        if isinstance(k, VectorizedSumfactKernel):
+            return str(k.horizontal_width)
+        else:
+            return "scalar"
+
+    stage1 = []
+    stage3 = []
+    for kernel in strategy.values():
+        if kernel.stage == 1:
+            stage1.append(_short(kernel))
+        if kernel.stage == 3:
+            stage3.append(_short(kernel))
+
+    return "m0={};S1:{};S3:{}".format(qp[0], "|".join(stage1), "|".join(stage3))
+
+
 def filter_active_inactive_sumfacts():
     # Retrieve all sum factorization kernels for stage 1 and 3
     from dune.perftool.generation import retrieve_cache_items
@@ -261,7 +284,7 @@ def level1_optimal_vectorization_strategy(sumfacts, width):
 
         # TODO: Depending on the number of samples, we might need a file lock here.
         with open(filename, 'a') as f:
-            f.write("{} {}".format(identifier, cost))
+            f.write(" ".join((identifier, str(cost), short_stringify_vectorization_strategy((qp, optimal_strategies[qp])))) + "\n")
 
     return qp, optimal_strategies[qp]