Index: /issm/trunk/src/c/Makefile.am
===================================================================
--- /issm/trunk/src/c/Makefile.am	(revision 8463)
+++ /issm/trunk/src/c/Makefile.am	(revision 8464)
@@ -91,4 +91,10 @@
 					./objects/KML/KML_Geometry.cpp\
 					./objects/KML/KML_Geometry.h\
+					./objects/KML/KML_GroundOverlay.cpp\
+					./objects/KML/KML_GroundOverlay.h\
+					./objects/KML/KML_Icon.cpp\
+					./objects/KML/KML_Icon.h\
+					./objects/KML/KML_LatLonBox.cpp\
+					./objects/KML/KML_LatLonBox.h\
 					./objects/KML/KML_LinearRing.cpp\
 					./objects/KML/KML_LinearRing.h\
@@ -101,4 +107,6 @@
 					./objects/KML/KML_Object.cpp\
 					./objects/KML/KML_Object.h\
+					./objects/KML/KML_Overlay.cpp\
+					./objects/KML/KML_Overlay.h\
 					./objects/KML/KML_Placemark.cpp\
 					./objects/KML/KML_Placemark.h\
@@ -748,4 +756,10 @@
 					./objects/KML/KML_Geometry.cpp\
 					./objects/KML/KML_Geometry.h\
+					./objects/KML/KML_GroundOverlay.cpp\
+					./objects/KML/KML_GroundOverlay.h\
+					./objects/KML/KML_Icon.cpp\
+					./objects/KML/KML_Icon.h\
+					./objects/KML/KML_LatLonBox.cpp\
+					./objects/KML/KML_LatLonBox.h\
 					./objects/KML/KML_LinearRing.cpp\
 					./objects/KML/KML_LinearRing.h\
@@ -758,4 +772,6 @@
 					./objects/KML/KML_Object.cpp\
 					./objects/KML/KML_Object.h\
+					./objects/KML/KML_Overlay.cpp\
+					./objects/KML/KML_Overlay.h\
 					./objects/KML/KML_Placemark.cpp\
 					./objects/KML/KML_Placemark.h\
Index: /issm/trunk/src/c/objects/KML/KMLFileReadUtils.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KMLFileReadUtils.cpp	(revision 8463)
+++ /issm/trunk/src/c/objects/KML/KMLFileReadUtils.cpp	(revision 8464)
@@ -317,4 +317,37 @@
 
 /*FUNCTION  KMLFileTokenParse {{{1*/
+int KMLFileTokenParse(double* pdval,
+					  char* ktag,
+					  FILE* fid){
+
+	char*   kstr;
+
+/*  get next token and convert to appropriate format  */
+
+	if (!(kstr=KMLFileToken(fid)) ||
+		(kstr[0] == '<'))
+		_error_("KMLFileTokenParse -- Missing integer field for %s.\n",ktag);
+
+	sscanf(kstr,"%lg",pdval);
+	xfree((void**)&kstr);
+
+/*  get additional token and compare to closing tag  */
+
+	if (ktag)
+		if (!(kstr=KMLFileToken(fid)) ||
+			(kstr[0] != '<') ||
+			(kstr[1] != '/') ||
+			(strncmp(&(kstr[2]),&(ktag[1]),strlen(ktag)-1)))
+			_error_("KMLFileTokenParse -- Missing closing tag for %s.\n",ktag);
+		else
+			xfree((void**)&kstr);
+
+//	_printf_(true,"KMLFileTokenParse -- %s=%g.\n",ktag,*pdval);
+
+	return(0);
+}
+/*}}}*/
+
+/*FUNCTION  KMLFileTokenParse {{{1*/
 int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
 					  char* ktag,
Index: /issm/trunk/src/c/objects/KML/KMLFileReadUtils.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KMLFileReadUtils.h	(revision 8463)
+++ /issm/trunk/src/c/objects/KML/KMLFileReadUtils.h	(revision 8464)
@@ -21,8 +21,8 @@
 void KMLFileTagAttrib(KML_Object* kobj,
 					  char* ktag);
-int KMLFileTokenParse(int* pint,
+int KMLFileTokenParse(int* pival,
 					  char* ktag,
 					  FILE* fid);
-int KMLFileTokenParse(bool* pbool,
+int KMLFileTokenParse(bool* pbval,
 					  char* ktag,
 					  FILE* fid);
@@ -30,8 +30,11 @@
 					  char* ktag,
 					  FILE* fid);
-int KMLFileTokenParse(float* pfl,
+int KMLFileTokenParse(float* pfval,
 					  char* ktag,
 					  FILE* fid);
-int KMLFileTokenParse(double (**pdoub3)[3],int* m,int maxlen,
+int KMLFileTokenParse(double* pdval,
+					  char* ktag,
+					  FILE* fid);
+int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
 					  char* ktag,
 					  FILE* fid);
Index: /issm/trunk/src/c/objects/KML/KML_Container.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Container.cpp	(revision 8463)
+++ /issm/trunk/src/c/objects/KML/KML_Container.cpp	(revision 8464)
@@ -132,5 +132,5 @@
 	}
 
-	else if (!strncmp(kstr,"<Folder",7)) {
+	else if (!strncmp(kstr,"<Folder", 7)) {
 		kobj=(KML_Object*)new KML_Folder();
 		kobj->Read(fid,kstr);
@@ -138,6 +138,12 @@
 	}
 
-	else if (!strncmp(kstr,"<Document",9)) {
+	else if (!strncmp(kstr,"<Document", 9)) {
 		kobj=(KML_Object*)new KML_Document();
+		kobj->Read(fid,kstr);
+		feature   ->AddObject((Object*)kobj);
+	}
+
+	else if (!strncmp(kstr,"<GroundOverlay",14)) {
+		kobj=(KML_Object*)new KML_GroundOverlay();
 		kobj->Read(fid,kstr);
 		feature   ->AddObject((Object*)kobj);
Index: /issm/trunk/src/c/objects/KML/KML_GroundOverlay.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_GroundOverlay.cpp	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_GroundOverlay.cpp	(revision 8464)
@@ -0,0 +1,162 @@
+/*!\file KML_GroundOverlay.cpp
+ * \brief: implementation of the kml_groundoverlay object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION KML_GroundOverlay::KML_GroundOverlay(){{{1*/
+KML_GroundOverlay::KML_GroundOverlay(){
+
+	altitude  = 0.;
+	strcpy(altmode   ,"clampToGround");
+	llbox     =NULL;
+
+}
+/*}}}*/
+/*FUNCTION KML_GroundOverlay::~KML_GroundOverlay(){{{1*/
+KML_GroundOverlay::~KML_GroundOverlay(){
+
+	if (llbox) {
+		delete llbox;
+		llbox     =NULL;
+	}
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION KML_GroundOverlay::Echo {{{1*/
+void  KML_GroundOverlay::Echo(){
+
+	bool  flag=true;
+
+	_printf_(flag,"KML_GroundOverlay:\n");
+	KML_Overlay::Echo();
+
+	_printf_(flag,"      altitude: %0.16g\n"      ,altitude);
+	_printf_(flag,"       altmode: \"%s\"\n"      ,altmode);
+	_printf_(flag,"         llbox: %p\n"          ,llbox);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_GroundOverlay::DeepEcho {{{1*/
+void  KML_GroundOverlay::DeepEcho(){
+
+	char  indent[81]="";
+
+	KML_GroundOverlay::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_GroundOverlay::DeepEcho {{{1*/
+void  KML_GroundOverlay::DeepEcho(char* indent){
+
+	char  indent2[81];
+	bool  flag=true;
+
+	_printf_(flag,"%sKML_GroundOverlay:\n",indent);
+	KML_Overlay::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	_printf_(flag,"%s      altitude: %0.16g\n"      ,indent,altitude);
+	_printf_(flag,"%s       altmode: \"%s\"\n"      ,indent,altmode);
+	if (llbox)
+		llbox->DeepEcho(indent2);
+	else
+		_printf_(flag,"%s         llbox: %p\n"          ,indent,llbox);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_GroundOverlay::Write {{{1*/
+void  KML_GroundOverlay::Write(FILE* filout,char* indent){
+
+	char  indent2[81];
+
+	fprintf(filout,"%s<GroundOverlay",indent);
+	WriteAttrib(filout," ");
+	fprintf(filout,">\n");
+
+	KML_Overlay::Write(filout,indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	fprintf(filout,"%s  <altitude>%0.16g</altitude>\n",indent,altitude);
+	fprintf(filout,"%s  <altitudeMode>%s</altitudeMode>\n",indent,altmode);
+	if (llbox)
+		llbox->Write(filout,indent2);
+
+	fprintf(filout,"%s</GroundOverlay>\n",indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_GroundOverlay::Read {{{1*/
+void  KML_GroundOverlay::Read(FILE* fid,char* kstr){
+
+	char*        kstri;
+
+/*  get object attributes  */
+
+	KMLFileTagAttrib(this,
+					 kstr);
+
+/*  loop over and process fields within opening and closing tags  */
+
+	while (kstri=KMLFileToken(fid)) {
+		if      (!strncmp(kstri,"</GroundOverlay",15)) {
+			xfree((void**)&kstri);
+			break;
+		}
+		else if (!strncmp(kstri,"</",2))
+			_error_("KML_GroundOverlay::Read -- Unexpected closing tag %s.\n",kstri);
+		else if (strncmp(kstri,"<",1))
+			_error_("KML_GroundOverlay::Read -- Unexpected field \"%s\".\n",kstri);
+
+		else if (!strcmp(kstri,"<altitude>"))
+			KMLFileTokenParse(&altitude  ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<altitudeMode>"))
+			KMLFileTokenParse( altmode   ,NULL,KML_GROUNDOVERLAY_ALTMODE_LENGTH,
+							  kstri,
+							  fid);
+		else if (!strncmp(kstri,"<LatLonBox",10)) {
+			llbox     =new KML_LatLonBox();
+			llbox     ->Read(fid,kstri);
+		}
+
+		else if (!strncmp(kstri,"<",1))
+			KML_Overlay::Read(fid,kstri);
+
+		xfree((void**)&kstri);
+	}
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_GroundOverlay.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_GroundOverlay.h	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_GroundOverlay.h	(revision 8464)
@@ -0,0 +1,49 @@
+/*! \file KML_GroundOverlay.h 
+ *  \brief: header file for kml_groundoverlay object
+ */
+
+#ifndef _KML_GROUNDOVERLAY_H_
+#define _KML_GROUNDOVERLAY_H_
+
+#define KML_GROUNDOVERLAY_ALTMODE_LENGTH    18
+
+/*Headers:*/
+/*{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./KML_Overlay.h"
+class KML_LatLonBox;
+/*}}}*/
+
+class KML_GroundOverlay: public KML_Overlay {
+
+	public:
+
+		double altitude;
+		char  altmode[KML_GROUNDOVERLAY_ALTMODE_LENGTH+1];
+		KML_LatLonBox* llbox;
+
+		/*KML_GroundOverlay constructors, destructors {{{1*/
+		KML_GroundOverlay();
+		~KML_GroundOverlay();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		void  Write(FILE* fid,char* indent);
+		void  Read(FILE* fid,char* kstr);
+		int   Id(){_error_("Not implemented yet.");};
+		int   MyRank(){_error_("Not implemented yet.");};
+		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   MarshallSize(){_error_("Not implemented yet.");};
+		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   Enum(){_error_("Not implemented yet.");};
+		Object* copy(){_error_("Not implemented yet.");};
+		/*}}}*/
+
+};
+#endif  /* _KML_GROUNDOVERLAY_H */
+
Index: /issm/trunk/src/c/objects/KML/KML_Icon.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Icon.cpp	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_Icon.cpp	(revision 8464)
@@ -0,0 +1,191 @@
+/*!\file KML_Icon.cpp
+ * \brief: implementation of the kml_feature abstract object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION KML_Icon::KML_Icon(){{{1*/
+KML_Icon::KML_Icon(){
+
+	strcpy(href      ,"");
+	strcpy(refmode   ,"onChange");
+	refint    = 4.;
+	strcpy(vrefmode  ,"never");
+	vreftime  = 4.;
+	vboundsc  = 1.;
+	strcpy(vformat   ,"");
+	strcpy(hquery    ,"");
+
+}
+/*}}}*/
+/*FUNCTION KML_Icon::~KML_Icon(){{{1*/
+KML_Icon::~KML_Icon(){
+
+	;
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION KML_Icon::Echo {{{1*/
+void  KML_Icon::Echo(){
+
+	bool  flag=true;
+
+	_printf_(flag,"KML_Icon:\n");
+	KML_Object::Echo();
+
+	_printf_(flag,"          href: \"%s\"\n"    ,href);
+	_printf_(flag,"       refmode: \"%s\"\n"    ,refmode);
+	_printf_(flag,"        refint: %g\n"        ,refint);
+	_printf_(flag,"      vrefmode: \"%s\"\n"    ,vrefmode);
+	_printf_(flag,"      vreftime: %g\n"        ,vreftime);
+	_printf_(flag,"      vboundsc: %g\n"        ,vboundsc);
+	_printf_(flag,"       vformat: \"%s\"\n"    ,vformat);
+	_printf_(flag,"        hquery: \"%s\"\n"    ,hquery);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Icon::DeepEcho {{{1*/
+void  KML_Icon::DeepEcho(){
+
+	char  indent[81]="";
+
+	KML_Icon::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Icon::DeepEcho {{{1*/
+void  KML_Icon::DeepEcho(char* indent){
+
+	bool  flag=true;
+
+	_printf_(flag,"%sKML_Icon:\n",indent);
+	KML_Object::DeepEcho(indent);
+
+	_printf_(flag,"%s          href: \"%s\"\n"    ,indent,href);
+	_printf_(flag,"%s       refmode: \"%s\"\n"    ,indent,refmode);
+	_printf_(flag,"%s        refint: %g\n"        ,indent,refint);
+	_printf_(flag,"%s      vrefmode: \"%s\"\n"    ,indent,vrefmode);
+	_printf_(flag,"%s      vreftime: %g\n"        ,indent,vreftime);
+	_printf_(flag,"%s      vboundsc: %g\n"        ,indent,vboundsc);
+	_printf_(flag,"%s       vformat: \"%s\"\n"    ,indent,vformat);
+	_printf_(flag,"%s        hquery: \"%s\"\n"    ,indent,hquery);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Icon::Write {{{1*/
+void  KML_Icon::Write(FILE* filout,char* indent){
+
+	fprintf(filout,"%s<Icon",indent);
+	WriteAttrib(filout," ");
+	fprintf(filout,">\n");
+
+	KML_Object::Write(filout,indent);
+
+	if (href     && strlen(href))
+		fprintf(filout,"%s  <href>%s</href>\n",indent,href);
+	if (refmode  && strlen(refmode))
+		fprintf(filout,"%s  <refreshMode>%s</refreshMode>\n",indent,refmode);
+	fprintf(filout,"%s  <refreshInterval>%g</refreshInterval>\n",indent,refint);
+	if (vrefmode && strlen(vrefmode))
+		fprintf(filout,"%s  <viewRefreshMode>%s</viewRefreshMode>\n",indent,vrefmode);
+	fprintf(filout,"%s  <viewRefreshTime>%g</viewRefreshTime>\n",indent,vreftime);
+	fprintf(filout,"%s  <viewBoundScale>%g</viewBoundScale>\n",indent,vboundsc);
+	if (vformat  && strlen(vformat))
+		fprintf(filout,"%s  <viewFormat>%s</viewFormat>\n",indent,vformat);
+	if (hquery   && strlen(hquery))
+		fprintf(filout,"%s  <httpQuery>%s</httpQuery>\n",indent,hquery);
+
+	fprintf(filout,"%s</Icon>\n",indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Icon::Read {{{1*/
+void  KML_Icon::Read(FILE* fid,char* kstr){
+
+	char*        kstri;
+
+/*  get object attributes  */
+
+	KMLFileTagAttrib(this,
+					 kstr);
+
+/*  loop over and process fields within opening and closing tags  */
+
+	while (kstri=KMLFileToken(fid)) {
+		if      (!strncmp(kstri,"</Icon", 6)) {
+			xfree((void**)&kstri);
+			break;
+		}
+		else if (!strncmp(kstri,"</",2))
+			_error_("KML_Icon::Read -- Unexpected closing tag %s.\n",kstri);
+		else if (strncmp(kstri,"<",1))
+			_error_("KML_Icon::Read -- Unexpected field \"%s\".\n",kstri);
+
+		else if (!strcmp(kstri,"<href>"))
+			KMLFileTokenParse( href      ,NULL,KML_ICON_HREF_LENGTH,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<refreshMode>"))
+			KMLFileTokenParse( refmode   ,NULL,KML_ICON_REFMODE_LENGTH,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<refreshInterval>"))
+			KMLFileTokenParse(&refint    ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<viewRefreshMode>"))
+			KMLFileTokenParse( vrefmode  ,NULL,KML_ICON_VREFMODE_LENGTH,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<viewRefreshTime>"))
+			KMLFileTokenParse(&vreftime  ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<viewBoundScale>"))
+			KMLFileTokenParse(&vboundsc  ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<viewFormat>"))
+			KMLFileTokenParse( vformat   ,NULL,KML_ICON_VFORMAT_LENGTH,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<httpQuery>"))
+			KMLFileTokenParse( hquery    ,NULL,KML_ICON_HQUERY_LENGTH,
+							  kstri,
+							  fid);
+
+		else if (!strncmp(kstri,"<",1))
+			KML_Object::Read(fid,kstri);
+
+		xfree((void**)&kstri);
+	}
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_Icon.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Icon.h	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_Icon.h	(revision 8464)
@@ -0,0 +1,57 @@
+/*! \file KML_Icon.h 
+ *  \brief: header file for kml_icon object
+ */
+
+#ifndef _KML_ICON_H_
+#define _KML_ICON_H_
+
+#define KML_ICON_HREF_LENGTH      800
+#define KML_ICON_REFMODE_LENGTH    10
+#define KML_ICON_VREFMODE_LENGTH    9
+#define KML_ICON_VFORMAT_LENGTH   800
+#define KML_ICON_HQUERY_LENGTH    800
+
+/*Headers:*/
+/*{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./KML_Object.h"
+/*}}}*/
+
+class KML_Icon: public KML_Object {
+
+	public:
+
+		char  href[KML_ICON_HREF_LENGTH+1];
+		char  refmode[KML_ICON_REFMODE_LENGTH+1];
+		float refint;
+		char  vrefmode[KML_ICON_VREFMODE_LENGTH+1];
+		float vreftime;
+		float vboundsc;
+		char  vformat[KML_ICON_VFORMAT_LENGTH+1];
+		char  hquery[KML_ICON_HQUERY_LENGTH+1];
+
+		/*KML_Icon constructors, destructors {{{1*/
+		KML_Icon();
+		~KML_Icon();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		void  Write(FILE* fid,char* indent);
+		void  Read(FILE* fid,char* kstr);
+		int   Id(){_error_("Not implemented yet.");};
+		int   MyRank(){_error_("Not implemented yet.");};
+		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   MarshallSize(){_error_("Not implemented yet.");};
+		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   Enum(){_error_("Not implemented yet.");};
+		Object* copy(){_error_("Not implemented yet.");};
+		/*}}}*/
+
+};
+#endif  /* _KML_ICON_H */
+
Index: /issm/trunk/src/c/objects/KML/KML_LatLonBox.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LatLonBox.cpp	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_LatLonBox.cpp	(revision 8464)
@@ -0,0 +1,162 @@
+/*!\file KML_LatLonBox.cpp
+ * \brief: implementation of the kml_feature abstract object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION KML_LatLonBox::KML_LatLonBox(){{{1*/
+KML_LatLonBox::KML_LatLonBox(){
+
+	north     = 0.;
+	south     = 0.;
+	east      = 0.;
+	west      = 0.;
+	rotation  = 0.;
+
+}
+/*}}}*/
+/*FUNCTION KML_LatLonBox::~KML_LatLonBox(){{{1*/
+KML_LatLonBox::~KML_LatLonBox(){
+
+	;
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION KML_LatLonBox::Echo {{{1*/
+void  KML_LatLonBox::Echo(){
+
+	bool  flag=true;
+
+	_printf_(flag,"KML_LatLonBox:\n");
+	KML_Object::Echo();
+
+	_printf_(flag,"         north: %0.16g\n"    ,north);
+	_printf_(flag,"         south: %0.16g\n"    ,south);
+	_printf_(flag,"          east: %0.16g\n"    ,east);
+	_printf_(flag,"          west: %0.16g\n"    ,west);
+	_printf_(flag,"      rotation: %0.16g\n"    ,rotation);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_LatLonBox::DeepEcho {{{1*/
+void  KML_LatLonBox::DeepEcho(){
+
+	char  indent[81]="";
+
+	KML_LatLonBox::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_LatLonBox::DeepEcho {{{1*/
+void  KML_LatLonBox::DeepEcho(char* indent){
+
+	bool  flag=true;
+
+	_printf_(flag,"%sKML_LatLonBox:\n",indent);
+	KML_Object::DeepEcho(indent);
+
+	_printf_(flag,"%s         north: %0.16g\n"    ,indent,north);
+	_printf_(flag,"%s         south: %0.16g\n"    ,indent,south);
+	_printf_(flag,"%s          east: %0.16g\n"    ,indent,east);
+	_printf_(flag,"%s          west: %0.16g\n"    ,indent,west);
+	_printf_(flag,"%s      rotation: %0.16g\n"    ,indent,rotation);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_LatLonBox::Write {{{1*/
+void  KML_LatLonBox::Write(FILE* filout,char* indent){
+
+	fprintf(filout,"%s<LatLonBox",indent);
+	WriteAttrib(filout," ");
+	fprintf(filout,">\n");
+
+	KML_Object::Write(filout,indent);
+
+	fprintf(filout,"%s  <north>%0.16g</north>\n",indent,north);
+	fprintf(filout,"%s  <south>%0.16g</south>\n",indent,south);
+	fprintf(filout,"%s  <east>%0.16g</east>\n",indent,east);
+	fprintf(filout,"%s  <west>%0.16g</west>\n",indent,west);
+	fprintf(filout,"%s  <rotation>%0.16g</rotation>\n",indent,rotation);
+
+	fprintf(filout,"%s</LatLonBox>\n",indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_LatLonBox::Read {{{1*/
+void  KML_LatLonBox::Read(FILE* fid,char* kstr){
+
+	char*        kstri;
+
+/*  get object attributes  */
+
+	KMLFileTagAttrib(this,
+					 kstr);
+
+/*  loop over and process fields within opening and closing tags  */
+
+	while (kstri=KMLFileToken(fid)) {
+		if      (!strncmp(kstri,"</LatLonBox",11)) {
+			xfree((void**)&kstri);
+			break;
+		}
+		else if (!strncmp(kstri,"</",2))
+			_error_("KML_LatLonBox::Read -- Unexpected closing tag %s.\n",kstri);
+		else if (strncmp(kstri,"<",1))
+			_error_("KML_LatLonBox::Read -- Unexpected field \"%s\".\n",kstri);
+
+		else if (!strcmp(kstri,"<north>"))
+			KMLFileTokenParse(&north     ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<south>"))
+			KMLFileTokenParse(&south     ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<east>"))
+			KMLFileTokenParse(&east      ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<west>"))
+			KMLFileTokenParse(&west      ,
+							  kstri,
+							  fid);
+		else if (!strcmp(kstri,"<rotation>"))
+			KMLFileTokenParse(&rotation  ,
+							  kstri,
+							  fid);
+
+		else if (!strncmp(kstri,"<",1))
+			KML_Object::Read(fid,kstri);
+
+		xfree((void**)&kstri);
+	}
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_LatLonBox.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_LatLonBox.h	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_LatLonBox.h	(revision 8464)
@@ -0,0 +1,48 @@
+/*! \file KML_LatLonBox.h 
+ *  \brief: header file for kml_latlonbox object
+ */
+
+#ifndef _KML_LATLONBOX_H_
+#define _KML_LATLONBOX_H_
+
+/*Headers:*/
+/*{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./KML_Object.h"
+/*}}}*/
+
+class KML_LatLonBox: public KML_Object {
+
+	public:
+
+		double north;
+		double south;
+		double east;
+		double west;
+		double rotation;
+
+		/*KML_LatLonBox constructors, destructors {{{1*/
+		KML_LatLonBox();
+		~KML_LatLonBox();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		void  Write(FILE* fid,char* indent);
+		void  Read(FILE* fid,char* kstr);
+		int   Id(){_error_("Not implemented yet.");};
+		int   MyRank(){_error_("Not implemented yet.");};
+		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   MarshallSize(){_error_("Not implemented yet.");};
+		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   Enum(){_error_("Not implemented yet.");};
+		Object* copy(){_error_("Not implemented yet.");};
+		/*}}}*/
+
+};
+#endif  /* _KML_LATLONBOX_H */
+
Index: /issm/trunk/src/c/objects/KML/KML_Overlay.cpp
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Overlay.cpp	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_Overlay.cpp	(revision 8464)
@@ -0,0 +1,144 @@
+/*!\file KML_Overlay.cpp
+ * \brief: implementation of the kml_container abstract object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION KML_Overlay::KML_Overlay(){{{1*/
+KML_Overlay::KML_Overlay(){
+
+	strcpy(color     ,"ffffffff");
+	draword   = 0;
+	icon      =NULL;
+
+}
+/*}}}*/
+/*FUNCTION KML_Overlay::~KML_Overlay(){{{1*/
+KML_Overlay::~KML_Overlay(){
+
+	if (icon) {
+		delete icon;
+		icon      =NULL;
+	}
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION KML_Overlay::Echo {{{1*/
+void  KML_Overlay::Echo(){
+
+	bool  flag=true;
+
+	KML_Feature::Echo();
+
+	_printf_(flag,"         color: \"%s\"\n" ,color);
+	_printf_(flag,"       draword: %d\n"     ,draword);
+	_printf_(flag,"          icon: %p\n"     ,icon);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Overlay::DeepEcho {{{1*/
+void  KML_Overlay::DeepEcho(){
+
+	char  indent[81]="";
+
+	KML_Overlay::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Overlay::DeepEcho {{{1*/
+void  KML_Overlay::DeepEcho(char* indent){
+
+	char  indent2[81];
+	bool  flag=true;
+
+	KML_Feature::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	_printf_(flag,"%s         color: %s\n"          ,indent,color);
+	_printf_(flag,"%s       draword: %d\n"          ,indent,draword);
+	if (icon)
+		icon->DeepEcho(indent2);
+	else
+		_printf_(flag,"%s          icon: %p\n"          ,indent,icon);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Overlay::Write {{{1*/
+void  KML_Overlay::Write(FILE* filout,char* indent){
+
+	char  indent2[81];
+
+	KML_Feature::Write(filout,indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	if (color     && strlen(color))
+		fprintf(filout,"%s  <color>%s</color>\n",indent,color);
+	fprintf(filout,"%s  <drawOrder>%d</drawOrder>\n",indent,draword);
+	if (icon)
+		icon->Write(filout,indent2);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION KML_Overlay::Read {{{1*/
+void  KML_Overlay::Read(FILE* fid,char* kstr){
+
+/*  process field within opening and closing tags  */
+
+	if      (!strncmp(kstr,"</Overlay", 9)) {
+		xfree((void**)&kstr);
+		return;
+	}
+	else if (!strncmp(kstr,"</",2))
+		_error_("KML_Overlay::Read -- Unexpected closing tag %s.\n",kstr);
+	else if (strncmp(kstr,"<",1))
+		_error_("KML_Overlay::Read -- Unexpected field \"%s\".\n",kstr);
+
+	else if (!strcmp(kstr,"<color>"))
+		KMLFileTokenParse( color     ,NULL,KML_OVERLAY_COLOR_LENGTH,
+						  kstr,
+						  fid);
+	else if (!strcmp(kstr,"<drawOrder>"))
+		KMLFileTokenParse(&draword   ,
+						  kstr,
+						  fid);
+	else if (!strncmp(kstr,"<Icon", 5)) {
+		icon      =new KML_Icon();
+		icon      ->Read(fid,kstr);
+	}
+
+	else if (!strncmp(kstr,"<",1))
+		KML_Feature::Read(fid,kstr);
+
+	return;
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/KML/KML_Overlay.h
===================================================================
--- /issm/trunk/src/c/objects/KML/KML_Overlay.h	(revision 8464)
+++ /issm/trunk/src/c/objects/KML/KML_Overlay.h	(revision 8464)
@@ -0,0 +1,49 @@
+/*! \file KML_Overlay.h 
+ *  \brief: header file for kml_overlay abstract object
+ */
+
+#ifndef _KML_OVERLAY_H_
+#define _KML_OVERLAY_H_
+
+#define KML_OVERLAY_COLOR_LENGTH  8
+
+/*Headers:*/
+/*{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./KML_Feature.h"
+class KML_Icon;
+/*}}}*/
+
+class KML_Overlay: public KML_Feature {
+
+	public:
+
+		char  color[KML_OVERLAY_COLOR_LENGTH+1];
+		int   draword;
+		KML_Icon* icon;
+
+		/*KML_Overlay constructors, destructors {{{1*/
+		KML_Overlay();
+		~KML_Overlay();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		void  Write(FILE* fid,char* indent);
+		void  Read(FILE* fid,char* kstr);
+		int   Id(){_error_("Not implemented yet.");};
+		int   MyRank(){_error_("Not implemented yet.");};
+		void  Marshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   MarshallSize(){_error_("Not implemented yet.");};
+		void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet.");};
+		int   Enum(){_error_("Not implemented yet.");};
+		Object* copy(){_error_("Not implemented yet.");};
+		/*}}}*/
+
+};
+#endif  /* _KML_OVERLAY_H */
+
Index: /issm/trunk/src/c/objects/objects.h
===================================================================
--- /issm/trunk/src/c/objects/objects.h	(revision 8463)
+++ /issm/trunk/src/c/objects/objects.h	(revision 8464)
@@ -52,4 +52,7 @@
 #include "./KML/KML_Folder.h"
 #include "./KML/KML_Geometry.h"
+#include "./KML/KML_GroundOverlay.h"
+#include "./KML/KML_Icon.h"
+#include "./KML/KML_LatLonBox.h"
 #include "./KML/KML_LinearRing.h"
 #include "./KML/KML_LineString.h"
@@ -57,4 +60,5 @@
 #include "./KML/KML_MultiGeometry.h"
 #include "./KML/KML_Object.h"
+#include "./KML/KML_Overlay.h"
 #include "./KML/KML_Placemark.h"
 #include "./KML/KML_Polygon.h"
