Index: /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp	(revision 12911)
+++ /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp	(revision 12912)
@@ -586,9 +586,9 @@
 /*}}}*/
 /*FUNCTION  KMLFileTokenParse {{{*/
-int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
+int KMLFileTokenParse(double **pdval,int* m,int n,int maxlen,
 					  char* ktag,
 					  FILE* fid){
 
-	int     i=0,j=-1;
+	int     i=-1,j=-1;
 	char*   kstr;
 	char*   ktok;
@@ -600,11 +600,11 @@
 							NULL,NULL)) ||
 		(kstr[0] == '<'))
-		_error2_("KMLFileTokenParse -- Missing double [m x 3] field for " << ktag << ".\n");
-
-	if (!*pdval3)
+		_error2_("KMLFileTokenParse -- Missing double [m x n] field for " << ktag << ".\n");
+
+	if (!*pdval)
 		if (maxlen)
-			*pdval3=(double (*)[3]) xmalloc((maxlen*3)          *sizeof(double));
-		else
-			*pdval3=(double (*)[3]) xmalloc(((strlen(kstr)+1)/2)*sizeof(double));
+			*pdval=(double *) xmalloc((maxlen*n)          *sizeof(double));
+		else
+			*pdval=(double *) xmalloc(((strlen(kstr)+1)/2)*sizeof(double));
 
 /*  loop through string to get all values  */
@@ -612,12 +612,9 @@
 	ktok=strtok(kstr,delim);
 	while (ktok) {
-		j++;
-		if (j == 3) {
-			i++;
-			j=0;
-			if (maxlen && (maxlen < i+1))
-				_error2_("KMLFileTokenParse -- Double [m x 3] field too short for " << ktag << ".\n");
-		}
-		sscanf(ktok,"%lg",&((*pdval3)[i][j]));
+		i++;
+		if (maxlen && (maxlen*n < i+1))
+			_error2_("KMLFileTokenParse -- Double [m x n] field too short for " << ktag << ".\n");
+		j=(j+1) % n;
+		sscanf(ktok,"%lg",&((*pdval)[i]));
 		ktok=strtok(NULL,delim);
 	}
@@ -625,11 +622,11 @@
 
 	if (!maxlen)
-		*pdval3=(double (*)[3]) xrealloc(*pdval3,((i+1)*3)*sizeof(double));
+		*pdval=(double *) xrealloc(*pdval,((i+1)*n)*sizeof(double));
 
 	if (m)
-		*m=i+1;
-
-	if (j != 2)
-		_pprintLine_("KMLFileTokenParse -- Double [m x 3] field for " << ktag << " does not have multiple of 3 values.");
+		*m=((i+1)+(n-1))/n;
+
+	if ((i+1) % n)
+		_pprintLine_("KMLFileTokenParse -- Double [m x n] field for " << ktag << " does not have multiple of n values.");
 
 /*  get additional token and compare to closing tag  */
@@ -647,5 +644,5 @@
 //	_pprintLine_("KMLFileTokenParse -- " << ktag << "=...");
 //	for (j=0; j<=i; j++)
-//		_pprintLine_("   [" << j << "][0-2]: " << (*pdval3)[j][0] << "g," << (*pdval3)[j][1] << "g," << (*pdval3)[j][2] << "g");
+//		_pprintLine_("   [" << j << "]: " << (*pdval)[j] << "g");
 
 	return(0);
Index: /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h	(revision 12911)
+++ /issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h	(revision 12912)
@@ -48,5 +48,5 @@
 					  char* ktag,
 					  FILE* fid);
-int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
+int KMLFileTokenParse(double **pdval,int* m,int n,int maxlen,
 					  char* ktag,
 					  FILE* fid);
Index: /issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp	(revision 12911)
+++ /issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp	(revision 12912)
@@ -150,5 +150,5 @@
 			KMLFileTokenParse(altmode,NULL,KML_LINEARRING_ALTMODE_LENGTH,kstri,fid);
 		else if (!strcmp(kstri,"<coordinates>"))
-			KMLFileTokenParse(&coords,&ncoord,0,kstri,fid);
+			KMLFileTokenParse(&coords,&ncoord,3,0,kstri,fid);
 		else if (!strncmp(kstri,"<",1))
 			KML_Geometry::Read(fid,kstri);
