diff --git a/ContentCatalogSavage.xml b/ContentCatalogSavage.xml
index ba46447522251b052bdeda22cb06325ed5cab038..6a49f90483e2f3b7d65bb08247bd9d5f459ed370 100644
--- a/ContentCatalogSavage.xml
+++ b/ContentCatalogSavage.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE ContentCatalog
  PUBLIC "http://svn.code.sf.net/p/x3d/code/www.web3d.org/x3d/tools/CreateContentCatalog/ContentCatalog.dtd"
         "../../../tools/CreateContentCatalog/ContentCatalog.dtd">
-<ContentCatalog creationDate='1/2/2020' helpPage='X3dResources.html' name='Savage' title='Savage'
+<ContentCatalog creationDate='3/4/2020' helpPage='X3dResources.html' name='Savage' title='Savage'
    toc='index.html'>
   <meta content='ContentCatalogBuilder' name='generator'/>
   <Section name='AircraftFixedWing' title='Aircraft Fixed Wing'>
@@ -1083,13 +1083,13 @@
          title='CH 53e Simple'
          url='https://savage.nps.edu/Savage/AircraftHelicopters/CH53UnitedStates/CH53eSimple.x3d'>
         <Viewpoint description='[1] CH53eSimple.x3d Front' fileName='CH53eSimple.x3d._VP_Front.png'
-           found='false'/>
+           found='true'/>
         <Viewpoint description='[2] CH53eSimple.x3d Bottom' fileName='CH53eSimple.x3d._VP_Bottom.png'
-           found='false'/>
+           found='true'/>
         <Viewpoint description='[3] CH53eSimple.x3d Left_Side' fileName='CH53eSimple.x3d._VP_Left_Side.png'
-           found='false'/>
+           found='true'/>
         <Viewpoint description='[4] CH53eSimple.x3d (default X3D view from 0 0 10)'
-           fileName='CH53eSimple.x3d._VP_Default_viewpoint.png' found='false'/>
+           fileName='CH53eSimple.x3d._VP_Default_viewpoint.png' found='true'/>
       </Page>
       <Page created='15 March 2004' creator='LT Terry D. Norbraten, USN'
          description='H-53E fuselage body created by extrusion. Dimensions in proportion with fuselage.'
@@ -1097,7 +1097,7 @@
          thumbnail='_thumbnails/H53eFuselageThumbnail.png' title='H 53e Fuselage'
          url='https://savage.nps.edu/Savage/AircraftHelicopters/CH53UnitedStates/H53eFuselage.x3d'>
         <Viewpoint description='[5] H53eFuselage.x3d (default X3D view from 0 0 10)'
-           fileName='H53eFuselage.x3d._VP_Default_viewpoint.png' found='false'/>
+           fileName='H53eFuselage.x3d._VP_Default_viewpoint.png' found='true'/>
       </Page>
       <Page created='5 March 2004' creator='LT Terry D. Norbraten, USN'
          description='H-53E main rotor blade and blade extender. Single blade created of indexed face sets and extender, extender connection and blade connection created out of primative cylndrical shapes. Airfoil and chord dimensions in proportion with actual blade.'
@@ -1106,7 +1106,7 @@
          thumbnail='_thumbnails/H53eMainRotorBladeThumbnail.png' title='H 53e Main Rotor Blade'
          url='https://savage.nps.edu/Savage/AircraftHelicopters/CH53UnitedStates/H53eMainRotorBlade.x3d'>
         <Viewpoint description='[6] H53eMainRotorBlade.x3d (default X3D view from 0 0 10)'
-           fileName='H53eMainRotorBlade.x3d._VP_Default_viewpoint.png' found='false'/>
+           fileName='H53eMainRotorBlade.x3d._VP_Default_viewpoint.png' found='true'/>
       </Page>
       <Page created='12 March 2004' creator='LT Terry D. Norbraten, USN'
          description='H-53E main rotor head assembly. Primative cylinder shapes for sleeve and spindle assemblies and pitch change rods inlined with 7 H-53E main rotor blades with extenders mounted on a cylindrical rotating swashplate, all topped off with a cone for a rotor cap. Dimensions in proportion with rotor head.'
@@ -1115,7 +1115,7 @@
          thumbnail='_thumbnails/H53eMainRotorHeadThumbnail.png' title='H 53e Main Rotor Head'
          url='https://savage.nps.edu/Savage/AircraftHelicopters/CH53UnitedStates/H53eMainRotorHead.x3d'>
         <Viewpoint description='[7] H53eMainRotorHead.x3d (default X3D view from 0 0 10)'
-           fileName='H53eMainRotorHead.x3d._VP_Default_viewpoint.png' found='false'/>
+           fileName='H53eMainRotorHead.x3d._VP_Default_viewpoint.png' found='true'/>
       </Page>
     </Chapter>
     <Chapter name='HelicopterUnitedStates' title='Helicopter United States'>
@@ -2944,12 +2944,13 @@
       </Page>
       <Page created='1 August 2007' creator='Chris Lang'
          description='Switch animation among 3 different dolphin poses' modified='20 October 2019'
-         name='DolphinSwitcher' title='Dolphin Switcher'
+         name='DolphinSwitcher' thumbnail='_thumbnails/DolphinSwitcherThumbnail.png'
+         title='Dolphin Switcher'
          url='https://savage.nps.edu/Savage/Biologics/Dolphin/DolphinSwitcher.x3d'>
         <Viewpoint description='[17] DolphinSwitcher.x3d Dolphin switcher, 2m away'
-           fileName='DolphinSwitcher.x3d._VP_Dolphin_switcher,_2m_away.png' found='false'/>
+           fileName='DolphinSwitcher.x3d._VP_Dolphin_switcher,_2m_away.png' found='true'/>
         <Viewpoint description='[18] DolphinSwitcher.x3d (default X3D view from 0 0 10)'
-           fileName='DolphinSwitcher.x3d._VP_Default_viewpoint.png' found='false'/>
+           fileName='DolphinSwitcher.x3d._VP_Default_viewpoint.png' found='true'/>
       </Page>
       <Page created='22 January 2001'
          creator='unknown, if you know then please contact brutzman@nps.navy.mil'
@@ -3879,7 +3880,7 @@
   <Section name='CommunicationsAndSensors' title='Communications And Sensors'>
     <Chapter name='Beam' title='Beam'>
       <Page created='11 December 2000' creator='Don Brutzman'
-         description='Produce wireframe or transparent beam cones.' modified='20 October 2019'
+         description='Produce wireframe or transparent beam cones.' modified='15 January 2020'
          name='BeamConeExample' thumbnail='_thumbnails/BeamConeExampleThumbnail.png'
          title='Beam Cone Example'
          url='https://savage.nps.edu/Savage/CommunicationsAndSensors/Beam/BeamConeExample.x3d'>
@@ -3909,7 +3910,7 @@
            fileName='BeamConePrototype.x3d._VP_Default_viewpoint.png' found='true'/>
       </Page>
       <Page created='25 February 2001' creator='Don Brutzman'
-         description='Produce wireframe or transparent beam cylinders.' modified='20 October 2019'
+         description='Produce wireframe or transparent beam cylinders.' modified='15 January 2020'
          name='BeamCylinderExample' thumbnail='_thumbnails/BeamCylinderExampleThumbnail.png'
          title='Beam Cylinder Example'
          url='https://savage.nps.edu/Savage/CommunicationsAndSensors/Beam/BeamCylinderExample.x3d'>
@@ -4703,7 +4704,8 @@
       </Page>
       <Page created='8 May 2001' creator='Mike Hunsberger'
          description='A Pair of TRC-170s. A TRC-170 is a long-range SHF communication system. It operates in 3 modes. 1)Direct point-to-point link (&lt; 30 miles). 2) Tropospheric shot (up to 100 or 150 miles, depending on system version). 3) Defraction shot over an a terrain feature or object in the path ( &lt; 50 miles).'
-         modified='20 October 2019' name='TRC170PairPrototype' title='TRC 170 Pair Prototype'
+         modified='20 October 2019' name='TRC170PairPrototype'
+         thumbnail='_thumbnails/TRC170PairPrototypeThumbnail.png' title='TRC 170 Pair Prototype'
          url='https://savage.nps.edu/Savage/CommunicationsAndSensors/TRC170/TRC170PairPrototype.x3d'>
         <Viewpoint description='[5] TRC170PairPrototype.x3d High Above TRC170'
            fileName='TRC170PairPrototype.x3d._VP_High_Above_TRC170.png' found='true'/>
@@ -12188,7 +12190,7 @@
         <Viewpoint description='[16] Butakov.x3d StbRudder' fileName='Butakov.x3d._VP_StbRudder.png'
            found='true'/>
         <Viewpoint description='[17] Butakov.x3d .50 caliber gun'
-           fileName='Butakov.x3d._VP_.50_caliber_gun.png' found='false'/>
+           fileName='Butakov.x3d._VP_.50_caliber_gun.png' found='true'/>
         <Viewpoint description='[18] Butakov.x3d Bridge' fileName='Butakov.x3d._VP_Bridge.png' found='true'/>
         <Viewpoint description='[19] Butakov.x3d Radar' fileName='Butakov.x3d._VP_Radar.png' found='true'/>
         <Viewpoint description='[20] Butakov.x3d (default X3D view from 0 0 10)'
@@ -12211,7 +12213,7 @@
       <Page created='20 October 2009' creator='Claudio Coreixas'
          description='Brazilian Naval Academy Training Ship 50cal firing against other Ship during night'
          modified='20 October 2019' name='FiftyCaliberFiring0' subject='ships'
-         title='Fifty Caliber Firing 0'
+         thumbnail='_thumbnails/FiftyCaliberFiring0Thumbnail.png' title='Fifty Caliber Firing 0'
          url='https://savage.nps.edu/Savage/ShipsMilitary/PatrolCraft-NavalAcademy-Brazil/FiftyCaliberGunFiring.x3d'>
         <Viewpoint description='[23] FiftyCaliberFiring0.x3d top'
            fileName='FiftyCaliberFiring0.x3d._VP_top.png' found='true'/>
@@ -12258,21 +12260,21 @@
         <Viewpoint description='[41] FiftyCaliberGunFiring.x3d bow'
            fileName='FiftyCaliberGunFiring.x3d._VP_bow.png' found='true'/>
         <Viewpoint description='[42] FiftyCaliberGunFiring.x3d bow Close'
-           fileName='FiftyCaliberGunFiring.x3d._VP_bow_Close.png' found='false'/>
+           fileName='FiftyCaliberGunFiring.x3d._VP_bow_Close.png' found='true'/>
         <Viewpoint description='[43] FiftyCaliberGunFiring.x3d stbd Bow'
-           fileName='FiftyCaliberGunFiring.x3d._VP_stbd_Bow.png' found='false'/>
+           fileName='FiftyCaliberGunFiring.x3d._VP_stbd_Bow.png' found='true'/>
         <Viewpoint description='[44] FiftyCaliberGunFiring.x3d stbd Bridge Outside'
-           fileName='FiftyCaliberGunFiring.x3d._VP_stbd_Bridge_Outside.png' found='false'/>
+           fileName='FiftyCaliberGunFiring.x3d._VP_stbd_Bridge_Outside.png' found='true'/>
         <Viewpoint description='[45] FiftyCaliberGunFiring.x3d port Bow'
            fileName='FiftyCaliberGunFiring.x3d._VP_port_Bow.png' found='true'/>
         <Viewpoint description='[46] FiftyCaliberGunFiring.x3d stbd Quarter'
-           fileName='FiftyCaliberGunFiring.x3d._VP_stbd_Quarter.png' found='false'/>
+           fileName='FiftyCaliberGunFiring.x3d._VP_stbd_Quarter.png' found='true'/>
         <Viewpoint description='[47] FiftyCaliberGunFiring.x3d port Quarter'
            fileName='FiftyCaliberGunFiring.x3d._VP_port_Quarter.png' found='true'/>
         <Viewpoint description='[48] FiftyCaliberGunFiring.x3d StbRudder'
            fileName='FiftyCaliberGunFiring.x3d._VP_StbRudder.png' found='true'/>
         <Viewpoint description='[49] FiftyCaliberGunFiring.x3d .50 caliber gun'
-           fileName='FiftyCaliberGunFiring.x3d._VP_.50_caliber_gun.png' found='false'/>
+           fileName='FiftyCaliberGunFiring.x3d._VP_.50_caliber_gun.png' found='true'/>
         <Viewpoint description='[50] FiftyCaliberGunFiring.x3d Bridge'
            fileName='FiftyCaliberGunFiring.x3d._VP_Bridge.png' found='true'/>
         <Viewpoint description='[51] FiftyCaliberGunFiring.x3d Radar'
diff --git a/Space/SatelliteLab/HTVSCMGPrototype.rq.txt b/Space/SatelliteLab/HTVSCMGPrototype.rq.txt
index 2b58cfaa5279c4ef269309dd3228690de3c3dba0..73a55cc4d03363d5970d722eb0990c2a9a6a02cc 100644
--- a/Space/SatelliteLab/HTVSCMGPrototype.rq.txt
+++ b/Space/SatelliteLab/HTVSCMGPrototype.rq.txt
@@ -31,3 +31,8 @@ WHERE
 =========================================================
 | "WorldInfo_2_1" | "HTVSCMGPrototype.x3d" | "Scene"    |
 ---------------------------------------------------------
+---------------------------------------------------------
+| WorldInfoNode   | title                  | parentNode |
+=========================================================
+| "WorldInfo_2_1" | "HTVSCMGPrototype.x3d" | "Scene"    |
+---------------------------------------------------------
diff --git a/build.xml b/build.xml
index fbb877a762565215125b17e4eff3546ad8c587b7..e817348e81a3c4fedce9a1dc539745fadde9d212 100644
--- a/build.xml
+++ b/build.xml
@@ -271,13 +271,8 @@ POSSIBILITY OF SUCH DAMAGE.
         <include name="${xj3d.cadfilter.jar}"/>
         <include name="${xj3d.replica.jar}"/>
         <include name="${xj3d.3rdparty.jar}"/>
-        <include name="jhall.jar"/>
-        <!--
-        <include name="*-${sun.desktop}-${os.arch}.jar"/>
-        <include name="gluegen-rt.jar"/>
-        <include name="joal.jar"/>
-        <include name="jogl-all.jar"/>
-        -->
+        <include name="jhall.jar"/><!-- javahelp -->
+        <include name="jogamp-fat.jar"/><!-- includes all native OS dlls, etc. -->
     </fileset>
 
     <!-- site to download latest xj3d jars -->
@@ -640,6 +635,17 @@ Key references:
             <fileset dir="." includes="**/*Canonical.x3dv"/>
             <fileset dir="." includes="**/*Canonical.wrl"/>
             <fileset dir="." includes="**/*Canonical.html"/>
+            <!-- Xj3D Replica image-creation issue -->
+            <fileset dir="." includes="**/*0001.png"/>
+            <fileset dir="." includes="**/*0002.png"/>
+            <fileset dir="." includes="**/*0003.png"/>
+            <fileset dir="." includes="**/*0004.png"/>
+            <fileset dir="." includes="**/*0005.png"/>
+            <fileset dir="." includes="**/*0006.png"/>
+            <fileset dir="." includes="**/*0007.png"/>
+            <fileset dir="." includes="**/*0008.png"/>
+            <fileset dir="." includes="**/*0009.png"/>
+            <fileset dir="." includes="**/*_VP_Unnamed_1.png"/>
         </delete>
     </target>
 
@@ -925,7 +931,6 @@ Key references:
         <delete failonerror="false" includeemptydirs="true" verbose="true">
             <fileset dir=".">
                 <include name="*/_viewpoints/*.png"/>
-                <include name="*/*/_viewpoints/*.png"/>
             </fileset>
         </delete>
         <echo message="Note: you must also clean HTML versions of scenes to trigger re-shooting of replica screenshot images"/>
@@ -935,9 +940,7 @@ Key references:
         <echo message="clean/delete autogenerated thumbnail image files"/>
         <delete failonerror="false" includeemptydirs="true" verbose="true">
             <fileset dir=".">
-                <include name="**/*Thumbnail.png"/>
-                <!-- TODO why isn't this working ? -->
-                <include name="**/_thumbnails"/>
+                <include name="**/_thumbnails/*.png"/>
             </fileset>
         </delete>
      </target>
@@ -3108,205 +3111,14 @@ TODO:  fix Xj3D from launching window, instead perform offline rendering while h
        possibly by using xvfb X-windows virtual frame buffer
 -->
 
-    <target name="processScenes.captureViewpoints" depends="get.saxon,platformInitialize"
-     description="use Xj3D to create snapshot pictures of each viewpoint, triggered by html timestamp and then updates html">
-        <echo message="use Xj3D to create snapshot pictures of each viewpoint, triggered by html timestamp and then updates html"/>
-        <echo message="optional prerequisite: clean.htmlPrettyPrintDocumentation prior to reshooting all images"/>
-        <echo message="rework usually minimized by only regenerating images for each triggering .html change as needed."/>
-        <echo message="processScenes.captureViewpoints depends on local Xj3D installation, current directory xj3d.dir=${xj3d.dir}"/>
-        <!-- TODO -Djava.library.path needs to point to odejava64.dll driver, or jogl.dll driver??? -->
-        <echo message="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-        <!-- TODO -Djava.ext.dirs=??? -->
-        <echo message="-Djava.ext.dirs=???"/>
-        <!-- output help for Replica -->
-        <java classname="xj3d.replica.Replica" fork="${fork}" dir=".">
-            <classpath>
-                <pathelement path="${classpath}"/>
-                <fileset refid="xj3d.jars.all"/>
-            </classpath>
-            <!-- -Djava.library.path needs to point to jogl.dll driver -->
-            <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-            <!-- Xj3D run.args -->
-            <arg value="-help"/>
-        </java>
-        <if>
-            <not>
-                <equals arg1="${jenkins.prepared}" arg2="true" />
-            </not>
-            <then>
-        <for param="file.path.name">
-            <path>
-                <fileset refid="x3dScenes"/>
-            </path>
-            <sequential>
-                <propertyregex
-                        property="name.short"
-                        override="true"
-                        input="@{file.path.name}"
-                        regexp="([^\n]*)[\\/]([^\n]*)\.x3d"
-                        select="\2"/>
-                <propertyregex
-                        property="relative.path1"
-                        override="true"
-                        input="@{file.path.name}"
-                        regexp="([^\n]*)Savage[\\/]([^\n^\\^/]*)[\\/]([^\n]*)\.x3d"
-                        select="\2"/>
-                <propertyregex
-                        property="relative.path2"
-                        override="true"
-                        input="@{file.path.name}"
-                        regexp="([^\n]*)Savage[\\/]([^\n^\\^/]*)[\\/]([^\n^\\^/]*)([\\/][^\n]*)\.x3d"
-                        select="\3"/>
-                <!-- trace
-                <echo></echo>
-                <echo>@file.path.name       = @{file.path.name}</echo>
-                <echo>$archive.path         = ${archive.path}</echo>
-                <echo>$relative.path1       = ${relative.path1}</echo>
-                <echo>$relative.path2       = ${relative.path2}</echo>
-                <echo>$name.short           = ${name.short}</echo>
-                -->
-                <outofdate>
-                    <sourcefiles>
-                        <filelist>
-                            <file name="${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d"/>
-                        </filelist>
-                    </sourcefiles>
-                    <!-- match pretty-print .html creation as the trigger for viewpoint capture -->
-                    <mapper dir="." type="glob" from="*.x3d" to="*.html"/>
-                    <!-- note:  targetfiles match with image filenames is not working, probably due to * wildcard.
-                         also note that viewpoint image names are multiple, and each are variations on the original filename.
-                         attempted invocations follow.
-                    <targetfiles>
-                        <pathelement path="${archive.path}/${relative.path1}/${relative.path2}/_viewpoints/${name.short}.x3d.*.png"/>
-                    </targetfiles>
-                    or
-                    <mapper dir="." type="glob" from="*.x3d" to="_viewpoints/*.png"/>
-                    -->
-                    <sequential>
-                        <!-- process individual files here.  show full path to facilitate user loading, editing of reported files -->
-                        <echo>============================================================================================================ </echo>
-                        <echo>Xj3D generation of Viewpoint images: ${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d </echo>
-                        <echo>Image output files each saved as:    ${archive.path}/${relative.path1}/${relative.path2}/_viewpoints/${name.short}.x3d._VP_viewpoint_description.png</echo>
-                        <mkdir dir="${relative.path1}/${relative.path2}/_viewpoints"/>
-
-                        <!--
-                        <java classname="xj3d.browser.Xj3DBrowser" fork="${fork}" dir=".">
-                            <classpath>
-                                <pathelement path="${classpath}"/>
-                                <fileset refid="xj3d.jars.all"/>
-                            </classpath>
-                            < ! - - -Djava.library.path needs to point to jogl.dll driver - - >
-                            <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-                            <arg value="-captureViewpoints"/>
-                            <arg value="-disableAudio"/>
-                            <arg value="${relative.path1}/${relative.path2}/${name.short}.x3d"/>
-                        </java>
-                        -->
-                        <!-- see Xj3D/nbprojects/ide-file-targets.xml for example:
-
-                            <java classname="${replica}" dir="${replica.dir}" fork="false">
-                                <classpath refid="app.classpath"/>
-                                <jvmarg line="${run.args}"/>
-                                <arg line="${app.replica.args} ${scene.name} -outdir '${basedir}/${test.products.dir}' '${scene.path}'"/>
-                            </java>
-                        -->
-                        <java classname="xj3d.replica.Replica" fork="${fork}" dir="." failonerror="false">
-                            <classpath>
-                                <pathelement path="${classpath}"/>
-                                <fileset refid="xj3d.jars.all"/>
-                            </classpath>
-                            <!-- -Djava.library.path needs to point to jogl.dll driver -->
-                            <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-                            <jvmarg value="-Djava.ext.dirs="/>
-                            <!-- Xj3D run.args -->
-                            <arg value="-mode"/><arg value="viewpoints"/>
-                            <arg value="-mipmaps"/>
-                            <arg value="-antialias"/><arg value="8"/>
-                            <arg value="-anisotropicDegree"/><arg value="16"/>
-                            <arg value="-quiet"/> <!-- -verbose or -quiet -->
-                            <arg value="-stats"/>
-                            <arg value="-size"/><arg value="792x465"/>
-                            <arg value="-timeout"/><arg value="10000"/><!-- ms -->
-                            <arg value="--illegal-access=warn"/><!-- enable warnings of further illegal reflective access operations -->
-                       <!-- <arg value="-view"/><arg value="ICON_VIEWPOINT"/> -->
-                            <arg value="-filePrefix"/><arg value="${name.short}"/>
-                            <arg value="-outdir"/><arg value="${relative.path1}/${relative.path2}/_viewpoints"/> <!-- output directory -->
-                            <arg value="${relative.path1}/${relative.path2}/${name.short}.x3d"/>
-                        </java>
-
-<!-- reference for Xj3D screenshot from Xj3D NPS branch build.xml and build.properties invocations:
-
-# mode can be thumbnail=ThumbnailImager, scene=SceneThumbnailImager, or sequence=SceneRecorder.
-app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbose -stats -size 256x256 -filePrefix
-
-    <target name="run.replica"
-            depends="init"
-            if="replica.class.present"
-            description="Run the Xj3D Replica App">
-
-        <echo></echo>
-        <echo>Processing ${scene}</echo>
-        <echo></echo>
-
-        <java classname="${replica}" dir="${replica.dir}" fork="false">
-            <classpath refid="app.classpath"/>
-            <jvmarg line="${run.args}"/>
-
-            <arg line="${app.replica.args} testCapture ${scene}"/>
-        </java>
-        <echo message="Look in ${replica.dir}/output for result"/>
-    </target>
--->
-
-                        <!-- Xj3D leaves images in same directory as file, rather than launch directory, and so move them to _viewpoints directory.  -->
-                        <!--
-                        <move todir="${relative.path1}/${relative.path2}/_viewpoints" verbose="true">
-                                <fileset dir="${relative.path1}/${relative.path2}">
-                                    <include name="${name.short}.x3d.*.png"/>
-                                </fileset>
-                        </move> -->
-
-                        <!-- X3dToXhtml.xslt process individual files here. show full path to facilitate user loading, editing of reported files -->
-                        <echo>${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d processing with X3dToXhtml stylesheet pretty-print .html</echo>
-                        <!-- Saxon9 is locally defined macro -->
-                        <Saxon9  scene="${relative.path1}/${relative.path2}/${name.short}"
-                            stylesheet="${stylesheet.dir}/X3dToXhtml"
-                             extension="html"
-                        parameterPair1="linkImages=true"/>
-                        <!-- TODO -dtd:off -->
-                    </sequential>
-                </outofdate>
-            </sequential>
-        </for>
-            </then>
-            <else>
-                <echo message="No viewpoint capture when run on jenkins server"/>
-            </else>
-        </if>
-        <antcall target="echo.timestamp"/>
-        <echo>processScenes.captureViewpoints complete.</echo>
-    </target>
-
-    <target name="processScenes.captureThumbnailsViewpoints" description="reshoot all thumbnail and viewpoint images">
-        <echo message="reshoot all thumbnail and viewpoint images"/>
-        <echo message="optional prerequisite: clean.htmlPrettyPrintDocumentation prior to reshooting all images"/>
-        <antcall target="processScenes.captureThumbnails"/><!-- triggered by html but does not update html -->
-        <echo message="- - - - - - - - - - - - - - - - - - - -"/>
-        <antcall target="processScenes.captureViewpoints"/><!-- triggered by html and then updates html -->
-        <echo message="processScenes.captureThumbnailsViewpoints complete, htmlPrettyPrintDocumentation updated."/>
-        <echo message="- - - - - - - - - - - - - - - - - - - -"/>
-    </target>
-
     <target name="processScenes.captureImages"
-     description="use Xj3D's Replica class to create thumbnails and viewpoint images for each scene for use as icons, triggered by html timestamp then updates html">
-        <echo message="optional prerequisite: clean.htmlPrettyPrintDocumentation prior to reshooting all images"/>
-        <echo message="rework usually minimized by only regenerating images for each triggering .html change as needed."/>
-        <echo message="processScenes.captureImages depends on local Xj3D installation, current directory xj3d.dir=${xj3d.dir}"/>
-        <!-- TODO -Djava.library.path needs to point to odejava64.dll driver, or jogl.dll driver??? -->
+          description="Utilize Xj3D's Replica class to create thumbnails and viewpoint images for each scene for use as icons, triggered by html timestamp, then updates html">
+        <echo message="Utilize Xj3D's Replica class to create thumbnails and viewpoint images for each scene for use as icons, triggered by html timestamp, then updates html"/>
+        <echo message="Optional prerequisite: touch.X3dScenes or clean.htmlPrettyPrintDocumentation prior to reshooting all images"/>
+        <echo message="Rework usually minimized by only regenerating images for each triggering .html change as needed."/>
+        <echo message="processScenes.captureImages depends on local Xj3D installation available, current directory xj3d.dir=${xj3d.dir}"/>
         <echo message="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-        <!-- TODO -Djava.ext.dirs=??? -->
-        <echo message="-Djava.ext.dirs=???"/>
-        <!-- output help for Replica -->
+        <!-- output help for Replica at the beginning -->
         <java classname="xj3d.replica.Replica" fork="${fork}" dir=".">
             <classpath>
                 <pathelement path="${classpath}"/>
@@ -3373,12 +3185,13 @@ app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbos
                     <sequential>
                         <!-- process individual files here.  show full path to facilitate user loading, editing of reported files -->
                         <echo>============================================================================================================ </echo>
-                        <echo>Xj3D Replica generation of Thumbnail (icon) image for:</echo>
+                        <echo>Xj3D Replica model loading and generation of Thumbnail (icon) image:</echo>
                         <echo>${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d</echo>
-                        <mkdir                    dir="${relative.path1}/${relative.path2}/_thumbnails"/>
                         <var name="outfilePath" value="${relative.path1}/${relative.path2}/_thumbnails/${name.short}Thumbnail.png"/>
+                        <echo>${archive.path}/${outfilePath}</echo>
+                        <mkdir                    dir="${relative.path1}/${relative.path2}/_thumbnails"/>
                         <!-- copy default thumbnail image as destination file to indicate if failure occurs and avoid repeated hangups -->
-                        <copy file="../images/Xj3dRenderCaptureFailed.png" tofile="${outfilePath}" overwrite="true" verbose="true"/>
+                        <copy file="../images/Xj3dRenderCaptureFailed.png" tofile="${outfilePath}" overwrite="true" verbose="false"/>
 
                         <java classname="xj3d.replica.Replica" fork="${fork}" dir="." failonerror="false">
                             <classpath>
@@ -3387,7 +3200,6 @@ app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbos
                             </classpath>
                             <!-- -Djava.library.path needs to point to jogl.dll driver -->
                             <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-                            <jvmarg value="-Djava.ext.dirs="/>
                             <!-- Replica run.args -->
                             <arg value="-mode"/><arg value="thumbnail"/>
                             <arg value="-mipmaps"/>
@@ -3403,25 +3215,12 @@ app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbos
                             <arg value="${relative.path1}/${relative.path2}/${name.short}.x3d"/> <!-- sceneFile -->
                         </java>
                         <!-- process individual files here.  show full path to facilitate user loading, editing of reported files -->
-                        <echo>============================================================================================================ </echo>
-                        <echo>Xj3D generation of Viewpoint images for:</echo>
+                        <echo>- - - - - - - - - - - - - - - - - - - -</echo>
+                        <echo>Xj3D Replica model loading and generation of Viewpoint images:</echo>
                         <echo>${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d</echo>
-                        <echo>Image output files each saved as:    ${archive.path}/${relative.path1}/${relative.path2}/_viewpoints/${name.short}.x3d._VP_viewpoint_description.png</echo>
+                        <echo>${archive.path}/${relative.path1}/${relative.path2}/_viewpoints/ holds viewpoint images</echo>
                         <mkdir dir="${relative.path1}/${relative.path2}/_viewpoints"/>
 
-                        <!--
-                        <java classname="xj3d.browser.Xj3DBrowser" fork="${fork}" dir=".">
-                            <classpath>
-                                <pathelement path="${classpath}"/>
-                                <fileset refid="xj3d.jars.all"/>
-                            </classpath>
-                            < ! - - -Djava.library.path needs to point to jogl.dll driver - - >
-                            <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-                            <arg value="-captureViewpoints"/>
-                            <arg value="-disableAudio"/>
-                            <arg value="${relative.path1}/${relative.path2}/${name.short}.x3d"/>
-                        </java>
-                        -->
                         <!-- see Xj3D/nbprojects/ide-file-targets.xml for example:
 
                             <java classname="${replica}" dir="${replica.dir}" fork="false">
@@ -3437,7 +3236,6 @@ app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbos
                             </classpath>
                             <!-- -Djava.library.path needs to point to jogl.dll driver -->
                             <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-                            <jvmarg value="-Djava.ext.dirs="/>
                             <!-- Xj3D run.args -->
                             <arg value="-mode"/><arg value="viewpoints"/>
                             <arg value="-mipmaps"/>
@@ -3478,14 +3276,7 @@ app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbos
     </target>
 -->
 
-                        <!-- Xj3D leaves images in same directory as file, rather than launch directory, and so move them to _viewpoints directory.  -->
-                        <!--
-                        <move todir="${relative.path1}/${relative.path2}/_viewpoints" verbose="true">
-                                <fileset dir="${relative.path1}/${relative.path2}">
-                                    <include name="${name.short}.x3d.*.png"/>
-                                </fileset>
-                        </move> -->
-
+                        <!-- now that images are collected, restore file/timestamp by regenerating html -->
                         <!-- X3dToXhtml.xslt process individual files here. show full path to facilitate user loading, editing of reported files -->
                         <echo>${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d processing with X3dToXhtml stylesheet pretty-print .html</echo>
                         <!-- Saxon9 is locally defined macro -->
@@ -3508,93 +3299,6 @@ app.replica.args=-mode scene -mipmaps -antialias 8 -anisotropicDegree 16 -verbos
         <echo>processScenes.captureImages complete, htmlPrettyPrintDocumentation updated.</echo>
     </target>
 
-    <target name="processScenes.captureThumbnails"
-     description="use Xj3D's Replica class to create thumbnails of each scene for use as icons, triggered by html but does not update html">
-	<echo message="use Xj3D's Replica class to create thumbnails of each scene for use as icons, triggered by missing image, does not update html"/>
-        <echo message="optional prerequisite: clean.htmlPrettyPrintDocumentation prior to reshooting all images"/>
-        <echo message="rework usually minimized by only regenerating images for each triggering .html change as needed."/>
-	<echo message="processScenes.captureThumbnails depends on local Xj3D installation, current directory xj3d.dir=${xj3d.dir}"/>
-        <!-- TODO -Djava.library.path needs to point to odejava64.dll driver, or jogl.dll driver??? -->
-        <echo message="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-        <!-- TODO -Djava.ext.dirs=??? -->
-        <echo message="-Djava.ext.dirs=???"/>
-        <!-- output help for Replica -->
-        <java classname="xj3d.replica.Replica" fork="${fork}" dir=".">
-            <classpath>
-                <pathelement path="${classpath}"/>
-                <fileset refid="xj3d.jars.all"/>
-            </classpath>
-            <!-- -Djava.library.path needs to point to jogl.dll driver -->
-            <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-            <!-- Xj3D run.args -->
-            <arg value="-help"/>
-        </java>
-        <for param="file.path.name">
-            <path>
-                <fileset refid="x3dScenes"/>
-            </path>
-            <sequential>
-                <propertyregex
-                        property="name.short"
-                        override="true"
-                        input="@{file.path.name}"
-                        regexp="([^\n]*)[\\/]([^\n]*)\.x3d"
-                        select="\2"/>
-                <propertyregex
-                        property="relative.path1"
-                        override="true"
-                        input="@{file.path.name}"
-                        regexp="([^\n]*)Savage[\\/]([^\n^\\^/]*)[\\/]([^\n]*)\.x3d"
-                        select="\2"/>
-                <propertyregex
-                        property="relative.path2"
-                        override="true"
-                        input="@{file.path.name}"
-                        regexp="([^\n]*)Savage[\\/]([^\n^\\^/]*)[\\/]([^\n^\\^/]*)([\\/][^\n]*)\.x3d"
-                        select="\3"/>
-                <if>
-                    <available file="${relative.path1}/${relative.path2}/_thumbnails/${name.short}Thumbnail.png"/>
-                    <else>
-                        <!-- process individual files here.  show full path to facilitate user loading, editing of reported files -->
-                        <echo>============================================================================================================ </echo>
-                        <echo>Xj3D Replica generation of Thumbnail (icon) image for:</echo>
-                        <echo>${archive.path}/${relative.path1}/${relative.path2}/${name.short}.x3d</echo>
-                        <mkdir                    dir="${relative.path1}/${relative.path2}/_thumbnails"/>
-                        <var name="outfilePath" value="${relative.path1}/${relative.path2}/_thumbnails/${name.short}Thumbnail.png"/>
-                        <!-- copy default thumbnail image as destination file to indicate if failure occurs and avoid repeated hangups -->
-                        <copy file="../images/Xj3dRenderCaptureFailed.png" tofile="${outfilePath}" overwrite="true" verbose="true"/>
-
-                        <java classname="xj3d.replica.Replica" fork="${fork}" dir="." failonerror="false">
-                            <classpath>
-                                <pathelement path="${classpath}"/>
-                                <fileset refid="xj3d.jars.all"/>
-                            </classpath>
-                            <!-- -Djava.library.path needs to point to jogl.dll driver -->
-                            <jvmarg value="-Djava.library.path=${xj3d.dir.jars}/../${native.library.path}"/>
-                            <jvmarg value="-Djava.ext.dirs="/>
-                            <!-- Replica run.args -->
-                            <arg value="-mode"/><arg value="thumbnail"/>
-                            <arg value="-mipmaps"/>
-                            <arg value="-antialias"/><arg value="8"/>
-                            <arg value="-anisotropicDegree"/><arg value="16"/>
-                            <arg value="-quiet"/> <!-- -verbose or -quiet -->
-                            <arg value="-size"/><arg value="128x128"/>
-                            <arg value="-view"/><arg value="AUTO"/> <!-- Fit to world -->
-                            <arg value="-outfile"/><arg value="${outfilePath}"/> <!-- output directory and file name -->
-                            <arg value="-threepointlight"/>
-                            <arg value="-timeout"/><arg value="10000"/><!-- ms -->
-                            <arg value="--illegal-access=warn"/><!-- enable warnings of further illegal reflective access operations -->
-                            <arg value="${relative.path1}/${relative.path2}/${name.short}.x3d"/> <!-- sceneFile -->
-                        </java>
-                    </else>
-                </if>
-            </sequential>
-        </for>
-        <antcall target="echo.timestamp"/>
-        <echo>processScenes.captureThumbnails complete.</echo>
-        <echo/>
-    </target>
-
     <target name="canonicalScenesX3dToXml" description="save each canonicalized filename.x3d as filenameCanonical.xml">
         <for param="filenames">
             <path>