diff --git a/org.fortiss.tooling.ext.quality.ui/res/org/fortiss/tooling/ext/quality/ui/view/fx/MetricsViewFx.fxml b/org.fortiss.tooling.ext.quality.ui/res/org/fortiss/tooling/ext/quality/ui/view/fx/MetricsViewFx.fxml
index f9f1b276a874d380b0af363ea73619a23890221f..c8793af2a97d67391fdb35323edad113a4471db1 100644
--- a/org.fortiss.tooling.ext.quality.ui/res/org/fortiss/tooling/ext/quality/ui/view/fx/MetricsViewFx.fxml
+++ b/org.fortiss.tooling.ext.quality.ui/res/org/fortiss/tooling/ext/quality/ui/view/fx/MetricsViewFx.fxml
@@ -11,6 +11,7 @@
 <?import javafx.scene.control.TabPane?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.BorderPane?>
+<?import javafx.scene.layout.HBox?>
 <?import javafx.scene.text.Text?>
 
 <SplitPane fx:id="metricsSplitPane" dividerPositions="0.5" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" orientation="VERTICAL" prefHeight="400.0" prefWidth="1035.0" xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1">
@@ -28,7 +29,7 @@
                                     <PieChart fx:id="pieChart" prefHeight="184.0" prefWidth="1033.0" BorderPane.alignment="CENTER" />
                                  </center>
                                  <top>
-                                    <ChoiceBox fx:id="choiceBox" onAction="#onChoiceBoxChange" prefWidth="150.0" BorderPane.alignment="CENTER" />
+                                    <ChoiceBox fx:id="childMetricChoiceBox" onAction="#onChildMetricChoiceBoxChange" prefHeight="24.0" prefWidth="270.0" BorderPane.alignment="CENTER" />
                                  </top>
                               </BorderPane>
                               <BorderPane fx:id="borderPane" prefHeight="158.0" prefWidth="81.0" />
@@ -44,14 +45,26 @@
                      <children>
                         <SplitPane dividerPositions="0.5" prefHeight="336.0" prefWidth="1033.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                            <items>
-                              <ScatterChart fx:id="scatterChart">
-                                <xAxis>
-                                  <NumberAxis side="BOTTOM" />
-                                </xAxis>
-                                <yAxis>
-                                  <NumberAxis side="LEFT" />
-                                </yAxis>
-                              </ScatterChart>
+                              <BorderPane prefHeight="200.0" prefWidth="200.0">
+                                 <center>
+                                    <ScatterChart fx:id="scatterChart" prefHeight="322.0" prefWidth="540.0" BorderPane.alignment="CENTER">
+                                      <xAxis>
+                                        <NumberAxis side="BOTTOM" />
+                                      </xAxis>
+                                      <yAxis>
+                                        <NumberAxis side="LEFT" />
+                                      </yAxis>
+                                    </ScatterChart>
+                                 </center>
+                                 <top>
+                                    <HBox BorderPane.alignment="CENTER">
+                                       <children>
+                                          <ChoiceBox fx:id="yScatterMetricChoiceBox" onAction="#onScatterMetricChoiceBoxChange" prefHeight="24.0" prefWidth="270.0" />
+                                          <ChoiceBox fx:id="xScatterMetricChoiceBox" onAction="#onScatterMetricChoiceBoxChange" prefHeight="24.0" prefWidth="270.0" />
+                                       </children>
+                                    </HBox>
+                                 </top>
+                              </BorderPane>
                               <BarChart fx:id="barChart">
                                 <xAxis>
                                   <CategoryAxis side="BOTTOM" />
diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings
index 4bc1cc6f7a4140367155c9b5d696922ee3200871..1a4f853f0311d640eddcdd6d0f6b1f82b3c2213b 100644
--- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings
+++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings
@@ -1,3 +1,7 @@
 IModelQualityViewPart.java 708f8089645df12098ea67190805cce343045d2e YELLOW
+<<<<<<< HEAD
 ModelQualityFXController.java ec593e9c70ce70f4f2734cf6750cec8a844e6a47 YELLOW
+=======
+ModelQualityFXController.java 78b503c4344226585c0d57cb548787a3ddd649a6 RED
+>>>>>>> branch '4310' of https://git.fortiss.org/af3/kernel.git
 ModelQualityFXViewPart.java 179abf18d6e3b6c844076620f53b43ac8a42c217 YELLOW
diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java
index ec593e9c70ce70f4f2734cf6750cec8a844e6a47..c91a75f22247c3f373112bbf3e51212d13cdb96a 100644
--- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java
+++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java
@@ -17,7 +17,6 @@ package org.fortiss.tooling.ext.quality.ui.view.fx;
 
 import static javafx.scene.paint.Color.BLUE;
 import static javafx.scene.paint.Color.DARKGRAY;
-import static javafx.scene.paint.Color.GREEN;
 import static javafx.scene.paint.Color.LIGHTGRAY;
 import static org.fortiss.tooling.common.ui.javafx.style.FontStyle.BLACK_VERDANA_10PT;
 import static org.fortiss.tooling.common.ui.javafx.style.FontStyle.BLACK_VERDANA_12PT;
@@ -29,9 +28,12 @@ import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstParentWithType
 
 import java.text.DecimalFormat;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.viewers.ISelection;
@@ -60,6 +62,7 @@ import javafx.application.Platform;
 import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.scene.Node;
+import javafx.scene.chart.BarChart;
 import javafx.scene.chart.PieChart;
 import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
@@ -67,7 +70,9 @@ import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.Label;
 import javafx.scene.control.SplitPane;
 import javafx.scene.layout.BorderPane;
+import javafx.scene.paint.Color;
 import javafx.scene.text.Text;
+import javafx.util.Pair;
 
 /**
  * FX Controller for the Metrics view.
@@ -79,22 +84,41 @@ import javafx.scene.text.Text;
 public class ModelQualityFXController extends CompositeFXControllerBase<SplitPane, Node>
 		implements ISelectionListener, IMetricUpdateListener {
 
+	/**
+	 * Selection of colors for the overlays in the spider chart. The length of this array also
+	 * limits
+	 * the depth of the {@link ModelQualityFXController#lastViewedElements} list
+	 */
+	private static Color[] SPIDER_CHART_OVERLAY_COLORS = {Color.GREEN, Color.BLUE, Color.RED};
+
 	/** ChoiceBox for selecting the metric which shall be displayed. */
 	@FXML
-	private ChoiceBox<MetricKey> choiceBox;
+	private ChoiceBox<MetricKey> childMetricChoiceBox;
+
+	/** PieChart displaying the metrics. */
+	@FXML
+	private PieChart pieChart;
 
 	/** The bottom {@link BorderPane} for the spider chart. */
 	@FXML
 	private BorderPane borderPane;
 
-	/** PieChart displaying the metrics. */
+	/** ChoiceBox for selecting the metric displayed on the x axis of the scatter chart. */
 	@FXML
-	private PieChart pieChart;
+	private ChoiceBox<MetricKey> xScatterMetricChoiceBox;
+
+	/** ChoiceBox for selecting the metric displayed on the y axis of the scatter chart. */
+	@FXML
+	private ChoiceBox<MetricKey> yScatterMetricChoiceBox;
 
 	/** A scatter chart for displaying metrics. */
 	@FXML
 	private ScatterChart<Number, Number> scatterChart;
 
+	/** A bar chart for displaying metrics. */
+	@FXML
+	private BarChart<String, Number> barChart;
+
 	/** {@link Text} at the bottom of the view. */
 	@FXML
 	private Text bottomText;
@@ -102,6 +126,15 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan
 	/** Time format when displaying updating time. */
 	private final DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern("HH:mm:ss");
 
+	/**
+	 * The last {@link EObject} which the user has clicked. Might be null when no or an invalid
+	 * Object is selected.
+	 */
+	private EObject lastSelectedElement;
+
+	/** List of elements for which metrics were displayed */
+	private List<Pair<MetricTreeNode, Set<MetricKey>>> lastViewedElements = new ArrayList<>();
+
 	/** {@inheritDoc} */
 	@Override
 	public String getFXMLLocation() {
@@ -111,14 +144,9 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan
 	/** {@inheritDoc} */
 	@Override
 	public void initialize() {
-		choiceBox.getItems().addAll(MetricKey.values());
+		childMetricChoiceBox.getItems().addAll(MetricKey.values());
 	}
-
-	/**
-	 * The last {@link EObject} which the user has clicked. Might be null when no or an invalid Object is selected.
-	 */
-	private EObject lastSelectedElement;
-
+	
 	/** {@inheritDoc} */
 	@Override
 	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
@@ -164,6 +192,19 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan
 	public void onChoiceBoxChange() {
 		updateCharts("Invalid selection or metrics not available");
 	}
+	/**
+	 * Is triggered when the child metric choice box changes.
+	 */
+	public void onChildMetricChoiceBoxChange() {
+		updateCharts("Invalid selection or metrics not available");
+	}
+
+	/**
+	 * Is triggered when one of the scatter choice boxes changes.
+	 */
+	public void onScatterMetricChoiceBoxChange() {
+		updateCharts("Invalid selection or metrics not available");
+	}
 
 	/**
 	 * Updates the chart in the metric view.
@@ -180,69 +221,17 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan
 
 			if(node != null) {
 
-				Set<MetricKey> validKeys = new HashSet<>();
-				validKeys.addAll(node.getStoredDoubles().keySet());
-				validKeys.addAll(node.getStoredIntegers().keySet());
-				for(MetricTreeNode child : node.getChildren()) {
-					validKeys.addAll(child.getStoredDoubles().keySet());
-					validKeys.addAll(child.getStoredIntegers().keySet());
-				}
-
-				ObservableList<MetricKey> choices = choiceBox.getItems();
-				choices.retainAll(validKeys);
-				for(MetricKey key : validKeys) {
-					if(!choices.contains(key)) {
-						choices.add(key);
-					}
-				}
-
-				if(choiceBox.getValue() == null && !choices.isEmpty()) {
-					// Set choice box to first element in choices, if there are any choices and none
-					// is currently selected
-					choiceBox.setValue(choices.get(0));
-				}
+				updateChoiceBoxes(node);
 
 				if(!node.getChildren().isEmpty()) {
 
-					if(choiceBox.getValue() != null) {
-						SpiderChartViewer viewer = buildSpiderChart(node, choiceBox.getValue());
-						borderPane.setCenter(viewer.getViewerPane());
-
-						// Create PieChart and add data
-						pieChart.getData().clear();
-						pieChart.setLegendVisible(false);
-						pieChart.setTitle("");
-						DecimalFormat format = new DecimalFormat("0.#");
-
-						for(var child : node.getChildren()) {
-							Double value = child.getValueAsDouble(choiceBox.getValue());
-							if(value != null) {
-								PieChart.Data slice = new PieChart.Data(
-										child.getName() + ": " + format.format(value), value);
-								pieChart.getData().add(slice);
-							}
-						}
-					}
-					// scatterChart
-					scatterChart.getXAxis().setLabel("NUMBER_OF_TOTAL_LEAF_ELEMENTS");
-					scatterChart.getYAxis().setLabel("NUMBER_OF_TOTAL_CYCLOMATIC_COMPLEXITY");
-
-					scatterChart.getData().clear();
-
-					for(var child : node.getChildren()) {
-
-						Integer leafs = child.getStoredIntegers()
-								.get(MetricKey.NUMBER_OF_TOTAL_LEAF_ELEMENTS);
-						Integer complexity = child.getStoredIntegers()
-								.get(MetricKey.NUMBER_OF_TOTAL_CODE_CYCLOMATIC_COMPLEXITY);
-
-						if(leafs != null && complexity != null) {
-							// Add data to the chart
-							XYChart.Series<Number, Number> dataSeries = new XYChart.Series<>();
-							dataSeries.getData().add(new XYChart.Data<>(leafs, complexity));
-							scatterChart.getData().add(dataSeries);
-						}
-					}
+					updatePieChart(node);
+					updateScatterChart(node);
+					updateBarChart(node);
+
+					updateLastViewedElements(node);
+					SpiderChartViewer viewer = buildSpiderChart();
+					borderPane.setCenter(viewer.getViewerPane());
 
 					// Return, otherwise the data will be cleared
 					return;
@@ -260,56 +249,158 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan
 	}
 
 	/**
+	 * Updates the {@link #pieChart} with data from the provided {@link MetricTreeNode}
+	 * 
 	 * @param node
-	 *            of which the data will be visualized
-	 * @param key
-	 *            {@link MetricKey} of the data to visualize
-	 * @return {@link SpiderChartViewer} with the matching metrics
+	 *            which provides the data for this chart
 	 */
-	private static SpiderChartViewer buildSpiderChart(MetricTreeNode node, MetricKey key) {
-		SpiderChart spiderChart = new SpiderChart();
-		spiderChart.setLegendLabel("Legend");
-		ChartStyle chartStyle = new ChartStyle(true, true, true);
+	private void updatePieChart(MetricTreeNode node) {
+		MetricKey selectedMetric = childMetricChoiceBox.getValue();
+		if(selectedMetric != null) {
+
+			// Create PieChart and add data
+			pieChart.getData().clear();
+			pieChart.setLegendVisible(false);
+			pieChart.setTitle("");
+			DecimalFormat format = new DecimalFormat("0.#");
+
+			for(var child : node.getChildren()) {
+				Double value = child.getValueAsDouble(selectedMetric);
+				if(value != null) {
+					PieChart.Data slice =
+							new PieChart.Data(child.getName() + ": " + format.format(value), value);
+					pieChart.getData().add(slice);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Updates the {@link #scatterChart} with data from the provided {@link MetricTreeNode}
+	 * 
+	 * @param node
+	 *            which provides the data for this chart
+	 */
+	private void updateScatterChart(MetricTreeNode node) {
+		MetricKey xScatterKey = xScatterMetricChoiceBox.getValue();
+		MetricKey yScatterKey = yScatterMetricChoiceBox.getValue();
+		if(xScatterKey != null && yScatterKey != null) {
+
+			scatterChart.getXAxis().setLabel(xScatterKey.toString());
+			scatterChart.getYAxis().setLabel(yScatterKey.toString());
+
+			scatterChart.getData().clear();
+
+			for(var child : node.getChildren()) {
+
+				Double xValue = child.getValueAsDouble(xScatterKey);
+				Double yValue = child.getValueAsDouble(yScatterKey);
+
+				if(xValue != null && yValue != null) {
+					// Add data to the chart
+					XYChart.Series<Number, Number> dataSeries = new XYChart.Series<>();
+					dataSeries.setName(child.getName());
+					dataSeries.getData().add(new XYChart.Data<>(xValue, yValue));
+					scatterChart.getData().add(dataSeries);
+				}
+			}
+		}
+	}
 
-		List<MetricTreeNode> children = node.getChildren();
+	/**
+	 * Updates the {@link #barChart} with data from the provided {@link MetricTreeNode}
+	 * 
+	 * @param node
+	 *            which provides the data for this chart
+	 */
+	private void updateBarChart(MetricTreeNode node) {
+		MetricKey yScatterKey = yScatterMetricChoiceBox.getValue();
+		if(yScatterKey != null) {
+
+			barChart.getYAxis().setLabel(yScatterKey.toString());
+			barChart.getData().clear();
+
+			for(var child : node.getChildren()) {
+				Double yValue = child.getValueAsDouble(yScatterKey);
+
+				if(yValue != null) {
+					// Add data to the chart
+					XYChart.Series<String, Number> dataSeries = new XYChart.Series<>();
+					dataSeries.setName(child.getName());
+					dataSeries.getData().add(new XYChart.Data<>(child.getName(), yValue));
+					barChart.getData().add(dataSeries);
+				}
+			}
+		}
+	}
 
-		if(children.isEmpty()) {
-			return null;
+	/**
+	 * Creates a SpiderChart using the elements in
+	 * {@link ModelQualityFXController#lastViewedElements}. A set of keys which are present in all
+	 * elements in the list is created, and then these elements are overlaid.
+	 */
+	private SpiderChartViewer buildSpiderChart() {
+
+		// Calculate the intersection of the keys, i.e. a set of keys which have a non-null value in
+		// all elements of the lastViewedElements list
+		Set<MetricKey> keysIntersection = lastViewedElements.get(0).getValue();
+		for(var p : lastViewedElements) {
+			keysIntersection.retainAll(p.getValue());
 		}
 
-		double maxval = children.stream().map(p -> p.getValueAsDouble(key)).filter(p -> p != null)
-				.mapToDouble(p -> p).max().orElse(0.0);
+		// Create DataSeries for all elements
+		List<Pair<MetricTreeNode, DataSeries>> dataSeriesList = lastViewedElements.stream()
+				.map(pair -> new Pair<>(pair.getKey(), new DataSeries(pair.getKey().getName())))
+				.collect(Collectors.toList());
+
+		// Create SpiderChart and set basic styling
+		SpiderChart spiderChart = new SpiderChart();
+		spiderChart.setLegendLabel("Legend");
+		ChartStyle chartStyle = new ChartStyle(true, true, true);
 
 		chartStyle.setUseIndividualAxisSegments(false);
 		chartStyle.setTitleStyle(new FontStyle("Verdana", 14, BLUE.brighter()));
 
-		DataSeries elementData = new DataSeries("Data");
-		for(var child : node.getChildren()) {
-			Double value = child.getValueAsDouble(key);
-			String name = child.getName();
-			if(value == null) {
-				value = 0.0;
-			}
-			if(name == null) {
-				name = "Impossible null";
+		// Iterate over all keys, and add data points
+		for(MetricKey key : keysIntersection) {
+
+			// Calculate maximumValue for the range of the axis
+			Double maxmiumValue = lastViewedElements.stream()
+					.mapToDouble(p -> p.getKey().getValueAsDouble(key)).max().getAsDouble();
+
+			if(maxmiumValue == 0.0) {
+				// Don't display metrics where all values are zero
+				continue;
 			}
-			DoubleAxis testing = new DoubleAxis(name, 0.0, maxval);
 
+			// Create Axis and apply Styling
+			DoubleAxis doubleAxis = new DoubleAxis(key.toString(), 0.0, maxmiumValue);
 			AxisStyle aStyle3Segs = new AxisStyle(SOLID_BLACK_1PT, BLACK_VERDANA_14PT, 3,
 					BLACK_VERDANA_8PT, new DecimalFormat("#.##"));
-			chartStyle.setAxisStyle(testing, aStyle3Segs);
+			chartStyle.setAxisStyle(doubleAxis, aStyle3Segs);
 
-			spiderChart.addAxis(testing);
-			elementData.setPoint(testing, value);
+			spiderChart.addAxis(doubleAxis);
+			// Add the data point for this axis to all elements
+			for(var pair : dataSeriesList) {
+				pair.getValue().setPoint(doubleAxis, pair.getKey().getValueAsDouble(key));
+			}
 		}
-		spiderChart.addData(elementData);
 
-		LineStyle olive1pt = new LineStyle(GREEN);
-		FillStyle oliveFill = new FillStyle(GREEN, 0.25);
-		DataSeriesStyle iphoneStyle = new DataSeriesStyle(olive1pt, oliveFill, true, true,
-				BLACK_VERDANA_10PT, 7, new DecimalFormat("#.#"));
-		chartStyle.setDataSeriesStyle(elementData, iphoneStyle);
+		// Iterate over all dataSeries and add them to the spider chart
+		for(int i = 0; i < dataSeriesList.size(); i++) {
+			var pair = dataSeriesList.get(i);
+			spiderChart.addData(pair.getValue());
+
+			// Assign different colors to different data series
+			Color color = SPIDER_CHART_OVERLAY_COLORS[i];
+			LineStyle olive1pt = new LineStyle(color);
+			FillStyle oliveFill = new FillStyle(color, 0.25);
+			DataSeriesStyle style = new DataSeriesStyle(olive1pt, oliveFill, true, true,
+					BLACK_VERDANA_10PT, 7, new DecimalFormat("#.#"));
+			chartStyle.setDataSeriesStyle(pair.getValue(), style);
+		}
 
+		// Configure legend
 		LegendStyle legendStyle = new LegendStyle(false, 5, BLACK_VERDANA_12PT);
 		chartStyle.setLegendStyle(legendStyle);
 
@@ -344,4 +435,107 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan
 			updateCharts("Selection does not have metric information");
 		});
 	}
+
+	/**
+	 * Updates the {@link ModelQualityFXController#lastViewedElements} variable. It will add the
+	 * provided {@link MetricTreeNode} in the back of the list, and if the list is too long it will
+	 * remove the first element.
+	 * 
+	 * @param node
+	 *            which was selected
+	 */
+	private void updateLastViewedElements(MetricTreeNode node) {
+
+		// Create set of keys which store values in the ndoe
+		Set<MetricKey> keys = new HashSet<>();
+		keys.addAll(node.getStoredDoubles().keySet());
+		keys.addAll(node.getStoredIntegers().keySet());
+
+		// Check if the node is already part of the list, and skip adding it if it is
+		if(lastViewedElements.stream().allMatch(p -> p.getKey() != node)) {
+			lastViewedElements.add(new Pair<>(node, keys));
+		}
+
+		// Limit the amount of elements in the list to the amount of colors
+		if(lastViewedElements.size() > SPIDER_CHART_OVERLAY_COLORS.length) {
+			lastViewedElements.remove(0);
+		}
+	}
+
+	/**
+	 * Updates all choice boxes, such that they only allow the selection of keys for which we can
+	 * display data.
+	 * Keys for which the metric is 0.0 in all children are removed
+	 * 
+	 * @param node
+	 *            used to calculate the allowed keys
+	 */
+	private void updateChoiceBoxes(MetricTreeNode node) {
+		Set<MetricKey> validKeys = getAllChildrenKeys(node);
+
+		// This code removes choices for which all children have zero as value, which is not
+		// useful data to display
+		Iterator<MetricKey> iterator = validKeys.iterator();
+		while(iterator.hasNext()) {
+			MetricKey key = iterator.next();
+
+			// Check if the metric is non zero for any child
+			if(node.getChildren().stream().anyMatch(child -> child.getValueAsDouble(key) != 0.0)) {
+				// Continue to next child
+				continue;
+			}
+			// If all children have a zero value for the metric, remove the key
+			iterator.remove();
+		}
+
+		updateChoiceBox(childMetricChoiceBox, validKeys);
+		updateChoiceBox(xScatterMetricChoiceBox, validKeys);
+		updateChoiceBox(yScatterMetricChoiceBox, validKeys);
+	}
+
+	/**
+	 * Collects all keys for which values can be retrieved in at least on child
+	 * 
+	 * @param node
+	 *            for which children the keys should be selected
+	 * @return set of keys which have stored values
+	 */
+	private static Set<MetricKey> getAllChildrenKeys(MetricTreeNode node) {
+		// Get all keys which are stored in the children
+		Set<MetricKey> childrenKeys = new HashSet<>();
+		for(MetricTreeNode child : node.getChildren()) {
+			childrenKeys.addAll(child.getStoredDoubles().keySet());
+			childrenKeys.addAll(child.getStoredIntegers().keySet());
+		}
+		return childrenKeys;
+	}
+
+	/**
+	 * Updates the choice box, such that it will only give the option to select one of the provided
+	 * keys
+	 * 
+	 * @param choiceBox
+	 *            to be updated
+	 * @param validKeys
+	 *            which will be displayed for selection
+	 */
+	private static void updateChoiceBox(ChoiceBox<MetricKey> choiceBox, Set<MetricKey> validKeys) {
+		// Update choice box, so only valid choices can be selected
+		ObservableList<MetricKey> choices = choiceBox.getItems();
+		// Remove all non valid keys
+		choices.retainAll(validKeys);
+		// Add all keys not
+		for(MetricKey key : validKeys) {
+			if(!choices.contains(key)) {
+				choices.add(key);
+			}
+		}
+
+		// Check if a choice is selected, and that the choice is valid
+		if(!choices.isEmpty() &&
+				(choiceBox.getValue() == null || !choices.contains(choiceBox.getValue()))) {
+			// Set choice box to first element in choices, if there are any valid choices
+			choiceBox.setValue(choices.get(0));
+		}
+	}
 }
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/data/.ratings b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/data/.ratings
index 87fbb5c24b337f922020293c8491286939324e92..60d87b8aebad3573bcae1d1e960a9ce939da49d8 100644
--- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/data/.ratings
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/data/.ratings
@@ -1,4 +1,9 @@
+<<<<<<< HEAD
 DataRootElement.java d54ab629fc0dc9069586a3c7edfec0734e35dd86 YELLOW
 MetricDataManager.java f9e2d04edeb31f0af094d5ad92f6a573c1b90373 YELLOW
+=======
+DataRootElement.java d54ab629fc0dc9069586a3c7edfec0734e35dd86 RED
+MetricDataManager.java f9e2d04edeb31f0af094d5ad92f6a573c1b90373 RED
+>>>>>>> branch '4310' of https://git.fortiss.org/af3/kernel.git
 MetricKey.java aeca14c4ee3ee4bdcb7d18d8332981aa3d04604d YELLOW
 MetricTreeNode.java d89ef9aab7171a66ff7fc30c904e06f50d164ff9 YELLOW
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/.ratings b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/.ratings
index 77b450610d6927c320a5077414f7ad9bda498e59..b8085f71e2c82b5adb9f6ad26f9da1466fd0551e 100644
--- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/.ratings
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/.ratings
@@ -1,2 +1,7 @@
+<<<<<<< HEAD
 IModelQualityService.java b530e32826340efaa3872e110d71e1c3a720dc07 YELLOW
 ModelQualityService.java da65b2e0e657f13a01b914e7090dc7fa0b60eb87 YELLOW
+=======
+IModelQualityService.java f653e228ce55ad3a03d60a4a561664ee3213d7a5 RED
+ModelQualityService.java eb4009f2ed7c2188fccce6505b627684cdfa925e RED
+>>>>>>> branch '4310' of https://git.fortiss.org/af3/kernel.git
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java
index da65b2e0e657f13a01b914e7090dc7fa0b60eb87..3e6f13a34dc479371c6e818648507b1ce538a401 100644
--- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java
@@ -157,7 +157,7 @@ public class ModelQualityService extends EObjectAwareServiceBase<IMetricProvider
 	/**
 	 * Collects all metrics for all elements in the provided {@link ITopLevelElement}.
 	 * 
-	 * @param topLvl
+	 * @param topLevelElement
 	 *            the {@link ITopLevelElement} on which the analysis should be performed
 	 */
 	private void performMetricCollection(ITopLevelElement topLevelElement) {