diff --git a/bindings/pyroot/JsMVA/js/DecisionTree.js b/bindings/pyroot/JsMVA/js/DecisionTree.js
index 5f4e5c2b11f7c7c2f6b5cc5a62921ddf1d32e2c7..4493f355cc7c12d5efd721725d68d4b422ac847b 100644
--- a/bindings/pyroot/JsMVA/js/DecisionTree.js
+++ b/bindings/pyroot/JsMVA/js/DecisionTree.js
@@ -4,13 +4,6 @@
 
 
 (function(factory){
-    
-    require.config({
-       paths:{
-           d3: "https://root.cern.ch/js/notebook/scripts/d3.v3.min"
-       } 
-    });
-
     var url = "";
     if (require.s.contexts.hasOwnProperty("_")) {
         url = require.s.contexts._.config.paths["JsMVA"].replace("src/js/JsMVA.min","");
@@ -114,8 +107,9 @@
     };
 
     var drawLabels = function(nodeContainer) {
+        var height = style.node.height;
         nodeContainer.append("text")
-            .attr("dy", (style.node.height * 0.35) + "px")
+            .attr("dy", height* 0.35)
             .attr("class", "label1")
             .attr("dx", style.text.padding)
             .style("fill-opacity", 1e-6)
@@ -129,7 +123,7 @@
         nodeContainer.append("text")
             .attr("class", "label2")
             .attr("dx", style.text.padding)
-            .attr("dy", (style.node.height*0.75)+"px")
+            .attr("dy", height*0.75)
             .style("fill-opacity", 1e-6)
             .style("cursor", "pointer")
             .text(function(d){
@@ -261,6 +255,7 @@
     var makePathNodesBigger = function(node, i, clear){
         var width = (clear) ? style.node.width : 2*style.node.width,
             height = (clear) ? style.node.height : 1.5*style.node.height;
+        console.log("anim height:"+String(height));
         svg.selectAll("g.nodes rect").filter(function(d){d.bigger=(clear) ? false : true; return d.id==node.id;})
             .transition().duration(style.aduration/2)
             .attr("width", width+"px")
diff --git a/bindings/pyroot/JsMVA/js/DecisionTree.min.js b/bindings/pyroot/JsMVA/js/DecisionTree.min.js
index 5856d68aa83d5b37d5de2696be820493bc9bb95b..79db6c2ae923704c490c5df10305c853c1c7c7e0 100644
--- a/bindings/pyroot/JsMVA/js/DecisionTree.min.js
+++ b/bindings/pyroot/JsMVA/js/DecisionTree.min.js
@@ -1 +1 @@
-(function(t){require.config({paths:{d3:"https://root.cern.ch/js/notebook/scripts/d3.v3.min"}});var e="";if(require.s.contexts.hasOwnProperty("_")){e=require.s.contexts._.config.paths["JsMVA"].replace("src/js/JsMVA.min","")}define(["d3"],function(n){return t({},n,e)})})(function(t,e,n){Object.size=function(t){return Object.keys(t).length};var r={margin:{x:20,y:20},node:{padding:10,yspace:40,xspace:20,width:150,height:40,mwidth:150,mheight:60,colors:{focus:"#033A00",closed:"#00A62B",pureBkg:"red",pureSig:"blue"},swidth:"4px"},link:{colors:{default:"#ccc",focus:"#033A00"},width:"4px",focus_width:"8px"},aduration:1500,legend:{size:20,rect_width:100,rect_height:30,rect_fucus_width:115},text:{color:"#DEDEDE",padding:"4px"},buttons:{reset:{width:"36px",height:"36px",alpha:"0.5",img:n+"img/reset.png",background:"white"}}};var i=e.scale.linear().range([r.node.colors.pureBkg,r.node.colors.pureSig]);var o,a,d,l;var s=e.layout.tree();var c=function(){var t=e.svg.diagonal();var n=function(e,n,i){if(i)return t(e);return t({source:{x:e.source.x+r.node.width,y:e.source.y},target:{x:e.target.x+r.node.width,y:e.target.y-r.node.height}})};return n}();var u=function(t){if("children"in t){t._children=t.children;t.children=null}else{t.children=t._children;t._children=null}x(t)};var h=function(t){t.append("text").attr("dy",r.node.height*.35+"px").attr("class","label1").attr("dx",r.text.padding).style("fill-opacity",1e-6).style("font-size",1e-6+"px").style("cursor","pointer").style("fill",r.text.color).style("font-weight","bold").text(function(t){return"S/(S+B)="+Number(t.info.purity).toFixed(3)});t.append("text").attr("class","label2").attr("dx",r.text.padding).attr("dy",r.node.height*.75+"px").style("fill-opacity",1e-6).style("cursor","pointer").text(function(t){return t.info.IVar!=-1?l[t.info.IVar]+">"+Number(t.info.Cut).toFixed(3):""}).style("font-size",1e-6+"px").style("fill",r.text.color).style("font-weight","bold")};var f=function(t,n){var o=t.enter().append("g").attr("class","nodes").attr("transform",function(t){return"translate("+n.x0+","+n.y0+")"}).style("cursor","pointer");o.filter(function(t){return t.parent}).on("click",u).on("mouseover",p).on("contextmenu",function(t,n){e.event.preventDefault();y(t)}).on("mouseleave",function(t,e){if(t.bigger)y(t,e,1);return p(t,e,1)});o.append("rect").attr("width",1e-6).attr("height",1e-6);h(o);t.transition().duration(r.aduration).attr("transform",function(t){return"translate("+(t.x+r.node.width*.5)+","+(t.y-r.node.height)+")"});t.select("rect").transition().duration(r.aduration).attr("width",r.node.width).attr("height",r.node.height).attr("fill",function(t){return i(Number(t.info.purity))}).style("stroke-width",r.node.swidth).style("stroke",function(t){return t._children?r.node.colors.closed:""});t.selectAll("text").transition().duration(r.aduration).style("font-size",function(t){var e="S/(S+B)="+Number(t.info.purity).toFixed(3);var n=t.info.IVar!=-1?l[t.info.IVar]+">"+Number(t.info.Cut).toFixed(3):"";t.font_size=1.5*(r.node.width-2*Number(r.node.swidth.replace("px","")))/Math.max(e.length,n.length);return t.font_size+"px"}).attr("dx",r.text.padding).attr("dy",function(t){return(e.select(this).attr("class")=="label1"?r.node.height*.35:r.node.height*.75)+"px"}).style("fill-opacity",1);var a=t.exit().transition().duration(r.aduration).attr("transform",function(t){return"translate("+(n.x+r.node.width)+","+n.y+")"}).remove();a.select("rect").attr("width",1e-6).attr("height",1e-6);a.selectAll("text").style("font-size",1e-6+"px").style("fill-opacity",1e-6)};var g=function(t,e){t.enter().insert("path","g").attr("class","link").attr("d",function(t,n){var r={x:e.x0,y:e.y0};return c({source:r,target:r},n,1)});t.transition().duration(r.aduration).attr("d",c).style("fill","none").style("stroke",r.link.colors.default).style("stroke-width",r.link.width).attr("id",function(t){return"link"+t.target.id});t.exit().transition().duration(r.aduration).attr("d",function(t,n){var i={x:e.x+r.node.width,y:e.y};return c({source:i,target:i},n,1)}).remove()};var p=function(t,e,n){a.selectAll("path.link").filter(function(e){return e.target.id==t.id}).style("stroke-width",n?r.link.width:r.link.focus_width).style("stroke",n?r.link.colors.default:r.link.colors.focus);a.selectAll("g.nodes rect").filter(function(e){return e.id==t.id}).style("stroke-width",r.node.swidth).style("stroke",function(t){return n?t._children?r.node.colors.closed:i(t.info.purity):r.node.colors.focus});if(t.parent)p(t.parent,e,n)};var y=function(t,n,i){var o=i?r.node.width:2*r.node.width,d=i?r.node.height:1.5*r.node.height;a.selectAll("g.nodes rect").filter(function(e){e.bigger=i?false:true;return e.id==t.id}).transition().duration(r.aduration/2).attr("width",o+"px").attr("height",d+"px");a.selectAll("g.nodes text").filter(function(e){return e.id==t.id}).transition().duration(r.aduration/2).style("font-size",function(t){return(i?t.font_size:2*t.font_size)+"px"}).attr("dx",i?r.text.padding:2*Number(r.text.padding.replace("px",""))+"px").attr("dy",function(){return(e.select(this).attr("class")=="label1"?d*.35:d*.75)+"px"});if(t.parent)y(t.parent,n,i)};var x=function(t,e){b();var n=s.nodes(d),i=s.links(n);var l=0;n.forEach(function(t){if(l<Number(t.depth))l=Number(t.depth)});n.forEach(function(t){t.y=t.depth*o.height/l});if(!"x0"in t||!("y0"in t)){t.x0=n[0].x+r.node.width*.5;t.y0=n[0].y-r.node.height}var c=a.selectAll("g.nodes").data(n,function(t,e){return t.id||(t.id=e)});f(c,t);var u=a.selectAll("path.link").data(i,function(t){return t.target.id});g(u,t);a.transition().duration(r.aduration).attr("transform","translate("+-r.node.width+", "+r.node.height+")");if(e!==undefined&&e==true)return;n.forEach(function(t){t.x0=t.x+r.node.width;t.y0=t.y})};var v=function(t){if(t.length!==undefined){var e=0;for(var n in t){e+=v(t[n])}return e}if(!("children"in t)||t["children"].length==0)return 0;return 1+v(t["children"])};var w=function(t){var e=Array();for(var n in t){if(e.indexOf(Math.round(t[n].x))==-1){e.push(Math.round(t[n].x))}}return e.length+1};var m=function(t){var e=1e6,n=-1e6;var r;for(var i in t){r=Number(t[i].info.purity);if(r<e)e=r;if(r>n)n=r}return[e,n]};var b=function(t){var e=s.nodes(d);var n;for(var a in e){if(!e[a].parent){n=e[a];break}}var l=v(n);r.node.height=o.height/(l+1)-r.node.yspace;if(r.node.height>r.node.mheight)r.node.height=r.node.mheight;var c=0;while(l!=0){if(!(l%4))c++;l/=4}r.node.width=o.width/(w(e)+1-c)-r.node.xspace;if(r.node.width>r.node.mwidth)r.node.height=r.node.mwidth;s.size([o.width,o.height]);i.domain(m(e))};var k=function(t){var n=[{text:"Pure Backg.",id:"label1",color:i(i.domain()[0]),x:5,y:5},{text:"Pure Signal",id:"label2",color:i(i.domain()[1]),x:5,y:40}];var o=t.append("g").attr("transform","translate(5,5)");var a=o.selectAll("g").data(n,function(t){return t.id}).enter().append("g").style("cursor","pointer").attr("transform",function(t){return"translate("+t.x+","+t.y+")"});a.on("mouseover",function(t){e.select("#"+t.id).style("font-weight","bold");e.select("#"+t.id+"_rect").attr("width",r.legend.rect_fucus_width)});a.on("mouseout",function(t){e.select("#"+t.id).style("font-weight","normal");e.select("#"+t.id+"_rect").attr("width",r.legend.rect_width)});a.append("rect").attr("id",function(t){return t.id+"_rect"}).attr("width",r.legend.rect_width).attr("height",r.legend.rect_height).attr("fill",function(t){return t.color});a.append("text").attr("id",function(t){return t.id}).attr("x",function(t){return 5}).attr("y",function(t){return 20}).text(function(t){return t.text}).style("fill",r.text.color)};var _=function(t){if("_children"in t&&t.children==null){t.children=t._children;t._children=null}if("children"in t&&t.children!=null){for(var e in t.children){_(t.children[e])}}};var z=function(t){var e=[];var n=[];n.push(t);while(n.length>0){var r=n.shift();if("_children"in r&&r._children!=null){e.push(r)}if(r.children!=null){for(var i=0;i<r.children.length;i++){n.push(r.children[i])}}}return e.length>0?e:t};t.draw=function(t,n){var i=e.select("#"+t);d=n["tree"];l=n["variables"];if(Object.size(d)==0){i.innerHTML="<b style='color:red'>Tree empty...</b>";return}o={width:i.property("style")["width"],height:i.property("style")["height"]};a=i.append("svg").attr("width",o.width).attr("height",o.height);var s=a;Object.keys(o).forEach(function(t){o[t]=Number(o[t].replace("px",""));o[t]-=t=="width"?2*r.margin.x+r.node.width:2*r.margin.y+r.node.height});b(1);var c=e.behavior.zoom().scaleExtent([1,10]).on("zoom",function(){a.attr("transform","translate("+-r.node.width+", "+r.node.height+")translate("+e.event.translate+")scale("+e.event.scale+")")});a=a.on("dblclick",function(){c.scale(1);c.translate([0,0]);a.transition().attr("transform","translate("+-r.node.width+", "+r.node.height+")")}).append("g").call(c).append("g").attr("transform","translate("+-r.node.width+", "+r.node.height+")");k(s);x(d);i.append("button").style("position","relative").style("top","-"+r.buttons.reset.height).style("width",r.buttons.reset.width).style("height",r.buttons.reset.height).style("opacity",r.buttons.reset.alpha).style("background",r.buttons.reset.background).style("background-size","contain").style("background-image","url("+r.buttons.reset.img+")").style("cursor","pointer").style("border","none").on("mouseover",function(){e.select(this).style("opacity","1")}).on("mouseout",function(){e.select(this).style("opacity",r.buttons.reset.alpha)}).on("click",function(){c.scale(1);c.translate([0,0]);a.transition().attr("transform","translate("+-r.node.width+", "+r.node.height+")");var t=z(d);for(var e=0;e<t.length;e++){_(t[e]);x(t[e],true)}})};Object.seal(t);return t});
\ No newline at end of file
+(function(t){var e="";if(require.s.contexts.hasOwnProperty("_")){e=require.s.contexts._.config.paths["JsMVA"].replace("src/js/JsMVA.min","")}define(["d3"],function(n){return t({},n,e)})})(function(t,e,n){Object.size=function(t){return Object.keys(t).length};var r={margin:{x:20,y:20},node:{padding:10,yspace:40,xspace:20,width:150,height:40,mwidth:150,mheight:60,colors:{focus:"#033A00",closed:"#00A62B",pureBkg:"red",pureSig:"blue"},swidth:"4px"},link:{colors:{default:"#ccc",focus:"#033A00"},width:"4px",focus_width:"8px"},aduration:1500,legend:{size:20,rect_width:100,rect_height:30,rect_fucus_width:115},text:{color:"#DEDEDE",padding:"4px"},buttons:{reset:{width:"36px",height:"36px",alpha:"0.5",img:n+"img/reset.png",background:"white"}}};var i=e.scale.linear().range([r.node.colors.pureBkg,r.node.colors.pureSig]);var o,a,d,l;var s=e.layout.tree();var c=function(){var t=e.svg.diagonal();var n=function(e,n,i){if(i)return t(e);return t({source:{x:e.source.x+r.node.width,y:e.source.y},target:{x:e.target.x+r.node.width,y:e.target.y-r.node.height}})};return n}();var u=function(t){if("children"in t){t._children=t.children;t.children=null}else{t.children=t._children;t._children=null}x(t)};var h=function(t){var e=r.node.height;t.append("text").attr("dy",e*.35).attr("class","label1").attr("dx",r.text.padding).style("fill-opacity",1e-6).style("font-size",1e-6+"px").style("cursor","pointer").style("fill",r.text.color).style("font-weight","bold").text(function(t){return"S/(S+B)="+Number(t.info.purity).toFixed(3)});t.append("text").attr("class","label2").attr("dx",r.text.padding).attr("dy",e*.75).style("fill-opacity",1e-6).style("cursor","pointer").text(function(t){return t.info.IVar!=-1?l[t.info.IVar]+">"+Number(t.info.Cut).toFixed(3):""}).style("font-size",1e-6+"px").style("fill",r.text.color).style("font-weight","bold")};var f=function(t,n){var o=t.enter().append("g").attr("class","nodes").attr("transform",function(t){return"translate("+n.x0+","+n.y0+")"}).style("cursor","pointer");o.filter(function(t){return t.parent}).on("click",u).on("mouseover",p).on("contextmenu",function(t,n){e.event.preventDefault();y(t)}).on("mouseleave",function(t,e){if(t.bigger)y(t,e,1);return p(t,e,1)});o.append("rect").attr("width",1e-6).attr("height",1e-6);h(o);t.transition().duration(r.aduration).attr("transform",function(t){return"translate("+(t.x+r.node.width*.5)+","+(t.y-r.node.height)+")"});t.select("rect").transition().duration(r.aduration).attr("width",r.node.width).attr("height",r.node.height).attr("fill",function(t){return i(Number(t.info.purity))}).style("stroke-width",r.node.swidth).style("stroke",function(t){return t._children?r.node.colors.closed:""});t.selectAll("text").transition().duration(r.aduration).style("font-size",function(t){var e="S/(S+B)="+Number(t.info.purity).toFixed(3);var n=t.info.IVar!=-1?l[t.info.IVar]+">"+Number(t.info.Cut).toFixed(3):"";t.font_size=1.5*(r.node.width-2*Number(r.node.swidth.replace("px","")))/Math.max(e.length,n.length);return t.font_size+"px"}).attr("dx",r.text.padding).attr("dy",function(t){return(e.select(this).attr("class")=="label1"?r.node.height*.35:r.node.height*.75)+"px"}).style("fill-opacity",1);var a=t.exit().transition().duration(r.aduration).attr("transform",function(t){return"translate("+(n.x+r.node.width)+","+n.y+")"}).remove();a.select("rect").attr("width",1e-6).attr("height",1e-6);a.selectAll("text").style("font-size",1e-6+"px").style("fill-opacity",1e-6)};var g=function(t,e){t.enter().insert("path","g").attr("class","link").attr("d",function(t,n){var r={x:e.x0,y:e.y0};return c({source:r,target:r},n,1)});t.transition().duration(r.aduration).attr("d",c).style("fill","none").style("stroke",r.link.colors.default).style("stroke-width",r.link.width).attr("id",function(t){return"link"+t.target.id});t.exit().transition().duration(r.aduration).attr("d",function(t,n){var i={x:e.x+r.node.width,y:e.y};return c({source:i,target:i},n,1)}).remove()};var p=function(t,e,n){a.selectAll("path.link").filter(function(e){return e.target.id==t.id}).style("stroke-width",n?r.link.width:r.link.focus_width).style("stroke",n?r.link.colors.default:r.link.colors.focus);a.selectAll("g.nodes rect").filter(function(e){return e.id==t.id}).style("stroke-width",r.node.swidth).style("stroke",function(t){return n?t._children?r.node.colors.closed:i(t.info.purity):r.node.colors.focus});if(t.parent)p(t.parent,e,n)};var y=function(t,n,i){var o=i?r.node.width:2*r.node.width,d=i?r.node.height:1.5*r.node.height;console.log("anim height:"+String(d));a.selectAll("g.nodes rect").filter(function(e){e.bigger=i?false:true;return e.id==t.id}).transition().duration(r.aduration/2).attr("width",o+"px").attr("height",d+"px");a.selectAll("g.nodes text").filter(function(e){return e.id==t.id}).transition().duration(r.aduration/2).style("font-size",function(t){return(i?t.font_size:2*t.font_size)+"px"}).attr("dx",i?r.text.padding:2*Number(r.text.padding.replace("px",""))+"px").attr("dy",function(){return(e.select(this).attr("class")=="label1"?d*.35:d*.75)+"px"});if(t.parent)y(t.parent,n,i)};var x=function(t,e){b();var n=s.nodes(d),i=s.links(n);var l=0;n.forEach(function(t){if(l<Number(t.depth))l=Number(t.depth)});n.forEach(function(t){t.y=t.depth*o.height/l});if(!"x0"in t||!("y0"in t)){t.x0=n[0].x+r.node.width*.5;t.y0=n[0].y-r.node.height}var c=a.selectAll("g.nodes").data(n,function(t,e){return t.id||(t.id=e)});f(c,t);var u=a.selectAll("path.link").data(i,function(t){return t.target.id});g(u,t);a.transition().duration(r.aduration).attr("transform","translate("+-r.node.width+", "+r.node.height+")");if(e!==undefined&&e==true)return;n.forEach(function(t){t.x0=t.x+r.node.width;t.y0=t.y})};var v=function(t){if(t.length!==undefined){var e=0;for(var n in t){e+=v(t[n])}return e}if(!("children"in t)||t["children"].length==0)return 0;return 1+v(t["children"])};var w=function(t){var e=Array();for(var n in t){if(e.indexOf(Math.round(t[n].x))==-1){e.push(Math.round(t[n].x))}}return e.length+1};var m=function(t){var e=1e6,n=-1e6;var r;for(var i in t){r=Number(t[i].info.purity);if(r<e)e=r;if(r>n)n=r}return[e,n]};var b=function(t){var e=s.nodes(d);var n;for(var a in e){if(!e[a].parent){n=e[a];break}}var l=v(n);r.node.height=o.height/(l+1)-r.node.yspace;if(r.node.height>r.node.mheight)r.node.height=r.node.mheight;var c=0;while(l!=0){if(!(l%4))c++;l/=4}r.node.width=o.width/(w(e)+1-c)-r.node.xspace;if(r.node.width>r.node.mwidth)r.node.height=r.node.mwidth;s.size([o.width,o.height]);i.domain(m(e))};var k=function(t){var n=[{text:"Pure Backg.",id:"label1",color:i(i.domain()[0]),x:5,y:5},{text:"Pure Signal",id:"label2",color:i(i.domain()[1]),x:5,y:40}];var o=t.append("g").attr("transform","translate(5,5)");var a=o.selectAll("g").data(n,function(t){return t.id}).enter().append("g").style("cursor","pointer").attr("transform",function(t){return"translate("+t.x+","+t.y+")"});a.on("mouseover",function(t){e.select("#"+t.id).style("font-weight","bold");e.select("#"+t.id+"_rect").attr("width",r.legend.rect_fucus_width)});a.on("mouseout",function(t){e.select("#"+t.id).style("font-weight","normal");e.select("#"+t.id+"_rect").attr("width",r.legend.rect_width)});a.append("rect").attr("id",function(t){return t.id+"_rect"}).attr("width",r.legend.rect_width).attr("height",r.legend.rect_height).attr("fill",function(t){return t.color});a.append("text").attr("id",function(t){return t.id}).attr("x",function(t){return 5}).attr("y",function(t){return 20}).text(function(t){return t.text}).style("fill",r.text.color)};var _=function(t){if("_children"in t&&t.children==null){t.children=t._children;t._children=null}if("children"in t&&t.children!=null){for(var e in t.children){_(t.children[e])}}};var z=function(t){var e=[];var n=[];n.push(t);while(n.length>0){var r=n.shift();if("_children"in r&&r._children!=null){e.push(r)}if(r.children!=null){for(var i=0;i<r.children.length;i++){n.push(r.children[i])}}}return e.length>0?e:t};t.draw=function(t,n){var i=e.select("#"+t);d=n["tree"];l=n["variables"];if(Object.size(d)==0){i.innerHTML="<b style='color:red'>Tree empty...</b>";return}o={width:i.property("style")["width"],height:i.property("style")["height"]};a=i.append("svg").attr("width",o.width).attr("height",o.height);var s=a;Object.keys(o).forEach(function(t){o[t]=Number(o[t].replace("px",""));o[t]-=t=="width"?2*r.margin.x+r.node.width:2*r.margin.y+r.node.height});b(1);var c=e.behavior.zoom().scaleExtent([1,10]).on("zoom",function(){a.attr("transform","translate("+-r.node.width+", "+r.node.height+")translate("+e.event.translate+")scale("+e.event.scale+")")});a=a.on("dblclick",function(){c.scale(1);c.translate([0,0]);a.transition().attr("transform","translate("+-r.node.width+", "+r.node.height+")")}).append("g").call(c).append("g").attr("transform","translate("+-r.node.width+", "+r.node.height+")");k(s);x(d);i.append("button").style("position","relative").style("top","-"+r.buttons.reset.height).style("width",r.buttons.reset.width).style("height",r.buttons.reset.height).style("opacity",r.buttons.reset.alpha).style("background",r.buttons.reset.background).style("background-size","contain").style("background-image","url("+r.buttons.reset.img+")").style("cursor","pointer").style("border","none").on("mouseover",function(){e.select(this).style("opacity","1")}).on("mouseout",function(){e.select(this).style("opacity",r.buttons.reset.alpha)}).on("click",function(){c.scale(1);c.translate([0,0]);a.transition().attr("transform","translate("+-r.node.width+", "+r.node.height+")");var t=z(d);for(var e=0;e<t.length;e++){_(t[e]);x(t[e],true)}})};Object.seal(t);return t});
\ No newline at end of file
diff --git a/bindings/pyroot/JsMVA/js/JsMVA.js b/bindings/pyroot/JsMVA/js/JsMVA.js
index bc91aa172f4b31cf3875de59c89f2a7f2f7e81fa..c583ac6912733fc9dcee0377fdbd49a0fb885e80 100644
--- a/bindings/pyroot/JsMVA/js/JsMVA.js
+++ b/bindings/pyroot/JsMVA/js/JsMVA.js
@@ -20,6 +20,7 @@
 
     require.config({
         paths: {
+            'd3': JSROOT_source_dir+'d3.v3.min',
             'JsRootCore': JSROOT_source_dir+'JSRootCore',
             'nn': url+'NeuralNetwork.min',
             'dtree': url+'DecisionTree.min',
@@ -59,12 +60,55 @@
 
     JsMVA.drawTrainingTestingErrors = function(divid, dat_json){
         var obj = JSROOT.parse(dat_json);
-        JSROOT.draw(divid, obj, "ALP");
+        JSROOT.draw(divid, obj);
+        require(['d3'], function(d3){
+            var div = d3.select("#"+divid).style("position", "relative");
+            var svg = div.append("svg")
+                .attr("width", "200px")
+                .attr("height", "50px")
+                .style({"position":"absolute", "top": "8px", "right": "8px"});
+            var attr = {
+                "pos": {"x": 150, "y": 10},
+                "rect": {"width": 10, "height":10},
+                "dy": 20,
+                "padding": 10
+            };
+            canvas = {
+                width:  160,
+                height: 70
+            };
+            var container = svg.append("g").attr("id", "legend");
+            container.selectAll("g")
+                .data(obj.fGraphs.arr)
+                .enter()
+                .append("g")
+                .each(function(d, i){
+                    var g = d3.select(this);
+                    g.append("rect")
+                        .attr("x", canvas.width-attr.pos.x)
+                        .attr("y", attr.pos.y+i*attr.dy)
+                        .attr("width", attr.rect.width)
+                        .attr("height", attr.rect.height)
+                        .style("fill", function(d){return JSROOT.Painter.root_colors[d.fFillColor];});
+                    g.append("text")
+                        .attr("x", canvas.width-attr.pos.x+attr.rect.width+attr.padding)
+                        .attr("y", attr.pos.y+i*attr.dy+attr.rect.height)
+                        .text(function(d){return d.fTitle;})
+                        .style("fill", function(d){return JSROOT.Painter.root_colors[d.fFillColor];});
+                });
+            div.append("svg").attr("width", "55px").attr("height", "20px")
+                .style({"position":"absolute", "bottom": "15px", "right": "40px"})
+                .append("text")
+                .attr("x", "5px")
+                .attr("y", "15px")
+                .text(obj.fGraphs.arr[0].fTitle.indexOf("Error on training set")!=-1 ? "Epoch" : "#tree")
+                .style({"font-size": "16px"});
+        });
     };
 
     JsMVA.updateTrainingTestingErrors = function(divid, dat_json){
         var obj = JSROOT.parse(dat_json);
-        JSROOT.redraw(divid, obj, "ALP");
+        JSROOT.redraw(divid, obj);
     };
 
     return JsMVA;
diff --git a/bindings/pyroot/JsMVA/js/JsMVA.min.js b/bindings/pyroot/JsMVA/js/JsMVA.min.js
index 56388694a1b64526f628b5c1cca74d5504d02242..de0539de97fa17c170b642486f1633f1b35ae8f2 100644
--- a/bindings/pyroot/JsMVA/js/JsMVA.min.js
+++ b/bindings/pyroot/JsMVA/js/JsMVA.min.js
@@ -1 +1 @@
-(function(r){var e="https://root.cern.ch/js/notebook/scripts/";var n="";if(requirejs.s.contexts.hasOwnProperty("_")){n=requirejs.s.contexts._.config.paths["JsMVA"].replace("JsMVA.min","")}if(console!==undefined&&typeof console.log=="function"){if(n!=""){console.log("JsMVA source dir:"+n.substring(0,n.length-1))}else{console.log("JsMVA source dir can't be resolved, requireJS doesn't have context '_', this will be a problem!")}}require.config({paths:{JsRootCore:e+"JSRootCore",nn:n+"NeuralNetwork.min",dtree:n+"DecisionTree.min",IChart:n+"IChart"}});define(["JsRootCore"],function(e){return r({},e)})})(function(r,e){r.drawTH2=function(r,n){var o=e.parse(n);e.draw(r,o,"colz;PAL50;text")};r.draw=function(r,n){var o=e.parse(n);e.draw(r,o)};r.drawNeuralNetwork=function(r,e){var n=JSON.parse(e);require(["nn"],function(e){e.draw(r,n)})};r.drawDecisionTree=function(r,e){require(["dtree"],function(n){var o=JSON.parse(e);n.draw(r,o)})};r.drawTrainingTestingErrors=function(r,n){var o=e.parse(n);e.draw(r,o,"ALP")};r.updateTrainingTestingErrors=function(r,n){var o=e.parse(n);e.redraw(r,o,"ALP")};return r});
\ No newline at end of file
+(function(t){var r="https://root.cern.ch/js/notebook/scripts/";var e="";if(requirejs.s.contexts.hasOwnProperty("_")){e=requirejs.s.contexts._.config.paths["JsMVA"].replace("JsMVA.min","")}if(console!==undefined&&typeof console.log=="function"){if(e!=""){console.log("JsMVA source dir:"+e.substring(0,e.length-1))}else{console.log("JsMVA source dir can't be resolved, requireJS doesn't have context '_', this will be a problem!")}}require.config({paths:{d3:r+"d3.v3.min",JsRootCore:r+"JSRootCore",nn:e+"NeuralNetwork.min",dtree:e+"DecisionTree.min",IChart:e+"IChart"}});define(["JsRootCore"],function(r){return t({},r)})})(function(t,r){t.drawTH2=function(t,e){var n=r.parse(e);r.draw(t,n,"colz;PAL50;text")};t.draw=function(t,e){var n=r.parse(e);r.draw(t,n)};t.drawNeuralNetwork=function(t,r){var e=JSON.parse(r);require(["nn"],function(r){r.draw(t,e)})};t.drawDecisionTree=function(t,r){require(["dtree"],function(e){var n=JSON.parse(r);e.draw(t,n)})};t.drawTrainingTestingErrors=function(t,e){var n=r.parse(e);r.draw(t,n);require(["d3"],function(e){var o=e.select("#"+t).style("position","relative");var i=o.append("svg").attr("width","200px").attr("height","50px").style({position:"absolute",top:"8px",right:"8px"});var a={pos:{x:150,y:10},rect:{width:10,height:10},dy:20,padding:10};canvas={width:160,height:70};var s=i.append("g").attr("id","legend");s.selectAll("g").data(n.fGraphs.arr).enter().append("g").each(function(t,n){var o=e.select(this);o.append("rect").attr("x",canvas.width-a.pos.x).attr("y",a.pos.y+n*a.dy).attr("width",a.rect.width).attr("height",a.rect.height).style("fill",function(t){return r.Painter.root_colors[t.fFillColor]});o.append("text").attr("x",canvas.width-a.pos.x+a.rect.width+a.padding).attr("y",a.pos.y+n*a.dy+a.rect.height).text(function(t){return t.fTitle}).style("fill",function(t){return r.Painter.root_colors[t.fFillColor]})});o.append("svg").attr("width","55px").attr("height","20px").style({position:"absolute",bottom:"15px",right:"40px"}).append("text").attr("x","5px").attr("y","15px").text(n.fGraphs.arr[0].fTitle.indexOf("Error on training set")!=-1?"Epoch":"#tree").style({"font-size":"16px"})})};t.updateTrainingTestingErrors=function(t,e){var n=r.parse(e);r.redraw(t,n)};return t});
\ No newline at end of file
diff --git a/bindings/pyroot/JsMVA/js/NeuralNetwork.js b/bindings/pyroot/JsMVA/js/NeuralNetwork.js
index ef2eabc92f46216928777c6a7c07cd2e77a4bfe9..ef2f8184af5b51cbf0af91c542d104c82d2cf287 100644
--- a/bindings/pyroot/JsMVA/js/NeuralNetwork.js
+++ b/bindings/pyroot/JsMVA/js/NeuralNetwork.js
@@ -3,12 +3,6 @@
  */
 
 (function(factory){
-    require.config({
-        paths: {
-            d3: "https://root.cern.ch/js/notebook/scripts/d3.v3.min"
-        }
-    });
-
     define(['d3'], function(d3){
         return factory({}, d3);
     });
@@ -45,10 +39,16 @@
         "synapse": {
             "colors": {
                 "negative": "#00005E",
-                "positive": "#5E0000"//"#FF4B00"
+                "positive": "#FF4B00"
+            },
+            "deepNet_colors":{
+                "negative": "rgba(0,0,94, 0.4)",
+                "positive": "rgba(94,0,0, 0.4)"//"#FF4B00"
             },
-            "default_width_range": [0.5, 2],
-            "width_range": [0.5, 2],
+            "default_width_range": [0.5, 5],
+            "width_range": [0.5, 5],
+            "deepNet_default_width_range": [0.5, 2],
+            "deepNet_width_range": [0.5, 2],
             "default_alpha": 0.7,
             "alpha": 0.7,
             "mouseon": {
@@ -63,7 +63,11 @@
             "pos": {"x": 150, "y": 10},
             "rect": {"width": 10, "height":10},
             "dy": 20,
-            "padding": 10
+            "padding": 10,
+            "deepNet_colors": {
+                "negative": "rgb(0,0,94)",
+                "positive": "rgb(94,0,0)"//"#FF4B00"
+            }
         }
     };
 
@@ -220,7 +224,7 @@
                 .filter(function(x){return !(d[0].neuron==x[0].neuron&&d[0].layer==x[0].layer);}).transition();
             allbutnotthis.selectAll("circle").filter(function(x){return (d[0].layer+1)!=x[0].layer})
                 .style("fill-opacity", style["neuron"]["mouseon"]["alpha"])
-                .attr("r", function(d){return d[0].radius})
+                .attr("r", function(d){return d[0].radius});
             allbutnotthis.selectAll("path")
                 .style("stroke-opacity", style["synapse"]["mouseon"]["alpha"]);
         });
@@ -232,7 +236,7 @@
                 .style("fill-opacity", 1)
                 .attr("r", function(d){return d[0].radius;});
             gg.selectAll("path")
-                .style("stroke-opacity", style["synapse"]["alpha"])
+                .style("stroke-opacity", 1)
                 .attr("stroke-width", function(d){
                     return d.type=="positive" ? scaleSynapsisPos(d.weight) : scaleSynapsisNeg(Math.abs(d.weight));
                 });
@@ -370,14 +374,23 @@
         return net;
     };
 
-    var drawDeepNetNeurons = function (context, neuronsattr) {
+    var drawDeepNetNeurons = function (context,  neuronsattr, vars) {
         for(var i=0;i<neuronsattr.length;i++){
             context.beginPath();
-            context.arc(neuronsattr[i].position.x, neuronsattr[i].position.y, neuronsattr[i].radius, 0, 2*Math.PI);
-            context.fillStyle = style["neuron"]["colors"][neuronsattr[i].type];;
+            context.arc(neuronsattr[i].position.x+30, neuronsattr[i].position.y, neuronsattr[i].radius, 0, 2*Math.PI);
+            context.fillStyle = style["neuron"]["colors"][neuronsattr[i].type];
             context.fill();
             context.closePath();
         }
+        if (vars!==undefined){
+            context.font = "16px bold Comic Sans MS";
+            context.fillStyle = "#000";
+            var text;
+            for(var k=0;k<vars.length;k++){
+                text = vars[k] + ":";
+                context.fillText(text, neuronsattr[k].position.x+10-context.measureText(text).width, neuronsattr[k].position.y+5);
+            }
+        }
     };
 
     var drawDeepNetSynapses = function(ctx, net, layer1, layer1_index, layer2){
@@ -387,10 +400,10 @@
             for(si in synapses){
                 d = synapses[si];
                 ctx.beginPath();
-                ctx.moveTo(d.pos[0].x, d.pos[0].y);
-                ctx.lineTo(d.pos[1].x, d.pos[1].y);
+                ctx.moveTo(d.pos[0].x+30, d.pos[0].y);
+                ctx.lineTo(d.pos[1].x+30, d.pos[1].y);
                 ctx.lineWidth = d.type=="positive" ? scaleSynapsisPos(d.weight) : scaleSynapsisNeg(Math.abs(d.weight));
-                ctx.strokeStyle = style["synapse"]["colors"][d.type];
+                ctx.strokeStyle = style["synapse"]["deepNet_colors"][d.type];
                 ctx.stroke();
                 ctx.closePath();
             }
@@ -407,10 +420,29 @@
 
         for(i=0;i<num_layers;i++) {
             drawDeepNetSynapses(context, net, layers[i], i, layers[i + 1]);
-            drawDeepNetNeurons(context, layers[i]);
+            drawDeepNetNeurons(context, layers[i], i==0 ? net["variables"] : undefined);
         }
     };
 
+    var drawDNNLabels = function(context){
+        context.beginPath();
+        context.fillStyle = style["legend"]["deepNet_colors"]["positive"];
+        context.rect(canvas.width-170, 10, style["legend"]["rect"]["width"], style["legend"]["rect"]["height"]);
+        context.fill();
+        context.closePath();
+        context.beginPath();
+        context.fillStyle = style["legend"]["deepNet_colors"]["negative"];
+        context.rect(canvas.width-170, 30, style["legend"]["rect"]["width"], style["legend"]["rect"]["height"]);
+        context.fill();
+        context.closePath();
+
+        context.font = "16px bold Comic Sans MS";
+        context.fillStyle = style["legend"]["deepNet_colors"]["positive"];
+        context.fillText("Positive weight", canvas.width-150, 20);
+        context.fillStyle = style["legend"]["deepNet_colors"]["negative"];
+        context.fillText("Negative weight", canvas.width-150, 40);
+    };
+
 
     NeuralNetwork.drawDeepNetwork = function (divid, netobj) {
         var div = d3.select("#"+divid);
@@ -421,26 +453,25 @@
 
         net = transformDeepNetObject(netobj);
 
-        style.synapse.width_range = [0.1, 0.5];
-        style.synapse.alpha = 0.9;
-        scaleSynapsisPos.range(style["synapse"]["width_range"]);
-        scaleSynapsisNeg.range(style["synapse"]["width_range"]);
+        scaleSynapsisPos.range(style["synapse"]["deepNet_width_range"]);
+        scaleSynapsisNeg.range(style["synapse"]["deepNet_width_range"]);
 
         var context = div.append("canvas")
             .attr("width", canvas.width+"px")
             .attr("height", canvas.height+"px")
-            .call(d3.behavior.zoom().scaleExtent([1, 10]).on("zoom", function(){
+            .call(d3.behavior.zoom().scaleExtent([1, 20]).on("zoom", function(){
                 context.save();
                 context.clearRect(0, 0, canvas.width, canvas.height);
                 context.translate(d3.event.translate[0], d3.event.translate[1]);
                 context.scale(d3.event.scale, d3.event.scale);
                 drawDeepNetwork(context, net);
+                drawDNNLabels(context);
                 context.restore();
             }))
             .node().getContext("2d");
 
-
         drawDeepNetwork(context, net);
+        drawDNNLabels(context);
 
     };
 
diff --git a/bindings/pyroot/JsMVA/js/NeuralNetwork.min.js b/bindings/pyroot/JsMVA/js/NeuralNetwork.min.js
index 6501249a0c5c8813edc29d8dfd760c36a93aaba4..a5a150e8f20e3188a5d7da6d65b721accd3c67b6 100644
--- a/bindings/pyroot/JsMVA/js/NeuralNetwork.min.js
+++ b/bindings/pyroot/JsMVA/js/NeuralNetwork.min.js
@@ -1 +1 @@
-(function(e){require.config({paths:{d3:"https://root.cern.ch/js/notebook/scripts/d3.v3.min"}});define(["d3"],function(t){return e({},t)})})(function(e,t){t.selection.prototype.moveToFront=function(){return this.each(function(){this.parentNode.appendChild(this)})};t.selection.prototype.moveToBack=function(){return this.each(function(){var e=this.parentNode.firstChild;if(e){this.parentNode.insertBefore(this,e)}})};var r={neuron:{colors:{input:"#00A000",hidden:"#0000C7",output:"#F6BD00",bias:"#8F686F"},mouseon:{change_radius:2,alpha:.2}},synapse:{colors:{negative:"#00005E",positive:"#5E0000"},default_width_range:[.5,2],width_range:[.5,2],default_alpha:.7,alpha:.7,mouseon:{width_range:[.5,10],alpha:.1}},variables:{labels_layer0_padding:.03},legend:{pos:{x:150,y:10},rect:{width:10,height:10},dy:20,padding:10}};var n;var a=function(e,t){return Number(Object.keys(e["layout"]["layer_"+t]).length-1)};var i=function(e,t,r){var i=a(e,r);var s=Array(i);for(var o=0;o<i;o++){s[o]={position:{x:(r+.5)*n.width/t,y:(o+.5)*n.height/i},radius:n.height/(i+(i>5?0:5))/4,type:o==i-1?"bias":r==0?"input":"hidden",neuron:o,layer:r};if(r==t-1){s[o]["type"]="output"}}return s};var s=function(e,t,r){var r=e["layout"]["layer_"+t]["neuron_"+r];if(r["nsynapses"]!=0)return r["weights"];return[]};var o=function(e,r){var n=-1e30;var i=1e30;var o;for(var l=0;l<r;l++){for(var u=0;u<a(e,l);u++){o=t.max(s(e,l,u));if(n<o)n=o;o=t.min(s(e,l,u));if(i>o)i=o}}return{min:i,max:n}};var l=function(e,t,r,n,a){var i=s(e,t,r);var o=Array(i.length);for(var l in i){o[l]={layer:t,neuron:r,nextlayer_neuron:l,pos:[n,a[l].position],weight:i[l],type:i[l]<0?"negative":"positive"}}return o};var u=function(e,t){var a=e["variables"];a.push("Bias node");var i=Array(a.length);for(var s in t){i[s]={x:t[s].position.x-r["variables"]["labels_layer0_padding"]*n.width,y:t[s].position.y,text:a[s]+":"}}return i};var p=function(e){e.append("text").text(function(e){return e[1].text}).attr("x",function(e){return e[1].x-this.getComputedTextLength()}).attr("y",function(e){return e[1].y+.25*this.getBBox().height})};var c=function(e,n,a,i,s){if(s!==undefined){var o=t.zip(a,u(n,a))}else{var o=t.zip(a,Array(a.length))}var l=e.append("g").attr("id","layer_"+i).attr("class","layer").selectAll("g").data(o).enter().append("g").attr("id",function(e){return"neuron_"+i+""+e[0].neuron});l.append("circle").attr("r",function(e){return e[0].radius}).attr("cx",function(e){return e[0].position.x}).attr("cy",function(e){return e[0].position.y}).style("fill",function(e){return r["neuron"]["colors"][e[0].type]});if(s!==undefined){p(l)}f(e,l)};var h=t.scale.linear();var y=t.scale.linear();var d=t.svg.line().x(function(e){return e.x}).y(function(e){return e.y}).interpolate("linear");var v=function(e,t,n,a,i){for(var s in n){var o=l(t,a,s,n[s].position,i);e.select("g#neuron_"+a+""+s).selectAll("path").data(o).enter().append("path").moveToBack().attr("d",function(e){return d(e.pos)}).attr("stroke",function(e){return r["synapse"]["colors"][e.type]}).attr("stroke-width",function(e){return e.type=="positive"?h(e.weight):y(Math.abs(e.weight))}).attr("stroke-opacity",r["synapse"]["alpha"])}};var f=function(e,n){r.synapse.width_range=Object.assign({},r.synapse.default_width_range);r.synapse.alpha=Object.assign({},r.synapse.default_alpha);n.on("mouseover",function(n){h.range(r["synapse"]["mouseon"]["width_range"]);y.range(r["synapse"]["mouseon"]["width_range"]);var a=t.select(this).moveToFront().transition();a.selectAll("path").style("stroke-opacity",1).attr("stroke-width",function(e){return e.type=="positive"?h(e.weight):y(Math.abs(e.weight))});a.selectAll("circle").style("fill-opacity",1).attr("r",function(e){return e[0].radius*r["neuron"]["mouseon"]["change_radius"]});a.selectAll("text").attr("x",function(e){return e[1].x-e[0].radius-this.getComputedTextLength()});var i=e.selectAll("g.layer").selectAll("g").filter(function(e){return!(n[0].neuron==e[0].neuron&&n[0].layer==e[0].layer)}).transition();i.selectAll("circle").filter(function(e){return n[0].layer+1!=e[0].layer}).style("fill-opacity",r["neuron"]["mouseon"]["alpha"]).attr("r",function(e){return e[0].radius});i.selectAll("path").style("stroke-opacity",r["synapse"]["mouseon"]["alpha"])});n.on("mouseout",function(t){h.range(r["synapse"]["width_range"]);y.range(r["synapse"]["width_range"]);var n=e.selectAll("g.layer").selectAll("g").transition();n.selectAll("circle").style("fill-opacity",1).attr("r",function(e){return e[0].radius});n.selectAll("path").style("stroke-opacity",r["synapse"]["alpha"]).attr("stroke-width",function(e){return e.type=="positive"?h(e.weight):y(Math.abs(e.weight))});n.selectAll("text").attr("x",function(e){return e[1].x-this.getComputedTextLength()})})};var g=function(e){var a=[{c:r["synapse"]["colors"]["positive"],txt:"Positive weight"},{c:r["synapse"]["colors"]["negative"],txt:"Negative weight"}];var i=r["legend"];var s=e.append("g").attr("id","legend");s.selectAll("g").data(a).enter().append("g").each(function(e,r){var a=t.select(this);a.append("rect").attr("x",n.width-i.pos.x).attr("y",i.pos.y+r*i.dy).attr("width",i.rect.width).attr("height",i.rect.height).style("fill",function(e){return e.c});a.append("text").attr("x",n.width-i.pos.x+i.rect.width+i.padding).attr("y",i.pos.y+r*i.dy+i.rect.height).text(function(e){return e.txt}).style("fill",function(e){return e.c})})};e.draw=function(a,s){if("layers"in s&&"synapses"in s)return e.drawDeepNetwork(a,s);var l,u;var p=t.select("#"+a);n={width:p.property("style")["width"],height:p.property("style")["height"]};u=s;r.synapse.width_range=Object.assign({},r.synapse.default_width_range);r.synapse.alpha=Object.assign({},r.synapse.default_alpha);h.range(r["synapse"]["width_range"]);y.range(r["synapse"]["width_range"]);l=p.append("svg").attr("id","svg_"+a).attr("width",n.width).attr("height",n.height);Object.keys(n).forEach(function(e){n[e]=Number(n[e].replace("px",""))});var d=Number(u["layout"]["nlayers"]);h.domain([0,o(u,d).max]);y.domain([0,Math.abs(o(u,d).min)]);var f=t.behavior.zoom().scaleExtent([1,20]).on("zoom",function(){l.attr("transform","translate("+t.event.translate+")scale("+t.event.scale+")")});l=l.on("dblclick",function(){f.scale(1);f.translate([0,0]);l.transition().attr("transform","translate(0,0)scale(1)")}).append("g").call(f).append("g");var w=Array(d);for(var x=0;x<d;x++){w[x]=i(u,d,x)}for(x=0;x<d;x++){c(l,u,w[x],x,x==0?true:undefined);v(l,u,w[x],x,w[x+1])}g(l)};var w=function(e){vars=e["variables"];vars.push("Bias node");var t=e["layers"];var r=e["synapses"]["synapses"];var n={layer_0:{nneurons:vars.length}};var a;for(var i=0;i<vars.length;i++){a=Number(t[0]["Nodes"]);n["layer_0"]["neuron_"+i]={nsynapses:a,weights:r.slice(i*a,(i+1)*a)}}for(var s=0;s<t.length-1;s++){n["layer_"+(s+1)]={nneurons:Number(t[s]["Nodes"])};a=Number(t[s+1]["Nodes"]);for(var i=0;i<Number(t[s]["Nodes"]);i++){n["layer_"+(s+1)]["neuron_"+i]={nsynapses:a,weights:r.slice(i*a,(i+1)*a)}}}n["layer_"+(s+1)]={nneurons:Number(t[s]["Nodes"])};for(var i=0;i<Number(t[s]["Nodes"]);i++){n["layer_"+(s+1)]["neuron_"+i]={nsynapses:0}}n["nlayers"]=s+2;var o={variables:vars,layout:n};return o};var x=function(e,t){for(var n=0;n<t.length;n++){e.beginPath();e.arc(t[n].position.x,t[n].position.y,t[n].radius,0,2*Math.PI);e.fillStyle=r["neuron"]["colors"][t[n].type];e.fill();e.closePath()}};var _=function(e,t,n,a,i){var s,o,u;for(s in n){var p=l(t,a,s,n[s].position,i);for(o in p){u=p[o];e.beginPath();e.moveTo(u.pos[0].x,u.pos[0].y);e.lineTo(u.pos[1].x,u.pos[1].y);e.lineWidth=u.type=="positive"?h(u.weight):y(Math.abs(u.weight));e.strokeStyle=r["synapse"]["colors"][u.type];e.stroke();e.closePath()}}};var m=function(e,t){var r=Number(t["layout"]["nlayers"]);var n=Array(r);for(var a=0;a<r;a++){n[a]=i(t,r,a)}for(a=0;a<r;a++){_(e,t,n[a],a,n[a+1]);x(e,n[a])}};e.drawDeepNetwork=function(e,a){var i=t.select("#"+e);n={width:Number(i.property("style")["width"].replace("px","")),height:Number(i.property("style")["height"].replace("px",""))};net=w(a);r.synapse.width_range=[.1,.5];r.synapse.alpha=.9;h.range(r["synapse"]["width_range"]);y.range(r["synapse"]["width_range"]);var s=i.append("canvas").attr("width",n.width+"px").attr("height",n.height+"px").call(t.behavior.zoom().scaleExtent([1,10]).on("zoom",function(){s.save();s.clearRect(0,0,n.width,n.height);s.translate(t.event.translate[0],t.event.translate[1]);s.scale(t.event.scale,t.event.scale);m(s,net);s.restore()})).node().getContext("2d");m(s,net)};Object.seal(e);return e});
\ No newline at end of file
+(function(e){define(["d3"],function(t){return e({},t)})})(function(e,t){t.selection.prototype.moveToFront=function(){return this.each(function(){this.parentNode.appendChild(this)})};t.selection.prototype.moveToBack=function(){return this.each(function(){var e=this.parentNode.firstChild;if(e){this.parentNode.insertBefore(this,e)}})};var r={neuron:{colors:{input:"#00A000",hidden:"#0000C7",output:"#F6BD00",bias:"#8F686F"},mouseon:{change_radius:2,alpha:.2}},synapse:{colors:{negative:"#00005E",positive:"#FF4B00"},deepNet_colors:{negative:"rgba(0,0,94, 0.4)",positive:"rgba(94,0,0, 0.4)"},default_width_range:[.5,5],width_range:[.5,5],deepNet_default_width_range:[.5,2],deepNet_width_range:[.5,2],default_alpha:.7,alpha:.7,mouseon:{width_range:[.5,10],alpha:.1}},variables:{labels_layer0_padding:.03},legend:{pos:{x:150,y:10},rect:{width:10,height:10},dy:20,padding:10,deepNet_colors:{negative:"rgb(0,0,94)",positive:"rgb(94,0,0)"}}};var n;var a=function(e,t){return Number(Object.keys(e["layout"]["layer_"+t]).length-1)};var i=function(e,t,r){var i=a(e,r);var o=Array(i);for(var s=0;s<i;s++){o[s]={position:{x:(r+.5)*n.width/t,y:(s+.5)*n.height/i},radius:n.height/(i+(i>5?0:5))/4,type:s==i-1?"bias":r==0?"input":"hidden",neuron:s,layer:r};if(r==t-1){o[s]["type"]="output"}}return o};var o=function(e,t,r){var r=e["layout"]["layer_"+t]["neuron_"+r];if(r["nsynapses"]!=0)return r["weights"];return[]};var s=function(e,r){var n=-1e30;var i=1e30;var s;for(var l=0;l<r;l++){for(var p=0;p<a(e,l);p++){s=t.max(o(e,l,p));if(n<s)n=s;s=t.min(o(e,l,p));if(i>s)i=s}}return{min:i,max:n}};var l=function(e,t,r,n,a){var i=o(e,t,r);var s=Array(i.length);for(var l in i){s[l]={layer:t,neuron:r,nextlayer_neuron:l,pos:[n,a[l].position],weight:i[l],type:i[l]<0?"negative":"positive"}}return s};var p=function(e,t){var a=e["variables"];a.push("Bias node");var i=Array(a.length);for(var o in t){i[o]={x:t[o].position.x-r["variables"]["labels_layer0_padding"]*n.width,y:t[o].position.y,text:a[o]+":"}}return i};var u=function(e){e.append("text").text(function(e){return e[1].text}).attr("x",function(e){return e[1].x-this.getComputedTextLength()}).attr("y",function(e){return e[1].y+.25*this.getBBox().height})};var c=function(e,n,a,i,o){if(o!==undefined){var s=t.zip(a,p(n,a))}else{var s=t.zip(a,Array(a.length))}var l=e.append("g").attr("id","layer_"+i).attr("class","layer").selectAll("g").data(s).enter().append("g").attr("id",function(e){return"neuron_"+i+""+e[0].neuron});l.append("circle").attr("r",function(e){return e[0].radius}).attr("cx",function(e){return e[0].position.x}).attr("cy",function(e){return e[0].position.y}).style("fill",function(e){return r["neuron"]["colors"][e[0].type]});if(o!==undefined){u(l)}v(e,l)};var h=t.scale.linear();var d=t.scale.linear();var y=t.svg.line().x(function(e){return e.x}).y(function(e){return e.y}).interpolate("linear");var g=function(e,t,n,a,i){for(var o in n){var s=l(t,a,o,n[o].position,i);e.select("g#neuron_"+a+""+o).selectAll("path").data(s).enter().append("path").moveToBack().attr("d",function(e){return y(e.pos)}).attr("stroke",function(e){return r["synapse"]["colors"][e.type]}).attr("stroke-width",function(e){return e.type=="positive"?h(e.weight):d(Math.abs(e.weight))}).attr("stroke-opacity",r["synapse"]["alpha"])}};var v=function(e,n){r.synapse.width_range=Object.assign({},r.synapse.default_width_range);r.synapse.alpha=Object.assign({},r.synapse.default_alpha);n.on("mouseover",function(n){h.range(r["synapse"]["mouseon"]["width_range"]);d.range(r["synapse"]["mouseon"]["width_range"]);var a=t.select(this).moveToFront().transition();a.selectAll("path").style("stroke-opacity",1).attr("stroke-width",function(e){return e.type=="positive"?h(e.weight):d(Math.abs(e.weight))});a.selectAll("circle").style("fill-opacity",1).attr("r",function(e){return e[0].radius*r["neuron"]["mouseon"]["change_radius"]});a.selectAll("text").attr("x",function(e){return e[1].x-e[0].radius-this.getComputedTextLength()});var i=e.selectAll("g.layer").selectAll("g").filter(function(e){return!(n[0].neuron==e[0].neuron&&n[0].layer==e[0].layer)}).transition();i.selectAll("circle").filter(function(e){return n[0].layer+1!=e[0].layer}).style("fill-opacity",r["neuron"]["mouseon"]["alpha"]).attr("r",function(e){return e[0].radius});i.selectAll("path").style("stroke-opacity",r["synapse"]["mouseon"]["alpha"])});n.on("mouseout",function(t){h.range(r["synapse"]["width_range"]);d.range(r["synapse"]["width_range"]);var n=e.selectAll("g.layer").selectAll("g").transition();n.selectAll("circle").style("fill-opacity",1).attr("r",function(e){return e[0].radius});n.selectAll("path").style("stroke-opacity",1).attr("stroke-width",function(e){return e.type=="positive"?h(e.weight):d(Math.abs(e.weight))});n.selectAll("text").attr("x",function(e){return e[1].x-this.getComputedTextLength()})})};var f=function(e){var a=[{c:r["synapse"]["colors"]["positive"],txt:"Positive weight"},{c:r["synapse"]["colors"]["negative"],txt:"Negative weight"}];var i=r["legend"];var o=e.append("g").attr("id","legend");o.selectAll("g").data(a).enter().append("g").each(function(e,r){var a=t.select(this);a.append("rect").attr("x",n.width-i.pos.x).attr("y",i.pos.y+r*i.dy).attr("width",i.rect.width).attr("height",i.rect.height).style("fill",function(e){return e.c});a.append("text").attr("x",n.width-i.pos.x+i.rect.width+i.padding).attr("y",i.pos.y+r*i.dy+i.rect.height).text(function(e){return e.txt}).style("fill",function(e){return e.c})})};e.draw=function(a,o){if("layers"in o&&"synapses"in o)return e.drawDeepNetwork(a,o);var l,p;var u=t.select("#"+a);n={width:u.property("style")["width"],height:u.property("style")["height"]};p=o;r.synapse.width_range=Object.assign({},r.synapse.default_width_range);r.synapse.alpha=Object.assign({},r.synapse.default_alpha);h.range(r["synapse"]["width_range"]);d.range(r["synapse"]["width_range"]);l=u.append("svg").attr("id","svg_"+a).attr("width",n.width).attr("height",n.height);Object.keys(n).forEach(function(e){n[e]=Number(n[e].replace("px",""))});var y=Number(p["layout"]["nlayers"]);h.domain([0,s(p,y).max]);d.domain([0,Math.abs(s(p,y).min)]);var v=t.behavior.zoom().scaleExtent([1,20]).on("zoom",function(){l.attr("transform","translate("+t.event.translate+")scale("+t.event.scale+")")});l=l.on("dblclick",function(){v.scale(1);v.translate([0,0]);l.transition().attr("transform","translate(0,0)scale(1)")}).append("g").call(v).append("g");var w=Array(y);for(var _=0;_<y;_++){w[_]=i(p,y,_)}for(_=0;_<y;_++){c(l,p,w[_],_,_==0?true:undefined);g(l,p,w[_],_,w[_+1])}f(l)};var w=function(e){vars=e["variables"];vars.push("Bias node");var t=e["layers"];var r=e["synapses"]["synapses"];var n={layer_0:{nneurons:vars.length}};var a;for(var i=0;i<vars.length;i++){a=Number(t[0]["Nodes"]);n["layer_0"]["neuron_"+i]={nsynapses:a,weights:r.slice(i*a,(i+1)*a)}}for(var o=0;o<t.length-1;o++){n["layer_"+(o+1)]={nneurons:Number(t[o]["Nodes"])};a=Number(t[o+1]["Nodes"]);for(var i=0;i<Number(t[o]["Nodes"]);i++){n["layer_"+(o+1)]["neuron_"+i]={nsynapses:a,weights:r.slice(i*a,(i+1)*a)}}}n["layer_"+(o+1)]={nneurons:Number(t[o]["Nodes"])};for(var i=0;i<Number(t[o]["Nodes"]);i++){n["layer_"+(o+1)]["neuron_"+i]={nsynapses:0}}n["nlayers"]=o+2;var s={variables:vars,layout:n};return s};var _=function(e,t,n){for(var a=0;a<t.length;a++){e.beginPath();e.arc(t[a].position.x+30,t[a].position.y,t[a].radius,0,2*Math.PI);e.fillStyle=r["neuron"]["colors"][t[a].type];e.fill();e.closePath()}if(n!==undefined){e.font="16px bold Comic Sans MS";e.fillStyle="#000";var i;for(var o=0;o<n.length;o++){i=n[o]+":";e.fillText(i,t[o].position.x+10-e.measureText(i).width,t[o].position.y+5)}}};var x=function(e,t,n,a,i){var o,s,p;for(o in n){var u=l(t,a,o,n[o].position,i);for(s in u){p=u[s];e.beginPath();e.moveTo(p.pos[0].x+30,p.pos[0].y);e.lineTo(p.pos[1].x+30,p.pos[1].y);e.lineWidth=p.type=="positive"?h(p.weight):d(Math.abs(p.weight));e.strokeStyle=r["synapse"]["deepNet_colors"][p.type];e.stroke();e.closePath()}}};var b=function(e,t){var r=Number(t["layout"]["nlayers"]);var n=Array(r);for(var a=0;a<r;a++){n[a]=i(t,r,a)}for(a=0;a<r;a++){x(e,t,n[a],a,n[a+1]);_(e,n[a],a==0?t["variables"]:undefined)}};var m=function(e){e.beginPath();e.fillStyle=r["legend"]["deepNet_colors"]["positive"];e.rect(n.width-170,10,r["legend"]["rect"]["width"],r["legend"]["rect"]["height"]);e.fill();e.closePath();e.beginPath();e.fillStyle=r["legend"]["deepNet_colors"]["negative"];e.rect(n.width-170,30,r["legend"]["rect"]["width"],r["legend"]["rect"]["height"]);e.fill();e.closePath();e.font="16px bold Comic Sans MS";e.fillStyle=r["legend"]["deepNet_colors"]["positive"];e.fillText("Positive weight",n.width-150,20);e.fillStyle=r["legend"]["deepNet_colors"]["negative"];e.fillText("Negative weight",n.width-150,40)};e.drawDeepNetwork=function(e,a){var i=t.select("#"+e);n={width:Number(i.property("style")["width"].replace("px","")),height:Number(i.property("style")["height"].replace("px",""))};net=w(a);h.range(r["synapse"]["deepNet_width_range"]);d.range(r["synapse"]["deepNet_width_range"]);var o=i.append("canvas").attr("width",n.width+"px").attr("height",n.height+"px").call(t.behavior.zoom().scaleExtent([1,20]).on("zoom",function(){o.save();o.clearRect(0,0,n.width,n.height);o.translate(t.event.translate[0],t.event.translate[1]);o.scale(t.event.scale,t.event.scale);b(o,net);m(o);o.restore()})).node().getContext("2d");b(o,net);m(o)};Object.seal(e);return e});
\ No newline at end of file
diff --git a/bindings/pyroot/JsMVA/python/JsMVA/DataLoader.py b/bindings/pyroot/JsMVA/python/JsMVA/DataLoader.py
index eb9ea5f5a58e469bbb345fa4691c085bf5cc1278..096611aae3d1790081ca3e5c27ebcb6f70f843d5 100644
--- a/bindings/pyroot/JsMVA/python/JsMVA/DataLoader.py
+++ b/bindings/pyroot/JsMVA/python/JsMVA/DataLoader.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-## @package JsMVA/DataLoader
+## @package JsMVA.DataLoader
 # DataLoader module with the functions to be inserted to TMVA::DataLoader class and helper functions
 # @authors Attila Bagoly <battila93@gmail.com>
 
@@ -87,6 +87,21 @@ def DrawInputVariable(dl, variableName, numBin=100, processTrfs=""):
     sig = GetInputVariableHist(dl, "Signal",     variableName, numBin, processTrfs)
     bkg = GetInputVariableHist(dl, "Background", variableName, numBin, processTrfs)
     c, l = JPyInterface.JsDraw.sbPlot(sig, bkg, {"xaxis": sig.GetTitle(),
-                                    "yaxis": "N",
+                                    "yaxis": "Number of events",
                                     "plot": "Input variable: "+sig.GetTitle()})
     JPyInterface.JsDraw.Draw(c)
+
+## Rewrite TMVA::DataLoader::PrepareTrainingAndTestTree
+def ChangeCallOriginalPrepareTrainingAndTestTree(*args, **kwargs):
+    if len(kwargs)==0:
+        originalFunction, args = JPyInterface.functions.ProcessParameters(0, *args, **kwargs)
+        return originalFunction(*args)
+    try:
+        args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["SigCut", "BkgCut"], *args, **kwargs)
+    except AttributeError:
+        try:
+            args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["Cut"], *args, **kwargs)
+        except AttributeError:
+            raise AttributeError
+    originalFunction, args = JPyInterface.functions.ProcessParameters(3, *args, **kwargs)
+    return originalFunction(*args)
\ No newline at end of file
diff --git a/bindings/pyroot/JsMVA/python/JsMVA/Factory.py b/bindings/pyroot/JsMVA/python/JsMVA/Factory.py
index 219f58bbd5194d11e8641e75be0ecf8d1291c6a1..91938d9aaf8a2385d4005ea856e574e61a92e105 100644
--- a/bindings/pyroot/JsMVA/python/JsMVA/Factory.py
+++ b/bindings/pyroot/JsMVA/python/JsMVA/Factory.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
-## @package JsMVA/Factory
-#  @authors  Attila Bagoly <battila93@gmail.com>
+## @package JsMVA.Factory
 # Factory module with the functions to be inserted to TMVA::Factory class and helper functions and classes
+#  @authors  Attila Bagoly <battila93@gmail.com>
 
 
 import ROOT
@@ -14,7 +14,6 @@ from ipywidgets import widgets
 from threading import Thread
 import time
 from string import Template
-import types
 
 
 ## Getting method object from factory
@@ -592,69 +591,19 @@ def ChangeTrainAllMethods(fac):
             t.join()
     return
 
-## Get's special parameters from kwargs and converts to positional parameter
-def __ConvertKwargsToArgs(positionalArgumentsToNamed, *args, **kwargs):
-    # args[0] = self
-    args = list(args)
-    idx = 0
-    PositionalArgsEnded = False
-    for argName in positionalArgumentsToNamed:
-        if not PositionalArgsEnded:
-            if argName in kwargs:
-                if (idx+1)!=len(args):
-                    raise AttributeError
-                PositionalArgsEnded = True
-            else:
-                idx += 1
-        if PositionalArgsEnded and argName not in kwargs:
-            raise AttributeError
-        if argName in kwargs:
-            args.append(kwargs[argName])
-            del kwargs[argName]
-    args = tuple(args)
-    return (args, kwargs)
-
-## Converts object to TMVA style option string
-def __ProcessParameters(optStringStartIndex, *args, **kwargs):
-    originalFunction = None
-    if optStringStartIndex!=-10:
-        originalFunction = kwargs["originalFunction"]
-        del kwargs["originalFunction"]
-    OptionStringPassed = False
-    if (len(args)-1) == optStringStartIndex:
-        opt = args[optStringStartIndex] + ":"
-        tmp = list(args)
-        del tmp[optStringStartIndex]
-        args = tuple(tmp)
-        OptionStringPassed = True
-    else:
-        opt = ""
-    for key in kwargs:
-        if type(kwargs[key]) == types.BooleanType:
-            if kwargs[key] == True:
-                opt += key + ":"
-            else:
-                opt += "!" + key + ":"
-        else:
-            opt += key + "=" + str(kwargs[key]) + ":"
-    tmp = list(args)
-    if OptionStringPassed or len(kwargs)>0:
-        tmp.append( opt[:-1] )
-    return ( originalFunction, tuple(tmp) )
-
 ## Rewrite the constructor of TMVA::Factory
 def ChangeCallOriginal__init__(*args,  **kwargs):
     try:
-        args, kwargs = __ConvertKwargsToArgs(["JobName", "TargetFile"], *args, **kwargs)
+        args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["JobName", "TargetFile"], *args, **kwargs)
     except AttributeError:
         try:
-            args, kwargs = __ConvertKwargsToArgs(["JobName"], *args, **kwargs)
+            args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["JobName"], *args, **kwargs)
         except AttributeError:
             raise AttributeError
-    originalFunction, args = __ProcessParameters(3, *args, **kwargs)
+    originalFunction, args = JPyInterface.functions.ProcessParameters(3, *args, **kwargs)
     return originalFunction(*args)
 
-## Rewrite the constructor of TMVA::Factory
+## Rewrite TMVA::Factory::BookMethod
 def ChangeCallOriginalBookMethod(*args,  **kwargs):
     compositeOpts = False
     composite = False
@@ -664,15 +613,47 @@ def ChangeCallOriginalBookMethod(*args,  **kwargs):
         if "CompositeOptions" in kwargs:
             compositeOpts = kwargs["CompositeOptions"]
             del kwargs["CompositeOptions"]
-    args, kwargs = __ConvertKwargsToArgs(["DataLoader", "Method", "MethodTitle"], *args, **kwargs)
-    originalFunction, args = __ProcessParameters(4, *args, **kwargs)
+    args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["DataLoader", "Method", "MethodTitle"], *args, **kwargs)
+    originalFunction, args = JPyInterface.functions.ProcessParameters(4, *args, **kwargs)
     if composite!=False:
         args = list(args)
         args.append(composite)
         args = tuple(args)
     if compositeOpts!=False:
-        o, compositeOptStr = __ProcessParameters(-10, **compositeOpts)
+        o, compositeOptStr = JPyInterface.functions.ProcessParameters(-10, **compositeOpts)
         args = list(args)
         args.append(compositeOptStr[0])
         args = tuple(args)
+    return originalFunction(*args)
+
+## Rewrite the constructor of TMVA::Factory::EvaluateImportance
+def ChangeCallOriginalEvaluateImportance(*args,  **kwargs):
+    if len(kwargs) == 0:
+        originalFunction, args = JPyInterface.functions.ProcessParameters(0, *args, **kwargs)
+        return originalFunction(*args)
+    args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["DataLoader", "VIType", "Method", "MethodTitle"], *args, **kwargs)
+    originalFunction, args = JPyInterface.functions.ProcessParameters(5, *args, **kwargs)
+    return originalFunction(*args)
+
+## Rewrite the constructor of TMVA::Factory::CrossValidate
+def ChangeCallOriginalCrossValidate(*args,  **kwargs):
+    if len(kwargs) == 0:
+        originalFunction, args = JPyInterface.functions.ProcessParameters(0, *args, **kwargs)
+        return originalFunction(*args)
+    optParams = False
+    rocIntegrals = False
+    if "optParams" in kwargs:
+        optParams = kwargs["optParams"]
+        del kwargs["optParams"]
+    if "rocIntegrals" in kwargs:
+        rocIntegrals = kwargs["rocIntegrals"]
+        del kwargs["rocIntegrals"]
+    args, kwargs = JPyInterface.functions.ConvertSpecKwargsToArgs(["DataLoader", "Method", "MethodTitle"], *args, **kwargs)
+    originalFunction, args = JPyInterface.functions.ProcessParameters(4, *args, **kwargs)
+    args = list(args)
+    if optParams!=False:
+        args.append(optParams)
+    if rocIntegrals!=False:
+        args.append(rocIntegrals)
+    args = tuple(args)
     return originalFunction(*args)
\ No newline at end of file
diff --git a/bindings/pyroot/JsMVA/python/JsMVA/JPyInterface.py b/bindings/pyroot/JsMVA/python/JsMVA/JPyInterface.py
index 13de4c14c98b3f7b2beaa8f4fee06a191d924adb..17c352bff9fec5abc9b277d7478c7cda5d3d75c2 100644
--- a/bindings/pyroot/JsMVA/python/JsMVA/JPyInterface.py
+++ b/bindings/pyroot/JsMVA/python/JsMVA/JPyInterface.py
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
-## @package JsMVA/JPyInterface
-#  @authors  Attila Bagoly <battila93@gmail.com>
-# This package is responsible for adding the drawing methods to TMVA
+## @package JsMVA.JPyInterface
+# JPyInterface is responsible for adding the drawing methods to TMVA
 # and for creating the JavaScript outputs from objects.
+#  @authors  Attila Bagoly <battila93@gmail.com>
 
 
 from IPython.core.display import display, HTML
@@ -10,6 +10,7 @@ from string import Template
 import ROOT
 import DataLoader
 import Factory
+import types
 
 
 ## Function inserter class
@@ -52,6 +53,63 @@ class functions:
             else:
                 setattr(target, arg.replace("Change", ""), getattr(source, arg))
 
+    ## Get's special parameters from kwargs and converts to positional parameter
+    @staticmethod
+    def ConvertSpecKwargsToArgs(positionalArgumentsToNamed, *args, **kwargs):
+        # args[0] = self
+        args = list(args)
+        idx = 0
+        PositionalArgsEnded = False
+        for argName in positionalArgumentsToNamed:
+            if not PositionalArgsEnded:
+                if argName in kwargs:
+                    if (idx + 1) != len(args):
+                        raise AttributeError
+                    PositionalArgsEnded = True
+                else:
+                    idx += 1
+            if PositionalArgsEnded and argName not in kwargs:
+                raise AttributeError
+            if argName in kwargs:
+                args.append(kwargs[argName])
+                del kwargs[argName]
+        args = tuple(args)
+        return (args, kwargs)
+
+    ## Converts object to TMVA style option string
+    @staticmethod
+    def ProcessParameters(optStringStartIndex, *args, **kwargs):
+        originalFunction = None
+        if optStringStartIndex != -10:
+            originalFunction = kwargs["originalFunction"]
+            del kwargs["originalFunction"]
+        OptionStringPassed = False
+        if (len(args) - 1) == optStringStartIndex:
+            opt = args[optStringStartIndex] + ":"
+            tmp = list(args)
+            del tmp[optStringStartIndex]
+            args = tuple(tmp)
+            OptionStringPassed = True
+        else:
+            opt = ""
+        for key in kwargs:
+            if type(kwargs[key]) == types.BooleanType:
+                if kwargs[key] == True:
+                    opt += key + ":"
+                else:
+                    opt += "!" + key + ":"
+            elif type(kwargs[key]) == types.ListType:
+                ss = ""
+                for o in kwargs[key]:
+                    ss += str(o) + ";"
+                opt += key + "=" + ss[:-1] + ":"
+            else:
+                opt += key + "=" + str(kwargs[key]) + ":"
+        tmp = list(args)
+        if OptionStringPassed or len(kwargs) > 0:
+            tmp.append(opt[:-1])
+        return (originalFunction, tuple(tmp))
+
     ## The method removes inserted functions from class
     # @param target from which class to remove functions
     # @param args list of methods to remove
@@ -95,7 +153,8 @@ class functions:
 ## Class for creating the output scripts and inserting them to cell output
 class JsDraw:
     ## String containing the link to JavaScript files
-    __jsMVASourceDir = "https://rawgit.com/qati/GSOC16/master/src/js"
+    #__jsMVASourceDir = "https://rawgit.com/qati/GSOC16/master/src/js"
+    __jsMVASourceDir = "http://localhost:8888/notebooks/GSOC/wd/src/js"
 
     ## Drawing are sizes
     jsCanvasWidth   = 800
@@ -151,7 +210,7 @@ script.parentElement.parentElement.remove();
 
     ## Inserts the data inserter JavaScript code to output
     # @param obj ROOT object (will be converted to JSON) or JSON string containing the data to be inserted
-    # @param jsDrawMethod the JsMVA JavaScrip object method name to be used for inserting the new data
+    # @param dataInserterMethod the JsMVA JavaScrip object method name to be used for inserting the new data
     # @param objIsJSON obj is ROOT object or JSON
     @staticmethod
     def InsertData(obj, dataInserterMethod="updateTrainingTestingErrors", objIsJSON=False):
@@ -173,7 +232,7 @@ script.parentElement.parentElement.remove();
     @staticmethod
     def sbPlot(sig, bkg, title):
         canvas = ROOT.TCanvas("csbplot", title["plot"], JsDraw.jsCanvasWidth, JsDraw.jsCanvasHeight)
-        sig.SetMaximum(ROOT.TMath.Max(sig.GetMaximum(),bkg.GetMaximum()*1.1))
+        sig.SetMaximum(ROOT.TMath.Max(sig.GetMaximum()*1.1,bkg.GetMaximum()*1.1))
         sig.SetTitle(sig.GetTitle().replace("(Signal)",""))
         sig.GetXaxis().SetTitle(title["xaxis"])
         sig.GetYaxis().SetTitle(title["yaxis"])
diff --git a/bindings/pyroot/JsMVA/python/JsMVA/JsMVAMagic.py b/bindings/pyroot/JsMVA/python/JsMVA/JsMVAMagic.py
index a7262cf0d67e9aedf50d192920c12dab03f40fad..264a613f91a22e05c378ac1657bbede33034c21f 100644
--- a/bindings/pyroot/JsMVA/python/JsMVA/JsMVAMagic.py
+++ b/bindings/pyroot/JsMVA/python/JsMVA/JsMVAMagic.py
@@ -1,5 +1,6 @@
 # -*- coding:utf-8 -*-
-## Magic class for JsMVA
+## @package JsMVA.JsMVAMagic
+# IPython magic class for JsMVA
 #  @authors: Attila Bagoly <battila93@gmail.com>
 
 from IPython.core.magic import Magics, magics_class, line_magic
diff --git a/bindings/pyroot/JsMVA/python/JsMVA/__init__.py b/bindings/pyroot/JsMVA/python/JsMVA/__init__.py
index 75d52d3d33ba1b49c6b286c20c726f6394db549e..3200d7afd0ac990bfe8c2aab8d1b09674a740c04 100644
--- a/bindings/pyroot/JsMVA/python/JsMVA/__init__.py
+++ b/bindings/pyroot/JsMVA/python/JsMVA/__init__.py
@@ -1,3 +1,6 @@
+## @mainpage
+# @package JsMVA
+# @image html JsMVA.jpg
 from IPython.core.extensions import ExtensionManager
 
 def loadExtensions():