Index: /issm/trunk/src/c/objects/Options/Option.h
===================================================================
--- /issm/trunk/src/c/objects/Options/Option.h	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/Option.h	(revision 8564)
@@ -48,7 +48,8 @@
 		virtual void  Get(bool* pvalue)=0;
 		virtual void  Get(char** pvalue)=0;
+		virtual void  Get(char*** ppvalue,int *pnumel)=0;
 		virtual void  Get(double** pvalue,int *pnumel)=0;
 		virtual void  Get(Options** pvalue)=0;
-		virtual void  Get(Options*** pvalue,int *pnumel)=0;
+		virtual void  Get(Options*** ppvalue,int *pnumel)=0;
 
 };
Index: /issm/trunk/src/c/objects/Options/OptionCell.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionCell.h	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionCell.h	(revision 8564)
@@ -45,7 +45,8 @@
 		void  Get(bool* pvalue){  _error_("An OptionCell object cannot return a bool");};
 		void  Get(char** pvalue){ _error_("An OptionCell object cannot return a string");};
+		void  Get(char*** ppvalue,int *pnumel){ _error_("An OptionCell object cannot return a string vec");};
 		void  Get(double** pvalue,int *pnumel){ _error_("An OptionCell object cannot return a double vec");};
 		void  Get(Options** pvalue);
-		void  Get(Options*** pvalue,int *pnumel){ _error_("An OptionCell object cannot return an Options DataSet vec");};
+		void  Get(Options*** ppvalue,int *pnumel){ _error_("An OptionCell object cannot return an Options DataSet vec");};
 
 };
Index: /issm/trunk/src/c/objects/Options/OptionChar.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionChar.cpp	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionChar.cpp	(revision 8564)
@@ -72,5 +72,5 @@
 void  OptionChar::DeepEcho(char* indent){
 
-	int   i;
+	int   i,nstr,ipt=0;
 	int*  dims;
 	char  indent2[81];
@@ -85,15 +85,17 @@
 
 	if (values) {
-//		if (numel == 1) {
-		if (1) {
-//			_printf_(flag,"%s        values: \"%s\"\n" ,indent,values[0]);
+		if (ndims == 2 && size[0] == 1) {
 			_printf_(flag,"%s        values: \"%s\"\n" ,indent,values);
 		}
 		else {
+			nstr=size[0];
+			for (i=2; i<ndims; i++) nstr*=size[i];
+
 			dims=(int *) xmalloc(ndims*sizeof(int));
-			for (i=0; i<numel; i++) {
-				RowWiseDimsFromIndex(dims,i,size,ndims);
+			for (i=0; i<nstr; i++) {
+				RowWiseDimsFromIndex(dims,ipt,size,ndims);
 				StringFromDims(cstr,dims,ndims);
-				_printf_(flag,"%s        values%s: \"%s\"\n" ,indent,cstr,values[i]);
+				_printf_(flag,"%s        values%s: \"%.*s\"\n" ,indent,cstr,size[1],&(values[ipt]));
+				ipt+=size[1];
 			}
 			xfree((void**)&dims);
@@ -141,2 +143,33 @@
 }
 /*}}}*/
+/*FUNCTION OptionChar::Get(char*** ppvalue,int *pnumel) {{{1*/
+void OptionChar::Get(char*** ppvalue,int *pnumel){
+
+	char* outstring=NULL;
+	int   stringsize;
+	int   i,nstr,ipt=0;
+
+	/*We should first check that the size is at least one*/
+	if(this->NumEl()<=0){
+		_error_("option \"%s\" is empty and cannot return a string vector",this->name);
+	}
+
+	/*Calculate the size and number of strings*/
+	stringsize=this->size[1]+1;
+	nstr=this->size[0];
+	for (i=2; i<this->ndims; i++) nstr*=this->size[i];
+
+	/*Break concatenated string into individual strings*/
+	*ppvalue=(char **) xmalloc(nstr*sizeof(char *));
+	for (i=0; i<nstr; i++) {
+		outstring=(char*)xmalloc(stringsize*sizeof(char));
+		memcpy(outstring,&(this->values[ipt]),(stringsize-1)*sizeof(char));
+		outstring[stringsize-1]='\0';
+		(*ppvalue)[i]=outstring;
+		ipt+=stringsize-1;
+	}
+
+	/*Assign output pointer*/
+	if(numel) *pnumel=nstr;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/Options/OptionChar.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionChar.h	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionChar.h	(revision 8564)
@@ -45,7 +45,8 @@
 		void  Get(bool* pvalue){  _error_("An OptionChar object cannot return a bool");};
 		void  Get(char** pvalue);
+		void  Get(char*** ppvalue,int *pnumel);
 		void  Get(double** pvalue,int *pnumel){ _error_("An OptionChar object cannot return a double vec");};
 		void  Get(Options** pvalue){ _error_("An OptionChar object cannot return an Options DataSet");};
-		void  Get(Options*** pvalue,int *pnumel){ _error_("An OptionChar object cannot return an Options DataSet vec");};
+		void  Get(Options*** ppvalue,int *pnumel){ _error_("An OptionChar object cannot return an Options DataSet vec");};
 
 };
Index: /issm/trunk/src/c/objects/Options/OptionDouble.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionDouble.h	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionDouble.h	(revision 8564)
@@ -45,7 +45,8 @@
 		void  Get(bool* pvalue){  _error_("An OptionDouble object cannot return a bool");};
 		void  Get(char** pvalue){ _error_("An OptionDouble object cannot return a string");};
+		void  Get(char*** ppvalue,int *pnumel){ _error_("An OptionDouble object cannot return a string vec");};
 		void  Get(double** pvalue,int* pnumel);
 		void  Get(Options** pvalue){ _error_("An OptionDouble object cannot return an Options DataSet");};
-		void  Get(Options*** pvalue,int *pnumel){ _error_("An OptionDouble object cannot return an Options DataSet vec");};
+		void  Get(Options*** ppvalue,int *pnumel){ _error_("An OptionDouble object cannot return an Options DataSet vec");};
 
 };
Index: /issm/trunk/src/c/objects/Options/OptionLogical.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionLogical.h	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionLogical.h	(revision 8564)
@@ -45,7 +45,8 @@
 		void  Get(bool* pvalue);
 		void  Get(char** pvalue){ _error_("An OptionLogical object cannot return a string");};
+		void  Get(char*** ppvalue,int *pnumel){ _error_("An OptionLogical object cannot return a string vec");};
 		void  Get(double** pvalue,int *pnumel){ _error_("An OptionLogical object cannot return a double vec");};
 		void  Get(Options** pvalue){ _error_("An OptionLogical object cannot return an Options DataSet");};
-		void  Get(Options*** pvalue,int *pnumel){ _error_("An OptionLogical object cannot return an Options DataSet vec");};
+		void  Get(Options*** ppvalue,int *pnumel){ _error_("An OptionLogical object cannot return an Options DataSet vec");};
 
 };
Index: /issm/trunk/src/c/objects/Options/OptionStruct.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionStruct.cpp	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionStruct.cpp	(revision 8564)
@@ -138,6 +138,6 @@
 }
 /*}}}*/
-/*FUNCTION OptionStruct::Get(Options*** pvalue,int* numel) {{{1*/
-void OptionStruct::Get(Options*** pvalue,int* numel){
+/*FUNCTION OptionStruct::Get(Options*** ppvalue,int* numel) {{{1*/
+void OptionStruct::Get(Options*** ppvalue,int* numel){
 
 	/*We should first check that the size is at least one*/
@@ -147,5 +147,5 @@
 
 	/*Assign output pointer*/
-	*pvalue=this->values;
+	*ppvalue=this->values;
 	if(numel) *numel=this->NumEl();
 }
Index: /issm/trunk/src/c/objects/Options/OptionStruct.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionStruct.h	(revision 8563)
+++ /issm/trunk/src/c/objects/Options/OptionStruct.h	(revision 8564)
@@ -45,7 +45,8 @@
 		void  Get(bool* pvalue){  _error_("An OptionStruct object cannot return a bool");};
 		void  Get(char** pvalue){ _error_("An OptionStruct object cannot return a string");};
+		void  Get(char*** ppvalue,int *pnumel){ _error_("An OptionStruct object cannot return a string vec");};
 		void  Get(double** pvalue,int *pnumel){ _error_("An OptionStruct object cannot return a double vec");};
 		void  Get(Options** pvalue);
-		void  Get(Options*** pvalue,int *pnumel);
+		void  Get(Options*** ppvalue,int *pnumel);
 
 };
