diff --git a/00.DOCUMENTATION/00. Introduction/README.md b/00.DOCUMENTATION/A-Introduction/README.md
similarity index 65%
rename from 00.DOCUMENTATION/00. Introduction/README.md
rename to 00.DOCUMENTATION/A-Introduction/README.md
index f74e23ee8493c5fbf63cdaaf481e7000f83dcef6..b2786d1f99d313ba70974fbc4b8e786a57094962 100644
--- a/00.DOCUMENTATION/00. Introduction/README.md	
+++ b/00.DOCUMENTATION/A-Introduction/README.md
@@ -12,20 +12,39 @@ The app can be tested by simply opening explorerjs.html and providing a graph in
 #### Basic integration policy
 As a client-side lib, **tinawebJS can entirely reside in the `static` directory of your app**.
 
-So the procedure to integrate is basically just to extract the tinawebJS distribution in your `static` directory
+For the rest of the exemples we assume you cloned the code in a directory called `path/to/yourapp/static/ProjectExplorer`
+
+So the procedure to integrate is basically just to extract the tinawebJS distribution in your `static` directory.
 
 There are two exceptions are:
   - the html starting point itself:  
     - to use it as is:
 
-      1) just link to it from your html dir or templates dir
+      1) go into the root directory of projectExplorer in your static dir
+      ```
+      # with our exemple
+      cd path/to/yourapp/static/ProjectExplorer
+      ```
+
+      2) apply the changing paths tool `adapt_html_paths.sh` like this:
+      ```
+      bash twtools/adapt_html_paths.sh 'static/projectExplorer/'
+      #                                ------------------------
+      #                      the relative url prefix in your deployment routes
+      ```
+      this creates a new file: `explorerjs.prod.html`
+
+      3) now just link to the new file from your html dir or templates dir
       ```
-      ~/yourapp > ln -s static/tinawebJS/explorerjs.html
-      ~/yourapp > ls -l
-      4,0K 2030-03-15 16:49 HTML ELEMENTS OF YOUR APP
-        32 2030-06-28 10:14 explorerjs.html -> static/tinawebJS/explorerjs.html
+      # cd back/to/your/app/root (or html files dir)
+      cd ../../  
+      ln -s static/ProjectExplorer/explorerjs.prod.html explorerjs.html
+
+      # now `ls -l` should show something like this:
+      # - HTML ELEMENTS OF YOUR APP
+      # - HTML ELEMENTS OF YOUR APP
+      # - explorerjs.html -> static/ProjectExplorer/explorerjs.prod.html
       ```
-      2) apply the changing paths tool from `twtools/adapt_html_paths.sh`
 
     - to use it within a different GUI layout: take our html as an exemple and create your own html importing the same libs and exposing the same div ids.
 
diff --git a/00.DOCUMENTATION/01. Interactions Bipartites/00_Bipartite-Components.png b/00.DOCUMENTATION/B-Interactions_Bipartites/00_Bipartite-Components.png
similarity index 100%
rename from 00.DOCUMENTATION/01. Interactions Bipartites/00_Bipartite-Components.png
rename to 00.DOCUMENTATION/B-Interactions_Bipartites/00_Bipartite-Components.png
diff --git a/00.DOCUMENTATION/01. Interactions Bipartites/00_Bipartite-Engine.png b/00.DOCUMENTATION/B-Interactions_Bipartites/00_Bipartite-Engine.png
similarity index 100%
rename from 00.DOCUMENTATION/01. Interactions Bipartites/00_Bipartite-Engine.png
rename to 00.DOCUMENTATION/B-Interactions_Bipartites/00_Bipartite-Engine.png
diff --git a/00.DOCUMENTATION/01. Interactions Bipartites/00_Bipartite-Engine:SocSem-example.png b/00.DOCUMENTATION/B-Interactions_Bipartites/00_Bipartite-Engine:SocSem-example.png
similarity index 100%
rename from 00.DOCUMENTATION/01. Interactions Bipartites/00_Bipartite-Engine:SocSem-example.png
rename to 00.DOCUMENTATION/B-Interactions_Bipartites/00_Bipartite-Engine:SocSem-example.png
diff --git a/00.DOCUMENTATION/01. Interactions Bipartites/README.md b/00.DOCUMENTATION/B-Interactions_Bipartites/README.md
similarity index 100%
rename from 00.DOCUMENTATION/01. Interactions Bipartites/README.md
rename to 00.DOCUMENTATION/B-Interactions_Bipartites/README.md
diff --git a/00.DOCUMENTATION/01. Interactions Bipartites/TagCloud.pdf b/00.DOCUMENTATION/B-Interactions_Bipartites/TagCloud.pdf
similarity index 100%
rename from 00.DOCUMENTATION/01. Interactions Bipartites/TagCloud.pdf
rename to 00.DOCUMENTATION/B-Interactions_Bipartites/TagCloud.pdf
diff --git a/00.DOCUMENTATION/01. Interactions Bipartites/bigraph-building.pdf b/00.DOCUMENTATION/B-Interactions_Bipartites/bigraph-building.pdf
similarity index 100%
rename from 00.DOCUMENTATION/01. Interactions Bipartites/bigraph-building.pdf
rename to 00.DOCUMENTATION/B-Interactions_Bipartites/bigraph-building.pdf
diff --git a/00.DOCUMENTATION/C-advanced/call_graph.dot b/00.DOCUMENTATION/C-advanced/call_graph.dot
new file mode 100644
index 0000000000000000000000000000000000000000..a5f4504044233fa890249223fb030c5850566518
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/call_graph.dot
@@ -0,0 +1,84 @@
+// dot call_graph.dot -Tpng -o tina_call_graph.png
+digraph tina_call_graph {
+    graph [ordering="out"];
+    rankdir=LR ;
+
+    edge [fontsize=10] ;
+    label=<<B><U>tinawebJS</U></B><BR/>(initialization callgraph)>;
+    labelloc="t" ;
+
+    // settings
+    "settings var" -> "settings:SystemStates";
+    "settings var" -> "settings:sigmaJsDrawingProperties";
+    "settings var" -> "etc.";
+
+    // getUrlParam
+    "t.globalUtils:getUrlParam" -> "var mainfile (url)" ;
+
+    // main 1: get graph
+    "t.main" -> "var mainfile (url)" ;
+    "var mainfile (url)" -> "ajax garg" ;
+    "ajax garg" -> "t.main:MainFunction" ;
+
+    // main 2: parse graph
+    "t.main:MainFunction" -> "t.sigma.parseCustom:ParseCustom" ;
+    "t.main:MainFunction" -> "t.sigma.parseCustom:scanFile" ;
+        "t.sigma.parseCustom:scanFile" -> "t.sigma.parseCustom:getJSONCategories" ;
+            "t.sigma.parseCustom:getJSONCategories" -> "t.sigma.parseCustom:scanJSON" ;
+    "t.main:MainFunction" -> "t.sigma.parseCustom:makeSystemStates" ;
+    "t.main:MainFunction" -> "t.sigma.parseCustom:buildInitialState" ;
+    "t.main:MainFunction" -> "t.sigma.parseCustom:makeDicts" ;
+        "t.sigma.parseCustom:makeDicts" -> "t.sigma.parseCustom:dictfyJSON"  [label="cats={'terms':0}"] ;
+
+    // main 3: new TinaWebJS()
+    "t.main:MainFunction" -> "var twjs_" ;
+        "var twjs_" -> "t.TinawebJS:TinaWebJS:new" ;
+
+    // main 4: adjust canvas routine
+    "t.main:MainFunction" -> "t.TinawebJS:AdjustSigmaCanvas" ;      // twjs_.AdjustSigmaCanvas()
+        "t.TinawebJS:AdjustSigmaCanvas" -> "t.TinawebJS:sigmaLimits" ;
+        "t.TinawebJS:sigmaLimits" -> "t.TinawebJS:visibleHeight" ;
+        "t.TinawebJS:sigmaLimits" -> "new canvas!" ;
+
+    // main 5: partialGraph and new SigmaUtils()
+    "t.main:MainFunction" -> "var partialGraph" ;
+        "var partialGraph" -> "sigma:init";
+    "t.main:MainFunction" -> "t.SigmaUtils:SigmaUtils:new" ;
+    "t.main:MainFunction" -> "t.SigmaUtils:SigmaUtils:FillGraph" ; // [ Poblating the Sigma-Graph ]
+        "t.SigmaUtils:SigmaUtils:FillGraph" -> "SigmaPublic.addNode" [label="x N"];
+        "t.SigmaUtils:SigmaUtils:FillGraph" -> "SigmaPublic.addEdge" [label="x N"];
+            "SigmaPublic.addEdge" -> "t.globalUtils:hex2rga" [label="x M"];
+        "t.SigmaUtils:SigmaUtils:FillGraph" -> "t.enviroment:updateSearchLabels" [label="N x push labels"];
+
+    // main 6: state and settings for partialGraph
+    // "settings:sigmaJsDrawingProperties" -> "var partialGraph" ;
+    // "settings:SystemStates" -> "var partialGraph" ;
+        "var partialGraph" -> "t.main:partialGraph:setState";
+
+    // main 7: twjs_.initListeners( categories , partialGraph)
+    "t.main:MainFunction" -> "t.TinawebJS:initListeners" ;
+        "t.TinawebJS:initListeners" -> "t.TinawebJS:SelectionEngine:new" [label="initListeners:SelInst"] ;
+        "t.TinawebJS:initListeners" -> "onclick:#changetype" ;
+        "t.TinawebJS:initListeners" -> "onclick:#changelevel" ;
+        "t.TinawebJS:initListeners" -> "onclick:#aUnfold" ;
+        "t.TinawebJS:initListeners" -> "t.minimap:startMiniMap" [label = "if minimap"] ;
+        "t.TinawebJS:initListeners" -> "t.methods:pushSWClick" [label = "var swclickActual"] ;
+        "t.TinawebJS:initListeners" -> "t.methods:cancelSelection" ;
+            "t.methods:cancelSelection" -> "t.methods:highlightSelectedNodes" [label = "false"] ;
+                "t.methods:highlightSelectedNodes" -> "t.globalUtils:is_empty" ;
+            "t.methods:cancelSelection" -> "erase:#names" ;
+            "t.methods:cancelSelection" -> "erase:#ngrams_actions" ;
+            "t.methods:cancelSelection" -> "erase:#topPapers" ;
+            "t.methods:cancelSelection" -> "erase:#opossiteNodes" ;
+            "t.methods:cancelSelection" -> "erase:#searchinput" ;
+            "t.methods:cancelSelection" -> "t.methods:LevelButtonDisable" ;
+        "t.TinawebJS:initListeners" -> "t.sigmaUtils:showMeSomeLabels" ;
+            "t.sigmaUtils:showMeSomeLabels" -> "t.sigmaUtils:getVisibleNodes" ;
+
+        "t.TinawebJS:initListeners" -> "t.TinawebJS:SearchListeners" ;
+            "t.TinawebJS:SearchListeners" -> "autocomplete:#searchinput" ;
+                "autocomplete:#searchinput" -> "t.TinawebJS:SelectionEngine:new" [label="SearchListeners:SelInst"]  ;
+
+    /*t.methods:highlightSelectedNodes*/
+
+}
diff --git a/00.DOCUMENTATION/C-advanced/changeTypeOriginalVersion.md b/00.DOCUMENTATION/C-advanced/changeTypeOriginalVersion.md
new file mode 100644
index 0000000000000000000000000000000000000000..3c22f90f0802852f2e07a844f9f09a09a4f29cb6
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/changeTypeOriginalVersion.md
@@ -0,0 +1,97 @@
+
+//  THIS IS THE ORIGINAL FIRST VERSION OF changeType()
+//  It's not used since before I arrived, but useful as a logical resume
+//
+// States:
+// A : Macro-Social
+// B : Macro-Semantic
+// A*: Macro-Social w/selections
+// B*: Macro-Semantic w/selections
+// a : Meso-Social
+// b : Meso-Semantic
+// AaBb: Socio-Semantic
+function RefreshState(newNOW){
+
+    console.log("\t\t\tin RefreshState newNOW:_"+newNOW+"_.")
+
+  if (newNOW!="") {
+      PAST = NOW;
+      NOW = newNOW;
+
+    // if(NOW=="a" || NOW=="A" || NOW=="AaBb") {
+    //   $("#category-A").show();
+    // }
+    // if(NOW=="b" || NOW=="B" || NOW=="AaBb") {
+    //   $("#category-B").show();
+    // }
+  }
+
+    $("#category-A").hide();
+    $("#category-B").hide();
+    // i=0; for(var s in selections) { i++; break;}
+    // if(is_empty(selections) || i==0) LevelButtonDisable(true);
+    // else LevelButtonDisable(false);
+
+    //complete graphs case
+    // sels=getNodeIDs(selections).length
+    if(NOW=="A" || NOW=="a") {
+      // N : number of nodes
+      // k : number of ( selected nodes + their neighbors )
+      // s : number of selections
+        var N=( Object.keys(TW.Nodes).filter(function(n){return TW.Nodes[n].type==TW.conf.catSoc}) ).length
+        var k=Object.keys(getNeighs(Object.keys(selections),nodes1)).length
+        var s=Object.keys(selections).length
+        console.log("in social N: "+N+" - k: "+k+" - s: "+s)
+        if(NOW=="A"){
+            if( (s==0 || k>=(N-1)) ) {
+                LevelButtonDisable(true);
+            } else LevelButtonDisable(false);
+            if(s==N) LevelButtonDisable(false);
+        }
+
+        if(NOW=="a") {
+            LevelButtonDisable(false);
+        }
+
+        $("#semLoader").hide();
+        $("#category-A").show();
+        $("#colorGraph").show();
+
+    }
+    if(NOW=="B" || NOW=="b") {
+        var N=( Object.keys(TW.Nodes).filter(function(n){return TW.Nodes[n].type==TW.conf.catSem}) ).length
+        var k=Object.keys(getNeighs(Object.keys(selections),nodes2)).length
+        var s=Object.keys(selections).length
+        console.log("in semantic N: "+N+" - k: "+k+" - s: "+s)
+        if(NOW=="B") {
+            if( (s==0 || k>=(N-1)) ) {
+                LevelButtonDisable(true);
+            } else LevelButtonDisable(false);
+            if(s==N) LevelButtonDisable(false);
+        }
+
+        if(NOW=="b") {
+            LevelButtonDisable(false);
+        }
+        if ( semanticConverged ) {
+            $("#semLoader").hide();
+            $("#category-B").show();
+            setTimeout(function(){
+              EdgeWeightFilter("#sliderBEdgeWeight", "0|1", "weight");
+              NodeWeightFilter ( "#sliderBNodeWeight" , "NGram", "size");
+            },30)
+        } else {
+            $("#semLoader").css('visibility', 'visible');
+            $("#semLoader").show();
+        }
+
+    }
+    if(NOW=="AaBb"){
+        LevelButtonDisable(true);
+        $("#category-A").show();
+        $("#category-B").show();
+    }
+
+    TW.partialGraph.render();
+
+}
diff --git a/doc/developer_manual.md b/00.DOCUMENTATION/C-advanced/developer_manual.md
similarity index 100%
rename from doc/developer_manual.md
rename to 00.DOCUMENTATION/C-advanced/developer_manual.md
diff --git a/00.DOCUMENTATION/C-advanced/exemple_git_tree.md b/00.DOCUMENTATION/C-advanced/exemple_git_tree.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ae400410d92fd416b37c021fe385810aae70bd6
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/exemple_git_tree.md
@@ -0,0 +1,78 @@
+Remarques sur l'intégration de tina
+===================================
+
+### Pour info: procédure suivie
+
+Je copie ici les 2 commandes utilisées pour rendre visible comment a été faite la fusion du git de tina dans celui de garg.
+
+Grace à cette méthode, quand on clonera le dépot gargantext, on obtiendra aussi les contenus du dépôt tina dans notre sous-dossier **`static/lib/graphExplorer`**.
+
+**NB**  
+Il n'est pas nécessaire de refaire cette procédure, dorénavant les fichiers restent là dans le sous-dossier.
+
+
+  1. on a ajouté le dépôt extérieur de graphExplorer comme si c'était une remote normale  
+     ```
+     git remote add dependancy_graphExplorer_garg https://gogs.iscpif.fr/humanities/graphExplorer_garg
+     ```
+
+  2. on a lancé la commande `subtree` avec cette remote, pour récupérer le dépôt tina et le placer dans garg dans le dossier indiqué par l'option `prefix`
+
+    ```
+    git subtree add --prefix=static/lib/graphExplorer dependancy_graphExplorer_garg master
+    ```
+
+    Résultat:
+    ```
+    # git fetch dependancy_graphExplorer_garg master
+    # (...)
+    # Receiving objects: 100% (544/544), 1.72 MiB | 0 bytes/s, done.
+    # Resolving deltas: 100% (307/307), done.
+    # From https://gogs.iscpif.fr/humanities/graphExplorer_garg
+    #  * branch            master     -> FETCH_HEAD
+    #  * [new branch]      master     -> dependancy_graphExplorer_garg/master
+    # Added dir 'static/lib/graphExplorer'
+    ```
+
+  3. au passage la même commande a aussi créé le commit suivant dans ma branche gargantext
+    ```
+    # commit b8d7f061f8c236bad390eb968d153fd6729b7434
+    # Merge: 3bfb707 d256049
+    # Author: rloth <romain.loth@iscpif.fr>
+    # Date:   Thu Jul 7 16:01:46 2016 +0200
+    #
+    #     Add 'static/lib/graphExplorer/' from commit 'd256049'
+    ```
+    (ici le commit *d256049* indique le point où en était le dépôt tina quand il a été copié)
+
+
+### Utilisation en développement quotidien
+
+Il n'y a plus rien de particulier à faire. Le dossier contient les éléments de tina qui nous sont nécessaires. On peut ignorer l'existence du subtree et travailler normalement, dans ce dossier et ailleurs.
+
+**=> nos opérations de commit / pull quotidiennes ne sont pas affectées**
+
+Il n'est pas non plus nécessaire de prendre en compte la présence ou l'absence de la "remote" (lien extérieur) dans son travail.
+
+### Utilisation avancée: pour propager les résultats entre dépôts
+
+A présent le dépôt tina peut être vu comme une sorte de dépôt upstream circonscrit à un seul sous-dossier **`static/lib/graphExplorer`** !
+
+Mais si des changements interviennent dans le dépôt tina, ils ne seront pas automatiquement intégrés dans sa copie intégrée à garg. Pour opérer des A/R entre les dépôts le plus simple est une 1ère fois d'ajouter le même pointeur extérieur :
+```
+git remote add dependancy_graphExplorer_garg https://gogs.iscpif.fr/humanities/graphExplorer_garg
+```
+
+A partir de là, il devient très simple de faire des opérations push/pull entre dépôts si besoin est..
+
+  1. Récupération de mises à jour tina => garg.
+     Pour intégrer des changements upstream de tina vers garg, il suffit de lancer la commande suivante:
+
+    ```
+    git subtree pull --prefix=static/lib/graphExplorer dependancy_graphExplorer_garg master --squash
+    ```
+
+  2. Inversement, les changements effectués dans le dossier **`static/lib/graphExplorer`** par les développeurs garg peuvent aussi être poussés du dépôt garg vers le dépôt tina par un subtree push
+    ```
+    git subtree push --prefix=static/lib/graphExplorer dependancy_graphExplorer_garg master
+    ```
diff --git a/00.DOCUMENTATION/C-advanced/old_heatmapColors_with_binning.js b/00.DOCUMENTATION/C-advanced/old_heatmapColors_with_binning.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d7e66dffeeb6569a979ea2982a184e918d0d9e9
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/old_heatmapColors_with_binning.js
@@ -0,0 +1,152 @@
+
+// KEPT FOR REFERENCE, BINNING NOW PRECOMPUTED in parseCustom
+// rewrite of gradientColors with binning and for attributes that can have negative float values
+// /!\ age and growth_rate attributes referred to by name
+function colorsRelByBins_old(daclass) {
+  cancelSelection(false);
+
+  var binColors
+  var doModifyLabel = false
+
+  TW.handpickedcolor = true
+
+  // for debug of heatmapColoring
+  var totalsPerBinMin = {}
+
+
+  // should be = binColors.length
+  var nTicksParam = (daclass == 'age') ? 8 : 12
+  // do first loop entirely to get percentiles => bins, then modify alt_color
+
+  // estimating ticks
+  let tickThresholds = []
+  let valArray = []
+  for (var j=0 ; j < TW.nNodes ; j++) {
+    let n = TW.partialGraph.graph.nodes(TW.nodeIds[j])
+
+    if (
+        !n.hidden
+        && n.attributes
+        && n.attributes.category == 'terms'
+        && n.attributes[daclass] != undefined
+      ) {
+          valArray.push(Number(n.attributes[daclass]))
+    }
+  }
+
+  var len = valArray.length
+
+  valArray.sort(function(a, b) {return a - b;}) // important :)
+
+  for (var l=0 ; l < nTicksParam ; l++) {
+    let nthVal = Math.floor(len * l / nTicksParam)
+
+    tickThresholds.push(valArray[nthVal])
+  }
+
+  // also always add the max+1 as last tick (excluded upper bound of last bin)
+  tickThresholds.push((valArray[len-1])+1)
+
+  console.info(`[|===|=== ${nTicksParam} color ticks ===|===|]\n`, tickThresholds)
+
+
+  cancelSelection(false);
+
+  if (daclass == 'age') {
+    // 9 colors
+    binColors = TW.gui.getHeatmapColors(9)
+    }
+    else if (daclass == 'growth_rate') {
+
+      doModifyLabel = true
+
+      // 12 colors
+      binColors = TW.gui.getHeatmapColors(12)
+
+    }
+
+    // verification
+    if (nTicksParam != binColors.length) {
+      console.warn (`heatmapColoring setup mismatch: nTicksParam ${nTicksParam} should == nColors ${binColors.length}`)
+    }
+
+
+    // get the nodes
+    for (var j=0 ; j < TW.nNodes ; j++) {
+      let n = TW.partialGraph.graph.nodes(TW.nodeIds[j])
+      if (! n.hidden
+        && n.attributes
+        && n.attributes.category == 'terms'
+        && ! isUndef(n.attributes[daclass])
+      ) {
+
+        var valSt = n.attributes[daclass]
+
+        var originalLabel = TW.Nodes[n.id].label
+        if (doModifyLabel) {
+          n.label = `(${valSt}) ${originalLabel}`
+        }
+        else {
+          n.label = originalLabel
+        }
+
+        var theVal = parseFloat(valSt)
+        var foundBin = false
+        // console.log('theVal:',theVal)
+
+        if( !isNaN(theVal) ) { //is float
+          // iterate over bins
+          for(var k=0 ; k < tickThresholds.length-1; k++) {
+            var binMin = tickThresholds[k]
+            var binMax = tickThresholds[(k+1)]
+            if((theVal >= binMin) && (theVal < binMax)) {
+                // TW.partialGraph._core.graph.nodesIndex[n.id].binMin = binMin
+                // TW.partialGraph._core.graph.nodesIndex[n.id].color = binColors[j]
+
+                n.binMin = binMin
+                n.color = binColors[k]
+                n.customAttrs.alt_color = binColors[k]
+                n.customAttrs.altgrey_color = false
+                foundBin = true
+                // console.log(`theVal ${theVal} => found its bin ${binMin} ... ${binColors[k]}`)
+
+                if (!totalsPerBinMin[binMin]) {
+                  totalsPerBinMin[binMin] = 1
+                }
+                else {
+                  totalsPerBinMin[binMin]++
+                }
+                break
+            }
+          }
+
+          // case no bin after loop (perhaps more ticks than colors-1 ??)
+          if (!foundBin) {
+            console.warn('no bin for theVal', theVal, n.id)
+            n.binMin = null
+            n.color = '#000'
+            n.customAttrs.alt_color = '#000'
+          }
+        }
+        else {
+          // case no val
+          // console.log('no val for', n.id)
+          n.binMin = null
+          n.color = '#555'
+          n.customAttrs.alt_color = '#555'
+        }
+
+      }
+    }
+
+    // console.debug(valArray)
+
+    console.info('coloring distribution per tick thresholds' , totalsPerBinMin)
+
+    // Edge precompute alt_rgb by new source-target nodes-colours combination
+    repaintEdges()
+
+    // set_ClustersLegend ( daclass )
+
+    TW.partialGraph.render();
+}
diff --git a/00.DOCUMENTATION/C-advanced/possible/tweaking_rendering.js b/00.DOCUMENTATION/C-advanced/possible/tweaking_rendering.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0cd428846d911d6307e1c1175951c5f95f47f84
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/possible/tweaking_rendering.js
@@ -0,0 +1,35 @@
+// frequent commands
+TW.rend.clear()
+TW.rend.render()
+
+TW.partialGraph.settings.embedObjects({prefix: 'renderer1:'})('singleHover')
+
+
+
+
+    // POSS: edit config of CanvasRenderingContext2D
+    // TW.rend.contexts.nodes.imageSmoothingQuality = "high"
+    // TW.rend.contexts.edges.imageSmoothingQuality = "high"
+    // TW.rend.contexts.labels.imageSmoothingQuality = "high"
+
+
+    // cf. https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D
+
+    TW.rend.contexts.nodes.globalCompositeOperation = "multiply"
+    TW.rend.contexts.edges.globalCompositeOperation = "multiply"
+    TW.rend.contexts.labels.globalCompositeOperation = "multiply"
+
+
+
+// rendering one
+
+var oneNode = TW.partialGraph.graph.nodes(4)
+
+sigma.canvas.nodes.def(
+  oneNode,
+  TW.rend.contexts.nodes,
+  TW.partialGraph.settings.embedObjects({prefix: 'cam0:'})
+)
+
+// for fixed "hoverlike" labels => override the module's sigma.canvas.labels.def with an "if" like below (or add another type)
+// cf. sigmaUtils.twRender.canvas.labels
diff --git a/00.DOCUMENTATION/C-advanced/possible/tweaking_rendering.txt b/00.DOCUMENTATION/C-advanced/possible/tweaking_rendering.txt
new file mode 100644
index 0000000000000000000000000000000000000000..677a5005f6d6cc44428a8ad06ebcbf0affb8ae9f
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/possible/tweaking_rendering.txt
@@ -0,0 +1,32 @@
+// current commands
+
+
+
+TW.partialGraph.settings.embedObjects({prefix: 'renderer1:'})('singleHover')
+
+
+
+
+    // POSS: edit config of CanvasRenderingContext2D
+    // TW.rend.contexts.nodes.imageSmoothingQuality = "high"
+    // TW.rend.contexts.edges.imageSmoothingQuality = "high"
+    // TW.rend.contexts.labels.imageSmoothingQuality = "high"
+
+
+    // cf. https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D
+
+    TW.rend.contexts.nodes.globalCompositeOperation = "multiply"
+    TW.rend.contexts.edges.globalCompositeOperation = "multiply"
+    TW.rend.contexts.labels.globalCompositeOperation = "multiply"
+
+
+
+// rendering one
+
+var oneNode = TW.partialGraph.graph.nodes(4)
+
+sigma.canvas.nodes.def(
+  oneNode,
+  TW.rend.contexts.nodes,
+  TW.partialGraph.settings.embedObjects({prefix: 'cam0:'})
+)
diff --git a/00.DOCUMENTATION/C-advanced/refactoring_changes.md b/00.DOCUMENTATION/C-advanced/refactoring_changes.md
new file mode 100644
index 0000000000000000000000000000000000000000..7ecefd5074d247607a19de5c1226951ddfaa6d75
--- /dev/null
+++ b/00.DOCUMENTATION/C-advanced/refactoring_changes.md
@@ -0,0 +1,63 @@
+## Liste des principaux changements effectués
+
+... durant la refonte à l'occasion du passage à sigma 1.2
+
+  1. refonte du début du `main` pour distinguer les choix initiaux (mode gexf et mode json, biparti ou pas) de la suite harmonisée (instanciation du graphe)
+  2. réécriture accesseurs et actions d'affichage (suppression de certains rendus identiques consécutifs)
+  3. préparation d'un index inversé par attributs
+    - structure valeurs par attributs => liste des nodes
+    - ou groupes de valeurs par attributs => liste des nodes
+    - utile pour les filtres, les légendes et facettes de recherche
+    - sait créer de façon configurable des "bins" (= paniers de valeurs) pour tout attribut à valeurs continues ou ayant un effectif très nombreux
+  4. selection: code simplifié pour les évenements click, et rendu plus esthtique pour l'identification des voisins
+  5. sélection sur zone beaucoup plus rapide grace au quadtree
+  6. exploration plus fluide grace au précalcul des couleurs de base, alternatives, grisées
+  7. optimisations mémoire
+    - éviter dans une large mesure les copies implicites de l'ensemble des nodes
+    - version sigma.noIndexes.js sans les indexs faisant doublons avec tina
+         - par défaut ces indexs doublaient la signature RAM
+         - ancien tina 60MB => nouveau 120MB
+         - avec la version noIndexes ancien 60MB => nouveau 64MB
+  8. nouvelle api topPapers pour l'interrogation directe de twitter
+  9. meilleure stratégie pour les customizations du rendering (elles ne nécessitent plus de modifier le code de sigma lui-même)
+  10. nouveau layout plus rapide lors des évenements resize
+  11. reconnexion du mode biparti qui était fonctionnel dans les versions tina classiques (types nommés en durs "sem/soc" avant 2014) avec l'architecture SystemStates dans les tina après 2014 (qui préserve l'historique des types mais les encode d'une façon plus compliquée à base de "typestrings")
+  12. plusieurs rangements
+    - suppression des anciennes structures "localdb" inutilisées (héritées de cortext?)
+    - portage vers les librairies bootstrap et jquery dans leurs nouvelles versions
+    - ajout de namespaces pour limiter le nombre de variables globales
+    - settings_explorer: suppression de settings non utilisés, reconnexion de settings présents
+    - suppression de fonctions obsolètes
+  13. debugFlags dans les settings
+  14. intégration du plugin sigma noverlap: fonctionnalité très importante (mais coûteuse)
+  15. mode 'standalone' (local), ajout d'un <input type='file'>
+
+### Changements cours ou encore à faire:
+  15. architecture générale
+    - fonctions linéaires sur scénarios ==> objets d'interaction + évenements
+      (serait beaucoup plus facile à maintenir et faciliterait la modularité)
+  16. utilisation plus à fond des nouveaux plugins sigma
+    - cf. http://twjs.org/sigma
+    - `filters` très puissant
+       - stratégie via la prop `hidden` (au lieu de del/add comme actuellement)
+       - primitives combinables: nodesBy, edgesBy, neighborsOf
+    - dragNodes: plus agréable de pouvoir déplacer les noeuds
+  17. clarifications reverse api
+    - specifications sur arguments en entrée (url) et possibilités bridge
+    - specifications sur types de documents
+      - noms des categories attendues, et attributs possibles
+      - formats à savoir traiter
+  18. clarifications API pour les serveurs de sources
+    - serveur topPapers à inclure comme module ou projets à part
+    - spécificités API gargantext (actions sur les Ngrammes/listes) : inclure ou à part ?
+  19. cohérence de certains choix:
+    - la selection des "opposite neighbors" n'est pas close: on ne retrouve que le voisinage local, mais on ne peut pas retomber sur le graphe d'origine sans recharger la page
+    - pourquoi catSoc par défaut?  => FAIT
+    - pourquoi ne pas intégrer fillGraph dans l'instance parseCustom ?
+    - pourquoi ne pas intégrer env/listeners dans l'instance TW ?
+  20. thèmes de couleurs possibles + effets canvas eg multiply => possibilités GUI
+
+
+
+  // £TODO rendering optimization: reduce effort by looping only on previously selected and neighbors
+  //       and having (!active && !highlight) tested instead of then useless grey flag
diff --git a/explorerjs.html b/explorerjs.html
index df4625db272a6f95275861f53d6e268776e1c3a8..c3f7d361bca7e4f4bfae313835b570877434925f 100644
--- a/explorerjs.html
+++ b/explorerjs.html
@@ -5,7 +5,7 @@
   <meta charset="utf-8">
   <meta name="language" content='EN'>
   <meta name="language" content='FR'>
-  <meta name="keywords"  content="dataviz, graph, data exploration, sigmajs, tinawebjs">
+  <meta name="keywords"  content="dataviz, graph, data exploration, sigmajs, tinawebjs, projectExplorer">
   <meta name="copyright" content="ISCPIF - UPS 3611 CNRS - 2017">
   <meta name="revised"   content="2017-04-01/rloth">
   <meta name="viewport"  content="width=device-width, initial-scale=1">
@@ -54,19 +54,18 @@
 
 
   <!-- CSS -->
-  <link rel="stylesheet" href="twlibs/css2/twjs.css">
-  <link rel="stylesheet" href="twlibs/css2/twjs-mobile.css">
-  <link rel="stylesheet" href="twlibs/css2/selection-panels.css">
-  <link rel="stylesheet" href="twlibs/css2/selection-panels-mobile.css">
-
-  <link rel="stylesheet" href="twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.min.css" media="screen">
-  <link rel="stylesheet" href="twlibs/bootstrap-3/css/bootstrap.min.css" media="screen">
-  <!-- NB bs2/3 not used for main grid (graph + bars) but inside the bars -->
-  <link rel="stylesheet" href="twlibs/css2/freshslider.css" media="screen">
-
-  <link type="text/css" href="twlibs/tweets/tweet.light.ltr.css" rel="stylesheet"/>
-  <link type="text/css" href="twlibs/tweets/custom.css" rel="stylesheet"/>
-  <link type="text/css" href="twlibs/css2/user_form.css" rel="stylesheet"/>
+  <link rel="stylesheet" href="twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.min.css" media="screen">
+  <!-- NB bootstrap 3 not used for main grid (graph + bars) but inside the bars -->
+  <link rel="stylesheet" href="twlibs3/bootstrap-3/css/bootstrap.min.css" media="screen">
+  <link rel="stylesheet" href="twlibs3/css/freshslider/freshslider.css" media="screen">
+  <link rel="stylesheet" href="twlibs3/tweets/tweet.light.ltr.css" />
+  <link rel="stylesheet" href="twlibs3/tweets/custom.css"/>
+
+  <link rel="stylesheet" href="twlibs/css/twjs.css">
+  <link rel="stylesheet" href="twlibs/css/twjs-mobile.css">
+  <link rel="stylesheet" href="twlibs/css/selection-panels.css">
+  <link rel="stylesheet" href="twlibs/css/selection-panels-mobile.css">
+  <link rel="stylesheet" href="twlibs/css/user_form.css" />
 
   <!-- JS -->
   <!-- <script src="script.js"></script> -->
@@ -116,11 +115,11 @@
           <li><a href="http://www.cnrs.fr" target="_blank"
                 class="navbar-higher"
                 title="CNRS">
-                <img src="twlibs/img2/logo_cnrs_transparent.gif" height="23"></a></li>
+                <img src="twlibs/img/logo_cnrs_transparent.gif" height="23"></a></li>
           <li><a href="http://iscpif.fr" target="_blank"
                 class="navbar-higher"
                 title="ISC-PIF">
-                <img src="twlibs/img2/logo_ISCPIF_small.svg" height="23"></a></li>
+                <img src="twlibs/img/logo_ISCPIF_small.svg" height="23"></a></li>
 
         </ul>
 
@@ -160,7 +159,7 @@
             <li><a href="https://communityexplorer.org"
                   class="navbar-higher"
                   title="Community Explorer">
-                  <img src="twlibs/img2/logo.png"
+                  <img src="twlibs/img/logo.png"
                        style="width:60px; position:absolute; top:-60px; left:-75px; z-index:5; overflow:visible;">
             </a></li>
 
@@ -194,7 +193,7 @@
 
              <li id="setcolorsMenu" class="dropdown">
                <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
-               Set Colors <img title="Set Colors" src="twlibs/img2/colors.png" width="20px"><span class="caret"></span>
+               Set Colors <img title="Set Colors" src="twlibs/img/colors.png" width="20px"><span class="caret"></span>
                </a>
                 <ul id="colorgraph-menu" class="dropdown-menu">
                 </ul>
@@ -314,7 +313,7 @@
               <!--
                <li>
                   <a href="#" id="geomapicon" onclick="$('#geomapmodal').modal('show'); callGeomapADEME();">
-                    <img title="World Map Distribution" width="34px" src="twlibs/img2/world.png"></img>
+                    <img title="World Map Distribution" width="34px" src="twlibs/img/world.png"></img>
                   </a>
               </li>
               -->
@@ -322,13 +321,13 @@
 
                <li>
                   <a href="#" id="snapicon" onclick="saveGraphIMG();" class="zoombarbuttons">
-                    <img title="Take a photo!" style="width:30px" src="twlibs/img2/camera.png"></img>
+                    <img title="Take a photo!" style="width:30px" src="twlibs/img/camera.png"></img>
                   </a>
               </li>
 
               <li>
                   <a href="#savemodal" id="saveAs" class="zoombarbuttons" data-toggle="modal" data-target="#savemodal">
-                    <img style="width:28px" title="Save As..." src="twlibs/img2/save.png"></img>
+                    <img style="width:28px" title="Save As..." src="twlibs/img/save.png"></img>
                   </a>
               </li>
 
@@ -348,21 +347,21 @@
               <li>
                   <a href="#" id="lensButton" class="zoombarbuttons"
                      title="Center View">
-                    <img src="twlibs/img2/target.png">
+                    <img src="twlibs/img/target.png">
                   </a>
               </li>
 
               <li>
                   <a href="#" id="layoutButton" class="zoombarbuttons"
                      title="Force Atlas Layout">
-                    <img src="twlibs/img2/edges.png">
+                    <img src="twlibs/img/edges.png">
                   </a>
               </li>
 
               <li>
                   <a href="#" id="noverlapButton" class="zoombarbuttons"
                      title="Disperse Overlapping Nodes">
-                    <img src="twlibs/img2/disperse.png">
+                    <img src="twlibs/img/disperse.png">
                   </a>
               </li>
 
@@ -371,7 +370,7 @@
                   <a href="#facet-options" id="facets" class="zoombarbuttons"
                      title="Facets coloring options"
                      data-toggle="modal" data-target="#facet-options">
-                    <img src="twlibs/img2/facet_options.png"></img>
+                    <img src="twlibs/img/facet_options.png"></img>
                   </a>
               </li>
 
@@ -420,7 +419,7 @@
 
       <!-- to reopen the panel -->
       <div id="sideunfold">
-        <img title="Open sidepanel" src="twlibs/img2/unfold2.png"></img>
+        <img title="Open sidepanel" src="twlibs/img/unfold2.png"></img>
       </div>
 
     </div>
@@ -518,7 +517,7 @@
               style="width:85%; ">
           </a>
           <a href="https://github.com/moma" target="_blank">
-              <img src="twlibs/img2/moma.png"
+              <img src="twlibs/img/moma.png"
               alt="Sciencemapping"
               style="width:85%; ">
           </a>
@@ -529,7 +528,7 @@
 
     <br><br>
     <div id="sidefold">
-      <img title="Close sidepanel" src="twlibs/img2/fold2.png"></img>
+      <img title="Close sidepanel" src="twlibs/img/fold2.png"></img>
     </div>
   </div>
   <div id="hidden-elements">
@@ -597,7 +596,7 @@
 
     <div id="modalloader" class="modal fade">
         <div id="loader" class="loader">
-            <img src="twlibs/img2/loader.gif"></img>
+            <img src="twlibs/img/loader.gif"></img>
         </div>
         <div id="closeloader" data-dismiss="modal"></div>
     </div>
@@ -731,46 +730,45 @@
   </div>
 
   <!--         SCRIPTS        -->
-  <script src="twlibs/jquery-3/jquery-3.2.0.min.js" type="text/javascript"></script>
-  <script src="twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.min.js" type="text/javascript"></script>
-  <script src="twlibs/jquery-3/jquery.easytabs.js" type="text/javascript"></script>
-  <script src="twlibs/freshslider.1.0.js" type="text/javascript" ></script>
-  <script src="twlibs/readmore.js" type="text/javascript"></script>
-  <script src="twlibs/tweets/widgets.js" type="text/javascript" language="javascript"></script>
-  <script src="twlibs/bootstrap-native/bootstrap-native.min.js"></script>
-
-  <script src="tinawebJS/globalUtils.js" type="text/javascript"></script>
-
+  <script src="twlibs3/jquery-3/jquery-3.2.0.min.js" type="text/javascript"></script>
+  <script src="twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.min.js" type="text/javascript"></script>
+  <script src="twlibs3/jquery-3/jquery.easytabs.js" type="text/javascript"></script>
+  <script src="twlibs3/freshslider/freshslider.1.0.js" type="text/javascript" ></script>
+  <script src="twlibs3/readmore.js" type="text/javascript"></script>
+  <script src="twlibs3/tweets/widgets.js" type="text/javascript" language="javascript"></script>
+  <script src="twlibs3/bootstrap-native/bootstrap-native.min.js"></script>
   <!-- new sigma 1.2 imports -->
-  <!-- <script src="tinawebJS/sigma_v1.2/sigma.min.js" type="text/javascript" language="javascript"></script> -->
-  <!-- <script src="tinawebJS/sigma_v1.2/sigma.noIndexes.js" type="text/javascript" language="javascript"></script> -->
-  <script src="tinawebJS/sigma_v1.5/sigma.js" type="text/javascript" language="javascript"></script>
+  <!-- <script src="twlibs3/sigma_v1.2/sigma.min.js" type="text/javascript" language="javascript"></script> -->
+  <!-- <script src="twlibs3/sigma_v1.2/sigma.noIndexes.js" type="text/javascript" language="javascript"></script> -->
+  <script src="twlibs3/sigma_v1.5/sigma.js" type="text/javascript" language="javascript"></script>
   <!--
   NB: our sigma.noIndexes.js has exactly the same functions & varnames as
       the v1.2 stock sigma.(min).js but with a much lighter RAM footprint!
       cf. https://github.com/jacomyal/sigma.js/issues/340
   -->
-  <script src="tinawebJS/sigma_v1.2/plugins/sigma.plugins.animate/sigma.plugins.animate.js"></script>
-  <script src="tinawebJS/sigma_v1.2/plugins/sigma.layout.noverlap/sigma.layout.noverlap.js"></script>
-  <script src="tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/supervisor.js"></script>
-  <script src="tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/worker.js"></script>
-  <script src="tinawebJS/sigma_v1.2/plugins/sigma.renderers.snapshot/sigma.renderers.snapshot.js"></script>
-  <script src="tinawebJS/sigma_v1.2/plugins/sigma.plugins.dragNodes/sigma.plugins.dragNodes.js"></script>
+  <script src="twlibs3/sigma_v1.2/plugins/sigma.plugins.animate/sigma.plugins.animate.js"></script>
+  <script src="twlibs3/sigma_v1.2/plugins/sigma.layout.noverlap/sigma.layout.noverlap.js"></script>
+  <script src="twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/supervisor.js"></script>
+  <script src="twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/worker.js"></script>
+  <script src="twlibs3/sigma_v1.2/plugins/sigma.renderers.snapshot/sigma.renderers.snapshot.js"></script>
+  <script src="twlibs3/sigma_v1.2/plugins/sigma.plugins.dragNodes/sigma.plugins.dragNodes.js"></script>
+
 
 
+  <script src="twmain/globalUtils.js"></script>
   <!-- new sigma (1.0c => 1.2) compatibility imports -->
-  <script src="tinawebJS/sigma_tools.js"></script>
+  <script src="twmain/sigma_tools.js"></script>
 
   <!-- classic tinawebJS imports -->
-  <script type="text/javascript" src="tinawebJS/jLouvain.js"></script>
-  <script src="settings_explorerjs.js" type="text/javascript" language="javascript"></script>
-  <script src="tinawebJS/enviroment.js" type="text/javascript" language="javascript"></script>
-  <script src="tinawebJS/sigma.parseCustom.js" type="text/javascript" language="javascript"></script>
-  <script src="tinawebJS/sigmaUtils.js" type="text/javascript" language="javascript"></script>
-  <script src="extras_explorerjs.js" type="text/javascript" language="javascript"></script>
-  <script src="tinawebJS/methods.js" type="text/javascript" language="javascript"></script>
-  <script src="tinawebJS/Tinaweb.js" type="text/javascript" language="javascript"></script>
-  <script src="tinawebJS/main.js" type="text/javascript" language="javascript"></script>
+  <script src="settings_explorerjs.js"></script>
+  <script src="twmain/jLouvain.js"></script>
+  <script src="twmain/enviroment.js"></script>
+  <script src="twmain/sigma.parseCustom.js"></script>
+  <script src="twmain/sigmaUtils.js"></script>
+  <script src="twmain/extras_explorerjs.js"></script>
+  <script src="twmain/methods.js"></script>
+  <script src="twmain/Tinaweb.js"></script>
+  <script src="twmain/main.js"></script>
   <!--        /SCRIPTS        -->
 </body>
 
diff --git a/twbackends/phpAPI/default_div.php b/twbackends/phpAPI/default_div.php
index 1ae0a1fc117c4d2c557b9087609e8fd26de2f222..084cc37ea2e9e6109d36c412fed01ab426855f01 100755
--- a/twbackends/phpAPI/default_div.php
+++ b/twbackends/phpAPI/default_div.php
@@ -113,7 +113,7 @@ foreach ($wos_ids as $id => $score) {
 				$sql = 'SELECT data FROM ISITITLE WHERE id='.$id.' group by data';
 
 				foreach ($base->query($sql) as $row) {
-					$external_link="<a href=http://google.com/webhp?#q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=15px src="libs/img2/google.png"></a>';
+					$external_link="<a href=http://google.com/webhp?#q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=15px src="twlibs/img/google.png"></a>';
 					$output.="<li title='".$score."'>";
 					$output.=$external_link.imagestar($score,$factor,$twjs).' ';
 					$output.='<a href="JavaScript:newPopup(\''.$twjs.'default_doc_details.php?gexf='.urlencode($gexf).'&index='.$table.'&query='.urlencode($query).'&type='.urlencode($_GET["type"]).'&id='.$id.'	\')">'.$row['data']." </a> ";
@@ -294,10 +294,10 @@ function imagestar($score,$factor,$twjs) {
 	if ($score > .5) {
 		$star_image = '';
 		for ($s = 0; $s < min(5,$score/$factor); $s++) {
-			$star_image.='<img src="libs/img2/star.gif" border="0" >';
+			$star_image.='<img src="twlibs/img/star.gif" border="0" >';
 		}
 	} else {
-		$star_image.='<img src="libs/img2/stargrey.gif" border="0">';
+		$star_image.='<img src="twlibs/img/stargrey.gif" border="0">';
 	}
 	return $star_image;
 }
diff --git a/twbackends/phpAPI/favorite.php b/twbackends/phpAPI/favorite.php
index b481307f1cdbfb2399d07a02bfbe4c25995dca85..e2ba8a97d06fa7a67a7a68541f33474d6cec9f0f 100755
--- a/twbackends/phpAPI/favorite.php
+++ b/twbackends/phpAPI/favorite.php
@@ -114,10 +114,10 @@ function imagestar($score,$factor,$twjs) {
   if ($score > .5) {
     $star_image = '';
     for ($s = 0; $s < min(5,$score/$factor); $s++) {
-      $star_image.='<img src="libs/img2/star.gif" border="0" >';
+      $star_image.='<img src="twlibs/img/star.gif" border="0" >';
     }
   } else {
-    $star_image.='<img src="libs/img2/stargrey.gif" border="0">';
+    $star_image.='<img src="twlibs/img/stargrey.gif" border="0">';
   }
   return $star_image;
 }
diff --git a/twbackends/phpAPI/full_doc_list.php b/twbackends/phpAPI/full_doc_list.php
index 97848de762fc3288ccea29266858c3fa0b8b285a..3588c4e5a485fa9135b1958a99d4d537a67dbb1f 100755
--- a/twbackends/phpAPI/full_doc_list.php
+++ b/twbackends/phpAPI/full_doc_list.php
@@ -100,7 +100,7 @@ foreach ($wos_ids as $id => $score) {
 
                         //the old one:  
       //$output.='<a href="JavaScript:newPopup(\''.$twjs.'php/default_doc_details.php?id='.$id.'  \')">'.$row['data']." </a> ";   
-        $external_link="<a href=http://scholar.google.com/scholar?q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=20px src="libs/img2/gs.png"></a>'; 
+        $external_link="<a href=http://scholar.google.com/scholar?q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=20px src="twlibs/img/gs.png"></a>'; 
         //$output.='<a href="JavaScript:newPopup(''php/doc_details.php?id='.$id.''')"> Link</a>'; 
       }
 
@@ -133,10 +133,10 @@ function imagestar($score,$factor,$twjs) {
   if ($score > .5) {
     $star_image = '';
     for ($s = 0; $s < min(5,$score/$factor); $s++) {
-      $star_image.='<img src="libs/img2/star.gif" border="0" >';
+      $star_image.='<img src="twlibs/img/star.gif" border="0" >';
     }
   } else {
-    $star_image.='<img src="libs/img2/stargrey.gif" border="0">';
+    $star_image.='<img src="twlibs/img/stargrey.gif" border="0">';
   }
   return $star_image;
 }
diff --git a/twbackends/phpAPI/full_doc_list2.php b/twbackends/phpAPI/full_doc_list2.php
index a54d455846e8235b7500ed6358b8adfe29281881..41fb3229416aed28781cf157e60c0d777ec658ec 100755
--- a/twbackends/phpAPI/full_doc_list2.php
+++ b/twbackends/phpAPI/full_doc_list2.php
@@ -101,7 +101,7 @@ foreach ($wos_ids as $id => $score) {
 
                         //the old one:  
       //$output.='<a href="JavaScript:newPopup(\''.$twjs.'php/default_doc_details.php?id='.$id.'  \')">'.$row['data']." </a> ";   
-        $external_link="<a href=http://scholar.google.com/scholar?q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=20px src="libs/img2/gs.png"></a>'; 
+        $external_link="<a href=http://scholar.google.com/scholar?q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=20px src="twlibs/img/gs.png"></a>'; 
         //$output.='<a href="JavaScript:newPopup(''php/doc_details.php?id='.$id.''')"> Link</a>'; 
       }
 
@@ -134,10 +134,10 @@ function imagestar($score,$factor,$twjs) {
   if ($score > .5) {
     $star_image = '';
     for ($s = 0; $s < min(5,$score/$factor); $s++) {
-      $star_image.='<img src="libs/img2/star.gif" border="0" >';
+      $star_image.='<img src="twlibs/img/star.gif" border="0" >';
     }
   } else {
-    $star_image.='<img src="libs/img2/stargrey.gif" border="0">';
+    $star_image.='<img src="twlibs/img/stargrey.gif" border="0">';
   }
   return $star_image;
 }
diff --git a/twbackends/phpAPI/full_doc_list_tidf.php b/twbackends/phpAPI/full_doc_list_tidf.php
index acc13822bffb3b960be428ea15cf7b599ef6792b..ab6c7c562359618518bc7e2c6e6c18e76689b92e 100755
--- a/twbackends/phpAPI/full_doc_list_tidf.php
+++ b/twbackends/phpAPI/full_doc_list_tidf.php
@@ -147,7 +147,7 @@ foreach ($wos_ids as $id => $score) {
 
                         //the old one:  
       //$output.='<a href="JavaScript:newPopup(\''.$twjs.'php/default_doc_details.php?id='.$id.'  \')">'.$row['data']." </a> ";   
-        $external_link="<a href=http://scholar.google.com/scholar?q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=20px src="libs/img2/gs.png"></a>'; 
+        $external_link="<a href=http://scholar.google.com/scholar?q=".urlencode('"'.$row['data'].'"')." target=blank>".' <img width=20px src="twlibs/img/gs.png"></a>'; 
         //$output.='<a href="JavaScript:newPopup(''php/doc_details.php?id='.$id.''')"> Link</a>'; 
       }
 
@@ -190,10 +190,10 @@ function imagestar($score,$factor,$twjs) {
   if ($score > .5) {
     $star_image = '';
     for ($s = 0; $s < min(5,$score/$factor); $s++) {
-      $star_image.='<img src="libs/img2/star.gif" border="0" >';
+      $star_image.='<img src="twlibs/img/star.gif" border="0" >';
     }
   } else {
-    $star_image.='<img src="libs/img2/stargrey.gif" border="0">';
+    $star_image.='<img src="twlibs/img/stargrey.gif" border="0">';
   }
   return $star_image;
 }
diff --git a/twbackends/phpAPI/info_div2.php b/twbackends/phpAPI/info_div2.php
index 7497b1ac0b1a910adc07e6470ab0d5667c7f5ba3..fc019015892270e6c7e6dee8689edc3296c2254c 100755
--- a/twbackends/phpAPI/info_div2.php
+++ b/twbackends/phpAPI/info_div2.php
@@ -99,7 +99,7 @@ foreach ($wos_ids as $id => $score) {
 
         $sql = 'SELECT data FROM ISITITLE WHERE id='.$id.' group by data';
         foreach ($base->query($sql) as $row) {
-          $external_link="<a href=http://google.com/webhp?#q=".urlencode('"'.utf8_decode($row['data']).'"')." target=blank>".' <img width=15px src="libs/img2/google.png"></a>';  
+          $external_link="<a href=http://google.com/webhp?#q=".urlencode('"'.utf8_decode($row['data']).'"')." target=blank>".' <img width=15px src="twlibs/img/google.png"></a>';  
           $output.="<li title='".$score."'>";
           $output.=$external_link.imagestar($score,$factor,$twjs).' '; 
           $output.='<a href="JavaScript:newPopup(\''.$twjs.'default_doc_details2.php?gexf='.urlencode($gexf).'&query='.urlencode($query).'&type='.urlencode($_GET["type"]).'&id='.$id.' \')">'.htmlentities($row['data'], ENT_QUOTES, "UTF-8")." </a> ";
@@ -177,10 +177,10 @@ function imagestar($score,$factor,$twjs) {
   if ($score > .5) {
     $star_image = '';
     for ($s = 0; $s < min(5,$score/$factor); $s++) {
-      $star_image.='<img src="libs/img2/star.gif" border="0" >';
+      $star_image.='<img src="twlibs/img/star.gif" border="0" >';
     }
   } else {
-    $star_image.='<img src="libs/img2/stargrey.gif" border="0">';
+    $star_image.='<img src="twlibs/img/stargrey.gif" border="0">';
   }
   return $star_image;
 }
diff --git a/twlibs/README.md b/twlibs/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7e6bfaa6e9421ce6cc384156c237ba6f91e5a365
--- /dev/null
+++ b/twlibs/README.md
@@ -0,0 +1 @@
+### tinawebJS CSS, image and fonts dependencies
diff --git a/twlibs/css2/JosefinSans300.woff b/twlibs/css/JosefinSans300.woff
similarity index 100%
rename from twlibs/css2/JosefinSans300.woff
rename to twlibs/css/JosefinSans300.woff
diff --git a/twlibs/css2/JosefinSans400.woff b/twlibs/css/JosefinSans400.woff
similarity index 100%
rename from twlibs/css2/JosefinSans400.woff
rename to twlibs/css/JosefinSans400.woff
diff --git a/twlibs/css2/JosefinSans700.woff b/twlibs/css/JosefinSans700.woff
similarity index 100%
rename from twlibs/css2/JosefinSans700.woff
rename to twlibs/css/JosefinSans700.woff
diff --git a/twlibs/css2/font.css b/twlibs/css/font.css
similarity index 100%
rename from twlibs/css2/font.css
rename to twlibs/css/font.css
diff --git a/twlibs/css2/grid.css b/twlibs/css/grid.css
similarity index 100%
rename from twlibs/css2/grid.css
rename to twlibs/css/grid.css
diff --git a/twlibs/css2/selection-panels-mobile.css b/twlibs/css/selection-panels-mobile.css
similarity index 100%
rename from twlibs/css2/selection-panels-mobile.css
rename to twlibs/css/selection-panels-mobile.css
diff --git a/twlibs/css2/selection-panels.css b/twlibs/css/selection-panels.css
similarity index 98%
rename from twlibs/css2/selection-panels.css
rename to twlibs/css/selection-panels.css
index e71ac8c584357c0e2f20098197ba06529ac2b77a..e15307988f7c293b90fc4c30f20deb926cfa5785 100644
--- a/twlibs/css2/selection-panels.css
+++ b/twlibs/css/selection-panels.css
@@ -127,7 +127,7 @@
     display: block;
     width: 24px;
     height: 24px;
-    background:url("../img2/plusmoins.png");
+    background:url("../img/plusmoins.png");
     margin: 0 auto;
 }
 
diff --git a/twlibs/css2/twjs-mobile.css b/twlibs/css/twjs-mobile.css
similarity index 100%
rename from twlibs/css2/twjs-mobile.css
rename to twlibs/css/twjs-mobile.css
diff --git a/twlibs/css2/twjs.css b/twlibs/css/twjs.css
similarity index 100%
rename from twlibs/css2/twjs.css
rename to twlibs/css/twjs.css
diff --git a/twlibs/css2/user_form.css b/twlibs/css/user_form.css
similarity index 100%
rename from twlibs/css2/user_form.css
rename to twlibs/css/user_form.css
diff --git a/twlibs/img2/bg.jpg b/twlibs/img/bg.jpg
similarity index 100%
rename from twlibs/img2/bg.jpg
rename to twlibs/img/bg.jpg
diff --git a/twlibs/img2/bouton_generique.png b/twlibs/img/bouton_generique.png
similarity index 100%
rename from twlibs/img2/bouton_generique.png
rename to twlibs/img/bouton_generique.png
diff --git a/twlibs/img2/buttons_work.svg b/twlibs/img/buttons_work.svg
similarity index 100%
rename from twlibs/img2/buttons_work.svg
rename to twlibs/img/buttons_work.svg
diff --git a/twlibs/img2/camera.png b/twlibs/img/camera.png
similarity index 100%
rename from twlibs/img2/camera.png
rename to twlibs/img/camera.png
diff --git a/twlibs/img2/changenetwork.png b/twlibs/img/changenetwork.png
similarity index 100%
rename from twlibs/img2/changenetwork.png
rename to twlibs/img/changenetwork.png
diff --git a/twlibs/img2/chat.png b/twlibs/img/chat.png
similarity index 100%
rename from twlibs/img2/chat.png
rename to twlibs/img/chat.png
diff --git a/twlibs/img2/climpek.png b/twlibs/img/climpek.png
similarity index 100%
rename from twlibs/img2/climpek.png
rename to twlibs/img/climpek.png
diff --git a/twlibs/img2/climpek_@2X.png b/twlibs/img/climpek_@2X.png
similarity index 100%
rename from twlibs/img2/climpek_@2X.png
rename to twlibs/img/climpek_@2X.png
diff --git a/twlibs/img2/colors.png b/twlibs/img/colors.png
similarity index 100%
rename from twlibs/img2/colors.png
rename to twlibs/img/colors.png
diff --git a/twlibs/img2/disperse.png b/twlibs/img/disperse.png
similarity index 100%
rename from twlibs/img2/disperse.png
rename to twlibs/img/disperse.png
diff --git a/twlibs/img2/edges.png b/twlibs/img/edges.png
similarity index 100%
rename from twlibs/img2/edges.png
rename to twlibs/img/edges.png
diff --git a/twlibs/img2/facet_options.png b/twlibs/img/facet_options.png
similarity index 100%
rename from twlibs/img2/facet_options.png
rename to twlibs/img/facet_options.png
diff --git a/twlibs/img2/fleches-horiz.png b/twlibs/img/fleches-horiz.png
similarity index 100%
rename from twlibs/img2/fleches-horiz.png
rename to twlibs/img/fleches-horiz.png
diff --git a/twlibs/img2/flickr.png b/twlibs/img/flickr.png
similarity index 100%
rename from twlibs/img2/flickr.png
rename to twlibs/img/flickr.png
diff --git a/twlibs/img2/fold2.png b/twlibs/img/fold2.png
similarity index 100%
rename from twlibs/img2/fold2.png
rename to twlibs/img/fold2.png
diff --git a/twlibs/img2/google.png b/twlibs/img/google.png
similarity index 100%
rename from twlibs/img2/google.png
rename to twlibs/img/google.png
diff --git a/twlibs/img2/home.png b/twlibs/img/home.png
similarity index 100%
rename from twlibs/img2/home.png
rename to twlibs/img/home.png
diff --git a/twlibs/img2/loader.gif b/twlibs/img/loader.gif
similarity index 100%
rename from twlibs/img2/loader.gif
rename to twlibs/img/loader.gif
diff --git a/twlibs/img2/loading-bar.gif b/twlibs/img/loading-bar.gif
similarity index 100%
rename from twlibs/img2/loading-bar.gif
rename to twlibs/img/loading-bar.gif
diff --git a/twlibs/img2/logo.png b/twlibs/img/logo.png
similarity index 100%
rename from twlibs/img2/logo.png
rename to twlibs/img/logo.png
diff --git a/twlibs/img2/logo_ISCPIF_small.svg b/twlibs/img/logo_ISCPIF_small.svg
similarity index 100%
rename from twlibs/img2/logo_ISCPIF_small.svg
rename to twlibs/img/logo_ISCPIF_small.svg
diff --git a/twlibs/img2/logo_cnrs_transparent.gif b/twlibs/img/logo_cnrs_transparent.gif
similarity index 100%
rename from twlibs/img2/logo_cnrs_transparent.gif
rename to twlibs/img/logo_cnrs_transparent.gif
diff --git a/twlibs/img2/loupe-edges.png b/twlibs/img/loupe-edges.png
similarity index 100%
rename from twlibs/img2/loupe-edges.png
rename to twlibs/img/loupe-edges.png
diff --git a/twlibs/img2/loupe-edges2.png b/twlibs/img/loupe-edges2.png
similarity index 100%
rename from twlibs/img2/loupe-edges2.png
rename to twlibs/img/loupe-edges2.png
diff --git a/twlibs/img2/moma.png b/twlibs/img/moma.png
similarity index 100%
rename from twlibs/img2/moma.png
rename to twlibs/img/moma.png
diff --git a/twlibs/img2/play-circled2.png b/twlibs/img/play-circled2.png
similarity index 100%
rename from twlibs/img2/play-circled2.png
rename to twlibs/img/play-circled2.png
diff --git a/twlibs/img2/plus_hover.png b/twlibs/img/plus_hover.png
similarity index 100%
rename from twlibs/img2/plus_hover.png
rename to twlibs/img/plus_hover.png
diff --git a/twlibs/img2/plus_normal.png b/twlibs/img/plus_normal.png
similarity index 100%
rename from twlibs/img2/plus_normal.png
rename to twlibs/img/plus_normal.png
diff --git a/twlibs/img2/plusmoins.png b/twlibs/img/plusmoins.png
similarity index 100%
rename from twlibs/img2/plusmoins.png
rename to twlibs/img/plusmoins.png
diff --git a/twlibs/img2/save.png b/twlibs/img/save.png
similarity index 100%
rename from twlibs/img2/save.png
rename to twlibs/img/save.png
diff --git a/twlibs/img2/star.gif b/twlibs/img/star.gif
similarity index 100%
rename from twlibs/img2/star.gif
rename to twlibs/img/star.gif
diff --git a/twlibs/img2/stargrey.gif b/twlibs/img/stargrey.gif
similarity index 100%
rename from twlibs/img2/stargrey.gif
rename to twlibs/img/stargrey.gif
diff --git a/twlibs/img2/stats.png b/twlibs/img/stats.png
similarity index 100%
rename from twlibs/img2/stats.png
rename to twlibs/img/stats.png
diff --git a/twlibs/img2/target.png b/twlibs/img/target.png
similarity index 100%
rename from twlibs/img2/target.png
rename to twlibs/img/target.png
diff --git a/twlibs/img2/tc_play.png b/twlibs/img/tc_play.png
similarity index 100%
rename from twlibs/img2/tc_play.png
rename to twlibs/img/tc_play.png
diff --git a/twlibs/img2/tc_stop.png b/twlibs/img/tc_stop.png
similarity index 100%
rename from twlibs/img2/tc_stop.png
rename to twlibs/img/tc_stop.png
diff --git a/twlibs/img2/unfold2.png b/twlibs/img/unfold2.png
similarity index 100%
rename from twlibs/img2/unfold2.png
rename to twlibs/img/unfold2.png
diff --git a/twlibs/img2/wikipedia.png b/twlibs/img/wikipedia.png
similarity index 100%
rename from twlibs/img2/wikipedia.png
rename to twlibs/img/wikipedia.png
diff --git a/twlibs/img2/world.png b/twlibs/img/world.png
similarity index 100%
rename from twlibs/img2/world.png
rename to twlibs/img/world.png
diff --git a/twlibs/bootstrap-3/css/bootstrap-theme.css b/twlibs3/bootstrap-3/css/bootstrap-theme.css
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap-theme.css
rename to twlibs3/bootstrap-3/css/bootstrap-theme.css
diff --git a/twlibs/bootstrap-3/css/bootstrap-theme.css.map b/twlibs3/bootstrap-3/css/bootstrap-theme.css.map
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap-theme.css.map
rename to twlibs3/bootstrap-3/css/bootstrap-theme.css.map
diff --git a/twlibs/bootstrap-3/css/bootstrap-theme.min.css b/twlibs3/bootstrap-3/css/bootstrap-theme.min.css
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap-theme.min.css
rename to twlibs3/bootstrap-3/css/bootstrap-theme.min.css
diff --git a/twlibs/bootstrap-3/css/bootstrap-theme.min.css.map b/twlibs3/bootstrap-3/css/bootstrap-theme.min.css.map
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap-theme.min.css.map
rename to twlibs3/bootstrap-3/css/bootstrap-theme.min.css.map
diff --git a/twlibs/bootstrap-3/css/bootstrap.css b/twlibs3/bootstrap-3/css/bootstrap.css
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap.css
rename to twlibs3/bootstrap-3/css/bootstrap.css
diff --git a/twlibs/bootstrap-3/css/bootstrap.css.map b/twlibs3/bootstrap-3/css/bootstrap.css.map
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap.css.map
rename to twlibs3/bootstrap-3/css/bootstrap.css.map
diff --git a/twlibs/bootstrap-3/css/bootstrap.min.css b/twlibs3/bootstrap-3/css/bootstrap.min.css
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap.min.css
rename to twlibs3/bootstrap-3/css/bootstrap.min.css
diff --git a/twlibs/bootstrap-3/css/bootstrap.min.css.map b/twlibs3/bootstrap-3/css/bootstrap.min.css.map
similarity index 100%
rename from twlibs/bootstrap-3/css/bootstrap.min.css.map
rename to twlibs3/bootstrap-3/css/bootstrap.min.css.map
diff --git a/twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.eot b/twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.eot
rename to twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.eot
diff --git a/twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.svg b/twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.svg
rename to twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.svg
diff --git a/twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.ttf b/twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.ttf
rename to twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.ttf
diff --git a/twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.woff b/twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.woff
rename to twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.woff
diff --git a/twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.woff2 b/twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from twlibs/bootstrap-3/fonts/glyphicons-halflings-regular.woff2
rename to twlibs3/bootstrap-3/fonts/glyphicons-halflings-regular.woff2
diff --git a/twlibs/bootstrap-native/.npmignore b/twlibs3/bootstrap-native/.npmignore
similarity index 100%
rename from twlibs/bootstrap-native/.npmignore
rename to twlibs3/bootstrap-native/.npmignore
diff --git a/twlibs/bootstrap-native/LICENSE b/twlibs3/bootstrap-native/LICENSE
similarity index 100%
rename from twlibs/bootstrap-native/LICENSE
rename to twlibs3/bootstrap-native/LICENSE
diff --git a/twlibs/bootstrap-native/README.md b/twlibs3/bootstrap-native/README.md
similarity index 100%
rename from twlibs/bootstrap-native/README.md
rename to twlibs3/bootstrap-native/README.md
diff --git a/twlibs/bootstrap-native/bootstrap-native.js b/twlibs3/bootstrap-native/bootstrap-native.js
similarity index 100%
rename from twlibs/bootstrap-native/bootstrap-native.js
rename to twlibs3/bootstrap-native/bootstrap-native.js
diff --git a/twlibs/bootstrap-native/bootstrap-native.min.js b/twlibs3/bootstrap-native/bootstrap-native.min.js
similarity index 100%
rename from twlibs/bootstrap-native/bootstrap-native.min.js
rename to twlibs3/bootstrap-native/bootstrap-native.min.js
diff --git a/twlibs/freshslider.1.0.js b/twlibs3/freshslider/freshslider.1.0.js
similarity index 100%
rename from twlibs/freshslider.1.0.js
rename to twlibs3/freshslider/freshslider.1.0.js
diff --git a/twlibs/css2/freshslider.css b/twlibs3/freshslider/freshslider.css
similarity index 100%
rename from twlibs/css2/freshslider.css
rename to twlibs3/freshslider/freshslider.css
diff --git a/twlibs/jquery-3/AUTHORS.txt b/twlibs3/jquery-3/AUTHORS.txt
similarity index 100%
rename from twlibs/jquery-3/AUTHORS.txt
rename to twlibs3/jquery-3/AUTHORS.txt
diff --git a/twlibs/jquery-3/jquery-3.2.0.js b/twlibs3/jquery-3/jquery-3.2.0.js
similarity index 100%
rename from twlibs/jquery-3/jquery-3.2.0.js
rename to twlibs3/jquery-3/jquery-3.2.0.js
diff --git a/twlibs/jquery-3/jquery-3.2.0.min.js b/twlibs3/jquery-3/jquery-3.2.0.min.js
similarity index 100%
rename from twlibs/jquery-3/jquery-3.2.0.min.js
rename to twlibs3/jquery-3/jquery-3.2.0.min.js
diff --git a/twlibs/jquery-3/jquery-3.2.0.min.map b/twlibs3/jquery-3/jquery-3.2.0.min.map
similarity index 100%
rename from twlibs/jquery-3/jquery-3.2.0.min.map
rename to twlibs3/jquery-3/jquery-3.2.0.min.map
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/AUTHORS.txt b/twlibs3/jquery-3/jquery-ui-1.12.1/AUTHORS.txt
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/AUTHORS.txt
rename to twlibs3/jquery-3/jquery-ui-1.12.1/AUTHORS.txt
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/LICENSE.txt b/twlibs3/jquery-3/jquery-ui-1.12.1/LICENSE.txt
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/LICENSE.txt
rename to twlibs3/jquery-3/jquery-ui-1.12.1/LICENSE.txt
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_444444_256x240.png b/twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_444444_256x240.png
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_444444_256x240.png
rename to twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_444444_256x240.png
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_555555_256x240.png b/twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_555555_256x240.png
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_555555_256x240.png
rename to twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_555555_256x240.png
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_777620_256x240.png b/twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_777620_256x240.png
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_777620_256x240.png
rename to twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_777620_256x240.png
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_777777_256x240.png b/twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_777777_256x240.png
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_777777_256x240.png
rename to twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_777777_256x240.png
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_cc0000_256x240.png b/twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_cc0000_256x240.png
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_cc0000_256x240.png
rename to twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_cc0000_256x240.png
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_ffffff_256x240.png b/twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_ffffff_256x240.png
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/images/ui-icons_ffffff_256x240.png
rename to twlibs3/jquery-3/jquery-ui-1.12.1/images/ui-icons_ffffff_256x240.png
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/index.html b/twlibs3/jquery-3/jquery-ui-1.12.1/index.html
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/index.html
rename to twlibs3/jquery-3/jquery-ui-1.12.1/index.html
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.css b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.css
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.css
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.css
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.js b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.js
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.js
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.js
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.min.css b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.min.css
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.min.css
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.min.css
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.min.js b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.min.js
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.min.js
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.min.js
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.css b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.css
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.css
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.css
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.min.css b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.min.css
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.min.css
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.structure.min.css
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.css b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.css
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.css
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.css
diff --git a/twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.min.css b/twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.min.css
similarity index 100%
rename from twlibs/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.min.css
rename to twlibs3/jquery-3/jquery-ui-1.12.1/jquery-ui.theme.min.css
diff --git a/twlibs/jquery-3/jquery.easytabs.js b/twlibs3/jquery-3/jquery.easytabs.js
similarity index 100%
rename from twlibs/jquery-3/jquery.easytabs.js
rename to twlibs3/jquery-3/jquery.easytabs.js
diff --git a/twlibs/jquery-3/jquery.easytabs.min.js b/twlibs3/jquery-3/jquery.easytabs.min.js
similarity index 100%
rename from twlibs/jquery-3/jquery.easytabs.min.js
rename to twlibs3/jquery-3/jquery.easytabs.min.js
diff --git a/twlibs/jquery-3/jquery.highlight-3.js b/twlibs3/jquery-3/jquery.highlight-3.js
similarity index 100%
rename from twlibs/jquery-3/jquery.highlight-3.js
rename to twlibs3/jquery-3/jquery.highlight-3.js
diff --git a/twlibs/readmore.js b/twlibs3/readmore.js
similarity index 100%
rename from twlibs/readmore.js
rename to twlibs3/readmore.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/Gruntfile.js b/twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/Gruntfile.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/Gruntfile.js
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/Gruntfile.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/README.md b/twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/README.md
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/README.md
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/README.md
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/supervisor.js b/twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/supervisor.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/supervisor.js
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/supervisor.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/tasks/forceAtlas2.js b/twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/tasks/forceAtlas2.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/tasks/forceAtlas2.js
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/tasks/forceAtlas2.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/worker.js b/twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/worker.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.forceAtlas2/worker.js
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.forceAtlas2/worker.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.noverlap/README.md b/twlibs3/sigma_v1.2/plugins/sigma.layout.noverlap/README.md
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.noverlap/README.md
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.noverlap/README.md
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.layout.noverlap/sigma.layout.noverlap.js b/twlibs3/sigma_v1.2/plugins/sigma.layout.noverlap/sigma.layout.noverlap.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.layout.noverlap/sigma.layout.noverlap.js
rename to twlibs3/sigma_v1.2/plugins/sigma.layout.noverlap/sigma.layout.noverlap.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.plugins.animate/README.md b/twlibs3/sigma_v1.2/plugins/sigma.plugins.animate/README.md
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.plugins.animate/README.md
rename to twlibs3/sigma_v1.2/plugins/sigma.plugins.animate/README.md
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.plugins.animate/sigma.plugins.animate.js b/twlibs3/sigma_v1.2/plugins/sigma.plugins.animate/sigma.plugins.animate.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.plugins.animate/sigma.plugins.animate.js
rename to twlibs3/sigma_v1.2/plugins/sigma.plugins.animate/sigma.plugins.animate.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.plugins.dragNodes/README.md b/twlibs3/sigma_v1.2/plugins/sigma.plugins.dragNodes/README.md
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.plugins.dragNodes/README.md
rename to twlibs3/sigma_v1.2/plugins/sigma.plugins.dragNodes/README.md
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.plugins.dragNodes/sigma.plugins.dragNodes.js b/twlibs3/sigma_v1.2/plugins/sigma.plugins.dragNodes/sigma.plugins.dragNodes.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.plugins.dragNodes/sigma.plugins.dragNodes.js
rename to twlibs3/sigma_v1.2/plugins/sigma.plugins.dragNodes/sigma.plugins.dragNodes.js
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.renderers.snapshot/README.md b/twlibs3/sigma_v1.2/plugins/sigma.renderers.snapshot/README.md
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.renderers.snapshot/README.md
rename to twlibs3/sigma_v1.2/plugins/sigma.renderers.snapshot/README.md
diff --git a/tinawebJS/sigma_v1.2/plugins/sigma.renderers.snapshot/sigma.renderers.snapshot.js b/twlibs3/sigma_v1.2/plugins/sigma.renderers.snapshot/sigma.renderers.snapshot.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/plugins/sigma.renderers.snapshot/sigma.renderers.snapshot.js
rename to twlibs3/sigma_v1.2/plugins/sigma.renderers.snapshot/sigma.renderers.snapshot.js
diff --git a/tinawebJS/sigma_v1.2/sigma.js b/twlibs3/sigma_v1.2/sigma.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/sigma.js
rename to twlibs3/sigma_v1.2/sigma.js
diff --git a/tinawebJS/sigma_v1.2/sigma.min.js b/twlibs3/sigma_v1.2/sigma.min.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/sigma.min.js
rename to twlibs3/sigma_v1.2/sigma.min.js
diff --git a/tinawebJS/sigma_v1.2/sigma.noIndexes.js b/twlibs3/sigma_v1.2/sigma.noIndexes.js
similarity index 100%
rename from tinawebJS/sigma_v1.2/sigma.noIndexes.js
rename to twlibs3/sigma_v1.2/sigma.noIndexes.js
diff --git a/tinawebJS/sigma_v1.5/plugins.js b/twlibs3/sigma_v1.5/plugins.js
similarity index 100%
rename from tinawebJS/sigma_v1.5/plugins.js
rename to twlibs3/sigma_v1.5/plugins.js
diff --git a/tinawebJS/sigma_v1.5/sigma.js b/twlibs3/sigma_v1.5/sigma.js
similarity index 100%
rename from tinawebJS/sigma_v1.5/sigma.js
rename to twlibs3/sigma_v1.5/sigma.js
diff --git a/tinawebJS/sigma_v1.5/sigma.require.js b/twlibs3/sigma_v1.5/sigma.require.js
similarity index 100%
rename from tinawebJS/sigma_v1.5/sigma.require.js
rename to twlibs3/sigma_v1.5/sigma.require.js
diff --git a/tinawebJS/sigma_v1.5/this_build_from_linkurious_src b/twlibs3/sigma_v1.5/this_build_from_linkurious_src
similarity index 100%
rename from tinawebJS/sigma_v1.5/this_build_from_linkurious_src
rename to twlibs3/sigma_v1.5/this_build_from_linkurious_src
diff --git a/twlibs/tweets/custom.css b/twlibs3/tweets/custom.css
similarity index 100%
rename from twlibs/tweets/custom.css
rename to twlibs3/tweets/custom.css
diff --git a/twlibs/tweets/tweet.light.ltr.css b/twlibs3/tweets/tweet.light.ltr.css
similarity index 100%
rename from twlibs/tweets/tweet.light.ltr.css
rename to twlibs3/tweets/tweet.light.ltr.css
diff --git a/twlibs/tweets/widgets.js b/twlibs3/tweets/widgets.js
similarity index 100%
rename from twlibs/tweets/widgets.js
rename to twlibs3/tweets/widgets.js
diff --git a/tinawebJS/Tinaweb.js b/twmain/Tinaweb.js
similarity index 100%
rename from tinawebJS/Tinaweb.js
rename to twmain/Tinaweb.js
diff --git a/tinawebJS/enviroment.js b/twmain/enviroment.js
similarity index 99%
rename from tinawebJS/enviroment.js
rename to twmain/enviroment.js
index 02f2297df8ae3be778a9126652b3c51e65d5663c..15cfb085ab22c5c36e73d535491e7165b604bace 100755
--- a/tinawebJS/enviroment.js
+++ b/twmain/enviroment.js
@@ -1000,7 +1000,7 @@ function updateSearchLabels(id,name,type){
 function createWaitIcon(idname, width) {
   let icon = document.createElement('img')
 
-  icon.src = 'libs/img2/loader.gif'
+  icon.src = 'twlibs/img/loader.gif'
 
   icon.style.position = 'absolute'
   icon.style.left = '0'
diff --git a/extras_explorerjs.js b/twmain/extras_explorerjs.js
similarity index 99%
rename from extras_explorerjs.js
rename to twmain/extras_explorerjs.js
index 6c5df93aacccd850c89c8b7204c5c077197750ae..baec2e5e091aafd2362615182645d1ac4cbf7c1c 100755
--- a/extras_explorerjs.js
+++ b/twmain/extras_explorerjs.js
@@ -357,7 +357,7 @@ function set_ClustersLegend ( daclass, groupedByTicks ) {
 
 function getTopPapers(){
   // waiting image
-  let image='<img style="display:block; margin: 0px auto;" src="libs/img2/loader.gif"></img>';
+  let image='<img style="display:block; margin: 0px auto;" src="twlibs/img/loader.gif"></img>';
   $("#topPapers").html(image);
 
   // swNodetypes <=> active types expressed as "semantic" and "social"
diff --git a/tinawebJS/globalUtils.js b/twmain/globalUtils.js
similarity index 100%
rename from tinawebJS/globalUtils.js
rename to twmain/globalUtils.js
diff --git a/tinawebJS/jLouvain.js b/twmain/jLouvain.js
similarity index 100%
rename from tinawebJS/jLouvain.js
rename to twmain/jLouvain.js
diff --git a/tinawebJS/main.js b/twmain/main.js
similarity index 100%
rename from tinawebJS/main.js
rename to twmain/main.js
diff --git a/tinawebJS/methods.js b/twmain/methods.js
similarity index 98%
rename from tinawebJS/methods.js
rename to twmain/methods.js
index ba2f47945a44f56f3ad067f24d1f1e07f9fc55c3..91a4f100477b99d8c324a9f3801faf4e64448b26 100755
--- a/tinawebJS/methods.js
+++ b/twmain/methods.js
@@ -339,9 +339,9 @@ function htmlfied_nodesatts(elems){
 
         if(swActual(node.type) == 'semantic'){
             information += '<li><b>' + node.label + '</b></li>';
-            let google='<a href=http://www.google.com/#hl=en&source=hp&q=%20'+node.label.replace(" ","+")+'%20><img src="libs/img2/google.png"></img></a>';
-            let wiki = '<a href=http://en.wikipedia.org/wiki/'+node.label.replace(" ","_")+'><img src="libs/img2/wikipedia.png"></img></a>';
-            let flickr= '<a href=http://www.flickr.com/search/?w=all&q='+node.label.replace(" ","+")+'><img src="libs/img2/flickr.png"></img></a>';
+            let google='<a href=http://www.google.com/#hl=en&source=hp&q=%20'+node.label.replace(" ","+")+'%20><img src="twlibs/img/google.png"></img></a>';
+            let wiki = '<a href=http://en.wikipedia.org/wiki/'+node.label.replace(" ","_")+'><img src="twlibs/img/wikipedia.png"></img></a>';
+            let flickr= '<a href=http://www.flickr.com/search/?w=all&q='+node.label.replace(" ","+")+'><img src="twlibs/img/flickr.png"></img></a>';
             information += '<li>'+google+"&nbsp;"+wiki+"&nbsp;"+flickr+'</li><br>';
             semnodes.push(information)
         }
diff --git a/tinawebJS/sigma.parseCustom.js b/twmain/sigma.parseCustom.js
similarity index 100%
rename from tinawebJS/sigma.parseCustom.js
rename to twmain/sigma.parseCustom.js
diff --git a/tinawebJS/sigmaUtils.js b/twmain/sigmaUtils.js
similarity index 100%
rename from tinawebJS/sigmaUtils.js
rename to twmain/sigmaUtils.js
diff --git a/tinawebJS/sigma_tools.js b/twmain/sigma_tools.js
similarity index 100%
rename from tinawebJS/sigma_tools.js
rename to twmain/sigma_tools.js
diff --git a/tinawebJS/unused_kept_for_reference/asyncFA2.js b/twmain/unused_kept_for_reference/asyncFA2.js
similarity index 100%
rename from tinawebJS/unused_kept_for_reference/asyncFA2.js
rename to twmain/unused_kept_for_reference/asyncFA2.js
diff --git a/tinawebJS/unused_kept_for_reference/sigma.forceatlas2.js b/twmain/unused_kept_for_reference/sigma.forceatlas2.js
similarity index 100%
rename from tinawebJS/unused_kept_for_reference/sigma.forceatlas2.js
rename to twmain/unused_kept_for_reference/sigma.forceatlas2.js
diff --git a/tinawebJS/unused_kept_for_reference/sigma.v1.customized.js b/twmain/unused_kept_for_reference/sigma.v1.customized.js
similarity index 100%
rename from tinawebJS/unused_kept_for_reference/sigma.v1.customized.js
rename to twmain/unused_kept_for_reference/sigma.v1.customized.js
diff --git a/twtools/adapt_html_paths.sh b/twtools/adapt_html_paths.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f12035029b69b0152111639ef4c3c60cd258f5bc
--- /dev/null
+++ b/twtools/adapt_html_paths.sh
@@ -0,0 +1,35 @@
+#! /bin/bash
+
+# Usage exemple:
+# bash twtools/adapt_html_paths.sh 'static/projectExplorer/'
+
+
+function helpmessage {
+    echo '---'
+    echo 'Suggested usage:'
+    echo ' > bash twtools/adapt_html_paths.sh "your/relative/url/to/ProjectExplorer/"'
+    echo '---'
+    echo 'Explanation:'
+    echo 'This script helps you deploy ProjectExplorer by adapting all relative paths in the explorerjs.html file for your future production routes.'
+    echo '---'
+}
+
+
+if [ "$1" == "" -o "$1" == "-h" -o "$1" == "-help" -o "$1" == "--help" ]
+  then
+    helpmessage
+    exit 1
+  else
+    # exemple: newpathprefix='static/projectExplorer'
+    newpathprefix=$1
+fi
+
+if [ -e explorerjs.html ]
+  then
+    perl -pse 's/ ((?:href|src)=[\x22\x27]?)(twlibs|twmain)/ $1$pathprefix$2/g' -- -pathprefix=$newpathprefix < explorerjs.html > explorerjs.prod.html
+    exit 0
+  else
+    echo 'Please run this script from the ProjectExplorer root'
+    echo '(because script is looking for ./explorerjs.html)'
+    helpmessage
+fi