diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py
index 46513f6..3bcebc4 100644
--- a/core/TESTS/tests.py
+++ b/core/TESTS/tests.py
@@ -162,7 +162,7 @@ class PageTests(TestCase):
         response = self.client.get('/cave/115')
         self.assertEqual(response.status_code, 200)
         content = response.content.decode()
-        ph = r"Cave not found in database"
+        ph = r"Cave Identifier not found in database"
         phmatch    = re.search(ph, content)
         self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'")
 
@@ -435,7 +435,7 @@ class PageTests(TestCase):
         response = self.client.get('/survexfile/not_a_real_cave_number')
         self.assertEqual(response.status_code, 200)
         content = response.content.decode()
-        ph = r'Cave not found in database'
+        ph = r'Cave Identifier not found in database'
         phmatch    = re.search(ph, content)
         self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'")
 
diff --git a/core/views/caves.py b/core/views/caves.py
index 2ec7935..bc65219 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -294,14 +294,22 @@ def caveEntrance(request, slug):
         return render(request,'cave_entrances.html', {'cave': cave})
 
 def caveDescription(request, slug):
-    cave = Cave.objects.get(caveslug__slug = slug)
+    try:
+        cave = Cave.objects.get(caveslug__slug = slug)
+    except:
+        return render(request,'errors/badslug.html', {'badslug': slug})
+        
     if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
         return render(request,'nonpublic.html', {'instance': cave})
     else:
         return render(request,'cave_uground_description.html', {'cave': cave})
 
 def caveQMs(request, slug):
-    cave = Cave.objects.get(caveslug__slug = slug)
+    try:
+        cave = Cave.objects.get(caveslug__slug = slug)
+    except:
+        return render(request,'errors/badslug.html', {'badslug': slug})
+        
     if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
         return render(request,'nonpublic.html', {'instance': cave})
     else:
@@ -316,7 +324,10 @@ def edit_cave(request, slug=None):
     '''
     message = ""
     if  slug is not None:
-        cave = Cave.objects.get(caveslug__slug = slug)
+        try:
+            cave = Cave.objects.get(caveslug__slug = slug)
+        except:
+            return render(request,'errors/badslug.html', {'badslug': slug})
     else:
         cave = Cave()
     if request.POST:
@@ -375,7 +386,10 @@ def edit_entrance(request, caveslug=None, slug=None):
     '''
     message = ""
     if  caveslug is not None:
-        cave = Cave.objects.get(caveslug__slug = caveslug) 
+        try:
+            cave = Cave.objects.get(caveslug__slug = caveslug)
+        except:
+            return render(request,'errors/badslug.html', {'badslug': caveslug})
     else:
         cave = Cave()
     if  slug is not None:
@@ -460,9 +474,15 @@ def surveyindex(request):
     return render(request,'survey.html',locals())
 
 def get_entrances(request, caveslug):
-    cave = Cave.objects.get(caveslug__slug = caveslug)
+    try:
+        cave = Cave.objects.get(caveslug__slug = caveslug)
+    except:
+        return render(request,'errors/badslug.html', {'badslug': caveslug})
     return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
 
 def get_qms(request, caveslug):
-    cave = Cave.objects.get(caveslug__slug = caveslug)
+    try:
+        cave = Cave.objects.get(caveslug__slug = caveslug)
+    except:
+        return render(request,'errors/badslug.html', {'badslug': caveslug})
     return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
diff --git a/core/views/survex.py b/core/views/survex.py
index 9b6fc18..a3ff5bd 100644
--- a/core/views/survex.py
+++ b/core/views/survex.py
@@ -418,14 +418,14 @@ def survexcavesingle(request, survex_cave):
                 return render(request, 'svxcavesingle.html', {'settings': settings, "cave":cave })
             except ObjectDoesNotExist:
                 continue # next attempt in for loop
-        return render(request, 'svxcavesingle404.html', {'settings': settings, "cave":sc })
+        return render(request, 'errors/svxcavesingle404.html', {'settings': settings, "cave":sc })
 
     except MultipleObjectsReturned:
         caves = Cave.objects.filter(kataster_number=survex_cave) 
         return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves })
 
     except:
-        return render(request, 'svxcavesingle404.html', {'settings': settings, "cave":sc })
+        return render(request, 'errors/svxcavesingle404.html', {'settings': settings, "cave":sc })
 
  
 def check_cave_registered(area, survex_cave):
diff --git a/templates/errors/svxcavesingle404.html b/templates/errors/svxcavesingle404.html
index 81e82fa..dc5404f 100644
--- a/templates/errors/svxcavesingle404.html
+++ b/templates/errors/svxcavesingle404.html
@@ -1,4 +1,4 @@
-<!-- svxcavesingle404.html - this text visible because this template has been included -->
+<!-- errors/svxcavesingle404.html - this text visible because this template has been included -->
 {% extends "base.html" %}
 {% block title %}Troggle Error - Bad Cave ID{% endblock %}