diff --git a/OculusMobile/NOMADGearvrT/Projects/Android/jni/Android.mk b/OculusMobile/NOMADGearvrT/Projects/Android/jni/Android.mk
index 8ea09a2e6431ef1b036c6b453fb26f9010de88a9..80cbfab6bc0c71b2bfe987a8134745fcdd57d37c 100644
--- a/OculusMobile/NOMADGearvrT/Projects/Android/jni/Android.mk
+++ b/OculusMobile/NOMADGearvrT/Projects/Android/jni/Android.mk
@@ -6,7 +6,9 @@ include ../../../../../cflags.mk
 
 LOCAL_MODULE			:= ovrapp
 LOCAL_SRC_FILES			:= ../../../Src/OvrApp.cpp ../../../Src/rply/rply.c \
-	../../../Src/NOMADVRLib/ConfigFile.cpp ../../../Src/NOMADVRLib/atoms.cpp \
+	../../../Src/NOMADVRLib/ConfigFile.cpp \
+	../../../Src/NOMADVRLib/ConfigFileAtoms.cpp \
+	../../../Src/NOMADVRLib/atoms.cpp \
 	../../../Src/happyhttp/happyhttp.cpp \
 	../../../Src/NOMADVRLib/atomsGL.cpp \
 	../../../Src/NOMADVRLib/CompileGLShader.cpp \
diff --git a/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/Filepath.java b/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/Filepath.java
index 4645f287a63ed1c2c0ba3901574b7e00da3ece73..18c23d14bf932d1f06ec22ab675fc8a832ab6eba 100644
--- a/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/Filepath.java
+++ b/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/Filepath.java
@@ -1,3 +1,22 @@
+/*Uses code from Stackoverflow which uses the MIT license and the CC BY-SA 3.0*/
+/*These licenses are compatible with Apache 2.0*/
+
+/*
+# Copyright 2016-2018 The NOMAD Developers Group
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ #     http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+*/
+
 package oculus;
 //This file is the same, except for the package above, as 
 //NOMADgvrT\src\main\java\com\google\vr\ndk\samples\treasurehunt\Filepath.java
diff --git a/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/MainActivity.java b/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/MainActivity.java
index 72cd062f7559a0412d0a6a1cfc842d390bde29f8..a7caf9276d23c74cd3865685a7001d53b9086bbf 100644
--- a/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/MainActivity.java
+++ b/OculusMobile/NOMADGearvrT/Projects/Android/src/oculus/MainActivity.java
@@ -15,6 +15,7 @@ import android.os.Bundle;
 import android.util.Log;
 import android.content.Intent;
 import com.oculus.vrappframework.VrActivity;
+import com.lrz.NOMADGearvrT.R;
 
 public class MainActivity extends VrActivity {
 	public static final String TAG = "NOMADGearvrT";
@@ -82,9 +83,53 @@ public static void verifyStoragePermissions(android.app.Activity activity) {
         }
     }	
 	*/
+	
+	private void SaveToDisk (java.io.InputStream is, java.lang.String name)
+	{ //https://stackoverflow.com/questions/10854211/android-store-inputstream-in-file
+	try {
+		try {
+			java.io.File f=new java.io.File(name);
+			java.io.OutputStream output = new java.io.FileOutputStream(f);
+			try {
+				byte[] buffer = new byte[4 * 1024]; // or other buffer size
+				int read;
+
+				while ((read = is.read(buffer)) != -1) {
+					output.write(buffer, 0, read);
+				}
+
+			output.flush();
+			} finally {
+			output.close();
+			}
+		} finally {
+			is.close();
+		}
+	} catch (java.io.IOException e) {
+			android.util.Log.d("NOMADgvrT","java.io.IOException, e="+e);
+	}
+	}
+	
     @Override
     protected void onCreate(Bundle savedInstanceState) {
 		
+		//export example file
+		java.io.File d= new java.io.File ("/sdcard/Oculus/NomadGearVR");
+		try{
+			if (!d.exists()) {
+				d.mkdir();
+			}
+		} 
+		catch(java.lang.SecurityException e){
+			android.util.Log.d("NOMADgvrT","java.lang.SecurityException, e="+e);
+		} 
+		java.io.InputStream is=this.getApplicationContext().getResources().
+			openRawResource (com.lrz.NOMADGearvrT.R.raw.xyz);
+		SaveToDisk(is, "/sdcard/Oculus/NomadGearVR/cytosine.xyz");
+		is=this.getApplicationContext().getResources().openRawResource (com.lrz.NOMADGearvrT.R.raw.ncfg);
+		SaveToDisk(is, "/sdcard/Oculus/NomadGearVR/cytosine.ncfg");
+		//end export
+		
         super.onCreate(savedInstanceState);
 		
 		verifyStoragePermissions(this);
@@ -98,9 +143,10 @@ public static void verifyStoragePermissions(android.app.Activity activity) {
 			uriString=Filepath.getFilePath (this.getApplicationContext(), u);
 		} catch (java.net.URISyntaxException e) {
 		android.util.Log.d("NOMADgvrT","URISyntaxException, e="+e);
-		uriString=null;
+		uriString="/sdcard/Oculus/NomadGearVR/cytosine.ncfg";
 		}
 
+		android.util.Log.d("NOMADgvrT","Uristring is="+uriString);
 		setAppPtr( nativeSetAppInterface( this, fromPackageNameString, commandString, uriString ) );
     }   
 }
diff --git a/OculusMobile/NOMADGearvrT/Src/OvrApp.cpp b/OculusMobile/NOMADGearvrT/Src/OvrApp.cpp
index a0e1935d5d9cef9618c41f113907e5d2e92d5522..a6c04ce2ca604d81741d2594cceb3df1d8383c37 100644
--- a/OculusMobile/NOMADGearvrT/Src/OvrApp.cpp
+++ b/OculusMobile/NOMADGearvrT/Src/OvrApp.cpp
@@ -115,12 +115,12 @@ void OvrApp::OneTimeInit( const char * fromPackage, const char * launchIntentJSO
 	//}
 	
 	const char *configLocation="/sdcard/NOMAD/NOMADGearVR.cfg";
-	const char *defaultURI="/sdcard/Oculus/NOMAD/ViveTDefault.ncfg";
+	const char *defaultURI="/sdcard/Oculus/NomadGearVR/cytosine.ncfg";
 
 	char finalURI[1024];
 	FILE *cl = fopen (configLocation, "r");
 	if (cl==nullptr) {
-		LOG("NOMADGearVRT, /sdcard/NOMAD/NOMADGearVR.cfg not found, using default at /sdcard/Oculus/NOMAD/ViveTDefault.ncfg");
+		LOG("NOMADGearVRT, /sdcard/NOMAD/NOMADGearVR.cfg not found, using default at /sdcard/Oculus/NomadGearVR/cytosine.ncfg");
 		strcpy(finalURI, defaultURI);
 	} else {
         fgets(finalURI, 1024, cl);
@@ -175,14 +175,14 @@ void OvrApp::OneTimeInit( const char * fromPackage, const char * launchIntentJSO
 		LOG("NOMADGearVRT No atom glyph specified, using Icosahedron");
 		solid=new Solid(Solid::Type::Icosahedron);
 	}
-	LOG("OneTimeInit, 2");
+//	LOG("OneTimeInit, 2");
 	const ovrJava * java = app->GetJava();
 	SoundEffectContext = new ovrSoundEffectContext( *java->Env, java->ActivityObject );
 	SoundEffectContext->Initialize();
 	SoundEffectPlayer = new OvrGuiSys::ovrDummySoundEffectPlayer();
-LOG("OneTimeInit, 3");
+//LOG("OneTimeInit, 3");
 	Locale = ovrLocale::Create( *app, "default" );
-LOG("OneTimeInit, 4");
+//LOG("OneTimeInit, 4");
 	String fontName;
 	GetLocale().GetString( "@string/font_name", "efigs.fnt", fontName );
 	GuiSys->Init( this->app, *SoundEffectPlayer, fontName.ToCStr(), &app->GetDebugLines() );
@@ -232,9 +232,16 @@ LOG("OneTimeInit, 4");
 	if (e!=GL_NO_ERROR)
 		eprintf ("SetupUnitCell error %d", e);
 
-	if (ISOS) {
-		PrepareISOShader(&ISOP, &ISOMatrixLoc);
+    e=SetupMarkerNoTess(&MarkerVAO, &MarkerVertBuffer, &MarkerIndexBuffer);
+    if (e!=GL_NO_ERROR) {
+        eprintf ("SetupMarkerNoTess error %d", e);
+    }
+
+    if (ISOS || markers) {
+        PrepareISOShader(&ISOP, &ISOMatrixLoc);
+    }
 
+    if (ISOS) {
         float m=BACKGROUND[0];
         m=std::max(m, BACKGROUND[1]);
         m=std::max(m, BACKGROUND[2]);
@@ -469,11 +476,44 @@ void OvrApp::RenderIsos(const OVR::Matrix4f eyeViewProjection, int iso) {
     glBindVertexArray(0);
 }
 
+void OvrApp::RenderMarker(const float *m) //m[16]
+{
+int e;
+if (!markers)
+    return;
 
+glEnable(GL_BLEND);
+glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+glBindVertexArray(MarkerVAO);
+if ((e = glGetError()) != GL_NO_ERROR)
+    eprintf("b %d", e);
+glUseProgram(ISOP);
+if ((e = glGetError()) != GL_NO_ERROR)
+    eprintf("c %d", e);
+glUniformMatrix4fv(ISOMatrixLoc, 1, GL_FALSE, m);
+if ((e = glGetError()) != GL_NO_ERROR)
+    eprintf("d %d, matrixloc=%d, program=%d", e, ISOMatrixLoc, ISOP);
+glDrawElements(GL_TRIANGLES, 3*3*MARKERSOLID::nFaces,
+#ifndef INDICESGL32
+                GL_UNSIGNED_SHORT, (void*)(currentSet*sizeof(unsigned short)*3*3*MARKERSOLID::nFaces
+)
+#else
+                GL_UNSIGNED_INT, (void*)(currentSet*sizeof(unsigned int)*3*3*MARKERSOLID::nFaces
+)
+#endif
+    );
+if ((e = glGetError()) != GL_NO_ERROR)
+    eprintf("e %d", e);
+glBindVertexArray(0);
+if ((e = glGetError()) != GL_NO_ERROR)
+    eprintf("f %d", e);
+
+glDisable(GL_BLEND);
+}
 
 void OvrApp::RenderAtoms(const float *m) //m[16]
 {
-	eprintf ("RenderAtoms start numatoms %d", numAtoms);
+    //eprintf ("RenderAtoms start numatoms %d", numAtoms);
 	int e;
 	if (numAtoms==0)
 		return;
@@ -607,6 +647,7 @@ void OvrApp::RenderUnitCell(const Matrix4f eyeViewProjection)
 					//atom trajectories
 					RenderAtomTrajectoriesUnitCell();
 					RenderAtoms(t);
+                    RenderMarker(t);
 				}
 }
 
@@ -628,6 +669,7 @@ void OvrApp::RenderAtomTrajectories (const Matrix4f eyeViewProjection)
     glUniformMatrix4fv(UnitCellMatrixLoc, 1, GL_FALSE, t);
     RenderAtomTrajectoriesUnitCell();
     RenderAtoms(t);
+    RenderMarker(t);
 }
 
 Matrix4f OvrApp::DrawEyeView( const int eye, const float fovDegreesX, const float fovDegreesY, ovrFrameParms & frameParms )
diff --git a/OculusMobile/NOMADGearvrT/Src/OvrApp.h b/OculusMobile/NOMADGearvrT/Src/OvrApp.h
index 2fa6be0d587aefd4cd3ffb916e22914ab3a1728b..2860c18355a3acfb3cbd94e5d2db9866f156eb2a 100644
--- a/OculusMobile/NOMADGearvrT/Src/OvrApp.h
+++ b/OculusMobile/NOMADGearvrT/Src/OvrApp.h
@@ -56,7 +56,8 @@ private:
 	//if no tesselation is available, we still need the tess atoms for the trajectories!
     GLuint *AtomTVAO=nullptr, *AtomTBuffer=nullptr, BondIndices=0, *AtomVAO=nullptr, *AtomBuffer=nullptr,
         *AtomIndices=nullptr,//[2], atoms, extraatoms
-		UnitCellVAO, UnitCellBuffer, UnitCellIndexBuffer;
+        UnitCellVAO, UnitCellBuffer, UnitCellIndexBuffer,
+        MarkerVAO, MarkerVertBuffer, MarkerIndexBuffer;
 
 	GLuint *ISOVAO=nullptr/*[ISOS*TIMESTEPS]*/, *ISOBuffer=nullptr/*[ISOS*TIMESTEPS]*/,
 		*ISOIndices=nullptr/*[ISOS*TIMESTEPS]*/;
@@ -65,6 +66,7 @@ private:
 	int *numISOIndices=nullptr/*[ISOS*TIMESTEPS]*/;
 		
 	void RenderAtoms(const float *m);
+    void RenderMarker(const float *m);
 	void RenderUnitCell(const OVR::Matrix4f eyeViewProjection);
     void RenderAtomTrajectories (const OVR::Matrix4f eyeViewProjection);
 	void RenderAtomTrajectoriesUnitCell();