diff --git a/an.py b/an.py
index 792ed5ea46b3529349338e42124c7b8fa79a410d..6130fe79c8ded5c1db49ce69565f9e691af21e04 100755
--- a/an.py
+++ b/an.py
@@ -7,32 +7,50 @@
 
 import urllib
 import xml.etree.ElementTree as ET
+import os
+import sys
 # for time.asctime()
 #!import time
 
-# needed for notifyOSX()
-import os
-osx_command = "/Users/kpetersn/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier"
-osx_url = "http://bcda.xray.aps.anl.gov/cgi-bin/ioc_alive.cgi?eng=Peterson"
-
 ### Stuff to customize ###
+
 engineer = "Peterson"
 # period should match cron job period
 period = 60
 
+# needed for notifyOSX()
+osx_command = "/Users/kpetersn/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier"
+
+# needed for notifyEmail()
+recipient="kmpeters@anl.gov"
+
 def notifyConsole(ioc, state, time_str):
   print "[%s] %s is %s" % (time_str, ioc, state)
 
+def notifyEmail(ioc, state, time_str):
+  subject = "%s is %s" % (ioc, state)
+  message = "Snapshot time: %s\n%s" % (time_str, eng_url)
+  email_command = "echo \"%s\" | mailx -s \"%s\" %s" % (message, subject, recipient)
+  os.system(email_command)
+
 def notifyOSX(ioc, state, time_str):
-  notify_command = "%s -title \"%s is %s\" -message \"%s\" -open \"%s\"" % (osx_command, ioc, state, time_str, osx_url)
+  notify_command = "%s -title \"%s is %s\" -message \"%s\" -open \"%s\"" % (osx_command, ioc, state, time_str, eng_url)
   os.system(notify_command)
 
+def notifyCombo(ioc, state, time_str):
+  notifyOSX(ioc, state, time_str)
+  notifyEmail(ioc, state, time_str)
+
 # set notification function
-notify = notifyOSX
 #!notify = notifyConsole
+#!notify = notifyEmail
+notify = notifyOSX
+#!notify = notifyCombo
+
 ##########################
 
 alive_url = "http://bcda.xray.aps.anl.gov/cgi-bin/alivexml.cgi"
+eng_url = "http://bcda.xray.aps.anl.gov/cgi-bin/ioc_alive.cgi?eng=%s" % engineer
 hb_period = 10
 ioc_list = {}
 
@@ -46,30 +64,34 @@ f.close()
 
 # Parse the xml string
 #!print "Parsing XML"
-root = ET.fromstring(xml_string)
+try:
+  root = ET.fromstring(xml_string)
+except ET.ParseError:
+  print "Invalid XML file"
+  sys.exit(1)
 
 # Get the date and time
 time_elem = root.find('time')
 time_str = time_elem.text
 
 # Indent for making ET.tostring() output readable
-def _indent(elem, level=0):
-  '''
-  Internal method to make the xml file easier to read by humans.
-  '''
-  i = "\n" + level*"  "
-  if len(elem):
-    if not elem.text or not elem.text.strip():
-      elem.text = i + "  "
-    if not elem.tail or not elem.tail.strip():
-      elem.tail = i
-    for elem in elem:
-      _indent(elem, level+1)
-    if not elem.tail or not elem.tail.strip():
-      elem.tail = i
-  else:
-    if level and (not elem.tail or not elem.tail.strip()):
-      elem.tail = i
+#!def _indent(elem, level=0):
+#!  '''
+#!  Internal method to make the xml file easier to read by humans.
+#!  '''
+#!  i = "\n" + level*"  "
+#!  if len(elem):
+#!    if not elem.text or not elem.text.strip():
+#!      elem.text = i + "  "
+#!    if not elem.tail or not elem.tail.strip():
+#!      elem.tail = i
+#!    for elem in elem:
+#!      _indent(elem, level+1)
+#!    if not elem.tail or not elem.tail.strip():
+#!      elem.tail = i
+#!  else:
+#!    if level and (not elem.tail or not elem.tail.strip()):
+#!      elem.tail = i
 
 # Indent for making ET.tostring() output readable
 #!_indent(root)
@@ -116,3 +138,5 @@ iocs.sort()
 
 for ioc in iocs:
   notify(ioc, ioc_list[ioc], time_str)
+
+sys.exit(0)