diff --git a/.gitignore b/.gitignore
index 08c3a9f..4da9c5f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,6 +30,8 @@
 /nbbuild/testuserdir/
 /nbbuild/*.zip
 /nbbuild/user.build.properties
+/nbbuild/gitinfo.properties
+/nbbuild/netbeansrelease.properties
 /nbi/engine/native/*/*/dist/
 /nb-javac/
 /java.source.nbjavac/test/test-nb-javac/nbproject/private/
diff --git a/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java b/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java
index 8f00c7b..c5ca1cf 100644
--- a/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java
+++ b/java/java.j2seplatform/src/org/netbeans/modules/java/j2seplatform/platformdefinition/J2SEPlatformDefaultJavadocImpl.java
@@ -61,7 +61,7 @@
         OFFICIAL_JAVADOC.put("10", "https://docs.oracle.com/javase/10/docs/api/"); // NOI18N
         OFFICIAL_JAVADOC.put("11", "https://docs.oracle.com/en/java/javase/11/docs/api/"); // NOI18N
         OFFICIAL_JAVADOC.put("12", "https://docs.oracle.com/en/java/javase/12/docs/api/"); // NOI18N
-        OFFICIAL_JAVADOC.put("13", "https://download.java.net/java/early_access/jdk13/docs/api/"); // NOI18N Early access
+        OFFICIAL_JAVADOC.put("13", "https://docs.oracle.com/en/java/javase/13/docs/api/"); // NOI18N
         OFFICIAL_JAVADOC.put("14", "https://download.java.net/java/early_access/jdk14/docs/api/"); // NOI18N Early access
     }
 
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java b/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java
deleted file mode 100644
index 9aaff2f..0000000
--- a/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-package org.netbeans.nbbuild;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.ExecTask;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Just like {@code <exec>} but fixes the executable as {@code hg} (Mercurial).
- * The advantage is that it also checks for variants like {@code hg.cmd} etc.
- * See issue #134636.
- */
-public class HgExec extends ExecTask {
-
-    public HgExec() {
-        List<String> cmd = hgExecutable();
-        super.setExecutable(cmd.get(0));
-        for (String arg : cmd.subList(1, cmd.size())) {
-            createArg().setValue(arg);
-        }
-    }
-
-    @Override
-    public void setCommand(Commandline cmdl) {
-        throw new BuildException("Cannot call this");
-    }
-
-    @Override
-    public void setExecutable(String value) {
-        throw new BuildException("Cannot call this");
-    }
-
-    /**
-     * Get a command to run Mercurial.
-     * For Windows users, {@link Runtime#exec} does not work directly on {@code *.bat} / {@code *.cmd} files.
-     * Find what the desired Hg executable form is in the path and call it appropriately.
-     */
-    public static List<String> hgExecutable() {
-        String path = System.getenv("Path");
-        if (path != null) {
-            for (String component : path.split(File.pathSeparator)) {
-                if (new File(component, "hg.bat").isFile() || new File(component, "hg.cmd").isFile()) {
-                    return Arrays.asList("cmd", "/c", "hg");
-                } else if (new File(component, "hg.exe").isFile() || new File(component, "hg").isFile()) {
-                    return Collections.singletonList("hg");
-                }
-            }
-        }
-        return Collections.singletonList("git");
-    }
-
-}
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/ParseGitBranch.java b/nbbuild/antsrc/org/netbeans/nbbuild/ParseGitBranch.java
deleted file mode 100644
index 0c66f31..0000000
--- a/nbbuild/antsrc/org/netbeans/nbbuild/ParseGitBranch.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.netbeans.nbbuild;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import java.io.Reader;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.LineNumberReader;
-
-/**
- *
- * @author skygo
- */
-public class ParseGitBranch extends Task {
-
-    /**
-     * data to parse
-     */
-    private String data;
-
-    public void setData(String data) {
-        this.data = data;
-    }
-
-    /**
-     * properties to set
-     */
-    private String propertyName;
-
-    public void setProperty(String propertyName) {
-        this.propertyName = propertyName;
-    }
-
-    @Override
-    public void execute() throws BuildException {
-        super.execute();
-        Reader dataReader = new StringReader(data);
-        String firstLine = null;
-        String secondLine = null;
-        try (LineNumberReader r = new LineNumberReader(dataReader);) {
-            firstLine = r.readLine();
-            secondLine = r.readLine();
-        } catch (IOException ex) {
-            throw new BuildException("Problem reading information for detached head");
-        }
-        //if (secondLine != null) {
-        //    throw new BuildException("Problem parsing git information for detached head : too many line");
-        //}
-        if (secondLine != null || firstLine == null || firstLine.trim().isEmpty()) {
-            // Assume master if PR or detached HEAD on Travis, etc.
-            getProject().setProperty(propertyName, "master");
-        } else {
-            String[] splited = firstLine.trim().split(" ");
-            long count = splited[0].chars().filter(ch -> ch == '/').count();
-            if (count != 1) {
-                throw new BuildException("Problem parsing git information" + count);
-            } else {
-                getProject().setProperty(propertyName, splited[0].split("/")[1]);
-            }
-        }
-    }
-}
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java b/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java
index a51b420..31bbf68 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -115,7 +116,8 @@
         }
         // sort all information
         Collections.sort(ri);
-        // build a sorted xml 
+        // build a sorted xml
+        
         for (ReleaseInfo releaseInfo : ri) {
             log(releaseInfo.toString());
             for (Object milestone : releaseInfo.milestones) {
@@ -133,6 +135,12 @@
         if (requiredbranchinfo == null) {
             throw new BuildException("No Release Information found for branch '" + branch + "', update json file section");
         }
+        List<String> updateValues = new ArrayList<>();
+        for (ReleaseInfo releaseInfo : ri) {
+            if (releaseInfo.position < requiredbranchinfo.position) {
+                updateValues.add(releaseInfo.version);
+            }
+        }
 // populate properties for api changes
         getProject().setProperty("previous.release.year", Integer.toString(requiredbranchinfo.previousReleaseDate.getYear()));
         getProject().setProperty("previous.release.month", String.format("%02d", requiredbranchinfo.previousReleaseDate.getMonthValue()));
@@ -146,7 +154,7 @@
         log("Writing releasinfo file " + propertiesFile);
         propertiesFile.getParentFile().mkdirs();
         try (OutputStream config = new FileOutputStream(propertiesFile)) {
-            String optionnalversion = "";
+            String optionalversion = "";
             boolean found = false;
             for (MileStone m : requiredbranchinfo.milestones) {
                 if (m.hash.equals(hash)) {
@@ -156,34 +164,34 @@
                     if (m.vote != -1) {
                         // vote is set we want the full version
                     } else {
-                        optionnalversion = "-" + m.version;
+                        optionalversion = "-" + m.version;
                     }
 
                 }
             }
             if (!found && !branch.equals("master")) {
                 // hash no match we are building a dev version of specific branch
-                optionnalversion = "-dev";
+                optionalversion = "-dev";
             }
-            config.write(("metabuild.DistributionURL=" + requiredbranchinfo.updateurl.replace(requiredbranchinfo.version, requiredbranchinfo.version + optionnalversion) + "\n").getBytes());
-            config.write(("metabuild.PluginPortalURL=" + requiredbranchinfo.pluginsurl.replace(requiredbranchinfo.version, requiredbranchinfo.version + optionnalversion) + "\n").getBytes());
+            config.write(("metabuild.DistributionURL=" + requiredbranchinfo.updateurl + "\n").getBytes());
+            config.write(("metabuild.PluginPortalURL=" + requiredbranchinfo.pluginsurl + "\n").getBytes());
             // used for cache and user dir
-            config.write(("metabuild.RawVersion=" + requiredbranchinfo.version + optionnalversion + "\n").getBytes());
-
+            config.write(("metabuild.RawVersion=" + requiredbranchinfo.version + optionalversion + "\n").getBytes());
+            config.write(("metabuild.apachepreviousversion=" + String.join(",", updateValues) + "\n").getBytes());
             if (branch.equals("master")) {
                 config.write(("metabuild.ComputedSplashVersion=DEV (Build {0})\n").getBytes());
                 config.write(("metabuild.ComputedTitleVersion=DEV {0}\n").getBytes());
                 config.write(("metabuild.logcli=-J-Dnetbeans.logger.console=true -J-ea\n").getBytes());
             } else {
-                config.write(("metabuild.ComputedSplashVersion=" + requiredbranchinfo.version + optionnalversion + "\n").getBytes());
-                config.write(("metabuild.ComputedTitleVersion=" + requiredbranchinfo.version + optionnalversion + "\n").getBytes());
+                config.write(("metabuild.ComputedSplashVersion=" + requiredbranchinfo.version + optionalversion + "\n").getBytes());
+                config.write(("metabuild.ComputedTitleVersion=" + requiredbranchinfo.version + optionalversion + "\n").getBytes());
                 config.write(("metabuild.logcli=\n").getBytes());
             }
         } catch (IOException ex) {
             throw new BuildException("Properties File for release cannot be created");
         }
 
-        log("Writing releasinfo file " + xmlFile);
+        log("Writing releasinfo file " + xmlFile );
 
         xmlFile.getParentFile().mkdirs();
         try (OutputStream config = new FileOutputStream(xmlFile)) {
@@ -191,6 +199,14 @@
         } catch (IOException ex) {
             throw new BuildException("XML File for release cannot be created");
         }
+        String configline;
+        try (FileReader config = new FileReader(propertiesFile); BufferedReader configStream = new BufferedReader(config);) {
+            while ((configline = configStream.readLine()) != null) {
+                log("Branding computed info: " + configline);
+            }
+        } catch (IOException ex) {
+            throw new BuildException("propertiesFile for release cannot be read");
+        }
     }
 
 // add attribute for xml building apidoc enhancement
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/ValidateHgConfiguration.java b/nbbuild/antsrc/org/netbeans/nbbuild/ValidateHgConfiguration.java
deleted file mode 100644
index f737c38..0000000
--- a/nbbuild/antsrc/org/netbeans/nbbuild/ValidateHgConfiguration.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-
-package org.netbeans.nbbuild;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-/**
- * Look for common problems in your Hg configuration and warn about them.
- */
-public class ValidateHgConfiguration extends Task {
-
-    private File root;
-    /** Location of NB source root. */
-    public void setRoot(File root) {
-        this.root = root;
-    }
-
-    @Override
-    public void execute() throws BuildException {
-        File dotHg = new File(root, ".hg");
-        if (!dotHg.isDirectory()) {
-            log(root + " is not a Mercurial repository", Project.MSG_VERBOSE);
-            return;
-        }
-        List<String> hgExecutable = HgExec.hgExecutable();
-        try {
-            List<String> commandAndArgs = new ArrayList<>(hgExecutable);
-            commandAndArgs.add("--config");
-            commandAndArgs.add("extensions.churn="); // added to hgext right before 1.0 release
-            commandAndArgs.add("showconfig");
-            Process p = new ProcessBuilder(commandAndArgs).directory(root).start();
-            BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
-            boolean foundUserName = false, foundCrlfHook = false;
-            String line;
-            while ((line = r.readLine()) != null) {
-                if (line.matches("hooks\\.pretxncommit\\..+=python:(hgext\\.)?win32text\\.forbidcrlf")) {
-                    foundCrlfHook = true;
-                } else if (line.matches("ui\\.username=(.+ <)?\\w+@netbeans\\.org>?")) {
-                    foundUserName = true;
-                }
-            }
-            if (!foundUserName) {
-                log("======== WARNING ========\n" +
-                    "You need to configure a Mercurial username\n" +
-                    "if you intend to push changes to NetBeans repositories.\n" +
-                    "Format (in ~/.hgrc or Mercurial.ini):\n" +
-                    "[ui]\n" +
-                    "username = Robert Q. Hacker <rhacker@netbeans.org>\n" +
-                    "=========================", Project.MSG_WARN);
-            }
-            if (!foundCrlfHook) {
-                log("======== WARNING ========\n" +
-                    "You need to guard against committing carriage returns into Mercurial\n" +
-                    "if you intend to push changes to NetBeans repositories.\n" +
-                    "Format (in ~/.hgrc or Mercurial.ini):\n" +
-                    "[hooks]\n" +
-                    "pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n" +
-                    "=========================", Project.MSG_WARN);
-            }
-            r = new BufferedReader(new InputStreamReader(p.getErrorStream()));
-            while ((line = r.readLine()) != null) {
-                if (line.contains("failed to import extension churn")) {
-                    log("======== WARNING ========\n" +
-                        "You seem to be using a version of Mercurial older than 1.0.\n" +
-                        "Please upgrade as your version may have serious bugs fixed in later versions.\n" +
-                        "=========================", Project.MSG_WARN);
-                    }
-            }
-        } catch (IOException x) {
-            log("Could not verify Hg configuration: " + x, Project.MSG_WARN);
-        }
-    }
-
-}
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
index 93c122e..601ce23 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps
@@ -34,6 +34,9 @@
 # upstream problem
 nbbuild/external/langtools-9.zip nbbuild/external/langtools-9.zip
 
+# Used to parse data during build, but need to as a lib for ide cluster
+nbbuild/external/json-simple-1.1.1.jar ide/libs.json_simple/external/json-simple-1.1.1.jar
+
 # JFlex is used by multiple modules.
 webcommon/javascript2.jade/external/jflex-1.4.3.jar webcommon/javascript2.lexer/external/jflex-1.4.3.jar
 
diff --git a/nbbuild/build.xml b/nbbuild/build.xml
index 29da259..a8b68cf 100644
--- a/nbbuild/build.xml
+++ b/nbbuild/build.xml
@@ -60,14 +60,10 @@
         <classpath>
             <pathelement location="${ant.core.lib}"/>
         </classpath>
-        <include name="org/netbeans/nbbuild/HgExec.java"/>
-        <include name="org/netbeans/nbbuild/ValidateHgConfiguration.java"/>
         <include name="org/netbeans/nbbuild/extlibs/DeregisterExternalHook.java"/>
         <include name="org/netbeans/nbbuild/extlibs/DownloadBinaries.java"/>
         <compilerarg line="-Xlint -Xlint:-serial"/>
     </javac>
-    <taskdef name="validate-hg-configuration" classname="org.netbeans.nbbuild.ValidateHgConfiguration" classpath="${build.ant.classes.dir}"/>
-    <validate-hg-configuration root=".."/>
     <taskdef name="deregisterexternalhook" classname="org.netbeans.nbbuild.extlibs.DeregisterExternalHook" classpath="${build.ant.classes.dir}"/>
     <deregisterexternalhook root=".."/>
     <taskdef name="downloadbinaries" classname="org.netbeans.nbbuild.extlibs.DownloadBinaries" classpath="${build.ant.classes.dir}"/>
@@ -77,7 +73,6 @@
             <include name="nbbuild/external/binaries-list"/>
             <include name="platform/libs.junit4/external/binaries-list"/>
             <include name="platform/javahelp/external/binaries-list"/>
-            <include name="ide/libs.json_simple/external/binaries-list"/>
         </manifest>
     </downloadbinaries>
     <!--
@@ -95,7 +90,7 @@
         <!-- For JavaHelp indexing and link checking: -->
         <include name="platform/javahelp/external/jhall*.jar"/>
         <!-- For json parsing -->
-        <include name="ide/libs.json_simple/external/json-simple*.jar"/>
+        <include name="nbbuild/external/json-simple*.jar"/>
       </fileset>
     </path>
     <javac srcdir="antsrc" destdir="${build.ant.classes.dir}" deprecation="true" debug="${build.compiler.debug}" source="1.8" target="1.8">
@@ -123,23 +118,22 @@
     <get dest="${metabuild.releasejson}" skipexisting="false" src="${metabuild.jsonurl}" />
     <!-- get branches and git information -->
     <antcall target="getgitinformation" />
-    <!-- hardcoded item for testing
-<echo file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=release111
-metabuild.hash=f56623c16cc2cbc4a381508562545b13de91437e
-</echo>
-    -->
     <!-- javadoc content filtering -->
     <taskdef name="setjavadoc" classname="org.netbeans.nbbuild.SetApidocClustersConfig" classpath="${nbantext.jar}"/>
+    <!-- read info from gitinfo.properties , if present in source bundle copy gitinfo-->
+    <copy file="${nb_all}/nbbuild/gitinfo.properties" tofile="${nb_all}/nbbuild/build/gitinfo.properties" failonerror="false"/>
+    <copy file="${nb_all}/nbbuild/netbeansrelease.properties" tofile="${nb_all}/nbbuild/build/netbeansrelease.properties" failonerror="false"/>
     <property file="${nb_all}/nbbuild/build/gitinfo.properties"/>
+    <property file="${nb_all}/nbbuild/build/netbeansrelease.properties"/>
     <setjavadoc branch="${metabuild.branch}"/>
-    <echo message="${metabuild.branch}"/>
+    <echo message="Building branch: ${metabuild.branch}"/>
     <property name="releasejson" value="${nb_all}/nbbuild/build/netbeansrelease.json"/>
     <property name="xmlrelease" value="${nb_all}/nbbuild/build/netbeansrelease.xml"/>
     <property name="propertiesrelease" value="${nb_all}/nbbuild/build/netbeansrelease.properties"/>
     <taskdef name="releasejson" classname="org.netbeans.nbbuild.ReleaseJsonProperties" >
         <classpath>
             <pathelement location="${nbantext.jar}"/>
-            <fileset dir="${nb_all}/ide/libs.json_simple/external">
+            <fileset dir="${nb_all}/nbbuild/external">
                 <include name="json*.jar"/>
             </fileset>
         </classpath>
@@ -147,48 +141,51 @@
     <releasejson file="${releasejson}" xmloutput="${xmlrelease}" propertiesoutput="${propertiesrelease}" branch="${metabuild.branch}" hash="${metabuild.hash}"/>
     <!--<fail />-->
   </target>
-  <target name="-git.ispresent">
-      <condition property="metabuild.isgitrepo" value="true" else="false">
-          <available type="dir" file="../.git"/>
-      </condition>
+  <target name="-gitinfo.ispresent">
+      <available file="${nb_all}/nbbuild/build/gitinfo.properties" property="gitinfo.present" />      
   </target>
-  <target name="-git.down" unless="${metabuild.isgitrepo}" depends="-git.ispresent">
-      <!-- no git, assuming master, but should try other option -->
-      <echo file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=master</echo>
-  </target>
-  <target name="-git.up" if="${metabuild.isgitrepo}" depends="-git.ispresent">
-      <taskdef name="gitexec" classname="org.netbeans.nbbuild.HgExec" classpath="${nbantext.jar}"/>
-      <gitexec outputproperty="git.hash.properties">
-          <arg value="rev-parse"/>
-          <arg value="HEAD"/>
-      </gitexec>
-      <gitexec outputproperty="git.branch.properties">
-          <arg value="rev-parse"/>
-          <arg value="--abbrev-ref"/>
-          <arg value="HEAD"/>
-      </gitexec>
-      <echo message="branch ${git.branch.properties}" />
-      <gitexec outputproperty="git.branchdetached.bulk.properties">
-          <arg value="branch"/>
-          <arg value="--remote"/>
-          <arg value="--verbose"/>
-          <arg value="--no-abbrev"/>
-          <arg value="--contains"/>
-      </gitexec>
-      <echo message="detached ${git.branchdetached.bulk.properties}" />
-      <!-- branch is HEAD implies detached -->
-      <condition property="invalidbranch">
-          <equals arg1="HEAD" arg2="${git.branch.properties}"/>
+  <target name="-git.down" unless="${gitinfo.present}" depends="-gitinfo.ispresent">
+      <!-- try to get information from jenkins or travis -->
+      <property environment="env"/>
+      <condition property="metabuild.branch" value="${env.GIT_BRANCH}" >
+          <isset property="env.GIT_BRANCH" />
       </condition>
-      <taskdef name="parsebranch" classname="org.netbeans.nbbuild.ParseGitBranch" classpath="${nbantext.jar}"/>
-      <parsebranch if:set="invalidbranch" data="${git.branchdetached.bulk.properties}" property="git.branchdetached.parsed.properties" />
-      <!-- keep echo file at begining of line, build git data -->
-      <echo unless:set="invalidbranch" file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=${git.branch.properties}
-metabuild.hash=${git.hash.properties}
-</echo>
-      <echo if:set="invalidbranch" file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=${git.branchdetached.parsed.properties}
-metabuild.hash=${git.hash.properties}
-</echo>
+      <condition property="metabuild.branch" value="${env.TRAVIS_BRANCH}" >
+          <isset property="env.TRAVIS_BRANCH" />
+      </condition>
+      <condition property="metabuild.branch" value="${metabuild.branch}" >
+          <isset property="metabuild.branch" />
+      </condition>
+      <condition property="metabuild.branch" value="master" >
+          <not>
+              <isset property="metabuild.branch" />
+          </not>
+      </condition>
+      <condition property="metabuild.hash" value="${env.GIT_COMMIT}" >
+          <isset property="env.GIT_COMMIT" />
+      </condition>
+      <condition property="metabuild.hash" value="${env.TRAVIS_COMMIT}" >
+          <isset property="env.TRAVIS_COMMIT" />
+      </condition>
+      <condition property="metabuild.hash" value="${metabuild.hash}" >
+          <isset property="metabuild.hash" />
+      </condition>
+      <echo message="Processing build with branch ${metabuild.branch} and hash ${metabuild.hash}" />
+      <!-- if hash not present do not fail -->
+      <fail message="Branch not found use -Dmetabuild.branch=branchName " >
+          <condition>
+              <not>
+                  <isset property="metabuild.branch"/>
+              </not>
+          </condition>
+      </fail>
+      <echo unless:set="metabuild.hash" file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=${metabuild.branch}</echo>
+      <echo if:set="metabuild.hash" file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=${metabuild.branch}
+metabuild.hash=${metabuild.hash}</echo>
+  </target>
+  <target name="-git.up" if="${gitinfo.present}" depends="-gitinfo.ispresent">
+      <property file="${nb_all}/nbbuild/build/gitinfo.properties"/>
+      <echo message="Processing build with branch ${metabuild.branch} and hash ${metabuild.hash}" />
   </target>
   <target name="getgitinformation" depends="-git.up,-git.down" />
   <target name="download-all-extbins" unless="ext.binaries.downloaded" depends="bootstrap">
@@ -1780,6 +1777,8 @@
       <zipfileset file="${nb.build.dir}/LICENSE" />
       <zipfileset dir="${nb.build.dir}/licenses" includes="**" prefix="licenses" /> 
       <zipfileset file="${source.zip.readme}" fullpath="README.md" erroronmissingarchive="false" />
+      <zipfileset file="${nb_all}/nbbuild/build/netbeansrelease.properties" fullpath="nbbuild/netbeansrelease.properties" erroronmissingarchive="false"/>
+      <zipfileset file="${nb_all}/nbbuild/build/gitinfo.properties" fullpath="nbbuild/gitinfo.properties" erroronmissingarchive="false" />
     </zip>
   </target>
 
diff --git a/nbbuild/external/binaries-list b/nbbuild/external/binaries-list
index ec0439e..15a0e15 100644
--- a/nbbuild/external/binaries-list
+++ b/nbbuild/external/binaries-list
@@ -18,3 +18,4 @@
 AB396EE119BFAD809CC9F09950CC22E2BCE2FE35 langtools-9.zip
 E32B3483FBF362C92088CB79E9F1F161F3F64A21 org.apidesign.javadoc:codesnippet-doclet:0.30
 D5CC2CD2A20963B86CF95397784BC7E74101C7A9 org.netbeans.tools:sigtest-maven-plugin:1.2
+C9AD4A0850AB676C5C64461A05CA524CDFFF59F1 com.googlecode.json-simple:json-simple:1.1.1
diff --git a/nbbuild/external/json-simple-1.1.1-license.txt b/nbbuild/external/json-simple-1.1.1-license.txt
new file mode 100644
index 0000000..aaede6a
--- /dev/null
+++ b/nbbuild/external/json-simple-1.1.1-license.txt
@@ -0,0 +1,208 @@
+Name: JSON simple
+Description: A simple Java toolkit for JSON.
+Version: 1.1.1
+Origin: GitHub
+License: Apache-2.0
+URL: https://github.com/fangyidong/json-simple
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   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.
diff --git a/nbbuild/rat-exclusions.txt b/nbbuild/rat-exclusions.txt
index 867bfbd..910cfba 100644
--- a/nbbuild/rat-exclusions.txt
+++ b/nbbuild/rat-exclusions.txt
@@ -23,6 +23,9 @@
 nbbuild/netbeans/**
 nbbuild/testuserdir/**
 nbbuild/user.build.properties
+###### generated build artefact
+nbbuild/gitinfo.properties
+nbbuild/netbeansrelease.properties
 
 ###### user-specific files  
 **/nbproject/private/**
diff --git a/nbbuild/templates/common.xml b/nbbuild/templates/common.xml
index e1fbc79..1182ee1 100644
--- a/nbbuild/templates/common.xml
+++ b/nbbuild/templates/common.xml
@@ -322,13 +322,13 @@
     <target name="-validate-layers" depends="init">
         <parsemanifest manifest="${manifest.mf}" attribute="OpenIDE-Module-Layer" property="layer.file"/>
         <!-- DTD from sources -->
-        <available file="${nb_all}/openide.filesystems/src/org/openide/filesystems/filesystem.dtd" type="file"
-                   property="dtd.cp" value="${nb_all}/openide.filesystems/src"/>
+        <available file="${nb_all}/platform/openide.filesystems/src/org/openide/filesystems/filesystem.dtd" type="file"
+                   property="dtd.cp" value="${nb_all}/platform/openide.filesystems/src"/>
         <!-- DTD from platform -->
         <pathconvert property="dtd.cp">
             <pathfileset>
                 <path refid="cluster.path.id"/>
-                <filename name="core/org-openide-filesystems.jar"/>
+                <filename name="platform/core/org-openide-filesystems.jar"/>
             </pathfileset>
         </pathconvert>
 
diff --git a/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java b/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java
index 62c4f6e..9f11db0 100644
--- a/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java
+++ b/platform/openide.filesystems/src/org/openide/filesystems/FileUtil.java
@@ -2326,7 +2326,7 @@
                 res = new ProxyLookup(
                     Lookups.singleton(new JarArchiveRootProvider()),
                     Lookup.getDefault()).lookupResult(ArchiveRootProvider.class);
-                if (!archiveRootProviders.compareAndSet(null, res)) {
+                if (archiveRootProviders.compareAndSet(null, res)) {
                     res = archiveRootProviders.get();
                     res.addLookupListener((ev) -> {
                         archiveRootProviderCache = null;
@@ -2338,6 +2338,6 @@
         return archiveRootProviderCache;
     }
 
-    private static Iterable<? extends ArchiveRootProvider> archiveRootProviderCache;
+    private static volatile Iterable<? extends ArchiveRootProvider> archiveRootProviderCache;
     private static final AtomicReference<Lookup.Result<ArchiveRootProvider>> archiveRootProviders = new AtomicReference<>();
 }
