diff --git a/parsers/survex.py b/parsers/survex.py
index fc96fb8..b0b0a8e 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -583,14 +583,18 @@ class LoadingSurvex():
         self.currentsurvexfile.save() # django insists on this although it is already saved !?
 
         self.datastar = copy.deepcopy(self.datastardefault)
-        #self.datastack.append(self.datastar) # and extra push will do it ?
-
         self.flagsstar = copy.deepcopy(self.flagsdefault)
-        #self.flagsstack.append(self.flagsstar)
+        blkid = None
+        pathlist = None
+        args = None
+        previousnlegs = None
+        oldflags = None
         blockcount = 0
         self.lineno = 0
+
         def tickle():
             nonlocal blockcount
+            
             blockcount +=1
             if blockcount % 10 ==0 :
                 print(".", file=sys.stderr,end='')
@@ -600,6 +604,151 @@ class LoadingSurvex():
                 print("    ", file=sys.stderr,end='')
             sys.stderr.flush()
 
+        def printbegin():
+            nonlocal blkid
+            nonlocal pathlist
+
+            depth = " " * self.depthbegin
+            print("{:2}{}   - Begin for :'{}'".format(self.depthbegin,depth, blkid))
+            pathlist = ""
+            for id in self.stackbegin:
+                if len(id) > 0:
+                    pathlist += "." + id
+
+        def printend():
+            nonlocal args
+            nonlocal previousnlegs
+
+            depth = " " * self.depthbegin
+            print("{:2}{}   - End   from:'{}'".format(self.depthbegin,depth,args))
+            legsinblock = self.survexlegsnumber - previousnlegs
+            print("{:2}{}   - LEGS: {} (previous: {}, now:{})".format(self.depthbegin,
+                depth, legsinblock, previousnlegs, self.survexlegsnumber))
+            survexblock.legsall = legsinblock
+
+        def pushblock():
+            nonlocal blkid
+
+            print(" # datastack at  1 *begin {} 'type':".format(blkid), end="")
+            for dict in self.datastack:
+                print("'{}'   ".format(dict["type"].upper()), end="")
+            print("")
+            print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
+            # ------------ * DATA
+            self.datastack.append(copy.deepcopy(self.datastar))
+            # ------------ * DATA
+            print(" # datastack at  2 *begin {} 'type':".format(blkid), end="")
+            for dict in self.datastack:
+                print("'{}'   ".format(dict["type"].upper()), end="")
+            print("")
+            print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
+            # ------------ * FLAGS
+            self.flagsstack.append(copy.deepcopy(self.flagsstar))
+            # ------------ * FLAGS
+
+        def popblock():
+            nonlocal blkid
+            nonlocal oldflags
+
+            print(" # datastack  at  *end '{} 'type':".format(blkid), end="")
+            for dict in self.datastack:
+                print("'{}'   ".format(dict["type"].upper()), end="")
+            print("")
+            print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
+            # ------------ * DATA
+            self.datastar  = copy.deepcopy(self.datastack.pop())
+            # ------------ * DATA
+            print(" # datastack  after *end '{} 'type':".format(blkid), end="")
+            for dict in self.datastack:
+                print("'{}'   ".format(dict["type"].upper()), end="")
+            print("")
+            print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
+            # ------------ * FLAGS
+            self.flagsstar = copy.deepcopy(self.flagsstack.pop()) 
+            # ------------ * FLAGS
+            if oldflags["any"] != self.flagsstar["any"]:
+                print(" # POP  'any' flag now:'{}'  was:{} ".format(self.flagsstar["any"], oldflags["any"]))
+
+        def starstatement(mstar):
+            nonlocal survexblock
+            nonlocal blkid
+            nonlocal pathlist
+            nonlocal args
+            nonlocal previousnlegs
+            nonlocal oldflags
+
+            cmd, args = mstar.groups()
+            cmd = cmd.lower()
+
+            # ------------------------BEGIN
+            if re.match("begin$(?i)", cmd):
+                blkid = args.lower()
+                # PUSH state ++++++++++++++
+                self.stackbegin.append(blkid)
+                pushblock()
+                # PUSH state ++++++++++++++
+                previousnlegs = self.survexlegsnumber
+                printbegin()
+                newsurvexblock = models_survex.SurvexBlock(name=blkid, parent=survexblock, 
+                        survexpath=pathlist, 
+                        cave=self.currentcave, survexfile=self.currentsurvexfile, 
+                        legsall=0, legssplay=0, legssurfc=0, totalleglength=0.0)
+                newsurvexblock.save()
+                newsurvexblock.title = "("+survexblock.title+")" # copy parent inititally
+                survexblock = newsurvexblock
+                survexblock.save() # django insists on this , but we want to save at the end !
+                tickle()
+
+            # ---------------------------END
+            elif re.match("end$(?i)", cmd):
+                printend()
+                try:
+                    survexblock.parent.save() # django insists on this although it is already saved !?
+                except:
+                    print(survexblock.parent, file=sys.stderr)
+                    raise
+                try:
+                    survexblock.save() # save to db at end of block
+                except:
+                    print(survexblock, file=sys.stderr)
+                    raise
+               # POP  state ++++++++++++++
+                popblock()
+                blkid = self.stackbegin.pop()
+                # POP  state ++++++++++++++
+                self.currentsurvexblock = survexblock.parent
+                survexblock = survexblock.parent
+                oldflags = self.flagsstar
+                self.depthbegin -= 1
+
+            # -----------------------------
+            elif re.match("(?i)title$", cmd):
+                survexblock.title = args # block has own title, overwrite that from parent
+            elif re.match("(?i)ref$", cmd):
+                self.LoadSurvexRef(survexblock, args)
+            elif re.match("(?i)flags$", cmd):
+                oldflags = self.flagsstar
+                self.LoadSurvexFlags(args)
+                if oldflags["any"] != self.flagsstar["any"]:
+                    print(" # CHANGE 'any' flag now:'{}'  was:{} ".format(self.flagsstar["any"], oldflags["any"]))
+
+            elif re.match("(?i)data$", cmd):
+                self.LoadSurvexDataCmd(survexblock, args)
+            elif re.match("(?i)date$", cmd):
+                self.LoadSurvexDate(survexblock, args)
+            elif re.match("(?i)team$", cmd):
+                self.LoadSurvexTeam(survexblock, args)
+            elif re.match("(?i)set$", cmd) and re.match("(?i)names", args):
+                pass
+            elif re.match("(?i)include$", cmd):
+                message = " ! -ERROR *include command not expected here {}. Re-run a full Survex import.".format(path)
+                print(message)
+                print(message,file=sys.stderr)
+                models.DataIssue.objects.create(parser='survex', message=message)
+            else:
+                self.LoadSurvexIgnore(survexblock, args, cmd)
+
+
         for svxline in svxlines:
             self.lineno += 1
             sline, comment = self.rx_comment.match(svxline).groups()
@@ -613,112 +762,7 @@ class LoadingSurvex():
             # detect a star command
             mstar = self.rx_star.match(sline)
             if mstar: # yes we are reading a *cmd
-                cmd, args = mstar.groups()
-                cmd = cmd.lower()
-
-                # ------------------------BEGIN
-                if re.match("begin$(?i)", cmd):
-                    depth = " " * self.depthbegin
-                    blkid = args.lower()
-                    self.stackbegin.append(blkid)
-                    # PUSH state ++++++++++++++
-                    print(" # datastack at  1 *begin {} 'type':".format(blkid), end="")
-                    for dict in self.datastack:
-                        print("'{}'   ".format(dict["type"].upper()), end="")
-                    print("")
-                    print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
-                    self.flagsstack.append(copy.deepcopy(self.flagsstar))
-                    self.datastack.append(copy.deepcopy(self.datastar))
-                    print(" # datastack at  2 *begin {} 'type':".format(blkid), end="")
-                    for dict in self.datastack:
-                        print("'{}'   ".format(dict["type"].upper()), end="")
-                    print("")
-                    print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
-                    # PUSH state ++++++++++++++
-
-                    previousnlegs = self.survexlegsnumber
-                    print("{:2}{}   - Begin for :'{}'".format(self.depthbegin,depth, blkid))
-                    pathlist = ""
-                    for id in self.stackbegin:
-                        if len(id) > 0:
-                            pathlist += "." + id
-                    newsurvexblock = models_survex.SurvexBlock(name=blkid, parent=survexblock, 
-                            survexpath=pathlist, 
-                            cave=self.currentcave, survexfile=self.currentsurvexfile, 
-                            legsall=0, legssplay=0, legssurfc=0, totalleglength=0.0)
-                    newsurvexblock.save()
-                    newsurvexblock.title = "("+survexblock.title+")" # copy parent inititally
-                    survexblock = newsurvexblock
-                    survexblock.save() # django insists on this , but we want to save at the end !
-                    tickle()
-
-                # ---------------------------END
-                elif re.match("end$(?i)", cmd):
-                    depth = " " * self.depthbegin
-
-                    print("{:2}{}   - End   from:'{}'".format(self.depthbegin,depth,args))
-                    legsinblock = self.survexlegsnumber - previousnlegs
-                    print("{:2}{}   - LEGS: {} (previous: {}, now:{})".format(self.depthbegin,
-                        depth,legsinblock,previousnlegs,self.survexlegsnumber))
-                    survexblock.legsall = legsinblock
-                    try:
-                        survexblock.parent.save() # django insists on this although it is already saved !?
-                    except:
-                        print(survexblock.parent, file=sys.stderr)
-                        raise
-                    try:
-                        survexblock.save() # save to db at end of block
-                    except:
-                        print(survexblock, file=sys.stderr)
-                        raise
-                    print(" # datastack  at  *end '{} 'type':".format(blkid), end="")
-                    for dict in self.datastack:
-                        print("'{}'   ".format(dict["type"].upper()), end="")
-                    print("")
-                    print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
-                    # POP  state ++++++++++++++
-                    self.datastar  = copy.deepcopy(self.datastack.pop())
-                    print(" # datastack  after *end '{} 'type':".format(blkid), end="")
-                    for dict in self.datastack:
-                        print("'{}'   ".format(dict["type"].upper()), end="")
-                    print("")
-                    print("'{}' self.datastar  ".format(self.datastar["type"].upper()))
-                    self.flagsstar = copy.deepcopy(self.flagsstack.pop()) 
-                    if oldflags["any"] != self.flagsstar["any"]:
-                        print(" # POP  'any' flag now:'{}'  was:{} ".format(self.flagsstar["any"], oldflags["any"]))
-                    # POP  state ++++++++++++++
-                    self.currentsurvexblock = survexblock.parent
-                    survexblock = survexblock.parent
-                    blkid = self.stackbegin.pop()
-                    oldflags = self.flagsstar
-                    self.depthbegin -= 1
-
-                # -----------------------------
-                elif re.match("(?i)title$", cmd):
-                    survexblock.title = args # block has own title, overwrite that from parent
-                elif re.match("(?i)ref$", cmd):
-                    self.LoadSurvexRef(survexblock, args)
-                elif re.match("(?i)flags$", cmd):
-                    oldflags = self.flagsstar
-                    self.LoadSurvexFlags(args)
-                    if oldflags["any"] != self.flagsstar["any"]:
-                        print(" # CHANGE 'any' flag now:'{}'  was:{} ".format(self.flagsstar["any"], oldflags["any"]))
-
-                elif re.match("(?i)data$", cmd):
-                    self.LoadSurvexDataCmd(survexblock, args)
-                elif re.match("(?i)date$", cmd):
-                    self.LoadSurvexDate(survexblock, args)
-                elif re.match("(?i)team$", cmd):
-                    self.LoadSurvexTeam(survexblock, args)
-                elif re.match("(?i)set$", cmd) and re.match("(?i)names", args):
-                    pass
-                elif re.match("(?i)include$", cmd):
-                    message = " ! -ERROR *include command not expected here {}. Re-run a full Survex import.".format(path)
-                    print(message)
-                    print(message,file=sys.stderr)
-                    models.DataIssue.objects.create(parser='survex', message=message)
-                else:
-                    self.LoadSurvexIgnore(survexblock, args, cmd)
+                starstatement(mstar)
             else: # not a *cmd so we are reading data OR rx_comment failed
                 self.LoadSurvexLineLeg(survexblock, sline, comment)