diff --git a/troggle/databaseReset.py b/troggle/databaseReset.py
index 2bb34cd6d..fe7bb1f75 100644
--- a/troggle/databaseReset.py
+++ b/troggle/databaseReset.py
@@ -18,6 +18,7 @@ user.is_superuser = True
 user.save()
 
 import parsers.cavetab
+parsers.cavetab.LoadCaveTab()
 import parsers.people
 parsers.people.LoadPersonsExpos()
 import parsers.logbooks
diff --git a/troggle/expo/models.py b/troggle/expo/models.py
index 058fff5ef..2b3919c91 100644
--- a/troggle/expo/models.py
+++ b/troggle/expo/models.py
@@ -49,18 +49,6 @@ class Expedition(models.Model):
 			date+=datetime.timedelta(days=1)
 		return res
 
-    # deprecated
-    def GetPersonExpedition(self, name):
-        person_expeditions = PersonExpedition.objects.filter(expedition=self)
-        res = None
-        for person_expedition in person_expeditions:
-            for possible_name_from in person_expedition.GetPossibleNameForms():
-                #print "nnn", possiblenamefrom
-                if name == possible_name_from:
-                    assert not res, "Ambiguous: " + name
-                    res = person_expedition
-        return res
-
     
 
 
@@ -198,6 +186,7 @@ class CaveAndEntrance(models.Model):
         return unicode(self.cave) + unicode(self.entrance_letter)
         
 class Cave(models.Model):
+    # too much here perhaps
     official_name = models.CharField(max_length=160)
     area = models.ManyToManyField(Area, blank=True, null=True)
     kataster_code = models.CharField(max_length=20,blank=True,null=True)
@@ -216,6 +205,18 @@ class Cave(models.Model):
     depth = models.CharField(max_length=100,blank=True,null=True)
     extent = models.CharField(max_length=100,blank=True,null=True)
     survex_file = models.CharField(max_length=100,blank=True,null=True) #should be filefield, need to fix parser first
+    
+    href    = models.CharField(max_length=100)
+    
+    def Sethref(self):
+        if self.kataster_number:
+            self.href = self.kataster_number
+        elif self.unofficial_number:
+            self.href = self.unofficial_number
+        else:
+            self.href = official_name.lower()
+            
+        
     def __unicode__(self):
         if self.kataster_number:
             if self.kat_area():
@@ -227,6 +228,8 @@ class Cave(models.Model):
                 return self.kat_area() + u": " + self.unofficial_number
             else:
                 return self.unofficial_number
+
+    
     def kat_area(self):
         for a in self.area.all():
             if a.kat_area():
@@ -271,12 +274,15 @@ class LogbookEntry(models.Model):
     text    = models.TextField()
     href    = models.CharField(max_length=100)
     
+    # turn these into functions
     logbookentry_next  = models.ForeignKey('LogbookEntry', related_name='pnext', blank=True,null=True)
     logbookentry_prev  = models.ForeignKey('LogbookEntry', related_name='pprev', blank=True,null=True)
     
     class Meta:
 	   verbose_name_plural = "Logbook Entries"
         # several PersonTrips point in to this object
+    class Meta:
+        ordering = ('-date',)
     
     def __unicode__(self):
         return "%s: (%s)" % (self.date, self.title)
@@ -287,6 +293,7 @@ class PersonTrip(models.Model):
         # this will be a foreign key of the place(s) the trip went through
         # possibly a trip has a plurality of triplets pointing into it
     place           = models.CharField(max_length=100)  
+    # should add cave thing here (copied from logbook maybe)
     date            = models.DateField()    
     time_underground = models.FloatField()  
     logbook_entry    = models.ForeignKey(LogbookEntry)
@@ -473,4 +480,6 @@ class Survey(models.Model):
 	    return self.scannedimage_set.filter(contents='plan')
 
     def elevations(self):
-	    return self.scannedimage_set.filter(contents='elevation')
\ No newline at end of file
+	    return self.scannedimage_set.filter(contents='elevation')
+    
+    
\ No newline at end of file
diff --git a/troggle/expo/views_caves.py b/troggle/expo/views_caves.py
index 691dd43d1..3363a2e96 100644
--- a/troggle/expo/views_caves.py
+++ b/troggle/expo/views_caves.py
@@ -7,13 +7,20 @@ import search
 
 def caveindex(request):
     caves = Cave.objects.all()
-    return render_to_response('caveindex.html', {'caves': caves, 'settings': settings})
+    notablecavehrefs = [ "161", "204", "258", "76" ]
+    notablecaves = [ Cave.objects.get(href=href)  for href in notablecavehrefs ]
+    return render_to_response('caveindex.html', {'caves': caves, 'notablecaves':notablecaves, 'settings': settings})
 
 def cave(request, cave_id):
     #hm, we're only choosing by the number within kataster, needs to be fixed. Caves in 1626 will presumably not work. - AC 7DEC08
     cave = Cave.objects.filter(kataster_number = cave_id)[0]
     return render_to_response('cave.html', {'cave': cave, 'settings': settings})
 
+def cavehref(request, href):
+    cave = Cave.objects.get(href=href)
+    return render_to_response('cave.html', {'cave': cave, 'settings': settings})
+
+
 def ent(request, cave_id, ent_letter):
     cave = Cave.objects.filter(kataster_number = cave_id)[0]
     cave_and_ent = CaveAndEntrance.objects.filter(cave = cave).filter(entrance_letter = ent_letter)[0]
diff --git a/troggle/media/css/main2.css b/troggle/media/css/main2.css
index 4f827b30b..c7c7276b5 100644
--- a/troggle/media/css/main2.css
+++ b/troggle/media/css/main2.css
@@ -149,7 +149,7 @@ table.survexcontibutions td.roles
 table.survexcontibutions td.survexblock
 {    width:260px;  background-color:#feeeed; }
 table.survexcontibutions td.trip
-{   width:190px;   }
+{   width:280px;   }
 table.survexcontibutions td.place
 {   width:140px;   }
 
diff --git a/troggle/parsers/cavetab.py b/troggle/parsers/cavetab.py
index 7f3146a5c..320387933 100644
--- a/troggle/parsers/cavetab.py
+++ b/troggle/parsers/cavetab.py
@@ -56,9 +56,6 @@ MarkingComment = 43
 Findability = 44
 FindabilityComment = 45
 
-cavetab = open(os.path.join(settings.EXPOWEB, "noinfo", "CAVETAB2.CSV"))
-caveReader = csv.reader(cavetab)
-caveReader.next() # Strip out column headers
 
 def html_to_wiki(text):
     if type(text) != str:
@@ -138,130 +135,137 @@ def html_to_wiki(text):
             text2 = ""
     return out
 
-for katArea in ['1623', '1626']:
-    if not models.Area.objects.filter(short_name = katArea):
-        newArea = models.Area(short_name = katArea)
-        newArea.save()
-area1626 = models.Area.objects.filter(short_name = '1626')[0]
-area1623 = models.Area.objects.filter(short_name = '1623')[0]
+def LoadCaveTab():
+    cavetab = open(os.path.join(settings.EXPOWEB, "noinfo", "CAVETAB2.CSV"))
+    caveReader = csv.reader(cavetab)
+    caveReader.next() # Strip out column headers
+    
+    for katArea in ['1623', '1626']:
+        if not models.Area.objects.filter(short_name = katArea):
+            newArea = models.Area(short_name = katArea)
+            newArea.save()
+    area1626 = models.Area.objects.filter(short_name = '1626')[0]
+    area1623 = models.Area.objects.filter(short_name = '1623')[0]
+    
+    counter=0
+    for line in caveReader :
+        if line[Area] == 'nonexistent':
+            continue
+        entranceLetters=[] #Used in caves that have mulitlple entrances, which are not described on seperate lines
+        if line[MultipleEntrances] == 'yes' or line[MultipleEntrances]=='':
+            args = {}
+            def addToArgs(CSVname, modelName):
+                if line[CSVname]:
+                    args[modelName] = html_to_wiki(line[CSVname])
+            addToArgs(KatasterNumber, "kataster_number")
+            addToArgs(KatStatusCode, "kataster_code")
+            addToArgs(UnofficialNumber, "unofficial_number")
+            addToArgs(Name, "official_name")
+            addToArgs(Comment, "notes")
+            addToArgs(Explorers, "explorers")
+            addToArgs(UndergroundDescription, "underground_description")
+            addToArgs(Equipment, "equipment")
+            addToArgs(KatasterStatus, "kataster_status")
+            addToArgs(References, "references")
+            addToArgs(UndergroundCentreLine, "underground_centre_line")
+            addToArgs(UndergroundDrawnSurvey, "survey")
+            addToArgs(Length, "length")
+            addToArgs(Depth, "depth")
+            addToArgs(Extent, "extent")
+            addToArgs(SurvexFile, "survex_file")
+            addToArgs(Notes, "notes")
 
-counter=0
-for line in caveReader :
-    if line[Area] == 'nonexistent':
-        continue
-    entranceLetters=[] #Used in caves that have mulitlple entrances, which are not described on seperate lines
-    if line[MultipleEntrances] == 'yes' or line[MultipleEntrances]=='':
-        args = {}
-        def addToArgs(CSVname, modelName):
-            if line[CSVname]:
-                args[modelName] = html_to_wiki(line[CSVname])
-        addToArgs(KatasterNumber, "kataster_number")
-        addToArgs(KatStatusCode, "kataster_code")
-        addToArgs(UnofficialNumber, "unofficial_number")
-        addToArgs(Name, "official_name")
-        addToArgs(Comment, "notes")
-        addToArgs(Explorers, "explorers")
-        addToArgs(UndergroundDescription, "underground_description")
-        addToArgs(Equipment, "equipment")
-        addToArgs(KatasterStatus, "kataster_status")
-        addToArgs(References, "references")
-        addToArgs(UndergroundCentreLine, "underground_centre_line")
-        addToArgs(UndergroundDrawnSurvey, "survey")
-        addToArgs(Length, "length")
-        addToArgs(Depth, "depth")
-        addToArgs(Extent, "extent")
-        addToArgs(SurvexFile, "survex_file")
-        addToArgs(Notes, "notes")
-
-        newCave = models.Cave(**args)
-        newCave.save()
-
-        if line[Area]:
-            if line[Area] ==  "1626":
-                newCave.area.add(area1626)
-            else:
-                area = models.Area.objects.filter(short_name = line[Area])
-                if area:
-                    newArea = area[0]
+            newCave = models.Cave(**args)
+            newCave.Sethref()
+            newCave.save()
+    
+            if line[Area]:
+                if line[Area] ==  "1626":
+                    newCave.area.add(area1626)
                 else:
-                    newArea = models.Area(short_name = line[Area], parent = area1623)
-                    newArea.save()
-                newCave.area.add(newArea)
-        else:
-           newCave.area.add(area1623)
-
-        newCave.save()
+                    area = models.Area.objects.filter(short_name = line[Area])
+                    if area:
+                        newArea = area[0]
+                    else:
+                        newArea = models.Area(short_name = line[Area], parent = area1623)
+                        newArea.save()
+                    newCave.area.add(newArea)
+            else:
+                newCave.area.add(area1623)
+    
+            newCave.save()
 
         if line[UnofficialName]:
             newUnofficialName = models.OtherCaveName(cave = newCave, name = line[UnofficialName])
             newUnofficialName.save()
-    if line[MultipleEntrances] == '' or \
-        line[MultipleEntrances] == 'entrance' or \
-        line[MultipleEntrances] == 'last entrance':
-        args = {}
-        def addToArgs(CSVname, modelName):
-            if line[CSVname]:
-                args[modelName] = html_to_wiki(line[CSVname])
-        def addToArgsViaDict(CSVname, modelName, dictionary):
-            if line[CSVname]:
-                args[modelName] = dictionary[html_to_wiki(line[CSVname])]
-        addToArgs(EntranceName, 'name')
-        addToArgs(Explorers, 'explorers')
-        addToArgs(Map, 'map_description')
-        addToArgs(Location, 'location_description')
-        addToArgs(Approach, 'approach')
-        addToArgs(EntranceDescription, 'entrance_description')
-        addToArgs(UndergroundDescription, 'underground_description')
-        addToArgs(PhotoOfLocation, 'photo')
-        addToArgsViaDict(Marking, 'marking', {"Paint": "P",
-                                              "Paint (?)": "P?",
-                                              "Tag": "T",
-                                              "Tag (?)": "T?",
-                                              "Retagged": "R",
-                                              "Retag": "R",
-                                              "Spit": "S",
-                                              "Spit (?)": "S?",
-                                              "Unmarked": "U",
-                                              "": "?",
-                                              })
-        addToArgs(MarkingComment, 'marking_comment')
-        addToArgsViaDict(Findability, 'findability', {"Surveyed": "S",
-                                                      "Lost": "L",
-                                                      "Refindable": "R",
-                                                      "": "?",
-                                                      "?": "?",
-                                                      })
-        addToArgs(FindabilityComment, 'findability_description')
-        addToArgs(Easting, 'easting')
-        addToArgs(Northing, 'northing')
-        addToArgs(Altitude, 'alt')
-        addToArgs(DescriptionOfOtherPoint, 'other_description')
-        def addToArgsSurveyStation(CSVname, modelName):
-            if line[CSVname]:
-                surveyPoint = models.SurveyStation(name = line[CSVname])
-                surveyPoint.save()
-                args[modelName] = html_to_wiki(surveyPoint)
-        addToArgsSurveyStation(TagPoint, 'tag_station')
-        addToArgsSurveyStation(ExactEntrance, 'exact_station')
-        addToArgsSurveyStation(OtherPoint, 'other_station')
-        addToArgs(OtherPoint, 'other_description')
-        if line[GPSpreSA]:
-            addToArgsSurveyStation(GPSpreSA, 'other_station')
-            args['other_description'] = 'pre selective availability GPS'
-        if line[GPSpostSA]:
-            addToArgsSurveyStation(GPSpostSA, 'other_station')
-            args['other_description'] = 'post selective availability GPS'
-        addToArgs(Bearings, 'bearings')
-        newEntrance = models.Entrance(**args)
-        newEntrance.save()
-
-        if line[Entrances]:
-            entrance_letter = line[Entrances]
-        else:
-            entrance_letter = ''
-
-        newCaveAndEntrance = models.CaveAndEntrance(cave = newCave, entrance = newEntrance, entrance_letter = entrance_letter)
-        newCaveAndEntrance.save()
+    
+        if line[MultipleEntrances] == '' or \
+            line[MultipleEntrances] == 'entrance' or \
+            line[MultipleEntrances] == 'last entrance':
+            args = {}
+            def addToArgs(CSVname, modelName):
+                if line[CSVname]:
+                    args[modelName] = html_to_wiki(line[CSVname])
+            def addToArgsViaDict(CSVname, modelName, dictionary):
+                if line[CSVname]:
+                    args[modelName] = dictionary[html_to_wiki(line[CSVname])]
+            addToArgs(EntranceName, 'name')
+            addToArgs(Explorers, 'explorers')
+            addToArgs(Map, 'map_description')
+            addToArgs(Location, 'location_description')
+            addToArgs(Approach, 'approach')
+            addToArgs(EntranceDescription, 'entrance_description')
+            addToArgs(UndergroundDescription, 'underground_description')
+            addToArgs(PhotoOfLocation, 'photo')
+            addToArgsViaDict(Marking, 'marking', {"Paint": "P",
+                                                "Paint (?)": "P?",
+                                                "Tag": "T",
+                                                "Tag (?)": "T?",
+                                                "Retagged": "R",
+                                                "Retag": "R",
+                                                "Spit": "S",
+                                                "Spit (?)": "S?",
+                                                "Unmarked": "U",
+                                                "": "?",
+                                                })
+            addToArgs(MarkingComment, 'marking_comment')
+            addToArgsViaDict(Findability, 'findability', {"Surveyed": "S",
+                                                        "Lost": "L",
+                                                        "Refindable": "R",
+                                                        "": "?",
+                                                        "?": "?",
+                                                        })
+            addToArgs(FindabilityComment, 'findability_description')
+            addToArgs(Easting, 'easting')
+            addToArgs(Northing, 'northing')
+            addToArgs(Altitude, 'alt')
+            addToArgs(DescriptionOfOtherPoint, 'other_description')
+            def addToArgsSurveyStation(CSVname, modelName):
+                if line[CSVname]:
+                    surveyPoint = models.SurveyStation(name = line[CSVname])
+                    surveyPoint.save()
+                    args[modelName] = html_to_wiki(surveyPoint)
+            addToArgsSurveyStation(TagPoint, 'tag_station')
+            addToArgsSurveyStation(ExactEntrance, 'exact_station')
+            addToArgsSurveyStation(OtherPoint, 'other_station')
+            addToArgs(OtherPoint, 'other_description')
+            if line[GPSpreSA]:
+                addToArgsSurveyStation(GPSpreSA, 'other_station')
+                args['other_description'] = 'pre selective availability GPS'
+            if line[GPSpostSA]:
+                addToArgsSurveyStation(GPSpostSA, 'other_station')
+                args['other_description'] = 'post selective availability GPS'
+            addToArgs(Bearings, 'bearings')
+            newEntrance = models.Entrance(**args)
+            newEntrance.save()
+    
+            if line[Entrances]:
+                entrance_letter = line[Entrances]
+            else:
+                entrance_letter = ''
+    
+            newCaveAndEntrance = models.CaveAndEntrance(cave = newCave, entrance = newEntrance, entrance_letter = entrance_letter)
+            newCaveAndEntrance.save()
 
 
 # lookup function modelled on GetPersonExpeditionNameLookup
@@ -277,6 +281,9 @@ def GetCaveLookup():
             Gcavelookup[cave.kataster_number] = cave
         if cave.unofficial_number:
             Gcavelookup[cave.unofficial_number] = cave
+    
+    Gcavelookup["tunnocks"] = Gcavelookup["258"]
+    Gcavelookup["hauchhole"] = Gcavelookup["234"]
     return Gcavelookup
         
         
\ No newline at end of file
diff --git a/troggle/parsers/logbooks.py b/troggle/parsers/logbooks.py
index 9ad1962ec..3bad8c4bc 100644
--- a/troggle/parsers/logbooks.py
+++ b/troggle/parsers/logbooks.py
@@ -63,13 +63,16 @@ def GetTripCave(place):                     #need to be fuzzier about matching h
         return
 
 
+noncaveplaces = [ "Journey", "Loser Plateau" ]
 def EnterLogIntoDbase(date, place, title, text, trippeople, expedition, logtime_underground):
     trippersons, author = GetTripPersons(trippeople, expedition, logtime_underground)
 #    tripCave = GetTripCave(place)
 
     lbo = models.LogbookEntry(date=date, place=place, title=title[:50], text=text, author=author, expedition=expedition)
-    lbo.cave=GetCaveLookup().get(place)
-    print "pppp", place, lbo.cave
+    lplace = place.lower()
+    if lplace not in noncaveplaces:
+        lbo.cave=GetCaveLookup().get(lplace)
+        print "pppp %s |%s|" % (lplace, str(lbo.cave))
     
     lbo.save()
     #print "ttt", date, place
@@ -158,7 +161,7 @@ def Parseloghtml01(year, expedition, txt):
         tripid = mtripid and mtripid.group(1) or ""
         tripheader = re.sub("</?(?:[ab]|span)[^>]*>", "", tripheader)
 
-        print [tripheader]
+        #print [tripheader]
         #continue
 
         tripdate, triptitle, trippeople = tripheader.split("|")
diff --git a/troggle/templates/cave.html b/troggle/templates/cave.html
index 24c010127..f8a511dbb 100644
--- a/troggle/templates/cave.html
+++ b/troggle/templates/cave.html
@@ -2,6 +2,19 @@
 {% load wiki_markup %}
 
 {% block content %}
+
+<div id="col2">
+  <h3>All trips done in this cave</h3>
+  <table>
+  {% for logbookentry in cave.logbookentry_set.all %}
+    <tr>
+      <td>{{logbookentry.date}}</td>
+      <td><a href="{% url logbookentry logbookentry.href %}">{{logbookentry.title|safe}}</a></td>
+    </tr>
+  {% endfor %}
+  </table>
+</div>
+
 {% if cave.entrances %}
     <h2>Entrances</h2>
     {% for ent in cave.entrances %}
diff --git a/troggle/templates/caveindex.html b/troggle/templates/caveindex.html
index d97aff8cb..b38e69fec 100644
--- a/troggle/templates/caveindex.html
+++ b/troggle/templates/caveindex.html
@@ -4,7 +4,19 @@
 {% block title %}Cave Index{% endblock %}
 
 {% block content %}
-{% for cave in caves %}
-<p>{{ cave }} <a href="{{settings.URL_ROOT}}cave/{{ cave.kataster_number }}/">{{ cave.official_name|wiki_to_html_short }}</a> </p>
+
+<h3>Notable caves</h3>
+<ul>
+{% for cave in notablecaves %}
+  <li> <a href="{% url cave cave.href %}">{{cave.official_name|wiki_to_html_short}} ({{cave.href}})</a> </li>
 {% endfor %}
+</ul>
+
+<h3>All caves</h3>
+<ul>
+{% for cave in caves %}
+  <li> <a href="{% url cave cave.href %}">{{cave.official_name|wiki_to_html_short}} ({{cave.href}})</a> </li>
+{% endfor %}
+</ul>
+
 {% endblock %}
\ No newline at end of file
diff --git a/troggle/templates/expedition.html b/troggle/templates/expedition.html
index a7add9221..e4f12f05f 100644
--- a/troggle/templates/expedition.html
+++ b/troggle/templates/expedition.html
@@ -38,7 +38,12 @@
     <td>{{logbookentry.date}}</td>
     <td><a href="{% url logbookentry logbookentry.href %}">{{logbookentry.title|safe}}</td>
     <td><a href="{% url personexpedition logbookentry.author.person.href logbookentry.author.expedition.year %}">{{logbookentry.author.name}}</a></td>
-    <td>{{logbookentry.place}}</td>
+
+    {% if logbookentry.cave %}
+      <td><a href="{% url cave logbookentry.cave.href %}">{{logbookentry.place}}</a></td>
+    {% else %}
+      <td>{{logbookentry.place}}</td>
+    {% endif %}
   </tr>
 {% endfor %}
 </table>
diff --git a/troggle/templates/index.html b/troggle/templates/index.html
index f30c1002d..2dad17b52 100644
--- a/troggle/templates/index.html
+++ b/troggle/templates/index.html
@@ -9,26 +9,25 @@
 <b>Work down through an expedition page link</b>
 <p class="indent"><b>Remaining work:</b> 
 
-<p>continue to build up the network; </p>
-<p>tables of trips per year per person;</p> 
+<p>(separate out the recent/notable people) vast front-page layout table of folks and caving trips and years; </p>
 <p>parse 1995-1976 logbooks; </p>
-<p>continue to correct the name matching and spelling; </p>
+<p>name matching and spelling in survex files; </p>
 <p>detect T/U on log entries; </p>
+<p>Improve logbook wikihtml text</p>
 <p>match caves to log entries; </p>
-<p>see the cave list;</p> 
 <p>simplify the survex parsing code (if necessary); </p>
-<p>vast front-page layout table of folks and caving trips and years; </p>
 <p>links between logbooks and survex blocks to cave things; </p>
 <p>where are the subcaves; </p>
 <p>mini-tree of survexblocks; </p>
 <p>connect sketches to caves to survey blocks and render thumbnailwise; </p>
 <p>all images to start appearing in pages; and so on</p>
+<p>tables of trips per year per person;</p> 
 
 <h3>{{message}}</h3>
 
 <ul>
-    <li><a href="{% url personindex %}">List of People</a></li>
-    <li><a href="{% url caveindex %}">List of Caves</a></li>
+    <li><b><a href="{% url personindex %}">List of People</a></b></li>
+    <li><b><a href="{% url caveindex %}">List of Caves</a></b></li>
     <li><a href="/statistics">Statistics of what's loaded in the database</a></li>
     <li><a href="{% url survexindex all %}">Survex directory</a></li>
     <li><a href="{% url survey %}">Survey files</a></li>
@@ -40,13 +39,11 @@
 </form>
 
 <ul id="expeditionlist">
-
-    {% for expedition in expeditions %}
-        <li>
-            <a href="{% url expedition expedition.year %}">{{expedition.name}}</a>
-        </li>
-    {% endfor %}
-
+{% for expedition in expeditions %}
+<li>
+  <a href="{% url expedition expedition.year %}">{{expedition.name}}</a>
+</li>
+{% endfor %}
 </ul>
 
 {% endblock %}
diff --git a/troggle/templates/logbookentry.html b/troggle/templates/logbookentry.html
index f742edd6a..57c1c1819 100644
--- a/troggle/templates/logbookentry.html
+++ b/troggle/templates/logbookentry.html
@@ -8,7 +8,12 @@
 
 <div id="col2">
 <p><a href="{% url expedition logbookentry.expedition.year %}">{{logbookentry.expedition.name}}</a></p>
-<p>place: {{logbookentry.place}}</p>
+
+{% if logbookentry.cave %}
+  <p>place: <a href="{% url cave logbookentry.cave.href %}">{{logbookentry.place}}</p>
+{% else %}
+  <p>{{logbookentry.place}}</p>
+{% endif %}
 
 <p>
   {% if logbookentry.logbookentry_prev %}
diff --git a/troggle/templates/personexpedition.html b/troggle/templates/personexpedition.html
index 792e20a19..e1e481bc0 100644
--- a/troggle/templates/personexpedition.html
+++ b/troggle/templates/personexpedition.html
@@ -36,7 +36,12 @@
     {% for persontrip in persondate.1.persontrips %}
       <tr>
         <td class="trip"><a href="{% url logbookentry persontrip.logbook_entry.href %}">{{persontrip.logbook_entry.title|safe}}</a></td>
-        <td class="place">{{persontrip.place}}</td>
+
+        {% if persontrip.logbook_entry.cave %}
+          <td><a href="{% url cave persontrip.logbook_entry.cave.href %}">{{persontrip.place}}</a></td>
+        {% else %}
+          <td>{{persontrip.place}}</td>
+        {% endif %}
       </tr>
     {% endfor %}
     </table>
diff --git a/troggle/urls.py b/troggle/urls.py
index 251fb73c2..36c502ebf 100644
--- a/troggle/urls.py
+++ b/troggle/urls.py
@@ -9,8 +9,10 @@ urlpatterns = patterns('',
     
     (r'^$', frontPage),
     url(r'^caveindex$', caveindex, name="caveindex"),
+    url(r'^cave/(?P<cave_id>[^/]+)/?$', cave),
+    
+    url(r'^cavehref/(.+)$', cave, name="cave"),
     
-    (r'^cave/(?P<cave_id>[^/]+)/?$', cave),
     (r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent),
     #(r'^cave/(?P<cave_id>[^/]+)/edit/$', edit_cave),
     (r'^cavesearch', caveSearch),
diff --git a/years/2006/logbook/logbook_06.txt b/years/2006/logbook/logbook_06.txt
index eae827648..7339a08e7 100644
--- a/years/2006/logbook/logbook_06.txt
+++ b/years/2006/logbook/logbook_06.txt
@@ -282,7 +282,7 @@ FRIDAY 28th JULY
 OOPS!
 
 
-===24/7/06 | Tunnocks Trips | Tom, Mark, Aaron ===
+===24/7/06 | Tunnocks - Trips | Tom, Mark, Aaron ===
 
 <p> BECKA - actually three dates given: 24,25,26 July