Index: /issm/trunk-jpl/src/m/plot/plot_mesh.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_mesh.js	(revision 20470)
+++ /issm/trunk-jpl/src/m/plot/plot_mesh.js	(revision 20471)
@@ -9,5 +9,5 @@
 	var indices = [];
 	var colors = [];
-	var rgbcolor = [];
+	var nanindices = {};
 	var xmin,xmax;
 	var ymin,ymax;
@@ -85,6 +85,74 @@
 		var vertex = vec3.create();
 		var magnitude;
-		var color = [0.0, 0.0, 0.0, 1.0];
+		var color = [0.0, 0.0, 0.0, 1.0];	
+						x[0] = NaN;
+		x[1] = NaN;
+		x[2] = NaN;
+		x[3] = NaN;
+		x[4] = NaN;
+		x[5] = NaN;
+		x[6] = NaN;
+		x[7] = NaN;
+		x[8] = NaN;
+		x[9] = NaN;
+		x[10] = NaN;
+		x[11] = NaN;
+		x[12] = NaN;
+		x[13] = NaN;
+		x[14] = NaN;
+		x[15] = NaN;
+		x[16] = NaN;
+		x[17] = NaN;
+		x[18] = NaN;
+		x[19] = NaN;
+		x[20] = NaN;
+		x[21] = NaN;
+		x[22] = NaN;
+		x[23] = NaN;
+		x[24] = NaN;
+		x[25] = NaN;
+		x[26] = NaN;
+		x[27] = NaN;
+		x[28] = NaN;
+		x[29] = NaN;
+		x[30] = NaN;
+		x[31] = NaN;
+		x[32] = NaN;
+		x[33] = NaN;
+		x[34] = NaN;
+		x[35] = NaN;
+		x[36] = NaN;
+		x[37] = NaN;
+		x[38] = NaN;
+		x[39] = NaN;
+		x[310] = NaN;
+		x[311] = NaN;
+		x[312] = NaN;
+		x[313] = NaN;
+		x[314] = NaN;
+		x[315] = NaN;
+		x[316] = NaN;
+		x[317] = NaN;
+		x[318] = NaN;
+		x[319] = NaN;
+		x[320] = NaN;
+		x[321] = NaN;
+		x[322] = NaN;
+		x[323] = NaN;
+		x[324] = NaN;
+		x[325] = NaN;
+		x[326] = NaN;
+		x[327] = NaN;
+		x[328] = NaN;
+		x[329] = NaN;	
 		for(var i = 0; i < x.length; i++){
+			//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+			if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+				nanindices[i] = i;
+				vertices.push.apply(vertices, vertex);
+				continue;
+			}
+			//Scale vertices
+			//Scale vertices
 			xyz = vec3.fromValues(x[i], y[i], z[i]);
 			magnitude = vec3.length(xyz) + md.geometry.surface[i] * surfacescale;
@@ -97,7 +165,9 @@
 		
 		//linearize the elements array: 
+		var element;
 		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.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]);
+			element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+			if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+			indices = indices.concat([element[0], element[1], element[1], element[2], element[2], element[0]]);
 		}
 		indices.itemSize = 1;
Index: /issm/trunk-jpl/src/m/plot/plot_overlay.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_overlay.js	(revision 20470)
+++ /issm/trunk-jpl/src/m/plot/plot_overlay.js	(revision 20471)
@@ -12,4 +12,5 @@
 	var indices = [];
 	var texcoords = [];
+	var nanindices = {};
 	var xmin,xmax;
 	var ymin,ymax;
@@ -109,4 +110,12 @@
 	//generate mesh:
 	for(var i = 0; i < x.length; i++){
+		//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+		if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+			nanindices[i] = i;
+			vertices.push.apply(vertices, vertex);
+			continue;
+		}
+		//Scale vertices
+		//Scale vertices
 		xyz = vec3.fromValues(x[i], y[i], z[i]);
 		magnitude = vec3.length(xyz);
@@ -118,8 +127,12 @@
 	}
 
-	//linearize the elements array: 
-	indices = indices.concat.apply(indices, elements); 
+	//linearize the elements array:
+	var element;
+	for(var i = 0; i < elements.length; i++){
+		element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+		if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+		indices = indices.concat(element);
+	}
 	indices.itemSize = 1;
-	for(var i=0;i<indices.length;i++)indices[i]--; //matlab indices from 1, so decrement.
 	
 	/*Initalize buffers: */
Index: /issm/trunk-jpl/src/m/plot/plot_quiver.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_quiver.js	(revision 20470)
+++ /issm/trunk-jpl/src/m/plot/plot_quiver.js	(revision 20471)
@@ -92,4 +92,7 @@
 		var color = edgecolor;
 		for(var i = 0; i < x.length; i++){
+			//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+			if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) continue;
+			//Scale vertices
 			xyz1 = vec3.fromValues(x[i], y[i], z[i]);
 			magnitude = vec3.length(xyz1) + md.geometry.surface[i] * surfacescale;
Index: /issm/trunk-jpl/src/m/plot/plot_unit.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 20470)
+++ /issm/trunk-jpl/src/m/plot/plot_unit.js	(revision 20471)
@@ -11,5 +11,5 @@
 	var indices = [];
 	var texcoords = [];
-	var rgbcolor = [];
+	var nanindices = {};
 	var xmin,xmax;
 	var ymin,ymax;
@@ -23,5 +23,5 @@
 	var y = meshresults[1]; 
 	var z = meshresults[2]; 
-	var elements = meshresults[3]; 
+	var elements = meshresults[3];
 	var is2d = meshresults[4]; 
 	var isplanet = meshresults[5];
@@ -107,6 +107,13 @@
 				var vertex = vec3.create();
 				var magnitude;
-	
+
 				for(var i = 0; i < x.length; i++){
+					//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+					if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+						nanindices[i] = i;
+						vertices.push.apply(vertices, vertex);
+						continue;
+					}
+					//Scale vertices
 					xyz = vec3.fromValues(x[i], y[i], z[i]);
 					magnitude = vec3.length(xyz) + md.geometry.surface[i] * surfacescale;
@@ -119,7 +126,11 @@
 
 				//linearize the elements array: 
-				indices = indices.concat.apply(indices, elements); 
+				var element;
+				for(var i = 0; i < elements.length; i++){
+					element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+					if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+					indices = indices.concat(element);
+				}
 				indices.itemSize = 1;
-				for(var i=0;i<indices.length;i++)indices[i]--; //matlab indices from 1, so decrement.
 
 			}
@@ -155,4 +166,11 @@
 
 				for(var i = 0; i < x.length; i++){
+					//Check for NaN values and remove from indices array as necessary, but preserve vertex array spacing
+					if (isNaN(x[i]) || isNaN(y[i]) || isNaN(z[i])) {
+						nanindices[i] = i;
+						vertices.push.apply(vertices, vertex);
+						continue;
+					}
+					//Scale vertices
 					xyz = vec3.fromValues(x[i], y[i], z[i]);
 					magnitude = vec3.length(xyz) + md.geometry.surface[i] * surfacescale;
@@ -190,8 +208,12 @@
 				}
 				
-				//linearize the elements array: 
-				indices = indices.concat.apply(indices, elements); 
+				//linearize the elements array:
+				var element;
+				for(var i = 0; i < elements.length; i++){
+					element = [elements[i][0] - 1, elements[i][1] - 1, elements[i][2] - 1];
+					if (element[0] in nanindices || element[1] in nanindices || element[2] in nanindices) continue;
+					indices = indices.concat(element);
+				}
 				indices.itemSize = 1;
-				for(var i=0;i<indices.length;i++)indices[i]--; //matlab indices from 1, so decrement.
 				
 				//Initialize movie loop
Index: /issm/trunk-jpl/src/m/plot/processmesh.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/processmesh.js	(revision 20470)
+++ /issm/trunk-jpl/src/m/plot/processmesh.js	(revision 20471)
@@ -25,16 +25,16 @@
 
 	if (options.getfieldvalue('coord','xy') !== 'latlon'){
-		x=md.mesh.x;
-		if ('x2d' in md.mesh) x2d=md.mesh.x2d;
-		y=md.mesh.y;
-		if ('y2d' in md.mesh) y2d=md.mesh.y2d;
+		x=md.mesh.x.slice();
+		if ('x2d' in md.mesh) x2d=md.mesh.x2d.slice();
+		y=md.mesh.y.slice();
+		if ('y2d' in md.mesh) y2d=md.mesh.y2d.slice();
 	}
 	else{
-		x=md.mesh.long;
-		y=md.mesh.lat;
+		x=md.mesh.long.slice();
+		y=md.mesh.lat.slice();
 	}
 
 	if ('z' in md.mesh){
-		z=md.mesh.z;
+		z=md.mesh.z.slice();
 	}
 	else{
@@ -45,7 +45,8 @@
 		z=md[z];
 	}
-
-	if ('elements2d' in md.mesh) elements2d=md.mesh.elements2d;
-	elements=md.mesh.elements;
+	
+	//TODO: Make deep copy of elements array to prevent unwanted modification of model (slice creates deep copies for primitive types, shallow copies for obejcts)
+	if ('elements2d' in md.mesh) elements2d=md.mesh.elements2d.slice();
+	elements=md.mesh.elements.slice();
 
 	//is it a 2d plot?
