diff --git a/prs/build.xml b/prs/build.xml
index cac238e..6807b3e 100644
--- a/prs/build.xml
+++ b/prs/build.xml
@@ -19,8 +19,8 @@
 <project name="prs" default="build" basedir=".">
     <target name="build">
         <ant dir="handler" target="download-ext-bins" />
-        <ant dir="handler/impl" target="clean" />
-        <ant dir="handler/impl" target="build-prs-handler" />
+        <ant dir="handler" target="clean" />
+        <ant dir="handler" target="build-zip" />
         <exec executable="mvn" dir="webapp">
             <arg value="clean" />
         </exec>
@@ -32,8 +32,9 @@
         </exec>
         <delete dir="build/prs" />
         <mkdir dir="build/prs" />
-        <copy todir="build/prs/handler">
-             <fileset dir="handler/impl/build/handler"/>
+        <unzip dest="build/prs" src="handler/dist/handler.zip" />
+        <copy todir="build/prs/handler/bin">
+             <fileset dir="handler/impl/script"/>
         </copy>
         <copy todir="build/prs/webapp/dependency">
              <fileset dir="webapp/target/dependency"/>
@@ -45,6 +46,9 @@
              <fileset dir="script" includes="prs"/>
         </copy>
         <chmod file="build/prs/handler/bin/handler" perm="u+x" />
+        <chmod file="build/prs/handler/bin/handler.docker" perm="u+x" />
+        <chmod file="build/prs/handler/bin/handler.local" perm="u+x" />
+        <chmod file="build/prs/handler/bin/handler.remote" perm="u+x" />
         <chmod file="build/prs/prs" perm="u+x" />
     </target>
 </project>
diff --git a/prs/handler/impl/nbproject/project.properties b/prs/handler/impl/nbproject/project.properties
index 4d6f81a..29b8baa 100644
--- a/prs/handler/impl/nbproject/project.properties
+++ b/prs/handler/impl/nbproject/project.properties
@@ -17,3 +17,4 @@
 javac.compilerargs=-Xlint -Xlint:-serial
 handler.build.dir=build/handler
 test.run.args=--add-exports jdk.javadoc/com.sun.tools.javadoc.main=ALL-UNNAMED
+test.timeout=3600000
\ No newline at end of file
diff --git a/prs/handler/impl/nbproject/project.xml b/prs/handler/impl/nbproject/project.xml
index 9bdc239..cb7ef7f 100644
--- a/prs/handler/impl/nbproject/project.xml
+++ b/prs/handler/impl/nbproject/project.xml
@@ -24,6 +24,15 @@
             <suite-component/>
             <module-dependencies>
                 <dependency>
+                    <code-name-base>org.netbeans.api.java.classpath</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.60</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.bootstrap</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -74,6 +83,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.libs.junit4</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>1.23</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.apisupport.ant</code-name-base>
                     <run-dependency>
                         <specification-version>2.76</specification-version>
@@ -154,6 +171,22 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.java.openjdk.project</code-name-base>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.3</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.netbeans.modules.java.platform</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.48</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.java.source.base</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -162,6 +195,12 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.junitlib</code-name-base>
+                    <run-dependency>
+                        <specification-version>1.11</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.maven</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -215,6 +254,15 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.sendopts</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>2</release-version>
+                        <specification-version>2.42</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.xml.xdm</code-name-base>
                     <run-dependency>
                         <release-version>1</release-version>
@@ -269,6 +317,14 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.openide.util</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>9.13</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.openide.util.lookup</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -276,6 +332,14 @@
                         <specification-version>8.37</specification-version>
                     </run-dependency>
                 </dependency>
+                <dependency>
+                    <code-name-base>org.openide.util.ui</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>9.14</specification-version>
+                    </run-dependency>
+                </dependency>
             </module-dependencies>
             <test-dependencies>
                 <test-type>
diff --git a/prs/handler/impl/script/handler b/prs/handler/impl/script/handler
deleted file mode 100755
index 78ae54f..0000000
--- a/prs/handler/impl/script/handler
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-LIB=`dirname $0`/../lib
-java $JACKPOT_PRS_EXTRA_JVM_OPTIONS --add-exports jdk.javadoc/com.sun.tools.javadoc.main=ALL-UNNAMED -classpath `find $LIB -name "*.jar" | tr '\n' ':'` org.netbeans.modules.jackpot.prs.handler.impl.HandlePullRequest "$@"
diff --git a/prs/handler/impl/script/handler.docker b/prs/handler/impl/script/handler.docker
index 6a19361..0b5803d 100755
--- a/prs/handler/impl/script/handler.docker
+++ b/prs/handler/impl/script/handler.docker
@@ -47,17 +47,15 @@
 
 RUN useradd -m compute
 
-COPY . /home/compute/handler
-
-RUN chown -R compute /home/compute/handler
+COPY --chown=compute . /home/compute/handler
 
 USER compute
 
-ENTRYPOINT [ "/home/compute/handler/bin/handler", "-Dhttp.proxyHost=jackpot-proxy", "-Dhttp.proxyPort=3128", "-Dhttps.proxyHost=jackpot-proxy", "-Dhttps.proxyPort=3128"]
+ENTRYPOINT [ "/home/compute/handler/bin/handler.local", "-J-Dhttp.proxyHost=jackpot-proxy", "-J-Dhttp.proxyPort=3128", "-J-Dhttps.proxyHost=jackpot-proxy", "-J-Dhttps.proxyPort=3128", "-J-Xmx2048m"]
 EOF
 )
 
-docker run --rm --env PR_CONTENT --env OAUTH_TOKEN --env OAUTH_APP_TOKEN --network jackpot-network-$PROXY_CONTAINER --env "http_proxy=http://jackpot-proxy:3128/" --env "https_proxy=http://jackpot-proxy:3128/" --env "JACKPOT_PRS_EXTRA_JVM_OPTIONS=-Dhttp.proxyHost=jackpot-proxy -Dhttp.proxyPort=3128 -Dhttps.proxyHost=jackpot-proxy -Dhttps.proxyPort=3128" $WORKER
+docker run --rm --env PR_CONTENT --env OAUTH_TOKEN --env OAUTH_APP_TOKEN --network jackpot-network-$PROXY_CONTAINER --env "http_proxy=http://jackpot-proxy:3128/" --env "https_proxy=http://jackpot-proxy:3128/" --env "JACKPOT_PRS_EXTRA_JVM_OPTIONS=-J-Dhttp.proxyHost=jackpot-proxy -J-Dhttp.proxyPort=3128 -J-Dhttps.proxyHost=jackpot-proxy -J-Dhttps.proxyPort=3128" $WORKER
 
 docker container stop $PROXY_CONTAINER
 docker network rm jackpot-network-$PROXY_CONTAINER jackpot-public-network-$PROXY_CONTAINER
diff --git a/prs/handler/impl/script/handler.local b/prs/handler/impl/script/handler.local
new file mode 100755
index 0000000..9d2e717
--- /dev/null
+++ b/prs/handler/impl/script/handler.local
@@ -0,0 +1,2 @@
+#!/bin/sh
+`dirname $0`/handler --handle-pull-request --nosplash --nogui -J-Djava.awt.headless=true -J-Dnetbeans.logger.console=true "$@"
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/GHSite.java b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/GHSite.java
new file mode 100644
index 0000000..8a1c1ea
--- /dev/null
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/GHSite.java
@@ -0,0 +1,69 @@
+/*
+ * 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.modules.jackpot.prs.handler.impl;
+
+import java.io.IOException;
+import org.kohsuke.github.GHCommitState;
+import org.kohsuke.github.GHPullRequest;
+import org.kohsuke.github.GHRepository;
+import org.kohsuke.github.GitHub;
+
+/**
+ *
+ * @author lahvac
+ */
+public class GHSite implements SiteWrapper {
+    public static final Factory FACTORY = new FactoryImpl();
+
+    private final GitHub github;
+
+    public GHSite(String authToken) throws IOException {
+        this.github = authToken != null ? GitHub.connectUsingOAuth(authToken) : GitHub.connect();
+    }
+
+    @Override
+    public void createCommitStatusPending(String fullRepoName, String sha, String text) throws IOException {
+        GHRepository statusTarget = github.getRepository(fullRepoName);
+        
+        statusTarget.createCommitStatus(sha, GHCommitState.PENDING, null, text);
+    }
+
+    @Override
+    public void createCommitStatusSuccess(String fullRepoName, String sha, String text) throws IOException {
+        GHRepository statusTarget = github.getRepository(fullRepoName);
+        
+        statusTarget.createCommitStatus(sha, GHCommitState.SUCCESS, null, text);
+    }
+
+    @Override
+    public void createReviewComment(String fullRepoName, int prId, String comment, String sha, String filename, int targetPosition) throws IOException {
+        GHRepository commentTarget = github.getRepository(fullRepoName);
+        GHPullRequest pr = commentTarget.getPullRequest(prId);
+        pr.createReviewComment(comment, sha, filename, targetPosition);
+    }
+
+    public static class FactoryImpl implements Factory {
+
+        @Override
+        public SiteWrapper create(String authToken) throws IOException {
+            return new GHSite(authToken);
+        }
+        
+    }
+}
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java
index 8e2acec..76f2c0f 100644
--- a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/HandlePullRequest.java
@@ -27,11 +27,9 @@
 import java.io.InputStream;
 import java.net.URL;
 import java.net.URLConnection;
-import java.nio.file.Files;
-import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.EnumSet;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -39,55 +37,64 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
-import org.kohsuke.github.GHCommitState;
-import org.kohsuke.github.GHPullRequest;
-import org.kohsuke.github.GHRepository;
-import org.kohsuke.github.GitHub;
+import javax.swing.event.ChangeListener;
+import org.netbeans.api.java.platform.JavaPlatform;
+import org.netbeans.api.java.queries.BinaryForSourceQuery;
 import org.netbeans.api.java.source.ClasspathInfo;
 import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.java.source.SourceUtils;
 import org.netbeans.api.project.FileOwnerQuery;
 import org.netbeans.api.project.Project;
-import org.netbeans.api.project.ProjectManager;
+import org.netbeans.api.project.ProjectUtils;
+import org.netbeans.api.project.Sources;
 import org.netbeans.api.project.ui.OpenProjects;
+import org.netbeans.api.sendopts.CommandException;
+import org.netbeans.modules.jackpot.prs.handler.impl.SiteWrapper.Factory;
 import org.netbeans.modules.java.hints.spiimpl.batch.BatchUtilities;
 import org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker;
 import org.netbeans.modules.java.hints.spiimpl.options.HintsSettings;
-import org.netbeans.modules.parsing.impl.indexing.implspi.CacheFolderProvider;
 import org.netbeans.spi.editor.hints.ErrorDescription;
+import org.netbeans.spi.java.queries.BinaryForSourceQueryImplementation;
+import org.netbeans.spi.sendopts.Env;
+import org.netbeans.spi.sendopts.Option;
+import org.netbeans.spi.sendopts.OptionProcessor;
+import org.openide.LifecycleManager;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
-import org.openide.modules.ModuleInfo;
 import org.openide.modules.Places;
-import org.openide.util.Lookup;
+import org.openide.util.Exceptions;
+import org.openide.util.lookup.ServiceProvider;
 
 /**
  *
  * @author lahvac
  */
-public class HandlePullRequest {
-    public static void main(String... args) throws Exception {
-        String content = System.getenv().get("PR_CONTENT");
-        String token = System.getenv().get("OAUTH_TOKEN");
-        String appToken = System.getenv().get("OAUTH_APP_TOKEN");
-        processPullRequest(content, token, appToken);
+@ServiceProvider(service=OptionProcessor.class)
+public class HandlePullRequest extends OptionProcessor {
+    
+    private static final Option HANDLE_PULL_REQUEST = Option.withoutArgument('\0', "handle-pull-request");
+    public static Factory factory = GHSite.FACTORY;
+
+    protected Set<Option> getOptions() {
+        return Collections.singleton(HANDLE_PULL_REQUEST);
+    }
+    
+    protected void process(Env env, Map<Option,String[]> optionValues) throws CommandException {
+        try {
+            String content = System.getenv().get("PR_CONTENT");
+            String token = System.getenv().get("OAUTH_TOKEN");
+            String appToken = System.getenv().get("OAUTH_APP_TOKEN");
+            processPullRequest(content, token, appToken);
+            LifecycleManager.getDefault().exit();
+        } catch (Throwable ex) {
+            System.err.println("error:");
+            ex.printStackTrace();
+            throw (CommandException) new CommandException(1).initCause(ex);
+        }
     }
 
     public static void processPullRequest(String inputData, String oauthToken, String oauthAppToken) throws Exception {
-        Path tempDir = Files.createTempDirectory("pull.requests");
-        File userdir = tempDir.resolve("scratch-user").toFile();
-        File cachedir = tempDir.resolve("scratch-cache").toFile();
-        System.setProperty("netbeans.user", userdir.getAbsolutePath());
-        File varLog = new File(new File(userdir, "var"), "log");
-        varLog.mkdirs();
-        System.setProperty("jdk.home", System.getProperty("java.home")); //for j2seplatform
-        Class<?> main = Class.forName("org.netbeans.core.startup.Main");
-        main.getDeclaredMethod("initializeURLFactory").invoke(null);
-        new File(cachedir, "index").mkdirs();
-//        DefaultCacheFolderProvider.getInstance().setCacheFolder(FileUtil.toFileObject(new File(cachedir, "index")));
-        CacheFolderProvider.getCacheFolderForRoot(Places.getUserDirectory().toURI().toURL(), EnumSet.noneOf(CacheFolderProvider.Kind.class), CacheFolderProvider.Mode.EXISTENT);
-
-        Lookup.getDefault().lookup(ModuleInfo.class);
-
+        File tempDir = Places.getCacheSubdirectory("checkout");
         Map<String, Object> inputParsed = new ObjectMapper().readValue(inputData, Map.class);
         Object action = inputParsed.get("action");
         if (!"opened".equals(action))
@@ -101,17 +108,26 @@
         Map<String, Object> head = (Map<String, Object>) pullRequest.get("head");
         Map<String, Object> headRepo = (Map<String, Object>) head.get("repo");
         
-        GitHub statusGithub = oauthToken != null ? GitHub.connectUsingOAuth(oauthToken) : GitHub.connect();
+        SiteWrapper statusGithub = factory.create(oauthToken);
         String fullRepoName = (String) baseRepo.get("full_name");
-        GHRepository statusTarget = statusGithub.getRepository(fullRepoName);
         String sha = (String) head.get("sha");
         
-        statusTarget.createCommitStatus(sha, GHCommitState.PENDING, null, "Running Jackpot verification");
+        statusGithub.createCommitStatusPending(fullRepoName, sha, "Running Jackpot verification");
 
         String cloneURL = (String) headRepo.get("clone_url");
-        new ProcessBuilder("git", "clone", cloneURL, "workdir").directory(tempDir.toFile()).inheritIO().start().waitFor();
-        FileObject workdir = FileUtil.toFileObject(tempDir.resolve("workdir").toFile());
+        new ProcessBuilder("git", "clone", cloneURL, "workdir").directory(tempDir).inheritIO().start().waitFor();
+        FileObject workdir = FileUtil.toFileObject(new File(tempDir, "workdir"));
         new ProcessBuilder("git", "checkout", sha).directory(FileUtil.toFile(workdir)).inheritIO().start().waitFor();
+        FileObject jlObject = workdir.getFileObject("src/java.base/share/classes/java/lang/Object.java");
+        if (jlObject != null) {
+            Project prj = FileOwnerQuery.getOwner(jlObject); //ensure external roots (tests) are registered
+            ProjectUtils.getSources(prj).getSourceGroups(Sources.TYPE_GENERIC); //register external roots
+        }
+        FileObject jlmSourceVersion = workdir.getFileObject("src/java.compiler/share/classes/javax/lang/model/SourceVersion.java");
+        if (jlmSourceVersion != null) {
+            Project prj = FileOwnerQuery.getOwner(jlmSourceVersion); //ensure external roots (tests) are registered
+            ProjectUtils.getSources(prj).getSourceGroups(Sources.TYPE_GENERIC); //register external roots
+        }
         Set<Project> projects = new HashSet<>();
         Map<FileObject, FileData> file2Remap = new HashMap<>();
         String diffURL = (String) pullRequest.get("diff_url");
@@ -149,11 +165,13 @@
                     }
                     projects.add(project);
                     file2Remap.put(file, new FileData(filename, remap));
+                } else {
+                    System.err.println("no project found for: " + filename);
                 }
             }
         }
         int prId = (int) pullRequest.get("number");
-        GHPullRequest[] pr = new GHPullRequest[1];
+        SiteWrapper[] commentGitHub = new SiteWrapper[1];
         boolean[] hasWarnings = {false};
         for (Project project : projects) {
             switch (project.getClass().getName()) {//XXX: ensure that the environment variables are dropped here!
@@ -170,6 +188,9 @@
                     }
                     //TODO: download extbins!
                     break;
+                case "org.netbeans.modules.java.openjdk.project.JDKProject":
+                    //no bootstrap at this time
+                    break;
                 default:
                     System.err.println("project name: " + project.getClass().getName());
                     break;
@@ -178,35 +199,41 @@
         OpenProjects.getDefault().open(projects.toArray(new Project[0]), false);
         Map<ClasspathInfo, Collection<FileObject>> sorted = BatchUtilities.sortFiles(file2Remap.keySet());
         for (Entry<ClasspathInfo, Collection<FileObject>> e : sorted.entrySet()) {
-            JavaSource.create(e.getKey(), e.getValue()).runWhenScanFinished(cc -> {
-                FileData fileData = file2Remap.get(cc.getFileObject());
+            System.err.println("Running hints for:");
+            System.err.println("files: " + e.getValue());
+            System.err.println("classpath: " + e.getKey());
+            try {
+                JavaSource.create(e.getKey(), e.getValue()).runWhenScanFinished(cc -> {
+                    FileData fileData = file2Remap.get(cc.getFileObject());
 
-                if (fileData == null)
-                    return ;
+                    if (fileData == null)
+                        return ;
 
-                cc.toPhase(JavaSource.Phase.RESOLVED); //XXX
+                    cc.toPhase(JavaSource.Phase.RESOLVED); //XXX
 
-                List<ErrorDescription> warnings = new HintsInvoker(HintsSettings.getGlobalSettings(), new AtomicBoolean()).computeHints(cc);
-                System.err.println("warnings=" + warnings);
-                for (ErrorDescription ed : warnings) {
-                    int startLine = ed.getRange().getBegin().getLine() + 1;
-                    int targetPosition = fileData.remap[startLine];
-                    if (targetPosition == (-1))
-                        continue;
-                    String comment = "Jackpot:\nwarning: " + ed.getDescription();
-                    //TODO: fixes
-//                    if (additions != null) {
-//                        comment += "```suggestion\n" + additions.toString() + "```";
-//                    }
-                    hasWarnings[0] = true;
-                    if (pr[0] == null) {
-                        GitHub commentGithub = oauthAppToken != null ? GitHub.connectUsingOAuth(oauthAppToken) : GitHub.connect();
-                        GHRepository commentTarget = commentGithub.getRepository(fullRepoName);
-                        pr[0] = commentTarget.getPullRequest(prId);
+                    List<ErrorDescription> warnings = new HintsInvoker(HintsSettings.getGlobalSettings(), new AtomicBoolean()).computeHints(cc);
+                    System.err.println("warnings=" + warnings);
+                    for (ErrorDescription ed : warnings) {
+                        int startLine = ed.getRange().getBegin().getLine() + 1;
+                        int targetPosition = fileData.remap[startLine];
+                        if (targetPosition == (-1))
+                            continue;
+                        String comment = "Jackpot:\nwarning: " + ed.getDescription();
+                        //TODO: fixes
+    //                    if (additions != null) {
+    //                        comment += "```suggestion\n" + additions.toString() + "```";
+    //                    }
+                        hasWarnings[0] = true;
+                        if (commentGitHub[0] == null) {
+                            commentGitHub[0] = factory.create(oauthAppToken);
+                        }
+                        commentGitHub[0].createReviewComment(fullRepoName, prId, comment, sha, fileData.filename, targetPosition);
                     }
-                    pr[0].createReviewComment(comment, sha, fileData.filename, targetPosition);
-                }
-            }, false).get();
+                }, false).get();
+            } catch (Throwable ex) {
+                System.err.println("error while processing: " + e.getValue());
+                Exceptions.printStackTrace(ex);
+            }
         }
 //                String file = (String) m.get("file");
 //                int startLine = (Integer) m.get("startLine");
@@ -249,7 +276,7 @@
         }
 
         //TODO: set status on crash/error!
-        statusTarget.createCommitStatus(sha, GHCommitState.SUCCESS, null, mainComment);
+        statusGithub.createCommitStatusSuccess(fullRepoName, sha, mainComment);
     }
     
     private static final class FileData {
@@ -263,4 +290,32 @@
         
     }
 
+    //if java.base/share/classes indexing fails, copy classfiles from the default JDK platform
+    //these will typically not match the sources, but if the classfiles would be missing
+    //altogether, all subsequent indexing would fail as well:
+    @ServiceProvider(service=BinaryForSourceQueryImplementation.class, position=0)
+    public static class BinaryForSourceQueryImpl implements BinaryForSourceQueryImplementation {
+
+        @Override
+        public BinaryForSourceQuery.Result findBinaryRoots(URL sourceRoot) {
+            if (sourceRoot.toString().contains("src/java.base/share/classes")) {
+                return new BinaryForSourceQuery.Result() {
+                    @Override
+                    public URL[] getRoots() {
+                        return JavaPlatform.getDefault().getBootstrapLibraries().entries().stream().map(e -> e.getURL()).filter(u -> "java.base".equals(SourceUtils.getModuleName(u))).toArray(s -> new URL[s]);
+                    }
+
+                    @Override
+                    public void addChangeListener(ChangeListener l) {
+                    }
+
+                    @Override
+                    public void removeChangeListener(ChangeListener l) {
+                    }
+                };
+            }
+            return null;
+        }
+        
+    }
 }
diff --git a/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/SiteWrapper.java b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/SiteWrapper.java
new file mode 100644
index 0000000..a3732fe
--- /dev/null
+++ b/prs/handler/impl/src/org/netbeans/modules/jackpot/prs/handler/impl/SiteWrapper.java
@@ -0,0 +1,37 @@
+/*
+ * 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.modules.jackpot.prs.handler.impl;
+
+import java.io.IOException;
+
+/**
+ *
+ * @author lahvac
+ */
+public interface SiteWrapper {
+
+    public void createCommitStatusPending(String fullRepoName, String sha, String text) throws IOException;
+    public void createCommitStatusSuccess(String fullRepoName, String sha, String text) throws IOException;
+
+    public void createReviewComment(String fullRepoName, int prId, String comment, String sha, String filename, int targetPosition) throws IOException;
+    
+    public static interface Factory {
+        public SiteWrapper create(String authToken) throws IOException;
+    }
+}
diff --git a/prs/handler/nbproject/platform.properties b/prs/handler/nbproject/platform.properties
index caae5fc..8855f09 100644
--- a/prs/handler/nbproject/platform.properties
+++ b/prs/handler/nbproject/platform.properties
@@ -13,11 +13,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+branding.token=handler
 cluster.path=\
     ${nbplatform.active.dir}/apisupport:\
     ${nbplatform.active.dir}/extide:\
     ${nbplatform.active.dir}/harness:\
     ${nbplatform.active.dir}/ide:\
     ${nbplatform.active.dir}/java:\
-    ${nbplatform.active.dir}/platform
+    ${nbplatform.active.dir}/platform:\
+    ${nbplatform.active.dir}/webcommon
 nbplatform.active=apache-netbeans
diff --git a/prs/handler/nbproject/project.properties b/prs/handler/nbproject/project.properties
index a00f0a7..7b0fc50 100644
--- a/prs/handler/nbproject/project.properties
+++ b/prs/handler/nbproject/project.properties
@@ -13,10 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+app.name=${branding.token}
 modules=\
-    ${project.org.netbeans.modules.jackpot.prs.handler.impl}:\
-    ${project.org.apache.commons.codec}:\
-    ${project.org.apache.commons.logging}
-project.org.apache.commons.codec=org.apache.commons.codec
-project.org.apache.commons.logging=org.apache.commons.logging
+    ${project.org.netbeans.modules.jackpot.prs.handler.impl}
 project.org.netbeans.modules.jackpot.prs.handler.impl=impl
diff --git a/prs/handler/org.apache.commons.codec/build.xml b/prs/handler/org.apache.commons.codec/build.xml
deleted file mode 100644
index 9eb1b8a..0000000
--- a/prs/handler/org.apache.commons.codec/build.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  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.
--->
-<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
-<!-- for some information on what you could do (e.g. targets to override). -->
-<!-- If you delete this file and reopen the project it will be recreated. -->
-<project name="org.apache.commons.codec" default="netbeans" basedir=".">
-    <description>Builds, tests, and runs the project org.apache.commons.codec.</description>
-    <import file="nbproject/build-impl.xml"/>
-</project>
diff --git a/prs/handler/org.apache.commons.codec/manifest.mf b/prs/handler/org.apache.commons.codec/manifest.mf
deleted file mode 100644
index 01276fb..0000000
--- a/prs/handler/org.apache.commons.codec/manifest.mf
+++ /dev/null
@@ -1,6 +0,0 @@
-Manifest-Version: 1.0
-AutoUpdate-Show-In-Client: true
-OpenIDE-Module: org.apache.commons.codec
-OpenIDE-Module-Localizing-Bundle: org/apache/commons/codec/Bundle.properties
-OpenIDE-Module-Specification-Version: 1.0
-
diff --git a/prs/handler/org.apache.commons.codec/nbproject/build-impl.xml b/prs/handler/org.apache.commons.codec/nbproject/build-impl.xml
deleted file mode 100644
index 87dc727..0000000
--- a/prs/handler/org.apache.commons.codec/nbproject/build-impl.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  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.
--->
-<!--
-*** GENERATED FROM project.xml - DO NOT EDIT  ***
-***         EDIT ../build.xml INSTEAD         ***
--->
-<project name="org.apache.commons.codec-impl" basedir="..">
-    <fail message="Please build using Ant 1.7.1 or higher.">
-        <condition>
-            <not>
-                <antversion atleast="1.7.1"/>
-            </not>
-        </condition>
-    </fail>
-    <property file="nbproject/private/suite-private.properties"/>
-    <property file="nbproject/suite.properties"/>
-    <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
-    <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
-    <property file="${suite.dir}/nbproject/platform.properties"/>
-    <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
-        <attribute name="name"/>
-        <attribute name="value"/>
-        <sequential>
-            <property name="@{name}" value="${@{value}}"/>
-        </sequential>
-    </macrodef>
-    <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
-        <attribute name="property"/>
-        <attribute name="value"/>
-        <sequential>
-            <property name="@{property}" value="@{value}"/>
-        </sequential>
-    </macrodef>
-    <property file="${user.properties.file}"/>
-    <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
-    <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
-    <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
-    <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
-        <condition>
-            <not>
-                <contains string="${cluster.path.evaluated}" substring="platform"/>
-            </not>
-        </condition>
-    </fail>
-    <import file="${harness.dir}/build.xml"/>
-</project>
diff --git a/prs/handler/org.apache.commons.codec/nbproject/genfiles.properties b/prs/handler/org.apache.commons.codec/nbproject/genfiles.properties
deleted file mode 100644
index 569939a..0000000
--- a/prs/handler/org.apache.commons.codec/nbproject/genfiles.properties
+++ /dev/null
@@ -1,23 +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.
-
-build.xml.data.CRC32=71271522
-build.xml.script.CRC32=3da714ee
-build.xml.stylesheet.CRC32=15ca8a54@2.76
-# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
-# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=71271522
-nbproject/build-impl.xml.script.CRC32=67b36dc6
-nbproject/build-impl.xml.stylesheet.CRC32=49aa68b0@2.76
diff --git a/prs/handler/org.apache.commons.codec/nbproject/project.properties b/prs/handler/org.apache.commons.codec/nbproject/project.properties
deleted file mode 100644
index c6ac153..0000000
--- a/prs/handler/org.apache.commons.codec/nbproject/project.properties
+++ /dev/null
@@ -1,18 +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.
-
-file.reference.commons-codec-1.3.jar=release/modules/ext/commons-codec-1.3.jar
-javac.source=1.7
-javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/prs/handler/org.apache.commons.codec/nbproject/project.xml b/prs/handler/org.apache.commons.codec/nbproject/project.xml
deleted file mode 100644
index ea6e025..0000000
--- a/prs/handler/org.apache.commons.codec/nbproject/project.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  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.
--->
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.apisupport.project</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
-            <code-name-base>org.apache.commons.codec</code-name-base>
-            <suite-component/>
-            <module-dependencies/>
-            <public-packages/>
-            <class-path-extension>
-                <runtime-relative-path>ext/commons-codec-1.3.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/commons-codec-1.3.jar</binary-origin>
-            </class-path-extension>
-        </data>
-    </configuration>
-</project>
diff --git a/prs/handler/org.apache.commons.codec/nbproject/suite.properties b/prs/handler/org.apache.commons.codec/nbproject/suite.properties
deleted file mode 100644
index 5f42472..0000000
--- a/prs/handler/org.apache.commons.codec/nbproject/suite.properties
+++ /dev/null
@@ -1,16 +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.
-
-suite.dir=${basedir}/..
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/binaries-list b/prs/handler/org.apache.commons.codec/release/modules/ext/binaries-list
deleted file mode 100644
index 9caf2fa..0000000
--- a/prs/handler/org.apache.commons.codec/release/modules/ext/binaries-list
+++ /dev/null
@@ -1,17 +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.
-FD32786786E2ADB664D5ECC965DA47629DCA14BA commons-codec:commons-codec:1.3
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-license.txt b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-license.txt
deleted file mode 100644
index d428420..0000000
--- a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-license.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-Name: Apache Commons Codec
-Origin: Apache Software Foundation
-Version: 1.3
-License: Apache-2.0
-Description: Provides implementations of common encoders and decoders.
-URL: http://commons.apache.org/codec/
-
-                                 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/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-notice.txt b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-notice.txt
deleted file mode 100644
index 439eb83..0000000
--- a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3-notice.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
-
diff --git a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3.jar b/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3.jar
deleted file mode 100644
index 957b675..0000000
--- a/prs/handler/org.apache.commons.codec/release/modules/ext/commons-codec-1.3.jar
+++ /dev/null
Binary files differ
diff --git a/prs/handler/org.apache.commons.codec/src/org/apache/commons/codec/Bundle.properties b/prs/handler/org.apache.commons.codec/src/org/apache/commons/codec/Bundle.properties
deleted file mode 100644
index ad64abf..0000000
--- a/prs/handler/org.apache.commons.codec/src/org/apache/commons/codec/Bundle.properties
+++ /dev/null
@@ -1,16 +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.
-
-OpenIDE-Module-Name=org.apache.commons.codec
diff --git a/prs/handler/org.apache.commons.logging/build.xml b/prs/handler/org.apache.commons.logging/build.xml
deleted file mode 100644
index 284baa1..0000000
--- a/prs/handler/org.apache.commons.logging/build.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  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.
--->
-<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
-<!-- for some information on what you could do (e.g. targets to override). -->
-<!-- If you delete this file and reopen the project it will be recreated. -->
-<project name="org.apache.commons.logging" default="netbeans" basedir=".">
-    <description>Builds, tests, and runs the project org.apache.commons.logging.</description>
-    <import file="nbproject/build-impl.xml"/>
-</project>
diff --git a/prs/handler/org.apache.commons.logging/manifest.mf b/prs/handler/org.apache.commons.logging/manifest.mf
deleted file mode 100644
index aa0979d..0000000
--- a/prs/handler/org.apache.commons.logging/manifest.mf
+++ /dev/null
@@ -1,6 +0,0 @@
-Manifest-Version: 1.0
-AutoUpdate-Show-In-Client: true
-OpenIDE-Module: org.apache.commons.logging
-OpenIDE-Module-Localizing-Bundle: org/apache/commons/logging/Bundle.properties
-OpenIDE-Module-Specification-Version: 1.0
-
diff --git a/prs/handler/org.apache.commons.logging/nbproject/build-impl.xml b/prs/handler/org.apache.commons.logging/nbproject/build-impl.xml
deleted file mode 100644
index 806696c..0000000
--- a/prs/handler/org.apache.commons.logging/nbproject/build-impl.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  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.
--->
-<!--
-*** GENERATED FROM project.xml - DO NOT EDIT  ***
-***         EDIT ../build.xml INSTEAD         ***
--->
-<project name="org.apache.commons.logging-impl" basedir="..">
-    <fail message="Please build using Ant 1.7.1 or higher.">
-        <condition>
-            <not>
-                <antversion atleast="1.7.1"/>
-            </not>
-        </condition>
-    </fail>
-    <property file="nbproject/private/suite-private.properties"/>
-    <property file="nbproject/suite.properties"/>
-    <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
-    <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
-    <property file="${suite.dir}/nbproject/platform.properties"/>
-    <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
-        <attribute name="name"/>
-        <attribute name="value"/>
-        <sequential>
-            <property name="@{name}" value="${@{value}}"/>
-        </sequential>
-    </macrodef>
-    <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
-        <attribute name="property"/>
-        <attribute name="value"/>
-        <sequential>
-            <property name="@{property}" value="@{value}"/>
-        </sequential>
-    </macrodef>
-    <property file="${user.properties.file}"/>
-    <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
-    <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
-    <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
-    <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
-        <condition>
-            <not>
-                <contains string="${cluster.path.evaluated}" substring="platform"/>
-            </not>
-        </condition>
-    </fail>
-    <import file="${harness.dir}/build.xml"/>
-</project>
diff --git a/prs/handler/org.apache.commons.logging/nbproject/genfiles.properties b/prs/handler/org.apache.commons.logging/nbproject/genfiles.properties
deleted file mode 100644
index 3cd2211..0000000
--- a/prs/handler/org.apache.commons.logging/nbproject/genfiles.properties
+++ /dev/null
@@ -1,23 +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.
-
-build.xml.data.CRC32=4aa1ecde
-build.xml.script.CRC32=704985da
-build.xml.stylesheet.CRC32=15ca8a54@2.76
-# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
-# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=4aa1ecde
-nbproject/build-impl.xml.script.CRC32=a329aae5
-nbproject/build-impl.xml.stylesheet.CRC32=49aa68b0@2.76
diff --git a/prs/handler/org.apache.commons.logging/nbproject/project.properties b/prs/handler/org.apache.commons.logging/nbproject/project.properties
deleted file mode 100644
index 6fdc9a6..0000000
--- a/prs/handler/org.apache.commons.logging/nbproject/project.properties
+++ /dev/null
@@ -1,18 +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.
-
-file.reference.commons-logging-1.1.1.jar=release/modules/ext/commons-logging-1.1.1.jar
-javac.source=1.7
-javac.compilerargs=-Xlint -Xlint:-serial
diff --git a/prs/handler/org.apache.commons.logging/nbproject/project.xml b/prs/handler/org.apache.commons.logging/nbproject/project.xml
deleted file mode 100644
index 355e688..0000000
--- a/prs/handler/org.apache.commons.logging/nbproject/project.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-  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.
--->
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.apisupport.project</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
-            <code-name-base>org.apache.commons.logging</code-name-base>
-            <suite-component/>
-            <module-dependencies/>
-            <public-packages/>
-            <class-path-extension>
-                <runtime-relative-path>ext/commons-logging-1.1.1.jar</runtime-relative-path>
-                <binary-origin>release/modules/ext/commons-logging-1.1.1.jar</binary-origin>
-            </class-path-extension>
-        </data>
-    </configuration>
-</project>
diff --git a/prs/handler/org.apache.commons.logging/nbproject/suite.properties b/prs/handler/org.apache.commons.logging/nbproject/suite.properties
deleted file mode 100644
index 5f42472..0000000
--- a/prs/handler/org.apache.commons.logging/nbproject/suite.properties
+++ /dev/null
@@ -1,16 +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.
-
-suite.dir=${basedir}/..
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/binaries-list b/prs/handler/org.apache.commons.logging/release/modules/ext/binaries-list
deleted file mode 100644
index 5f56286..0000000
--- a/prs/handler/org.apache.commons.logging/release/modules/ext/binaries-list
+++ /dev/null
@@ -1,17 +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.
-5043BFEBC3DB072ED80FBD362E7CAF00E885D8AE commons-logging:commons-logging:1.1.1
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-license.txt b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-license.txt
deleted file mode 100644
index d68b66f..0000000
--- a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-license.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-Name: Apache Jakarta Commons Logging
-Origin: Apache Software Foundation
-Version: 1.1.1
-License: Apache-2.0
-Description: Logging component
-URL: http://commons.apache.org/logging/
-
-                                 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/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-notice.txt b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-notice.txt
deleted file mode 100644
index 6e15324..0000000
--- a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1-notice.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-// ------------------------------------------------------------------
-// NOTICE file corresponding to the section 4d of The Apache License,
-// Version 2.0, in this case for Commons Logging
-// ------------------------------------------------------------------
-
-Commons Logging
-Copyright 2001-2007 The Apache Software Foundation
-
-This product includes/uses software(s) developed by 'an unknown organization'
-  - Unnamed - avalon-framework:avalon-framework:jar:4.1.3
-  - Unnamed - log4j:log4j:jar:1.2.12
-  - Unnamed - logkit:logkit:jar:1.0.1
-
-
-
diff --git a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1.jar b/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1.jar
deleted file mode 100644
index 1deef14..0000000
--- a/prs/handler/org.apache.commons.logging/release/modules/ext/commons-logging-1.1.1.jar
+++ /dev/null
Binary files differ
diff --git a/prs/handler/org.apache.commons.logging/src/org/apache/commons/logging/Bundle.properties b/prs/handler/org.apache.commons.logging/src/org/apache/commons/logging/Bundle.properties
deleted file mode 100644
index 3440563..0000000
--- a/prs/handler/org.apache.commons.logging/src/org/apache/commons/logging/Bundle.properties
+++ /dev/null
@@ -1,16 +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.
-
-OpenIDE-Module-Name=org.apache.commons.logging
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java
index 4213667..001d2d8 100644
--- a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppEnableDisable.java
@@ -81,7 +81,7 @@
                     config.put("url", NOTIFY_HOOK_URL);
                     config.put("content_type", "json");
                     config.put("content_type", "json");
-                    repository.createHook("Jackpot", config, EnumSet.of(GHEvent.PULL_REQUEST), true);
+                    repository.createHook("web", config, EnumSet.of(GHEvent.PULL_REQUEST), true);
                 }
             }
         } catch (IOException ex) {
diff --git a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java
index 11dbd19..2b84e6a 100644
--- a/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java
+++ b/prs/webapp/src/main/java/org/netbeans/jackpot/prs/webapp/WebAppNotify.java
@@ -58,7 +58,7 @@
             return ;
         }
         Preferences handlerPrefs = Config.getDefault().getPreferences().node("handler");
-        String handler = handlerPrefs.get("handler", "handler");
+        String handler = handlerPrefs.get("handler", "handler.local");
         String remoteHost = handlerPrefs.get("remoteHost", null);
         String remotePath = handlerPrefs.get("remotePath", null);
         ProcessBuilder builder;
