diff --git a/Rich/RichMirrorAlignmentOnline/CMakeLists.txt b/Rich/RichMirrorAlignmentOnline/CMakeLists.txt
index d18168c184cbd0a0a0ee421193db60897e33765a..d57398e4278da42056a7c2fa6a2ed49ccae034da 100644
--- a/Rich/RichMirrorAlignmentOnline/CMakeLists.txt
+++ b/Rich/RichMirrorAlignmentOnline/CMakeLists.txt
@@ -1,7 +1,7 @@
 ################################################################################
 # Package: RichMirrorAlignmentOnline
 ################################################################################
-gaudi_subdir(RichMirrorAlignmentOnline v3r4p1)
+gaudi_subdir(RichMirrorAlignmentOnline v3r5)
 
 gaudi_depends_on_subdirs(Online/Gaucho
                          Event/DAQEvent
diff --git a/Rich/RichMirrorAlignmentOnline/cmt/requirements b/Rich/RichMirrorAlignmentOnline/cmt/requirements
index deee735794b31973f77f7d244e009755882c62e9..e1da0bca8fecf82927f0a61edd8034c39bed5b4b 100644
--- a/Rich/RichMirrorAlignmentOnline/cmt/requirements
+++ b/Rich/RichMirrorAlignmentOnline/cmt/requirements
@@ -3,7 +3,7 @@
 # Maintainer : Paras Naik, Claire Prouve
 #============================================================================
 package           RichMirrorAlignmentOnline
-version           v3r4p1
+version           v3r5
 
 #============================================================================
 # Structure, i.e. directories to process. 
diff --git a/Rich/RichMirrorAlignmentOnline/doc/release.notes b/Rich/RichMirrorAlignmentOnline/doc/release.notes
index c9a047ccbc2c8a35b8792b8a9fc4f0277ba841db..cda10d04e4d4856f630182bed739219da50217ae 100644
--- a/Rich/RichMirrorAlignmentOnline/doc/release.notes
+++ b/Rich/RichMirrorAlignmentOnline/doc/release.notes
@@ -14,6 +14,24 @@ Get into the habit of committing on every change (that compiles of course)
 
 ! Notes pertaining to already "tagged" releases:
 
+! 2017-07-19 - Paras Naik
+  - "Tagged" as v3r5 (internally, since only Panoptes gets a tag now).
+  - Default autoUpdate in the configuration has been changed to False
+      We expect to run in this mode until at least 14 August 2017
+  - Added more links to the final email that is sent on a successful alignment.
+  - Add the first fill number to the email that is sent on a successful alignment.
+  - If the last alignment was unable to save the hlt02 log, 
+      then we now append to the hlt02 log instead of overwrite it
+  - Create a copy of the existing hlt02 log before it gets overwritten or appended to.
+  - Created CK resolution trend file in /group/rich/AlignmentFiles/Logging/Rich{1,2}_CKresTrend.txt.
+      We automatically add to this every time we perform an alignment.
+      We back-propagated information from all alignments since 2016 into this text file.
+      A trend plot is currently accessible via https://lbrich.cern.ch
+        Check under "Resolution timelines: Mirror"
+  - If this is a test alignment, in the Alignment monitoring ELOG it gets status 'Test'.
+      However, because there is no 'Test' status in the Alignment monitoring ELOG, the message gets ignored.
+        This is OK for now.
+
 ! 2017-07-16 - Paras Naik
   - "Tagged" as v3r4p1 (internally, since only Panoptes gets a tag now).
   - Added the final CK angle resolution and error to summary.txt. 
diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py
index fd7616bc007b7d7cd2274ecfb447192b3813cc66..38ddc8cf0f8ff2bc84386d5a4d27b625a20db130 100644
--- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py
+++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/Iterator.py
@@ -26,29 +26,69 @@ def run(whichRich):
   launchTime = strftime("%Y-%m-%d %H:%M:%S", gmtime()) 
   start_time_config = time() #  when LHCbA config start time is really set
 
-  ### Start logging of hlt02 (the node that the iteraror is running on) 
+  ### Set up strings needed for logging of hlt02 (the node that the iterator is running on) 
   loggingDir = '/group/rich/AlignmentFiles/Logging/'
-  cmdProcess = 'exec /opt/FMC/bin/logViewer -l 2 -S -b &> ' + loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02.log'
-  logProcess = Popen(cmdProcess, shell=True, executable="/bin/bash", stderr=PIPE, stdout=PIPE)  
+  lastAlignSuccess = loggingDir + 'Rich' + str(whichRich) + '_' + 'success.txt'
+  currentHLT02log = loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02.log'
+  currentHLT02logReduced = loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02reduced.log'
+  previousHLT02log = loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02_previous.log'
+  previousHLT02logReduced = loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02reduced_previous.log'
+  cmdStart = 'exec /opt/FMC/bin/logViewer -l 2 -S -b &>'
+  cmdProcess = cmdStart + ' ' + currentHLT02log
+  cmdProcessAppend = cmdStart + '> ' + currentHLT02log
+  
+  # string used to help remove lines from the hlt02 log in the hlt02reduced versions,
+  #   using grep -vE (E = Enhanced Mode, required to parse the string)
+  removeExtraneous = '(LHCb2_HLT02_Hlt2Adder_0|Hlt2SaverSvc|MARK|BusyPub|BusyMon)'
+
+  ## Backup the last HLT02 log
+  if os.path.exists(currentHLT02log):
+    shutil.copy2( currentHLT02log , previousHLT02log )
+  if os.path.exists(previousHLT02log):
+    os.system('grep -vE "' + removeExtraneous + '" ' + previousHLT02log +' > ' + previousHLT02logReduced)
+
+  ### Check to see if the last mirror alignment was successful  
+  if os.path.exists(lastAlignSuccess):
+    with open(lastAlignSuccess) as lastAlignSuccessFile:
+        lastAlignSuccessLine = lastAlignSuccessFile.readline()
+  else:
+    lastAlignSuccessLine = 'UNKNOWN\n'
+  ### Start logging of hlt02 (the node that the iterator is running on)
+  if lastAlignSuccessLine == 'YES\n':
+    logProcess = Popen(cmdProcess, shell=True, executable="/bin/bash", stderr=PIPE, stdout=PIPE)  
+  else:
+    logProcess = Popen(cmdProcessAppend, shell=True, executable="/bin/bash", stderr=PIPE, stdout=PIPE) 
   logProcess.stdout.close()
   logProcess.stderr.close()
   sys.stdout.flush()    
   sleep(8) # wait long enough for logger to initialize
+  
+  ### Reset lastAlignSuccessFile to default 
+  lastAlignSuccessFile = open(lastAlignSuccess, 'w')
+  lastAlignSuccessFile.write('NO\n')  # python will convert \n to os.linesep
+  lastAlignSuccessFile.close()   
 
   ### Printout (slightly late, so it gets logged)
   print "INFO: run(whichRich = " + str(whichRich) + ") command received at " + launchTime + " UTC"
   print "INFO: LHCbA config start time set."
-  print "INFO: logging hlt02 in temporary file: " + loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02.log'
-  sys.stdout.flush()
+  if lastAlignSuccessLine == 'YES\n':
+    print "INFO: The previous Rich" + str(whichRich) + " alignment was able to copy hlt02.log, overwriting hlt02.log with this alignment's printouts."
+  else:
+    print "INFO: The previous Rich" + str(whichRich) + " alignment was not able to copy hlt02.log, appending this alignment's printouts to hlt02.log."  
+  print "INFO: logging hlt02 in temporary file: " + currentHLT02log
+  print "INFO: backing up last hlt02 log in temporary file: " + previousHLT02log
+  print 'INFO: storing reduced backup of last hlt02 log in temporary file: ' + previousHLT02logReduced
 
   ### make a backup of OnlineEnvBase.py (do it now, in case we need to study the configuration on a single node)
-  shutil.copy2('/group/online/dataflow/options/LHCbA/HLT/OnlineEnvBase.py' , loggingDir + 'Rich' + str(whichRich) + '_' + 'OnlineEnvBase.py' )
-  print "INFO: storing OnlineEnvBase.py in temporary file: " + loggingDir + 'Rich' + str(whichRich) + '_' + 'OnlineEnvBase.py'
+  saveOnlineEnvBase = loggingDir + 'Rich' + str(whichRich) + '_' + 'OnlineEnvBase.py'
+  shutil.copy2('/group/online/dataflow/options/LHCbA/HLT/OnlineEnvBase.py' , saveOnlineEnvBase )
+  print "INFO: storing OnlineEnvBase.py in temporary file: " + saveOnlineEnvBase
   sys.stdout.flush()
   
   ### make a backup of Configuration.py (make sure AlignmentRelease on /group/rich/sw/cmtuser/ points to our newest AlignmentOnline release!)
-  shutil.copy2('/group/rich/sw/cmtuser/AlignmentRelease/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py' , loggingDir + 'Rich' + str(whichRich) + '_' + 'Configuration.py' )
-  print "INFO: storing Configuration.py in temporary file: " + loggingDir + 'Rich' + str(whichRich) + '_' + 'Configuration.py'
+  saveConfiguration = loggingDir + 'Rich' + str(whichRich) + '_' + 'Configuration.py'
+  shutil.copy2('/group/rich/sw/cmtuser/AlignmentRelease/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py' , saveConfiguration )
+  print "INFO: storing Configuration.py in temporary file: " + saveConfiguration
   sys.stdout.flush()
 
   from HistoHelper import SaveSetRetriever
@@ -151,12 +191,14 @@ def run(whichRich):
       with open(oldPolarityFilename, 'r') as previousAlignPolarityFile:
         first_line = previousAlignPolarityFile.readline()
       if (first_line != polarities[0] + '\n'):
+        setupHelper.sendEmail( 'WARNING: MAGNET POLARITY CHANGE! RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + '.', 'WARNING: MAGNET POLARITY CHANGE from \n ' + first_line + ' to ' + polarities[0] + ' \n RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + '. \n Runs: ' + str(runs) + ' \n Fills: ' + str(fills) + ' \n Polarities: ' + str(polsStr) + ' \n dataVariant: ' + alignConf.getProp('dataVariant'), setupHelper.emails)        
         forcedUpdate_ChMagPol = True
         ChMagPolSubject += 'Magnet Polarity Changed; possibly forcing update.'
-        ChMagPolText += 'If this alignment converges, the alignment will be updated due to a change in magnet polarity (unless autoUpdate is/becomes False, or testing is True). If there are any problems with this alignment, please contact the Mirror Alignment expert! They should re-flip the magnet polarity in ' + polarityDir + ' in order to have the proper behavior on the next attempt!'       
+        ChMagPolText += 'If this alignment converges, the alignment will be updated due to a change in magnet polarity (unless autoUpdate is/becomes False, or testing is True). If there are any problems with this alignment, please contact the Mirror Alignment expert! They should check previousPolarity_RICH in ' + polarityDir + ' to ensure the proper behavior on the next attempt!'       
         postSubject += ' ' + ChMagPolSubject
         postText += ' \n ' + ChMagPolText
         print 'INFO: Magnet Polarity Changed; if this alignment converges under normal conditions, then the alignment will be updated.'
+        # Next two lines only get used at the end if things fail
         ChMagPolSubject = ' WARNING: The magnet polarity changed!'
         ChMagPolText = ' \n WARNING: The magnet polarity changed! Make sure that everything (e.g. previousPolarity_RICH) is in order for the next alignment!!!'
         # OUTDATED: The expert should re-flip the magnet polarity for this Rich detector in ' + polarityDir + ' in order to have the proper behavior on the next attempt!!!     
@@ -380,13 +422,19 @@ def run(whichRich):
           if nEventsListList[1] < int(alignConf.getProp('requiredEvents')):
               if autoUpdate:
                 autoUpdate = False
-                print "INFO: We processed an average number of events per iteration of " + str(nEventsListList[1]) + ", which is too low to allow mirror alignment " + setupHelper.directoryTime + " to automatically update, should an update be deemed necessary."
-                setupHelper.sendEmail( 'autoUpdate disabled for RICH' + str(whichRich) + ' alignment ' + setupHelper.directoryTime + '.' , 'RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + ' will not automatically be updated, should an update be deemed necessary. \n Average number of events processed per iteration: ' + str(nEventsListList[1]) , setupHelper.emails)        
+                print "INFO: We processed an average number of events per iteration of " + str(nEventsListList[1]) + ", which is too low to allow mirror alignment " + setupHelper.directoryTime + " to automatically update, should an update be deemed necessary. autoUpdate is now set to False."
+                setupHelper.sendEmail( 'Lack of events, autoUpdate disabled for RICH' + str(whichRich) + ' alignment ' + setupHelper.directoryTime + '.' , 'RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + ' will not automatically be updated, should an update be deemed necessary. \n Average number of events processed per iteration: ' + str(nEventsListList[1]) , setupHelper.emails)        
+              else:
+                print "INFO: We processed an average number of events per iteration of " + str(nEventsListList[1]) + ", which is too low to allow mirror alignment " + setupHelper.directoryTime + " to automatically update, should an update be deemed necessary. autoUpdate was already False though."
+                setupHelper.sendEmail( 'Lack of events for RICH' + str(whichRich) + ' alignment ' + setupHelper.directoryTime + ', autoUpdate was already False.' , 'RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + ' will not automatically be updated, should an update be deemed necessary. \n Average number of events processed per iteration: ' + str(nEventsListList[1]) , setupHelper.emails)        
           if insane: 
               if autoUpdate:
                 autoUpdate = False
-                print "INFO: Sanity checks have failed, we will not allow mirror alignment " + setupHelper.directoryTime + " to automatically update, should an update be deemed necessary."
-                setupHelper.sendEmail( 'autoUpdate disabled for RICH' + str(whichRich) + ' alignment ' + setupHelper.directoryTime + '.' , 'RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + ' will not automatically be updated, should an update be deemed necessary. \n Sanity checks have failed for this alignment.' , setupHelper.emails)        
+                print "INFO: Sanity checks have failed, we will not allow mirror alignment " + setupHelper.directoryTime + " to automatically update, should an update be deemed necessary. autoUpdate is now set to False."
+                setupHelper.sendEmail( 'Sanity checks failed, autoUpdate disabled for RICH' + str(whichRich) + ' alignment ' + setupHelper.directoryTime + '.' , 'RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + ' will not automatically be updated, should an update be deemed necessary. \n Sanity checks have failed for this alignment.' , setupHelper.emails)        
+              else:
+                print "INFO: Sanity checks have failed, we will not allow mirror alignment " + setupHelper.directoryTime + " to automatically update, should an update be deemed necessary. autoUpdate was already False though."
+                setupHelper.sendEmail( 'Sanity checks failed for RICH' + str(whichRich) + ' alignment ' + setupHelper.directoryTime + ', autoUpdate was already False.' , 'RICH' + str(whichRich) + ' mirror alignment ' + setupHelper.directoryTime + ' will not automatically be updated, should an update be deemed necessary. \n Sanity checks have failed for this alignment.' , setupHelper.emails)        
           sys.stdout.flush()                 
           
 #          if forcedUpdate_ChMagPol and conv:
@@ -495,16 +543,16 @@ def run(whichRich):
 
   if not cancel:
     try:
-      shutil.copy2(loggingDir + 'Rich' + str(whichRich) + '_' + 'Configuration.py', setupHelper.savedir + 'Configuration.py')  
+      shutil.copy2(saveConfiguration, setupHelper.savedir + 'Configuration.py')  
       print "INFO: Configuration.py stored in file: " + setupHelper.savedir + 'Configuration.py'
     except:
-      shutil.copy2(loggingDir + 'Rich' + str(whichRich) + '_' + 'Configuration.py', loggingDir + 'Rich' + str(whichRich) + '_Configuration_' + setupHelper.directoryTime + '.py')  
+      shutil.copy2(saveConfiguration, loggingDir + 'Rich' + str(whichRich) + '_Configuration_' + setupHelper.directoryTime + '.py')  
       print "INFO: Configuration.py stored in file: " + loggingDir + 'Rich' + str(whichRich) + '_Configuration_' + setupHelper.directoryTime + '.py'
     try:
-      shutil.copy2(loggingDir + 'Rich' + str(whichRich) + '_' + 'OnlineEnvBase.py', setupHelper.savedir + 'OnlineEnvBase.py')  
+      shutil.copy2(saveOnlineEnvBase, setupHelper.savedir + 'OnlineEnvBase.py')  
       print "INFO: OnlineEnvBase.py stored in file: " + setupHelper.savedir + 'OnlineEnvBase.py'
     except:
-      shutil.copy2(loggingDir + 'Rich' + str(whichRich) + '_' + 'OnlineEnvBase.py', loggingDir + 'Rich' + str(whichRich) + '_OnlineEnvBase_' + setupHelper.directoryTime + '.py')  
+      shutil.copy2(saveOnlineEnvBase, loggingDir + 'Rich' + str(whichRich) + '_OnlineEnvBase_' + setupHelper.directoryTime + '.py')  
       print "INFO: OnlineEnvBase.py stored in file: " + loggingDir + 'Rich' + str(whichRich) + '_OnlineEnvBase_' + setupHelper.directoryTime + '.py'
   sys.stdout.flush()
   
@@ -525,26 +573,29 @@ def run(whichRich):
   print "INFO: End of run(whichRich = " + str(whichRich) + "). Killing logProcess and writing hlt02 log file."
   sys.stdout.flush()  
 
-  # string used to help remove lines from the hlt02 log, using grep -vE (E = Enhanced Mode, required to parse the string)
-  removeExtraneous = '(tmSrv|LHCb2_HLT02_Hlt2Adder_0|Hlt2SaverSvc|MARK|BusyPub|BusyMon)'
-
   if os.path.exists(setupHelper.savedir):
     print 'INFO: storing hlt02 log in file: ' + setupHelper.savedir + 'hlt02.log'
     print 'INFO: storing reduced file: ' + setupHelper.savedir + 'hlt02reduced.log'
     sys.stdout.flush()  
-    shutil.copy2(loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02.log', setupHelper.savedir + 'hlt02.log')  
+    shutil.copy2(currentHLT02log, setupHelper.savedir + 'hlt02.log')  
     # remove what we currently believe are extraneous items
     # print 'INFO: Executing: ' + 'grep -vE "' + removeExtraneous + '" ' + setupHelper.savedir + 'hlt02.log > ' + setupHelper.savedir + 'hlt02reduced.log'
     sys.stdout.flush()  
     os.system('grep -vE "' + removeExtraneous + '" ' + setupHelper.savedir + 'hlt02.log > ' + setupHelper.savedir + 'hlt02reduced.log')
+    lastAlignSuccessFile = open(lastAlignSuccess, 'w')
+    lastAlignSuccessFile.write('YES\n')  # python will convert \n to os.linesep
+    lastAlignSuccessFile.close()   
   else:
     print 'INFO: storing hlt02 log in file: ' + loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02.log'
     print 'INFO: storing reduced file: ' + loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02reduced.log'
     sys.stdout.flush()  
-    shutil.copy2(loggingDir + 'Rich' + str(whichRich) + '_' + 'hlt02.log', loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02.log')  
+    shutil.copy2(currentHLT02log, loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02.log')  
     # remove what we currently believe are extraneous items
     # print 'INFO: Executing: ' + 'grep -vE "' + removeExtraneous + '" ' + loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02.log > ' + loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02reduced.log'
     os.system('grep -vE "' + removeExtraneous + '" ' + loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02.log > ' + loggingDir + 'Rich' + str(whichRich) + '_' + setupHelper.directoryTime + '_hlt02reduced.log')
+    lastAlignSuccessFile = open(lastAlignSuccess, 'w')
+    lastAlignSuccessFile.write('YES\n')  # python will convert \n to os.linesep
+    lastAlignSuccessFile.close()   
   
   # Set our status one last time
   com.set_status(state)  
@@ -553,6 +604,9 @@ def run(whichRich):
   print 'INFO: Claire says miezmiezmiez'
   sys.stdout.flush()  
 
+  # For good measure, make a reduced log in the logging directory
+  os.system('grep -vE "' + removeExtraneous + '" ' + currentHLT02log +' > ' + currentHLT02logReduced)
+
   logProcess.kill()
   print "INFO: hlt02 logProcess killed."
   sys.stdout.flush()
diff --git a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py
index 6f87fe65f0a65b825b97eba70720db786fe15280..0736371e20e44b8e83af4007353eae9d968510f2 100644
--- a/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py
+++ b/Rich/RichMirrorAlignmentOnline/python/PyMirrAlignOnline/SetupHelper.py
@@ -164,11 +164,13 @@ class SetupHelper:
         text += self.directoryTime
         text += "."
         if DBUpdated is None:
-            text += " There was a significant change from the alignment in the DB, or a change in magnet polarity. However the automatic update feature is off, or was disabled during the alignment, or the alignment is in testing mode, so the DB was not updated. If the automatic update feature was disabled, there may not have been enough events processed, or a sanity check was not satisfied. Please notify a MirrAlign expert to investigate whether this alignment (" + vN_DB_str + ") should be installed." # We should maybe provide more info here
+            text += " There was a significant change from the alignment in the DB, or a change in magnet polarity. However the automatic update feature is off or was disabled during the alignment (The final state of autoUpdate was set to False), or the alignment is in testing mode, so the DB was not updated. If the automatic update feature was disabled, there may not have been enough events processed, or a sanity check was not satisfied. Please notify a MirrAlign expert to investigate whether this alignment (" + vN_DB_str + ") should be installed." # We should maybe provide more info here
         elif DBUpdated:
             text += " Due to a significant change from the alignment in the DB, or a change in magnet polarity, the DB was automatically updated to " + vN_DB_str + "." # We should probably provide more info here
         else:
-            text += " The alignment in the DB is still " + vN_DB_str + "."         
+            text += " The alignment in the DB is still " + vN_DB_str + "."    
+        if not self.autoUpdate:
+            text += " The initial state of autoUpdate was set to False in the configuration."
         command = 'elog -h "'
         command += str(host)
         command += '" -p '
@@ -285,14 +287,21 @@ class SetupHelper:
         text2 += str(n_it + 1)
         text2 += " iteration(s) occured. \n"
         if DBUpdated is None:
-            text2 += "\n There was a significant change from the alignment in the DB, or a change in magnet polarity. However the automatic update feature is off, or was disabled during the alignment, so the DB was not updated. If the automatic update feature was disabled, there may not have been enough events processed, or a sanity check was not satisfied. A MirrAlign expert should investigate whether this draft alignment (" + vN_DB_str + ") should be installed. \n" # We should probably provide more info here
+            text2 += "\n There was a significant change from the alignment in the DB, or a change in magnet polarity. However the automatic update feature is off or was disabled during the alignment (The final state of autoUpdate was set to False), so the DB was not updated. If the automatic update feature was disabled, there may not have been enough events processed, or a sanity check was not satisfied. A MirrAlign expert should investigate whether this draft alignment (" + vN_DB_str + ") should be installed. \n" # We should probably provide more info here
         elif DBUpdated:
             text2 += "\n Due to a significant change from the alignment in the DB, or a change in magnet polarity, the DB was automatically updated to " + vN_DB_str + ". \n" # We should probably provide more info here
         else:
             text2 += "\n The alignment in the DB is still " + vN_DB_str + "."   
-            
-        text2 += "\n More information is available at the following link: \n\n "
+
+        text2 += "\n More information is available at the following links: \n\n "
         text2 += 'https://lblogbook.cern.ch/RICH/?System=%5EAlignment%24&Subject={0}&mode=full'.format(self.directoryTime)
+        text2 += '\n https://lbrich.cern.ch/alignmentview.php'
+        text2 += '\n https://lbrich.cern.ch/plot/index.html?rich=' + str(self.whichRich) +'&source=mirror'
+
+        text2 += "\n\n Fill number of first run processed: " + str(FillAlignment)
+        
+        if not self.autoUpdate:
+            text2 += " \n\n The initial state of autoUpdate was set to False in the configuration."
         
         self.sendEmail(subj2, text2, self.emails)
   
@@ -337,7 +346,7 @@ class SetupHelper:
         args += 'richDetector            = ' + str(self.whichRich) + '\n'
         args += 'DB updated              = ' + str(DBUpdated) + '\n'
         if DBUpdated is None:
-            args += '                          (Alignment changed, but autoUpdate is False or was disabled) \n'
+            args += '                          (Alignment changed, but autoUpdate started as False or was disabled) \n'
         args += 'resulting DB            = ' + str(vN_DB_str) + '\n'
         args += 'converged               = ' + str(conv) + '\n'
         args += 'Number of iterations    = ' + str(n_it + 1) + '\n'
@@ -362,7 +371,7 @@ class SetupHelper:
         args += '         error          = ' + str(finalCKresErr) + '\n'
         
         args += '\n'
-        args += 'autoUpdate              = ' + str(self.autoUpdate) + '\n'
+        args += 'autoUpdate (initial)    = ' + str(self.autoUpdate) + '\n'
         args += 'testing                 = ' + str(self.testing) + '\n'
         args += 'requiredEvents          = ' + str(self.alignConf.getProp('requiredEvents')) + '\n'
         args += 'minAverageBinPop        = ' + str(self.minAverageBinPop) + '\n'
@@ -391,8 +400,8 @@ class SetupHelper:
         
         if not self.testing:
             CKresTrendFile = "/group/rich/AlignmentFiles/Logging/Rich" + str(self.whichRich) + "_CKresTrend.txt"
-            with open(CKTrendFile, "a") as myfile:
-                myfile.write(str(self.getFillNumber(runs[0])) + " " + (self.directoryTime).replace("_", "T") + " " + str(self.finalCKres) + " " + (self.finalCKresErr))
+            with open(CKresTrendFile, "a") as myfile:
+                myfile.write(str(self.getFillNumber(runs[0])) + " " + (self.directoryTime).replace("_", "T") + " " + str(self.finalCKres/1000) + " " + str(self.finalCKresErr/1000) + '\n')
         
     def sendEmail(self, subject, text, receiversList): 
         import smtplib
diff --git a/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py b/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py
index d4cfcb6e0caab1db3a4d374ebc85a9cc307d885e..4334f74b132cc6979bbb92f2018b005b7c27a716 100644
--- a/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py
+++ b/Rich/RichMirrorAlignmentOnline/python/RichMirrorAlignmentOnline/Configuration.py
@@ -58,7 +58,7 @@ class Rich1MirrAlignOnConf(LHCbConfigurableUser):
        ,"stopSigmaFraction"      : 0
        ,"maxIterations"          : 8
        ,"requiredEvents"         : 1165000 # ~70% of 1666222
-       ,"autoUpdate"             : True
+       ,"autoUpdate"             : False
        ,"testing"                : False
        # 2017 tolerances: [0.027, 0.030, 0.455, 0.370], adjusted to [0.03, 0.03, 0.46, 0.37]
        ,"stopTolerancePriY"      : 0.03
@@ -100,7 +100,7 @@ class Rich1MirrAlignOnConf(LHCbConfigurableUser):
        ,"stopSigmaFraction"      : """ tolerance for total tilt of mirror pair in terms of the fraction of the nominal Cherenkov angle resolution """
        ,"maxIterations"          : """ The number of iterations the mirror alignment will run, before giving up """
        ,"requiredEvents"         : """ If this many events are not procesed by the farm, on average, we do run the alignment but we will never update it. """
-       ,"autoUpdate"             : """ If True, then the fully automated updating system is activated. """
+       ,"autoUpdate"             : """ If True, then the fully automated updating system is activated. If False, our DB update service is still active but returns the starting alignment version. """
        ,"testing"                : """ If True, then we are running a test alignment; we also disable our DB update service completely. """
        ,"stopTolerancePriY"      : """ RICH-dependent tolerance for primary   mirrors rotation around Y correction in mrad to stop the alignment """
        ,"stopTolerancePriZ"      : """ RICH-dependent tolerance for primary   mirrors rotation around Z correction in mrad to stop the alignment """
@@ -194,7 +194,7 @@ class Rich2MirrAlignOnConf(LHCbConfigurableUser):
        ,"stopSigmaFraction"      : 0
        ,"maxIterations"          : 8
        ,"requiredEvents"         : 925000 # ~70% of 1322220
-       ,"autoUpdate"             : True
+       ,"autoUpdate"             : False
        ,"testing"                : False
        # 2017 tolerances: [0.032, 0.030, 0.043, 0.057], adjusted to [0.03, 0.03, 0.05, 0.06]
        ,"stopTolerancePriY"      : 0.03
@@ -236,7 +236,7 @@ class Rich2MirrAlignOnConf(LHCbConfigurableUser):
        ,"stopSigmaFraction"      : """ tolerance for total tilt of mirror pair in terms of the fraction of the nominal Cherenkov angle resolution """
        ,"maxIterations"          : """ The number of iterations the mirror alignment will run, before giving up """
        ,"requiredEvents"         : """ If this many events are not procesed by the farm, on average, we do run the alignment but we will never update it. """
-       ,"autoUpdate"             : """ If True, then the fully automated updating system is activated. """
+       ,"autoUpdate"             : """ If True, then the fully automated updating system is activated. If False, our DB update service is still active but returns the starting alignment version. """
        ,"testing"                : """ If True, then we are running a test alignment; we also disable our DB update service completely. """
        ,"stopTolerancePriY"      : """ RICH-dependent tolerance for primary   mirrors rotation around Y correction in mrad to stop the alignment """
        ,"stopTolerancePriZ"      : """ RICH-dependent tolerance for primary   mirrors rotation around Z correction in mrad to stop the alignment """