Index: /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java
===================================================================
--- /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 205)
+++ /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java (revision 206)
@@ -10,7 +10,4 @@
  */
 import java.util.*;
-//import java.util.LinkedList;
-//import java.util.List;
-//import java.util.ListIterator;
 
 public class OWLClassGraph extends LabeledMultiDigraph{
@@ -26,4 +23,5 @@
         ClassLink classLink;
         List<ClassLink> path;
+        Set<String> classURIs; // apearing class URIs in the path
         //boolean converge;
         
@@ -40,6 +38,14 @@
            //this.converge = converge;
         }
-    }
-        
+
+        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI, Set<String> classURIs){
+           this.classLink = classLink;
+           this.path = path;
+           this.originalClassURI = originalClassURI;
+           this.classURIs = classURIs;
+           //this.converge = converge;
+        }
+    }
+
     public OWLClassGraph(String startClass, String endClass){
         super();
@@ -52,10 +58,27 @@
         nsteps = 3;
         limit = 1000;
-        prunecut = 100;        
+        prunecut = 100;
+        th = 5;
+    }
+
+    public OWLClassGraph(String startClass, String endClass, int th){
+        super();
+        
+        // start & end
+        this.startClass = startClass;
+        this.endClass = endClass;
+        // th of instances
+        this.th = th;
+        
+        // parameters
+        nsteps = 3;
+        limit = 1000;
+        prunecut = 100;
     }
 
     public Path[] getPaths(RDFSchemaAnalyzer rdfsa, boolean countLink){
         List<List<ClassLink>> paths = null;
-        paths = searchPaths(rdfsa, countLink);
+        //paths = searchPaths(rdfsa, countLink);
+        paths = searchPathsbyVisitingNodes(rdfsa, countLink);
         NavigableSet<Path> sortedpath = new TreeSet<Path>();
         ListIterator<List<ClassLink>> pit = paths.listIterator();
@@ -114,9 +137,4 @@
                            crrlp.classLink.getDirection() != classLinks[j].getDirection() &&
                            crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){
-                              //System.out.println("P1");
-                              continue;
-                          }
-                          if ( checkPruning(crrlp.classLink, classLinks[j]) ){
-                              //System.out.println("P2");
                               continue;
                           }
@@ -133,7 +151,48 @@
     }
 
-    //private
-    
-/*    
+    private List<List<ClassLink>> searchPathsbyVisitingNodes(RDFSchemaAnalyzer rdfsa, boolean countLinks){
+        List<List<ClassLink>> paths = new ArrayList<>();
+        List<LinkAndPath> lp = new LinkedList<>();
+        Set<String> urls = new HashSet<String>();
+        urls.add(startClass);
+        lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), 
+                                 new LinkedList<ClassLink>(), startClass, urls));
+        try{
+          for ( int i = 0; i < nsteps; i++ ){
+              ListIterator<LinkAndPath> lit = lp.listIterator();
+              List<LinkAndPath> nextlp = new LinkedList<>();
+              while ( lit.hasNext() ){
+                  LinkAndPath crrlp = lit.next();
+                  ClassLink[] classLinks = rdfsa.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks);
+                  // limit
+                  for ( int j = 0 ; j < classLinks.length; j++ ){
+                      if (crrlp.classURIs.contains(classLinks[j].getLinkedClassURI()) ){
+                          continue; // visited
+                      }
+                      List<ClassLink> crrpath = new LinkedList<>(crrlp.path);
+                      crrpath.add(classLinks[j]);
+                      Set<String> crrurls = new HashSet<String>(crrlp.classURIs);
+                      crrurls.add(classLinks[j].getLinkedClassURI());
+                      if ( classLinks[j].getLinkedClassURI() == null ){ continue; }
+                      if ( classLinks[j].getNumOfLinks() <= th){
+                          continue;
+                      }
+                      if ( classLinks[j].getLinkedClassURI().equals(endClass) ){
+                          paths.add(new LinkedList<>(crrpath));
+                          continue;
+                      }
+                      //crrlp.classURIs.add()
+                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI(),crrurls));
+                  }
+              }
+              lp = nextlp;
+          }
+        }catch(Exception e){ 
+            System.err.println(e);
+        }
+        return paths;  
+    }
+    
+    /*
     private List<List<ClassLink>> searchPathsWithCut(OWLQueryBuilderImpl qb){
         List<List<ClassLink>> paths = new ArrayList<>();
@@ -261,4 +320,39 @@
    }
    
-   
+   /*
+   public Path[] getPathsByWholeGraph(RDFSchemaAnalyzer rdfsa){
+        setWholeGraph(rdfsa);
+        List<List<ClassLink>> paths = null;
+        //paths = searchPaths(rdfsa, countLink);
+        paths = searchPathsbyVisitingNodes(rdfsa, countLink);
+        NavigableSet<Path> sortedpath = new TreeSet<Path>();
+        ListIterator<List<ClassLink>> pit = paths.listIterator();
+        int j = 0;
+        while ( pit.hasNext() ){
+            Path path = new Path();
+            path.setStartClass(startClass);
+            List<ClassLink> crrpath = pit.next();
+            path.setClassLinks(crrpath);
+            ListIterator<ClassLink> cit = crrpath.listIterator();
+            int min = Integer.MAX_VALUE;
+            while ( cit.hasNext() ){
+                ClassLink cl = cit.next();
+                if ( cl.getNumOfLinks() < min ){
+                    min = cl.getNumOfLinks();
+                }
+            }
+            path.setWidth(min);
+            sortedpath.add(path);
+            j++;
+        }
+        Path[] patharray = new Path[paths.size()];
+        Iterator<Path> pait = sortedpath.descendingIterator();
+        int i = 0;
+        while ( pait.hasNext() ){
+            patharray[i] = pait.next();
+            i++;
+        }
+        return patharray;
+    }
+    */
 }
Index: /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java
===================================================================
--- /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java (revision 205)
+++ /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java (revision 206)
@@ -94,9 +94,7 @@
 	}
 	jsonstr += "]}";
-        System.out.println("JSON:");
-        System.out.println(jsonstr);
+        //System.out.println("JSON:");
+        //System.out.println(jsonstr);
         out.print(jsonstr);
-        //List<Path>
-        //session.setAttribute("pathlist", pathlist);
     }
 
Index: /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java
===================================================================
--- /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java (revision 204)
+++ /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java (revision 206)
@@ -10,5 +10,5 @@
 import java.io.PrintWriter;
 import java.math.BigDecimal;
-//import java.math.BigDecimal;
+import java.util.*;
 import javax.json.*;
 import javax.servlet.ServletException;
@@ -80,12 +80,9 @@
                    qpg = new QueryPathGenerator();
         }
+        SortedSet<String> sortedClasses = new TreeSet<String>(); // display + url
         qpg.setSPARQLendpoint(ep);
         SClass[] classes = qpg.getClasses(null);
-        JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
-        JsonArrayBuilder jab = jbfactory.createArrayBuilder();
         for (int i = 0 ; i < classes.length; i++ ){
-            JsonObjectBuilder job = jbfactory.createObjectBuilder();
             String uri = classes[i].getClassURI();
-            job.add("uri", uri);
             Label[] labels = classes[i].getLabels();
             String label = null;
@@ -103,14 +100,29 @@
                 label = tmplabel2[tmplabel2.length-1];
             }
-            
-            StringBuilder displaybuilder = new StringBuilder(label);
-            displaybuilder.append(" (");
-            displaybuilder.append(classes[i].getNumOfInstances());
-            displaybuilder.append(")");
-            job.add("display", displaybuilder.toString());
+            StringBuilder classbuilder = new StringBuilder(label);
+            classbuilder.append(" (");
+            classbuilder.append(classes[i].getNumOfInstances());
+            classbuilder.append(")  ");
+            classbuilder.append(uri);
+            sortedClasses.add(classbuilder.toString());
+        }
+        JsonBuilderFactory jbfactory = Json.createBuilderFactory(null);
+        JsonArrayBuilder jab = jbfactory.createArrayBuilder();
+        Iterator<String> cit = sortedClasses.iterator();
+        while( cit.hasNext() ){
+            JsonObjectBuilder job = jbfactory.createObjectBuilder();
+            String classinfo = cit.next();
+            String[] data = classinfo.split("  "); 
+            if (data.length != 2 ){
+                System.out.println("data is wrong?");
+            }
+            job.add("uri", data[1]);
+            job.add("display", data[0]);
             jab.add(job);
         }
         JsonArray ja = jab.build();
         out.print(ja);
+        // 
+        
     }
 
Index: /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java
===================================================================
--- /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java (revision 204)
+++ /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java (revision 206)
@@ -84,4 +84,6 @@
         PrintWriter out = response.getWriter();
         String jpath = request.getParameter("jsonpath");
+        System.out.println("JsonPath");
+        System.out.println(jpath);
         Path path = null;
         try {
Index: /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/EPServlet.java
===================================================================
--- /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/EPServlet.java (revision 205)
+++ /SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/EPServlet.java (revision 206)
@@ -68,5 +68,7 @@
             throws ServletException, IOException {
         HttpSession session = request.getSession();
+        // Initialize the session
         session.removeAttribute("qpg");
+        session.removeAttribute("graph");
         QueryPathGenerator qpg = new QueryPathGenerator();
 
