diff --git a/aossceilo/CONFIG.py b/aossceilo/CONFIG.py
index 17fbc9e928450863e7ea002e87393fd91ba27596..14edf5813e12b45333a0eaed5f62a66c7de524d5 100644
--- a/aossceilo/CONFIG.py
+++ b/aossceilo/CONFIG.py
@@ -1,118 +1,118 @@
-"""This module holds all directory/path/URL information for metobs.ceilo
-packages.  This file should be the only place that holds this static information.
-
-This file should not do any file manipulation at all, only return strings or pass
-other static information such as what plot number goes with what data.
-
-This module will check for environment variables to create constants of PATHS
-and URL bases.  It also has functions for getting file locations for any file
-for a specified day.
-"""
-import os
-import re
-from datetime import datetime, timedelta
-#from metobs.util import RODict, CONFIG as c
-
-CEILO_INCOMING_DIR = os.environ.get( 'CEILO_INCOMING_DIR', '/beach/incoming/Instrument_Data/METOBS/RIG/Ceilo/raw')
-CEILO_PRAW_DIR =     os.environ.get( 'CEILO_PRAW_DIR', '/beach/raw/aoss/ceilo')
-CEILO_CACHE_DIR =    os.environ.get( 'CEILO_CACHE_DIR', '/beach/cache/aoss/ceilo')
-CEILO_LATEST_DIR =   os.environ.get( 'CEILO_LATEST_DIR', '/beach/cache/aoss/ceilo')
-CEILO_DIR_FORMAT =   os.environ.get( 'CEILO_DIR_FORMAT', '%Y/%m')
-CEILO_ASCII_LOC =    os.environ.get( 'CEILO_ASCII_LOC', '/beach/cache/aoss/ceilo')
-CEILO_NC_LOC =       os.environ.get( 'CEILO_NC_LOC', '/beach/cache/aoss/ceilo')
-CEILO_IMG_LOC =      os.environ.get( 'CEILO_IMG_LOC', 'http://metobs.ssec.wisc.edu/pub/cache/aoss/ceilo')
-inst = 'ceilo'
-RE_DIGITS = re.compile(r'\d+')
-
-
-def get_incoming_dir():
-    "Return incoming directory for specified date"
-    return os.path.join( CEILO_INCOMING_DIR )
-
-def get_praw_dir(when = None):
-    "Return raw directory for specified date and data_type"
-    when = when or datetime.now()
-    return os.path.join( CEILO_PRAW_DIR, when.strftime( CEILO_DIR_FORMAT ) )
-
-def get_sraw_dir(when = None):
-    "Return raw directory for specified date and data_type"
-    raise NotImplementedError("This function is not used anymore, there should only be one primary storage location")
-    #when = when or datetime.now()
-    #return os.path.join( CEILO_SRAW_DIR, when.strftime( CEILO_DIR_FORMAT ) )
-
-def get_cache_dir(data_type, when = None):
-    "Return cache directory for specified date and data_type"
-    when = when or datetime.now()
-    return os.path.join( CEILO_CACHE_DIR, data_type, when.strftime( CEILO_DIR_FORMAT ) )
-
-def get_latest_dir():
-    "Return latest directory"
-    return os.path.join( CEILO_LATEST_DIR )
-
-def get_ascii_filename(when = None, site="rig", description=""):
-    "Return the standard filename of the ascii file for the specified date"
-    when = when or datetime.now()
-    return c.get_filename(site, inst, when, ext='ascii', description=description)
-
-def get_ascii_url(when = None, site="rig", description=""):
-    "Return the standard url of the ascii file for the specified date"
-    when = when or datetime.now()
-    return os.path.join(CEILO_ASCII_LOC, 'ascii', when.strftime(CEILO_DIR_FORMAT),
-            get_ascii_filename(when, site=site, description=description))
-
-def get_nc_filename(when = None, site="rig", description=""):
-    "Return the standard filename of the netCDF file for the specified date"
-    when = when or datetime.now()
-    return c.get_filename(site, inst, when, ext='nc', description=description)
-
-def get_nc_url(when = None, site="rig", description=""):
-    "Return the standard url of the netCDF file for the specified date"
-    when = when or datetime.now()
-    return os.path.join(CEILO_NC_LOC, 'nc', when.strftime(CEILO_DIR_FORMAT),
-            get_nc_filename(when, site=site, description=description))
-
-def get_img_filename(begin, end, ptype=1, tag='', site="rig", description=""):
-    "Return the standard filename of the image that goes from begin to end"
-    pname = _handle_plot_type(ptype)
-    return c.get_filename(site, inst, begin, end=end, ext="png", plotname=pname, description=description, tag=tag)
-
-def get_quicklook_filename(begin, end, ptype=1, site='rig', description=''):
-    return get_img_filename(begin, end, ptype, tag='', site=site, description=description)
-
-def get_thumbnail_filename(begin, end, ptype=1, site='rig', description=''):
-    return get_img_filename(begin, end, ptype, tag='tn', site=site, description=description)
-
-def get_img_url(begin, end, ptype=1, tag='', site="rig", description=""):
-    "Return the standard url of the image that goes from begin to end"
-    return os.path.join(CEILO_IMG_LOC, 'img', begin.strftime(CEILO_DIR_FORMAT),
-            get_img_filename(begin,end,ptype,tag=tag, site=site, description=description))
-
-def get_quicklook_url(begin, end, ptype=1, site='rig', description=''):
-    return get_img_url(begin, end, ptype, tag='', site=site, description=description)
-
-def get_thumbnail_url(begin, end, ptype=1, site='rig', description=''):
-    return get_img_url(begin, end, ptype, tag='tn', site=site, description=description)
-
-def rename_incoming(incoming_file, site='rig', description=''):
-    file_date = datetime(*tuple( [ int(x) for x in RE_DIGITS.findall(incoming_file) ] ))
-    present_date = datetime.now()
-    praw = get_praw_dir(when = file_date)
-    cache = get_cache_dir('ascii', when = file_date)
-    rn = get_ascii_filename(when = file_date, site=site, description=description)
-    remove = file_date.date() < (present_date - timedelta(days=30)).date()
-    return praw,cache,rn,remove
-
-def get_type_name():
-    return RODict({1:'Backscatter',
-            2:'Cloud Base Height',
-            3:'Vertical Visibility'})
-
-def _handle_plot_type(plottype=1):
-    if plottype == 1:
-        return ''
-    elif plottype == 2:
-        return ''
-    elif plottype == 3:
-        return ''
-    else:
-        raise ValueError("Plot type must be between 1-3")
+"""This module holds all directory/path/URL information for metobs.ceilo
+packages.  This file should be the only place that holds this static information.
+
+This file should not do any file manipulation at all, only return strings or pass
+other static information such as what plot number goes with what data.
+
+This module will check for environment variables to create constants of PATHS
+and URL bases.  It also has functions for getting file locations for any file
+for a specified day.
+"""
+import os
+import re
+from datetime import datetime, timedelta
+from metobscommon.util import RODict, CONFIG as c
+
+CEILO_INCOMING_DIR = os.environ.get( 'CEILO_INCOMING_DIR', '/beach/incoming/Instrument_Data/METOBS/RIG/Ceilo/raw')
+CEILO_PRAW_DIR =     os.environ.get( 'CEILO_PRAW_DIR', '/beach/raw/aoss/ceilo')
+CEILO_CACHE_DIR =    os.environ.get( 'CEILO_CACHE_DIR', '/beach/cache/aoss/ceilo')
+CEILO_LATEST_DIR =   os.environ.get( 'CEILO_LATEST_DIR', '/beach/cache/aoss/ceilo')
+CEILO_DIR_FORMAT =   os.environ.get( 'CEILO_DIR_FORMAT', '%Y/%m')
+CEILO_ASCII_LOC =    os.environ.get( 'CEILO_ASCII_LOC', '/beach/cache/aoss/ceilo')
+CEILO_NC_LOC =       os.environ.get( 'CEILO_NC_LOC', '/beach/cache/aoss/ceilo')
+CEILO_IMG_LOC =      os.environ.get( 'CEILO_IMG_LOC', 'http://metobs.ssec.wisc.edu/pub/cache/aoss/ceilo')
+inst = 'ceilo'
+RE_DIGITS = re.compile(r'\d+')
+
+
+def get_incoming_dir():
+    "Return incoming directory for specified date"
+    return os.path.join( CEILO_INCOMING_DIR )
+
+def get_praw_dir(when = None):
+    "Return raw directory for specified date and data_type"
+    when = when or datetime.now()
+    return os.path.join( CEILO_PRAW_DIR, when.strftime( CEILO_DIR_FORMAT ) )
+
+def get_sraw_dir(when = None):
+    "Return raw directory for specified date and data_type"
+    raise NotImplementedError("This function is not used anymore, there should only be one primary storage location")
+    #when = when or datetime.now()
+    #return os.path.join( CEILO_SRAW_DIR, when.strftime( CEILO_DIR_FORMAT ) )
+
+def get_cache_dir(data_type, when = None):
+    "Return cache directory for specified date and data_type"
+    when = when or datetime.now()
+    return os.path.join( CEILO_CACHE_DIR, data_type, when.strftime( CEILO_DIR_FORMAT ) )
+
+def get_latest_dir():
+    "Return latest directory"
+    return os.path.join( CEILO_LATEST_DIR )
+
+def get_ascii_filename(when = None, site="rig", description=""):
+    "Return the standard filename of the ascii file for the specified date"
+    when = when or datetime.now()
+    return c.get_filename(site, inst, when, ext='ascii', description=description)
+
+def get_ascii_url(when = None, site="rig", description=""):
+    "Return the standard url of the ascii file for the specified date"
+    when = when or datetime.now()
+    return os.path.join(CEILO_ASCII_LOC, 'ascii', when.strftime(CEILO_DIR_FORMAT),
+            get_ascii_filename(when, site=site, description=description))
+
+def get_nc_filename(when = None, site="rig", description=""):
+    "Return the standard filename of the netCDF file for the specified date"
+    when = when or datetime.now()
+    return c.get_filename(site, inst, when, ext='nc', description=description)
+
+def get_nc_url(when = None, site="rig", description=""):
+    "Return the standard url of the netCDF file for the specified date"
+    when = when or datetime.now()
+    return os.path.join(CEILO_NC_LOC, 'nc', when.strftime(CEILO_DIR_FORMAT),
+            get_nc_filename(when, site=site, description=description))
+
+def get_img_filename(begin, end, ptype=1, tag='', site="rig", description=""):
+    "Return the standard filename of the image that goes from begin to end"
+    pname = _handle_plot_type(ptype)
+    return c.get_filename(site, inst, begin, end=end, ext="png", plotname=pname, description=description, tag=tag)
+
+def get_quicklook_filename(begin, end, ptype=1, site='rig', description=''):
+    return get_img_filename(begin, end, ptype, tag='', site=site, description=description)
+
+def get_thumbnail_filename(begin, end, ptype=1, site='rig', description=''):
+    return get_img_filename(begin, end, ptype, tag='tn', site=site, description=description)
+
+def get_img_url(begin, end, ptype=1, tag='', site="rig", description=""):
+    "Return the standard url of the image that goes from begin to end"
+    return os.path.join(CEILO_IMG_LOC, 'img', begin.strftime(CEILO_DIR_FORMAT),
+            get_img_filename(begin,end,ptype,tag=tag, site=site, description=description))
+
+def get_quicklook_url(begin, end, ptype=1, site='rig', description=''):
+    return get_img_url(begin, end, ptype, tag='', site=site, description=description)
+
+def get_thumbnail_url(begin, end, ptype=1, site='rig', description=''):
+    return get_img_url(begin, end, ptype, tag='tn', site=site, description=description)
+
+def rename_incoming(incoming_file, site='rig', description=''):
+    file_date = datetime(*tuple( [ int(x) for x in RE_DIGITS.findall(incoming_file) ] ))
+    present_date = datetime.now()
+    praw = get_praw_dir(when = file_date)
+    cache = get_cache_dir('ascii', when = file_date)
+    rn = get_ascii_filename(when = file_date, site=site, description=description)
+    remove = file_date.date() < (present_date - timedelta(days=30)).date()
+    return praw,cache,rn,remove
+
+def get_type_name():
+    return RODict({1:'Backscatter',
+            2:'Cloud Base Height',
+            3:'Vertical Visibility'})
+
+def _handle_plot_type(plottype=1):
+    if plottype == 1:
+        return ''
+    elif plottype == 2:
+        return ''
+    elif plottype == 3:
+        return ''
+    else:
+        raise ValueError("Plot type must be between 1-3")
diff --git a/aossceilo/ingest.py b/aossceilo/ingest.py
index 61a3e659980b1d67fba5aec1c22344d3f25df339..a1c15e9104ad5af5513bd2ef651e4c88f9169ce3 100755
--- a/aossceilo/ingest.py
+++ b/aossceilo/ingest.py
@@ -39,6 +39,8 @@ import serial
 # https://stackoverflow.com/a/13638084/433202
 TRACE_LEVEL_NUM = 9
 logging.addLevelName(TRACE_LEVEL_NUM, "TRACE")
+
+
 def debugv(self, message, *args, **kws):
     # Yes, logger takes its '*args' as 'args'.
     if self.isEnabledFor(TRACE_LEVEL_NUM):
@@ -47,16 +49,19 @@ logging.Logger.debugv = debugv
 
 LOG = logging.getLogger(__name__)
 
+
 def epoch_secs(dt):
     """Datetime to seconds from epoch.
     """
     return time.mktime(dt.utctimetuple())
 
+
 def is_header(line):
     """Is the line a valid message 2 header.
     """
     return re.match(r'^\x01CT[A-Z0-9][0-9]{2}[2].\x02\r\n$', line) 
 
+
 def process_lines(in_lines, ref_dt):
     """Process lines from the serial port. Epoch timestamps are injected
     before the message header. All lines are stripped of white space before 
@@ -72,6 +77,7 @@ def process_lines(in_lines, ref_dt):
         out_lines.append(line)
     return num_hdrs, out_lines
 
+
 def init_ceilo(portdev):
     """Initialize ceilometer by sending default configuration values to 
     instrument. When this completes the instrument should be in autosend mode
@@ -107,31 +113,32 @@ def init_ceilo(portdev):
                             stopbits=1, 
                             timeout=7.5)
 
+
 def read_cfg(cfgfile):
 
-    from ConfigParser import SafeConfigParser
-    parser = SafeConfigParser()
+    from configparser import ConfigParser
+    parser = ConfigParser()
     parser.read(cfgfile)
 
     return dict(parser.items('ct25k'))
 
-def main():
 
+def main():
     from argparse import ArgumentParser
     parser = ArgumentParser()
 
-    levels = {'trace':9, 'debug':logging.DEBUG, 'info':logging.INFO, 
-                'warn':logging.WARN, 'error':logging.ERROR}
-    parser.add_argument('-v', dest="loglvl", choices=levels.keys(), 
-        default='info')
+    levels = {'trace': 9, 'debug': logging.DEBUG, 'info': logging.INFO,
+                'warn': logging.WARN, 'error': logging.ERROR}
+    parser.add_argument('-v', dest="loglvl", choices=levels.keys(),
+                        default='info')
     parser.add_argument('-o', dest='outdir', default='.')
     parser.add_argument('-f', dest='fmt', default='rig_ceilo-%Y-%m-%d.ascii',
-        help="output filename (supports date formatting)")
+                        help="output filename (supports date formatting)")
     parser.add_argument('-p', dest='port', help="serial device")
-    parser.add_argument('-c', dest='cfgfile', 
-        help="INI style config. If provided all other options are ignored")
+    parser.add_argument('-c', dest='cfgfile',
+                        help="INI style config. If provided all other options are ignored")
 
-    args =  parser.parse_args()
+    args = parser.parse_args()
 
     if args.cfgfile:
         from logging.config import fileConfig
@@ -167,7 +174,7 @@ def main():
     datalog.fptr = None
 
     def handle_signal(*args, **kwargs):
-        LOG.warn("received TERM or INT")
+        LOG.warning("received TERM or INT")
     signal.signal(signal.SIGTERM, handle_signal)
     signal.signal(signal.SIGINT, handle_signal)
 
@@ -177,7 +184,6 @@ def main():
     LOG.info("starting ingest")
 
     while True:
-
         fptr = datalog()
         LOG.log(9, "got log %s", fptr.name)
 
@@ -200,7 +206,7 @@ def main():
 
     try:
         port.close()
-    except:
+    except (serial.SerialException, IOError, OSError):
         pass
 
 if __name__ == '__main__':