diff --git a/core/TESTS/test_parsers.py b/core/TESTS/test_parsers.py
index 85869d3..44b9d8a 100644
--- a/core/TESTS/test_parsers.py
+++ b/core/TESTS/test_parsers.py
@@ -21,6 +21,7 @@ https://docs.djangoproject.com/en/dev/topics/testing/tools/
 import re
 import subprocess
 import unittest
+from http import HTTPStatus
 
 from django.test import Client, SimpleTestCase, TestCase
 
@@ -99,4 +100,28 @@ class ImportTest(TestCase):
         for e in expected:
             self.assertIn(e, messages)
         for e in not_expected:
-            self.assertNotIn(e, messages)
\ No newline at end of file
+            self.assertNotIn(e, messages)
+            
+    def test_aliases(self):
+        # Needs another test with test data
+        response = self.client.get(f"/aliases/{TEST_YEAR}")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        with open('_test_response.html', 'w') as f:
+            f.write(content)        
+        ph = f"'fsmartarse'"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+            
+            
+    def test_people(self):
+        # Needs another test with test data
+        response = self.client.get("/people")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        with open('_test_response.html', 'w') as f:
+            f.write(content)        
+        ph = f"<td><a href=\"/personexpedition/FredSmartarse/{TEST_YEAR}\">{TEST_YEAR}</a></td>"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+                        
\ No newline at end of file
diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py
index c663df6..fc6f12b 100644
--- a/core/TESTS/tests.py
+++ b/core/TESTS/tests.py
@@ -476,6 +476,71 @@ class PageTests(TestCase):
         self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
 
 
+    def test_statistics(self):
+        response = self.client.get("/statistics")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        ph = r"0 expeditions: 0 people,  0 caves and 0 logbook entries."
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+    def test_stats(self):
+        # Needs another test with test data
+        response = self.client.get("/stats")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        ph = r"Total length: 0.0 km adding up the total for each year."
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+    def test_dataissues(self):
+        # Needs another test with test data
+        response = self.client.get("/dataissues")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        ph = r"as well as these import/parsing issues"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+    def test_therionissues(self):
+        # Needs another test with test data
+        response = self.client.get("/therionissues")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        ph = r"! Un-parsed image filename"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+    def test_surveximport(self):
+        # Needs another test with test data
+        response = self.client.get("/surveximport")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        # with open('_test_response.html', 'w') as f:
+            # f.write(content)
+        ph = r"The number at the left-hand margin is the depth"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+    def test_survexdebug(self):
+        # Needs another test with test data
+        response = self.client.get("/survexdebug")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        ph = r"Running list of warnings during import"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+    def test_eastings(self):
+        # Needs another test with test data
+        response = self.client.get("/eastings")
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        content = response.content.decode()
+        ph = r"<tr><th>Survex Station</th><th>x</th><th>y</th></tr>"
+        phmatch = re.search(ph, content)
+        self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph + "'")
+
+
 # ADD TESTS when we are redirecting /expofiles/ to get the actual files using e.g.
 # import requests
 # page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html")
diff --git a/parsers/survex.py b/parsers/survex.py
index 838b47e..4a4cb85 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -1849,7 +1849,7 @@ class LoadingSurvex:
         Path(svxpath).parent
 
         if not svxpath.is_file():
-            message = f' ! BAD survex file "{fullpath}" specified in *include in {calledpath} '
+            message = f' ! BAD. "{fullpath}" is not a file, specified in *include in {calledpath} '
             stash_data_issue(parser="survex", message=message)
             print(message)
             return
@@ -2033,8 +2033,6 @@ def FindAndLoadSurvex(survexblockroot):
     svx_scan.svxfileslist = []  # free memory
     svx_scan = None  # Hmm. Does this actually delete all the instance variables if they are lists, dicts etc.?
 
-    print(f"  - RunSurvexIfNeeded cavern on '{fullpathtotop}'", file=sys.stderr)
-    omit_scan.RunSurvexIfNeeded(fullpathtotop, fullpathtotop)
     omit_scan.check_unique_name(fullpathtotop)
     omit_scan.uniquefile[unseensroot] = ["0"]
 
@@ -2130,6 +2128,45 @@ def FindAndLoadSurvex(survexblockroot):
 
     return legsnumber
 
+def parse_one_file(fpath): # --------------------------------------in progress-------------------
+    """Parse just one file. Use when re-loading after editing.
+    NB careful of *include lines, which may exist! Ignore them.
+    """
+    print("\n  - Loading One Survex file (LinearLoad)", file=sys.stderr)
+    svx_load = LoadingSurvex()
+    
+    omitsfileroot = MakeOmitFileRoot(fpath) # NO! This always creats a SurvexFile object. We are overwriting one..
+    survexomitsroot = SurvexBlock(
+        name=OMITBLOCK, survexpath="", survexfile=omitsfileroot, legsall=0, legslength=0.0
+    )
+    survexomitsroot.save()
+    # SurvexBlock.objects.all().delete()
+    # SurvexFile.objects.all().delete()
+    # SurvexDirectory.objects.all().delete()
+    # SurvexPersonRole.objects.all().delete()
+    # SurvexStation.objects.all().delete()
+    print(" - Loading Survex Blocks...")
+    
+    svx_load.survexdict[survexfileroot.survexdirectory] = []
+    svx_load.survexdict[survexfileroot.survexdirectory].append(survexfileroot)
+    svx_load.svxdirs[""] = survexfileroot.survexdirectory
+    
+    # ----------------------------------------------------------------
+    svx_load.LinearLoad(survexblockroot, survexfileroot.path, collatefilename)
+    # ----------------------------------------------------------------
+
+    legsnumber = svx_load.legsnumber
+
+    print(f"  - Number of SurvexDirectories: {len(svx_load.survexdict):,}")
+    tf = 0
+    for d in svx_load.survexdict:
+        tf += len(svx_load.survexdict[d])
+    print(f"  - Number of SurvexFiles: {tf:,}")
+    print(f"  - Number of Survex legs: {legsnumber:,}")
+    
+    # Now set Django SurvexFile object..
+    
+    svx_load = None
 
 def MakeSurvexFileRoot():
     """Returns a file_object.path = SURVEX_TOPNAME associated with directory_object.path = SURVEX_DATA"""