Index: /issm/trunk-jpl/src/m/plot/applyoptions.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/applyoptions.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/applyoptions.js	(revision 20586)
@@ -35,8 +35,8 @@
 			var precision=options.getfieldvalue('colorbarprecision',3);
 			
-			if (options.getfieldvalue('log',10)!='off') {
+			if (options.getfieldvalue('log','off')!='off') {
 				for (var i = cdivisions; i >= 0; i--) {
-					var scale = Math.log(caxis[1])-Math.log(caxis[0]);
-					labels[i] = (Math.exp(Math.log(caxis[0])+scale*(cdivisions-i)/cdivisions)).toPrecision(precision);
+					var scale = (Math.log10(caxis[1])-Math.log10(caxis[0]))/Math.log10(options.getfieldvalue('log',10));
+					labels[i] = (Math.pow(options.getfieldvalue('log',10),Math.log10(caxis[0])/Math.log10(options.getfieldvalue('log',10))+scale*(cdivisions-i)/cdivisions)).toPrecision(precision);
 				}
 			} else {
@@ -212,16 +212,8 @@
 	var cmap = options.getfieldvalue('cmap','jet');
 	var colorbar = colorbars[cmap];
-	if (options.getfieldvalue('log',10)!='off') {
-		for (var i = 0; i < colorbar.length; i++) {
-			color = colorbar[colorbar.length-i-1];
-			color = [Math.round(color[0]*255),Math.round(color[1]*255),Math.round(color[2]*255)];	
-			tgradient.addColorStop(1.0-Math.exp(Math.log((colorbar.length-i)/colorbar.length)/Math.log(options.getfieldvalue('log',10))*i/colorbar.length),'rgba('+color.toString()+',1.0)');
-		}
-	} else {
-		for (var i = 0; i < colorbar.length; i++) {
-			color = colorbar[colorbar.length-i-1];
-			color = [Math.round(color[0]*255),Math.round(color[1]*255),Math.round(color[2]*255)];	
-			tgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+',1.0)');
-		}
+	for (var i = 0; i < colorbar.length; i++) {
+		color = colorbar[colorbar.length-i-1];
+		color = [Math.round(color[0]*255),Math.round(color[1]*255),Math.round(color[2]*255)];	
+		tgradient.addColorStop(i/colorbar.length,'rgba('+color.toString()+',1.0)');
 	}
 	
Index: /issm/trunk-jpl/src/m/plot/plot_manager.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_manager.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/plot_manager.js	(revision 20586)
@@ -78,5 +78,5 @@
 				return;
 			case 'mesh':
-				plot_mesh(md,options,canvas,gl,canvas.nodes["data"+String(canvas.datalength)]);
+				plot_mesh(md,options,canvas);
 				return;
 			case 'none':
@@ -125,5 +125,5 @@
 				return;
 			case 'quiver':
-				plot_quiver(md,options,canvas,gl,canvas.nodes["data"+String(canvas.datalength)]);
+				plot_quiver(md,options,canvas);
 				return;
 			case 'strainrate_tensor':
@@ -171,6 +171,5 @@
 	//Figure out if this is a semi-transparent plot.
 	if (options.getfieldvalue('overlay','off')=='on'){
-		canvas.nodes["overlay"] = Node(gl,options);
-		plot_overlay(md,data,options,canvas,gl,canvas.nodes["overlay"]);
+		plot_overlay(md,data,options,canvas);
 	}
 
@@ -204,6 +203,6 @@
 	
 	//plot unit
-	plot_unit(md,data2,datatype,options,canvas,gl,canvas.nodes["data"+String(canvas.datalength)]);
-
-	applyoptions(md,data2,datatype,options,canvas,gl,canvas.nodes["data"+String(canvas.datalength)]);
+	plot_unit(md,data2,datatype,options,canvas);
+
+	applyoptions(md,data2,datatype,options,canvas,gl,canvas.nodes[canvas.nodes.length-1]);
 }
Index: /issm/trunk-jpl/src/m/plot/plot_mesh.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_mesh.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/plot_mesh.js	(revision 20586)
@@ -1,5 +1,5 @@
-function plot_mesh(md,options,canvas,gl,node) {
+function plot_mesh(md,options,canvas) {
 	//   Usage:
-	//      plot_mesh(md,options,canvas,gl);
+	//      plot_mesh(md,options,canvas);
 	//
 	//   See also: PLOTMODEL
@@ -56,5 +56,8 @@
 
 	//Compute gl variables:
-	var scale = 1 / (xmax - xmin);
+	var gl = canvas.gl;
+	var node = Node(gl,options);
+	canvas.nodes[canvas.nodes.length] = node;
+	scale = 1 / (xmax - xmin);
 	node["shaderName"] = "colored";
 	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
Index: /issm/trunk-jpl/src/m/plot/plot_overlay.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_overlay.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/plot_overlay.js	(revision 20586)
@@ -1,8 +1,8 @@
-function plot_overlay(md,data,options,canvas,gl,node){
+function plot_overlay(md,data,options,canvas){
 	//PLOT_OVERLAY - Function for plotting a georeferenced image.  
 	//This function is called from within the plotmodel code.
 	//
 	//   Usage:
-	//      plot_overlay(md,data,options,canvas,gl,node);
+	//      plot_overlay(md,data,options,canvas);
 	//
 	//   See also: PLOTMODEL, PLOT_MANAGER
@@ -59,4 +59,7 @@
 		
 	//Compute gl variables:
+	var gl = canvas.gl;
+	var node = Node(gl,options);
+	canvas.nodes[canvas.nodes.length] = node;
 	scale = 1 / (xmax - xmin);
 	node["shaderName"] = "unlit_textured";
Index: /issm/trunk-jpl/src/m/plot/plot_quiver.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_quiver.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/plot_quiver.js	(revision 20586)
@@ -1,7 +1,7 @@
-function plot_quiver(md,options,canvas,gl,node) {
+function plot_quiver(md,options,canvas) {
 	//PLOT_QUIVER - quiver plot with colors
 	//
 	//   Usage:
-	//      plot_quiver(md,options,canvas,gl,node)
+	//      plot_quiver(md,options,canvas)
 	//
 
@@ -59,5 +59,8 @@
 
 	//Compute gl variables:
-	var scale = 1 / (xmax - xmin);
+	var gl = canvas.gl;
+	var node = Node(gl,options);
+	canvas.nodes[canvas.nodes.length] = node;
+	scale = 1 / (xmax - xmin);
 	node["shaderName"] = "colored";
 	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
Index: /issm/trunk-jpl/src/m/plot/plot_unit.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 20586)
@@ -1,7 +1,7 @@
-function plot_unit(md,data,datatype,options,canvas,gl,node) {
+function plot_unit(md,data,datatype,options,canvas) {
 	//PLOT_UNIT - unit plot, display data
 	//
 	//   Usage:
-	//      plot_unit(md,data,options,canvas,gl);
+	//      plot_unit(md,data,options,canvas);
 	//
 	//   See also: PLOTMODEL, PLOT_MANAGER
@@ -60,4 +60,7 @@
 	
 	//Compute gl variables:
+	var gl = canvas.gl;
+	var node = Node(gl,options);
+	canvas.nodes[canvas.nodes.length] = node;
 	scale = 1 / (xmax - xmin);
 	node["shaderName"] = "unlit_textured";
@@ -235,5 +238,5 @@
 				
 				//Initialize movie loop
-				node["movieInterval"] = 1000 / options.getfieldvalue('moviefps',5);
+				node["movieInterval"] = 1000 / canvas.moviefps;
 				node["movieTimestamps"] = timestamps;
 				node["movieLength"] = timestamps.length;
Index: /issm/trunk-jpl/src/m/plot/webgl.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/webgl.js	(revision 20585)
+++ /issm/trunk-jpl/src/m/plot/webgl.js	(revision 20586)
@@ -11,11 +11,9 @@
 	if (!canvas.initialized) {
 		canvas.gl = initWebGL(canvas,options);
-		canvas.nodes = {};
-		canvas.datalength = 0;
+		canvas.nodes = [];
 		if (canvas.drawHandler)	window.cancelAnimationFrame(canvas.drawHandler);
 		draw(canvas,options);
 		canvas.initialized = true;
 	}
-	canvas.nodes["data"+String(++canvas.datalength)] = Node(canvas.gl,options);
 	return canvas;
 }
@@ -67,4 +65,5 @@
 	canvas.movieReverse = false;
 	canvas.movieIncrement = true;
+	canvas.moviefps = options.getfieldvalue('moviefps',5);
 
 	if (canvas.twod) {
@@ -76,15 +75,16 @@
 	
 	// Add event listeners for canvas
-	canvas.addEventListener("mousewheel", function (ev) {onZoom(ev,canvas,options.getfieldvalue('displayzoom','off') == 'on')}, false);
-	canvas.addEventListener("DOMMouseScroll", function (ev) {onZoom(ev,canvas,options.getfieldvalue('displayzoom','off') == 'on')}, false);
-
+	var displayview = options.getfieldvalue('displayview','off') == 'on';
+	var displayzoom = options.getfieldvalue('displayzoom','off') == 'on';
 	var mc = new Hammer.Manager(canvas);
-
+	
     mc.add(new Hammer.Pan({threshold:0, pointers:0}));
     mc.add(new Hammer.Pinch({threshold:0})).recognizeWith(mc.get('pan'));
-
-    mc.on("panstart panmove", function (ev) {onPan(ev,canvas,options.getfieldvalue('displayview','off') == 'on');});
-    mc.on("pinchstart pinchmove", function (ev) {onPinch(ev,canvas,options.getfieldvalue('displayview','off') == 'on');});
+    mc.on("panstart panmove", function (ev) {onPan(ev,canvas,displayview);});
+    mc.on("pinchstart pinchmove", function (ev) {onPinch(ev,canvas,displayview);});
 	//mc.on("mousewheel DOMMouseScroll", function (ev) {onZoom(ev,canvas,options);});
+	
+	canvas.addEventListener("mousewheel", function (ev) {onZoom(ev,canvas,displayzoom)}, false);
+	canvas.addEventListener("DOMMouseScroll", function (ev) {onZoom(ev,canvas,displayzoom)}, false);
 	
 	return gl;
@@ -371,5 +371,5 @@
 	canvas.lastDeltaY = ev.deltaY;
 	
-	if (displaylog) console.log(canvas.translation);
+	if (displaylog) console.log(canvas.rotation);
 } //}}}
 function onPinch(ev,canvas,displaylog) { //{{{
