diff --git a/headless-services/commons/commons-yaml/pom.xml b/headless-services/commons/commons-yaml/pom.xml
index 6a0549c41..7a1058143 100644
--- a/headless-services/commons/commons-yaml/pom.xml
+++ b/headless-services/commons/commons-yaml/pom.xml
@@ -26,7 +26,6 @@
org.yamlsnakeyaml
- ${yaml-version}javax.inject
diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/ast/AstDumper.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/ast/AstDumper.java
new file mode 100644
index 000000000..a16a2c4e6
--- /dev/null
+++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/ast/AstDumper.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Pivotal, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Pivotal, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.springframework.ide.vscode.commons.yaml.ast;
+
+import org.yaml.snakeyaml.nodes.MappingNode;
+import org.yaml.snakeyaml.nodes.Node;
+import org.yaml.snakeyaml.nodes.NodeTuple;
+import org.yaml.snakeyaml.nodes.ScalarNode;
+import org.yaml.snakeyaml.nodes.SequenceNode;
+
+public class AstDumper {
+
+ public static void dump(Node node, int indent) {
+ if (node instanceof MappingNode) {
+ for (NodeTuple entry : ((MappingNode)node).getValue()) {
+ println(indent, NodeUtil.asScalar(entry.getKeyNode())+":");
+ dump(entry.getValueNode(), indent+1);
+ }
+ } else if (node instanceof SequenceNode) {
+ for (Node el : ((SequenceNode)node).getValue()) {
+ println(indent, "[");
+ dump(el, indent+1);
+ println(indent, "]");
+ }
+ } else if (node instanceof ScalarNode) {
+ println(indent, NodeUtil.asScalar(node));
+ } else {
+ println(indent, "???"+node.getClass().getSimpleName());
+ }
+ }
+
+ private static void println(int indent, String string) {
+ indent(indent);
+ System.out.println(string);
+ }
+
+ private static void indent(int indent) {
+ for (int i = 0; i < indent; i++) {
+ System.out.print(" ");
+ }
+ }
+}
diff --git a/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/ast/NodeMergeSupport.java b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/ast/NodeMergeSupport.java
new file mode 100644
index 000000000..59320b1c3
--- /dev/null
+++ b/headless-services/commons/commons-yaml/src/main/java/org/springframework/ide/vscode/commons/yaml/ast/NodeMergeSupport.java
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2008, 2019 http://www.snakeyaml.org and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ *
+ * 2008 - http://www.snakeyaml.org original api and implementation.
+ * 2019 - Copied and modified by Pivotal.
+ */
+package org.springframework.ide.vscode.commons.yaml.ast;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.ide.vscode.commons.languageserver.reconcile.IProblemCollector;
+import org.springframework.ide.vscode.commons.yaml.reconcile.YamlSchemaProblems;
+import org.yaml.snakeyaml.nodes.MappingNode;
+import org.yaml.snakeyaml.nodes.Node;
+import org.yaml.snakeyaml.nodes.NodeTuple;
+import org.yaml.snakeyaml.nodes.SequenceNode;
+import org.yaml.snakeyaml.nodes.Tag;
+
+/**
+ * Bits and pieces copied from snakeyaml library to support dealing with '<<' merge
+ * nodes.
+ *
+ * Some modifications made to support our own use-cases.
+ */
+public class NodeMergeSupport {
+
+ private IProblemCollector problems;
+
+ public NodeMergeSupport(IProblemCollector problems) {
+ this.problems = problems;
+ }
+
+ public void flattenMapping(MappingNode node) {
+ // perform merging only on nodes containing merge node(s)
+ //processDuplicateKeys(node);
+ if (node.isMerged()) {
+ node.setValue(mergeNode(node, true, new HashMap