diff --git a/core/forms.py b/core/forms.py
index 977e664..1f0d3e0 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -8,7 +8,7 @@ from django.contrib.admin.widgets import AdminDateWidget
 
 #from tinymce.widgets import TinyMCE
 
-from troggle.core.models.troggle import Person, PersonExpedition, Expedition
+from troggle.core.models.troggle import Person, PersonExpedition, Expedition, SimpleFileModel
 from troggle.core.models.caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance
 
 '''These are all the Forms used by troggle
@@ -180,3 +180,14 @@ class UploadFileForm(forms.Form):
         person = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False) 
 
 
+        
+class SimpleUploadFileForm(forms.ModelForm):
+    """New in April 2021
+    """
+    class Meta:
+        model = SimpleFileModel
+        fields = ('title', 'simplefile',)   
+
+
+
+
diff --git a/core/models/troggle.py b/core/models/troggle.py
index 927ee44..10c982c 100644
--- a/core/models/troggle.py
+++ b/core/models/troggle.py
@@ -19,6 +19,7 @@ from django.conf import settings
 
 from django.urls import reverse
 from django.template import Context, loader
+from django.core.files.storage import FileSystemStorage
 
 import troggle.core.models.survex 
 from troggle.core.utils import get_process_memory
@@ -222,4 +223,11 @@ class PersonExpedition(TroggleModel):
         res = self.persontrip_set.all().aggregate(day_max=models.Max("expeditionday__date"))
         return res["day_max"]
 
-
+class SimpleFileModel(models.Model):
+    simplefile = models.FileField(upload_to='fileuploads/') # in MEDIA_FILES
+    title = models.CharField(max_length = 80)
+    class Meta:
+        ordering = ['title']
+     
+    def __str__(self):
+        return f"{self.title}"
diff --git a/core/views/other.py b/core/views/other.py
index 4f27d98..639ea5f 100644
--- a/core/views/other.py
+++ b/core/views/other.py
@@ -1,4 +1,4 @@
-import re
+import re, os
 
 from django import forms
 from django.conf import settings
@@ -7,12 +7,13 @@ from django.db.models import Q
 from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render
 from django.template import Context, loader
+from django.core.files.storage import FileSystemStorage, default_storage
 
 import troggle.parsers.imports
 from troggle.core.models.troggle import Expedition, Person, PersonExpedition
 from troggle.core.models.caves import LogbookEntry, QM, Cave, PersonTrip
 from .login import login_required_if_public
-from troggle.core.forms import UploadFileForm
+from troggle.core.forms import UploadFileForm, SimpleUploadFileForm
 
 '''Utility functions and code to serve the control panel and individual user's 
 progress and task list (deprecated as we do not have individual user login).
@@ -213,4 +214,26 @@ def newfile(request, pslug = None):
 
     return render(request, 'editfile.html', {'fileForm': fileform, })
 
+@login_required_if_public
+def simpleupload(request):
+    print(f'! - FORM simpleupload - start')
+    if request.method == 'POST':
+        form = SimpleUploadFileForm(request.POST,request.FILES)
+        if form.is_valid():
+            #form.save() # comment out so nothing saved in MEDIA_ROOT/fileuploads
+            f = request.FILES["simplefile"]
+            w = request.POST["title"]
+            print(f'! - FORM simpleupload uploaded {f.name}')
+            fs = FileSystemStorage(os.path.join(settings.SURVEY_SCANS, '2021', w))
+           
+            actual_saved = fs.save(f.name, content=f) # name may chnage to avoid clash
+            # INSERT check if name is chnaged, to allow user to abort and rename - or lets do a chaecjk anyway.
+
+            print(f'! - FORM simpleupload {actual_saved}')
+
+            form = SimpleUploadFileForm()
+            return render(request, 'simpleupload.html', {'form': form,'filesaved': True, 'actual_saved': actual_saved})
+    else:
+        form = SimpleUploadFileForm()
+    return render(request, 'simpleupload.html', {'form':form,})
 
diff --git a/templates/cavemillenial.html b/templates/cavemillenial.html
deleted file mode 100644
index 6c96ed8..0000000
--- a/templates/cavemillenial.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% extends "cavebase.html" %}
-
-
-{% block title %}Cave Index{% endblock %}
-
-{% block content %}
-
-<h1>Cave Index</h1>
-
-<h3>1623</h3>
-
-<table class="searchable">
-{% for cave in caves1623 %}
-
-  <tr><td> <a href="{{ cave.url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> </td></tr>
-
-{% endfor %}
-</table>
-
-<h3>1626</h3>
-
-<ul class="searchable">
-{% for cave in caves1626 %}
-
-  <li> <a href="{{ cave.url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> </li>
-
-{% endfor %}
-</ul>
-
-<a href="{% url "newcave" %}">New Cave</a>
-
-{% endblock %}
diff --git a/templates/simpleupload.html b/templates/simpleupload.html
new file mode 100644
index 0000000..d97234c
--- /dev/null
+++ b/templates/simpleupload.html
@@ -0,0 +1,50 @@
+{% extends "base.html" %}
+
+{% block title %}Simple Fileupload{% endblock %}
+
+{% block content %}
+
+<h2>Survey Scan upload into Wallet</h2>
+
+<div style = "max-width:470px; " >
+ 
+
+{% if filesaved %}
+<p style="margin-left:20%;">
+<b>The file was saved as <em>'{{actual_saved}}'</em> <br><br>Upload another?</b>
+</p>
+<br>
+{% endif %}
+
+
+<form method ='post' enctype ="multipart/form-data">
+    {% csrf_token %}
+ 
+			
+         <br>
+         
+          
+               <input type = "file" style = "margin-left:20%;" 
+               placeholder = "Simplefile" name = "simplefile" />
+          
+        <br>  <br>
+         
+          
+               <input type = "text" style = "margin-left:20%;" 
+               placeholder = "Wallet id e.g. 2021#23" name = "title" value='2021#99' label="Wallet id"/>
+          
+         </div>
+         
+         <div style = "max-width:470px;">
+            <center> 
+            
+               <button style = "color: #fff; border:1px; background-color:#999; margin-top:8%; 
+                  height:35px; width:80%; margin-left:19%;" type = "submit" value = "Upload" >
+                  <strong>Upload</strong>
+               </button>
+               
+            </center>
+         </div>
+</form>
+</div>
+ {% endblock %}
diff --git a/urls.py b/urls.py
index 23e21e6..db9894e 100644
--- a/urls.py
+++ b/urls.py
@@ -1,4 +1,5 @@
 from django.conf import settings
+from django.urls import path
 from django.conf.urls import url, include, re_path
 from django.views.generic.base import RedirectView 
 from django.views.generic.edit import UpdateView
@@ -9,7 +10,8 @@ from django.urls import reverse, resolve
 
 from troggle.core.views import caves, statistics, survex
 from troggle.core.views.surveys import surveyscansingle, surveyscansfolder, surveyscansfolders, dwgdata, dwgfilesingle, dwgfileupload
-from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage, newfile, downloadlogbook, ajax_QM_number, downloadQMs
+from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage, newfile, simpleupload
+from troggle.core.views.other import downloadlogbook, ajax_QM_number, downloadQMs
 from troggle.core.views.caves import ent, cavepage
 from troggle.core.views.logbooks import get_logbook_entries, logbookentry, logbookSearch
 from troggle.core.views.logbooks import personindex, person, get_people
@@ -73,6 +75,8 @@ trogglepatterns = [
     re_path(r'^admin/doc/',  include('django.contrib.admindocs.urls')), # needs docutils Python module (http://docutils.sf.net/).
     re_path(r'^admin/',      admin.site.urls), # includes admin login & logout urls
     
+    path('upload',      simpleupload, name='simpleupload'), # includes admin login & logout urls
+
 # setting LOGIN_URL = '/accounts/login/' is default
 # url ENDS WITH this string
     re_path(r'logout/$', expologout, name='expologout'), # higher precedence than /accounts/logout
@@ -83,7 +87,7 @@ trogglepatterns = [
     re_path(r'^person/(?P<first_name>[A-Z]*[a-z\-\'&;]*)[^a-zA-Z]*(?P<last_name>[a-z\-\']*[^a-zA-Z]*[\-]*[A-Z]*[a-zA-Z\-&;]*)/?', person, name="person"),
     re_path(r'^personexpedition/(?P<first_name>[A-Z]*[a-z&;]*)[^a-zA-Z]*(?P<last_name>[A-Z]*[a-zA-Z&;]*)/(?P<year>\d+)/?$', personexpedition, name="personexpedition"),
 
-#   Expedition master page
+#   Expedition master page & API exports
     re_path(r'^expedition/(\d+)$',  expedition,  name="expedition"),
     re_path(r'^api/expeditions_tsv$', Expeditions_tsvListView.as_view()),
     re_path(r'^api/expeditions_json$', Expeditions_jsonListView.as_view()),
@@ -161,7 +165,7 @@ trogglepatterns = [
 
 #   Prospecting Guide document
     re_path(r'^prospecting_guide/$', prospecting),    
-    re_path(r'^prospecting/(?P<name>[^.]+).png$', prospecting_image, name="prospecting_image"),
+#   re_path(r'^prospecting/(?P<name>[^.]+).png$', prospecting_image, name="prospecting_image"), broken, won't repair.
 
 # This next set are all intercepted by Apache, if it is running.
     re_path(r'^photos/(?P<subpath>.*)$',      mediapage, {'doc_root': settings.PHOTOS_ROOT}, name="mediapage"), # photo galleries