Index: /issm/trunk-jpl/src/m/plot/plot_mesh.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_mesh.js	(revision 20233)
+++ /issm/trunk-jpl/src/m/plot/plot_mesh.js	(revision 20234)
@@ -13,5 +13,5 @@
 	var ymin,ymax;
 	var zmin,zmax;
-	var scale;
+	var scale,zscale,surfacescale;
 	
 	//Process data and model
@@ -23,8 +23,18 @@
 	var is2d = meshresults[4]; 
 	var isplanet = meshresults[5];
-	var is3d = md.mesh.classname() == 'mesh3dsurface'; //use meshresults once behvaior can be verified
-	
-	if (!is3d && md.geometry.surface) {
-		z = md.geometry.surface;
+		
+	if (!md.geometry.surface) {
+		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+	}
+	if (md.mesh.classname() == 'mesh3dsurface') {
+		zscale = 1;
+		surfacescale = options.getfieldvalue('heightscale',1);
+	}
+	else {
+		if (md.geometry.surface) {
+			z=md.geometry.surface;
+		}	
+		zscale = options.getfieldvalue('heightscale',1);
+		surfacescale = 0;
 	}
 	//}}}
@@ -48,5 +58,5 @@
 	node["shaderName"] = "colored";
 	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
-	node["scale"] = [scale, scale, scale*options.getfieldvalue('heightscale',1)];
+	node["scale"] = [scale, scale, scale * zscale];
 	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
 	node["modelMatrix"] = recalculateModelMatrix(node);
@@ -72,26 +82,23 @@
 	else{ //2D triangular elements
 		vertices.itemSize = 3;
+		var xyz = vec3.create();
+		var direction = vec3.create();
+		var vertex = vec3.create();
+		var magnitude;
+		var color = [0.0, 0.0, 0.0, 1.0];
 		for(var i = 0; i < x.length; i++){
-			vertices[vertices.length] = x[i];
-			vertices[vertices.length] = y[i];
-			vertices[vertices.length] = z[i];
+			xyz = vec3.fromValues(x[i], y[i], z[i]);
+			magnitude = vec3.length(xyz) + md.geometry.surface[i] * surfacescale;
+			vec3.normalize(direction, xyz);
+			vec3.scale(vertex, direction, magnitude);
+			vertices.push.apply(vertices, vertex);
 
-			rgbcolor = [0.0, 0.0, 0.0];
-			colors[colors.length] = rgbcolor[0];
-			colors[colors.length] = rgbcolor[1];
-			colors[colors.length] = rgbcolor[2];
-			colors[colors.length] = 1.0;
+			colors.push.apply(colors, color);
 		}
-
+		
 		//linearize the elements array: 
 		for(var i = 0; i < elements.length; i++){
-			//convert tris to line edges; generates more edges than necessary, should optimize using node connectivity
-			//matlab indices from 1, so decrement indices.
-			indices[indices.length] = elements[i][0] - 1;
-			indices[indices.length] = elements[i][1] - 1;
-			indices[indices.length] = elements[i][1] - 1;
-			indices[indices.length] = elements[i][2] - 1;
-			indices[indices.length] = elements[i][2] - 1;
-			indices[indices.length] = elements[i][0] - 1;
+			//convert tris to line edges; generates more edges than necessary, should optimize using node connectivity matlab indices from 1, so decrement indices.
+			indices.push.apply(indices, [elements[i][0] - 1, elements[i][1] - 1, elements[i][1] - 1, elements[i][2] - 1, elements[i][2] - 1, elements[i][0] - 1]);
 		}
 		indices.itemSize = 1;
Index: /issm/trunk-jpl/src/m/plot/plot_overlay.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_overlay.js	(revision 20233)
+++ /issm/trunk-jpl/src/m/plot/plot_overlay.js	(revision 20234)
@@ -15,4 +15,5 @@
 	var ymin,ymax;
 	var zmin,zmax;
+	var scale,zscale,surfacescale;
 
 	//Process data and model
@@ -24,8 +25,18 @@
 	var is2d = meshresults[4]; 
 	var isplanet = meshresults[5];
-	var is3d = (md.mesh.classname() == 'mesh3dsurface'); //use meshresults once behvaior can be verified
-	
-	if (!is3d && md.geometry.surface) {
-		z = md.geometry.surface;
+
+	if (!md.geometry.surface) {
+		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+	}
+	if (md.mesh.classname() == 'mesh3dsurface') {
+		zscale = 1;
+		surfacescale = options.getfieldvalue('heightscale',1);
+	}
+	else {
+		if (md.geometry.surface) {
+			z=md.geometry.surface;
+		}	
+		zscale = options.getfieldvalue('heightscale',1);
+		surfacescale = 0;
 	}
 	//}}}
@@ -46,8 +57,8 @@
 		
 	//Compute scaling: 
-	var scale = 1 / (xmax - xmin);
+	scale = 1 / (xmax - xmin);
 	node["shaderName"] = "unlit_textured";
 	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
-	node["scale"] = [scale, scale, scale*options.getfieldvalue('heightscale',1)];
+	node["scale"] = [scale, scale, scale * zscale];
 	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
 	node["modelMatrix"] = recalculateModelMatrix(node);
@@ -91,13 +102,20 @@
 	var xrange = modelxlim[1] - modelxlim[0];
 	var yrange = modelylim[1] - modelylim[0];
+	
+	var xyz = vec3.create();
+	var direction = vec3.create();
+	var vertex = vec3.create();
+	var magnitude;
 
 	//generate mesh:
+	console.log(md);
 	for(var i = 0; i < x.length; i++){
-		vertices[vertices.length] = x[i];
-		vertices[vertices.length] = y[i];
-		vertices[vertices.length] = z[i];
+		xyz = vec3.fromValues(x[i], y[i], z[i]);
+		magnitude = vec3.length(xyz);
+		vec3.normalize(direction, xyz);
+		vec3.scale(vertex, direction, magnitude);
+		vertices.push.apply(vertices, vertex);
 
-		texcoords[texcoords.length] = (x[i] - modelxlim[0]) / xrange;
-		texcoords[texcoords.length] = (y[i] - modelylim[0]) / yrange;
+		texcoords.push.apply(texcoords, [(x[i] - modelxlim[0]) / xrange, (y[i] - modelylim[0]) / yrange]);
 	}
 
Index: /issm/trunk-jpl/src/m/plot/plot_unit.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 20233)
+++ /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 20234)
@@ -16,5 +16,5 @@
 	var zmin,zmax;
 	var datamin,datamax,datadelta;
-	var scale;
+	var scale,zscale,surfacescale;
 
 	//Process data and model
@@ -26,12 +26,22 @@
 	var is2d = meshresults[4]; 
 	var isplanet = meshresults[5];
-	var is3d = md.mesh.classname() == 'mesh3dsurface'; //use meshresults once behvaior can be verified
 	
 	var	dataresults = processdata(md,data,options);
 	var	data2 = dataresults[0]; 
 	var	datatype = dataresults[1];
-	
-	if (!is3d && md.geometry.surface) {
-		z = md.geometry.surface;
+
+	if (!md.geometry.surface) {
+		md.geometry.surface=NewArrayFill(md.mesh.x.length,0);
+	}
+	if (md.mesh.classname() == 'mesh3dsurface') {
+		zscale = 1;
+		surfacescale = options.getfieldvalue('heightscale',1);
+	}
+	else {
+		if (md.geometry.surface) {
+			z=md.geometry.surface;
+		}	
+		zscale = options.getfieldvalue('heightscale',1);
+		surfacescale = 0;
 	}
 	//}}}
@@ -51,10 +61,10 @@
 	zmax = zlim[1];
 	var caxis;
-
+	
 	//Compute scaling: 
-	var scale = 1 / (xmax - xmin);
+	scale = 1 / (xmax - xmin);
 	node["shaderName"] = "unlit_textured";
 	node["shader"] = gl["shaders"][node["shaderName"]]["program"];
-	node["scale"] = [scale, scale, scale*options.getfieldvalue('heightscale',1)];
+	node["scale"] = [scale, scale, scale * zscale];
 	node["translation"] = [(xmin + xmax) / (-2 / scale), (ymin + ymax) / (-2 / scale), (zmin + zmax) / (2 / scale)];
 	node["modelMatrix"] = recalculateModelMatrix(node);
@@ -93,15 +103,18 @@
 				vertices.itemSize = 3;
 				texcoords.itemSize = 2;
-				//var height = vec3.create();
-				//var heightscale = options.getfieldvalue('heightscale',1);
+				
+				var xyz = vec3.create();
+				var direction = vec3.create();
+				var vertex = vec3.create();
+				var magnitude;
+	
 				for(var i = 0; i < x.length; i++){
-					//vec3.normalize(height, vec3.fromValues(x[i], y[i], z[i])); //fix to use normalized earth radius instead of radius+ height
-					//vec3.scale(height, height, heightscale);
-					vertices[vertices.length] = x[i];
-					vertices[vertices.length] = y[i];
-					vertices[vertices.length] = z[i];
-
-					texcoords[texcoords.length] = 0.5;
-					texcoords[texcoords.length] = (data[i] - datamin) / datadelta;
+					xyz = vec3.fromValues(x[i], y[i], z[i]);
+					magnitude = vec3.length(xyz) + md.geometry.surface[i] * surfacescale;
+					vec3.normalize(direction, xyz);
+					vec3.scale(vertex, direction, magnitude);
+					vertices.push.apply(vertices, vertex);
+
+					texcoords.push.apply(texcoords, [0.5, (data[i] - datamin) / datadelta]);
 				}
 
@@ -135,8 +148,16 @@
 			else{ //triangular elements
 				vertices.itemSize = 3;
+				
+				var xyz = vec3.create();
+				var direction = vec3.create();
+				var vertex = vec3.create();
+				var magnitude;
+
 				for(var i = 0; i < x.length; i++){
-					vertices[vertices.length] = x[i];
-					vertices[vertices.length] = y[i];
-					vertices[vertices.length] = z[i];
+					xyz = vec3.fromValues(x[i], y[i], z[i]);
+					magnitude = vec3.length(xyz) + md.geometry.surface[i] * surfacescale;
+					vec3.normalize(direction, xyz);
+					vec3.scale(vertex, direction, magnitude);
+					vertices.push.apply(vertices, vertex);
 				}	
 				
@@ -164,6 +185,5 @@
 					texcoords[i].itemSize = 2;
 					for(var j = 0; j < x.length; j++){
-						texcoords[i][texcoords[i].length] = 0.5;
-						texcoords[i][texcoords[i].length] = (data[i][j] - datamin) / datadelta;
+						texcoords.push.apply(texcoords, [0.5, (data[i][j] - datamin) / datadelta]);
 					}
 				}
