diff --git a/trainbenchmark/trainbenchmark-reporting/combined.R b/trainbenchmark/trainbenchmark-reporting/combined.R
index bbf3b46590bf3367ead055e56564202a03e8b1af..7b6e4ffe4b38ba92b0aa5695a2f6c05a1acfefb5 100644
--- a/trainbenchmark/trainbenchmark-reporting/combined.R
+++ b/trainbenchmark/trainbenchmark-reporting/combined.R
@@ -88,7 +88,14 @@ for (scenario in c("inject", "repair")) {
     workloadSizes = sizes[["Repair"]]
 
     # filter the dataframe to the current phase
-    df = times.plot[times.plot$Phase == phase, ]
+    if (phase == "Read") {
+        df = times.plot[times.plot$Phase == phase,]
+        df = df[df$Tool != "TinkerGraph",]
+        df = df[df$Tool != "VIATRA (Incremental)",]
+    } else {
+        df = times.plot[times.plot$Phase == phase,]
+    }
+
 
     # do not visualize empty data sets
     if (nrow(df) == 0) {
@@ -175,13 +182,66 @@ for (scenario in c("inject", "repair")) {
       )
     fnTmp <- paste("../diagrams/recent/benchmark/", scenario, "/", phase.filename, "-", scenario, "-tmp.pdf", sep="")
     fn <- paste("../diagrams/recent/benchmark/", scenario, "/", phase.filename, "-", scenario, ".pdf", sep="")
-    ggsave(
+    if (phase == "Read") {
+      p = p + scale_y_log10(breaks = ybreaks, minor_breaks=yminor_breaks, labels = ylabels, limits = c(9e-1,3e4), expand = c(0, 0)) +
+          scale_colour_manual(values = c( "#56B4E9", "#56B4E9", # Sky blue - Name Lookup
+          "#009E73", "#009E73", # Bluish green - Intrinsic References
+          "#0072B2", "#0072B2", # Blue - Manual Serialization
+          "#E69F00", "#E69F00", # Orange - RelAST
+          "#D55E00", # Vermillion - Tinkergraph
+          "#CC79A7", # ReddishPurple - VIATRA
+          "#F0E442"  # Yellow
+          ),
+          labels = c(
+          "Name Lookup (Reflection-based Serializer)",
+          "Name Lookup (Reflection-based Serializer, Incremental)",
+          "Intrinsic References (Modified Reflection-based Serializer)",
+          "Intrinsic References (Modified Reflection-based Serializer, Incremental)",
+          "Relational RAGs (Hand-written Serializer)",
+          "Relational RAGs (Hand-written Serializer, Incremental)",
+          "Relational RAGs (Generated Serializer)",
+          "Relational RAGs (Generated Serializer, Incremental)"
+          )
+          ) +
+          scale_shape_manual( values = c(1,16, 0,15, 2,17, 5,18, 8,10),
+          labels = c(
+          "Name Lookup (Reflection-based Serializer)",
+          "Name Lookup (Reflection-based Serializer, Incremental)",
+          "Intrinsic References (Modified Reflection-based Serializer)",
+          "Intrinsic References (Modified Reflection-based Serializer, Incremental)",
+          "Relational RAGs (Hand-written Serializer)",
+          "Relational RAGs (Hand-written Serializer, Incremental)",
+          "Relational RAGs (Generated Serializer)",
+          "Relational RAGs (Generated Serializer, Incremental)"
+          ),
+          guide=guide_legend(ncol=2,nrow=4)
+          ) +
+          theme(
+          plot.title = element_blank(), # element_text(hjust = 0.5),
+          # text = element_text(family="Open Sans", size = 10),
+          # legend.key = element_blank(),
+          legend.title = element_blank(),
+          strip.text.x = element_blank(),
+          legend.position = "right", # "none", #
+          axis.text = element_text(size = 11)
+          #, panel.grid.minor = element_blank()
+          )
+      ggsave(
       plot = p,
       filename = fnTmp,
-      width = 100,
-      height = 130,
+      width = 200,
+      height = 100,
       units = "mm"
-    )
+      )
+    } else {
+      ggsave(
+        plot = p,
+        filename = fnTmp,
+        width = 100,
+        height = 130,
+        units = "mm"
+      )
+    }
     embed_fonts(fnTmp, outfile=fn)
     file.remove(fnTmp)