diff --git a/core/models.py b/core/models.py
index dc51024..3db3b29 100644
--- a/core/models.py
+++ b/core/models.py
@@ -274,16 +274,20 @@ class LogbookEntry(TroggleModel):
             return CaveSlug.objects.get(slug = self.cave_slug).cave
         # parse error in python3.8
         # https://stackoverflow.com/questions/41343263/provide-classcell-example-for-python-3-6-metaclass
-        return super(LogbookEntry, self).__getattribute__(item)
+        #https://github.com/django/django/pull/7653
+        #return TroggleModel.__getattribute__(item) 
+        #return super(LogbookEntry, self).__getattribute__(item) # works in py3.5, fails in 3.8
+        return TroggleModel.__getattribute__(self,item) # works in py 3.5 AND in 3.8
 
     def __init__(self, *args, **kwargs):
         if "cave" in list(kwargs.keys()):
             if kwargs["cave"] is not None:
                 kwargs["cave_slug"] = CaveSlug.objects.get(cave=kwargs["cave"], primary=True).slug
             kwargs.pop("cave")
-        # parse error in python3.8
-        # https://stackoverflow.com/questions/41343263/provide-classcell-example-for-python-3-6-metaclass
-        return super(LogbookEntry, self).__init__(*args, **kwargs)
+        # parse error in python3.8        
+        #return TroggleModel().__init__(self, *args, **kwargs) # parses OK, fails at runtime in 3.8
+        return super(LogbookEntry, self).__init__(*args, **kwargs) # works in py3.5
+        #return TroggleModel.__init__(*args, **kwargs) # fails in py3.5, 
 
     def isLogbookEntry(self): # Function used in templates
         return True
@@ -520,10 +524,10 @@ class Cave(TroggleModel):
     
     def writeDataFile(self):
         try:
-            f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w")
+            f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "wb")
         except:
             subprocess.call(settings.FIX_PERMISSIONS) 
-            f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w")
+            f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "wb")
         t = loader.get_template('dataformat/cave.xml')
         c = Context({'cave': self})
         u = t.render(c)
@@ -733,12 +737,14 @@ class CaveDescription(TroggleModel):
     def save(self):
         """
         Overridden save method which stores wikilinks in text as links in database.
-        """
-        super(CaveDescription, self).save()
+        """      
+        TroggleModel.save()
+        #super(CaveDescription, self).save() # fails in python 3.8, OK in python 3.5
         qm_list=get_related_by_wikilinks(self.description)
         for qm in qm_list:
             self.linked_qms.add(qm)
-        super(CaveDescription, self).save()
+        TroggleModel.save() 
+        #super(CaveDescription, self).save() # fails in python 3.8, OK in python 3.5
 
 class NewSubCave(TroggleModel):
     name = models.CharField(max_length=200, unique = True)