diff --git a/HISTORY.rst b/HISTORY.rst
index 03b939408b18d93b6cc327a9b19d77166de941ee..afef05b8d83140bf260016ea63b0286578172ea9 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -2,7 +2,7 @@
 History
 =======
 
-2014.125 (2018-06-06)
+2018.171 (2018-06-20)
 ------------------
 
 * First release on new build system.
diff --git a/data2passcal/Makefile b/data2passcal/Makefile
deleted file mode 100644
index 5a4bbb9c95e35ab43425006279da90399fb72b21..0000000000000000000000000000000000000000
--- a/data2passcal/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-all:
-	@echo "Nothing to be done"
-install:
-	./install.py
-installl:
-	./install.py ${PASSOFT}
-
-tarsrc:
-		@$(PASSINSTALL) -d -m 0755 $(PASSCAL)/tar
-		@$(PASSCP) $(PASSOFT)/src/setup_passoft .
-		@$(PASSTAR) cf $(EXEC)src.tar  * 
-		@$(PASSCP) $(EXEC)src.tar $(PASSCAL)/tar
-		@$(PASSRM) setup_passoft
-
-tarbin:
-		@$(PASSINSTALL) -d -m 0755 $(PASSCAL)/tar
-		@$(PASSCP) $(PASSOFT)/src/setup_passoft .
-		@$(PASSTAR) cf $(EXEC)bin.tar *
-		@$(PASSCP) $(EXEC)bin.tar $(PASSCAL)/tar
-		@$(PASSRM) setup_passoft
-
-clean:
-	@$(PASSRM) *.pyc *.tar
-
-uninstall:
-	@$(PASSRM) $(PASSCAL)/bin/neo
-	@$(PASSRM) $(PASSCAL)/lib/python/neo
diff --git a/data2passcal/__init__.py b/data2passcal/__init__.py
index 8afd4e3fbd171f07ac5b667a0e5c12bd7aef1938..7bd3e8bba5df65833d52a5b1f5833dfd7539ddee 100644
--- a/data2passcal/__init__.py
+++ b/data2passcal/__init__.py
@@ -4,4 +4,4 @@
 
 __author__ = """IRIS PASSCAL"""
 __email__ = 'software-support@passcal.nmt.edu'
-__version__ = '2014.125'
+__version__ = '2018.171'
diff --git a/data2passcal/data2passcal b/data2passcal/data2passcal
deleted file mode 100644
index 79ea103d03902e9be45a5ef54d5529e85c61ffbe..0000000000000000000000000000000000000000
--- a/data2passcal/data2passcal
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env bash
-
-EXEC='data2passcal'
-
-if [ $# = 1 ]
-then
-    h=$1
-else
-    h=''
-fi 
-
- if [ ! -z "${PASSCAL}" ]
-then
-	PYTHON=${PASSCAL}/other/bin/picpython
-	export PYTHON
-        set PYTHONPATH ${PASSCAL}/lib/python/${EXEC}
-        export PYTHONPATH
-else
-        echo "PASSCAL environment not set! Can not continue."
-	exit 1
-fi
-
-if [ ! -e "$PYTHON" ]
-then
-	echo "$PYTHON not found! PyPASSCAL is required. Make sure picpython is in your path variable"
-	exit
-fi
-
-
-${PYTHON} ${PASSCAL}/lib/python/${EXEC}/data2passcal.py $h
-
diff --git a/data2passcal/data2passcal.py b/data2passcal/data2passcal.py
index 4b5d03d5662d1c5e5f2c7f8ecdd8b87f6b86a20a..b1faa622d6d079a1d08e845245b63fedad2137da 100644
--- a/data2passcal/data2passcal.py
+++ b/data2passcal/data2passcal.py
@@ -2,10 +2,10 @@
 '''
 data2passcal
 
-Ship miniseed data to passcal via ftp for qc before arhcivial at DMC DMS
+Ship miniseed data to passcal via ftp for qc before archival at DMC DMS
 Lloyd Carothers IRIS/PASSCAL
 '''
-VERSION = '2014.125'
+VERSION = '2018.171'
 
 import ftplib
 import sys, os, signal, struct, cPickle, logging
@@ -36,9 +36,9 @@ FTP_BLOCKSIZE = 8192
 #FTP_CONNECT_ATTEMPTS = 3
 # testing will retry for a week. Why not?
 FTP_CONNECT_ATTEMPTS = 60*60*24*7  / FTP_RECONNECT_WAIT
-#number of times a single file with try to be sent 
+#number of times a single file with try to be sent
 FTP_SEND_ATTEMPTS = 3
-# debug level of ftplib, 0-3 
+# debug level of ftplib, 0-3
 FTP_DEBUG_LEVEL = 0
 #store the files sent in ~/data2passcal.sent
 SENTFILE = os.path.join( os.path.expanduser('~'), '.data2passcal.sent')
@@ -105,7 +105,7 @@ def scan_dir(dir):
     logger.info('Total Dirs = %s'% foldercount)
     logger.info('Scan time = %0.2fs'% (time() - starttime))
     print
-    
+
     return filelist
 
 def sendable(file):
@@ -124,7 +124,7 @@ MseedRE = re.compile(r'\A(.*)\.([A-Z0-9][A-Z0-9])\.(.*)\.([A-Z][A-Z]\w)\.([0-9]{
 def filename_qc_format(file):
     '''Used to filter filename if correct for qc system'''
     return MseedRE.match(os.path.basename(file))
-    
+
 
 def format_size(num):
     '''Format bytes into human readble with suffix'''
@@ -146,7 +146,7 @@ def ismseed(file):
         return True
     else:
         return False
-    
+
 #########################################################
 #needs import sys,struct
 #Taken from Bruces LibTrace
@@ -201,13 +201,13 @@ def get_sent_file_list(sentfile = SENTFILE):
     else:
         sentlist = []
     return sentlist
-    
+
 def write_sent_file_list(sentlist , sentfile = SENTFILE ):
     logger.info('Saving list of files sent to passcal')
     with open(sentfile, 'w+') as f:
         cPickle.dump(sentlist, f)
-    
-    
+
+
 def get_FTP():
     '''returns a FTP connection or None if a connection could not be made after attempts allowed'''
     trys = 0
@@ -236,7 +236,7 @@ def test_network():
     passcal_http_reachable()
     google_http_reachable()
     passcal_ftp_reachable()
-    
+
 def passcal_http_reachable():
     '''download and time passcal home page'''
     url = 'http://www.passcal.nmt.edu/'
@@ -283,11 +283,11 @@ def test_FTP(FTP):
         return False
     else:
         return True
-    
+
 
 def send2passcal(mslist, sentlist=None):
     '''Send the list of files in mslist to passcal via FTP'''
-    
+
     # Handle SIGINT while in this function: to gracefully close connection and save sentlist to disk file
     def signal_handler(signum, frame):
         print
@@ -304,7 +304,7 @@ def send2passcal(mslist, sentlist=None):
         except Exception as e:
             logger.debug(e)
         os._exit(1)
-        
+
     def update(data):
         '''Updates the terminal display.'''
         signal.signal(signal.SIGINT, signal_handler)
@@ -318,9 +318,9 @@ def send2passcal(mslist, sentlist=None):
                                                 ) , 
         '''
         ETA_sec = ((time() - starttime) / size_sent ) * (size_to_send - size_sent)
-        print 'ETA %s %s %s' % (  str(datetime.timedelta(seconds=(ETA_sec))), current_file.center(20), ' '*20 ) , 
+        print 'ETA %s %s %s' % (  str(datetime.timedelta(seconds=(ETA_sec))), current_file.center(20), ' '*20 ) ,
         sys.stdout.flush()
-        
+
     if sentlist is None:
         sentlist = []
     print
@@ -368,14 +368,14 @@ def send2passcal(mslist, sentlist=None):
                 FTP = get_FTP()
                 if FTP is None:
                     signal_handler(None, None)
-            else:    
+            else:
                 fh.close()
                 num_sent += 1
                 logger.debug('Sent: %s' % f)
                 size_sent += file_size
                 sentlist.append(f)
                 break
-        
+
     print
     logger.info( 'Sent %d of %d' % (num_sent, num_to_send) )
     logger.info( 'Sent %s of %s' % (format_size(size_sent), format_size(size_to_send)) )
@@ -383,7 +383,7 @@ def send2passcal(mslist, sentlist=None):
     logger.info( 'Ran for %f sec' % (time()-starttime) )
     if FTP and test_FTP(FTP):
         FTP.quit()
-        
+
 ########################################################
 # From progressbar 3rd party class will eventually dump not awesome
 class ProgressBar:
@@ -401,13 +401,13 @@ class ProgressBar:
             else:
                 print self, chr(27) + '[A'
             self.update_time(i + 1)
-            time.sleep(1) 
+            time.sleep(1)
         print self
-        
+
     def update_time(self, elapsed_secs):
         self.__update_amount((elapsed_secs / float(self.duration)) * 100.0)
         #self.prog_bar += '  %d/%s files' % (elapsed_secs, self.duration)
-        
+
     def __update_amount(self, new_amount):
         percent_done = int(round((new_amount / 100.0) * 100.0))
         all_full = self.width - 2
@@ -417,33 +417,35 @@ class ProgressBar:
         pct_string = '%d%%' % percent_done
         self.prog_bar = self.prog_bar[0:pct_place] + \
             (pct_string + self.prog_bar[pct_place + len(pct_string):])
-        
+
     def __str__(self):
         return str(self.prog_bar)
-    
+
 # End progressbar
 ########################################################
-                
-if __name__ == '__main__':
+def main():
     if len(sys.argv) < 2 or sys.argv[1] in [ '-h', '--help', '-?']:
         print HELP
-        sys.exit()                
+        sys.exit()
     # find all files below dir
-    filelist = scan_dir(sys.argv[1])    
+    filelist = scan_dir(sys.argv[1])
     # filter for files named as the qc system likes
     logger.info('Removing improperly named files.')
     msnamedlist = filter(filename_qc_format, filelist)
-    logger.info('Properly named files files: %d' % len(msnamedlist))    
-    logger.info('Other files: %d'% (len(filelist) - len(msnamedlist)))    
+    logger.info('Properly named files files: %d' % len(msnamedlist))
+    logger.info('Other files: %d'% (len(filelist) - len(msnamedlist)))
     print
     logger.info('Removing files that are not Miniseed.')
-    mslist = filter(sendable, msnamedlist)    
-    logger.info('MiniSEED files: %d' % len(mslist))    
-    logger.info('Properly named but not miniseed files: %d'% (len(msnamedlist) - len(mslist)))    
+    mslist = filter(sendable, msnamedlist)
+    logger.info('MiniSEED files: %d' % len(mslist))
+    logger.info('Properly named but not miniseed files: %d'% (len(msnamedlist) - len(mslist)))
     print
-    logger.info('Removing files already sent to PASSCAL')    
-    sentlist = get_sent_file_list()    
+    logger.info('Removing files already sent to PASSCAL')
+    sentlist = get_sent_file_list()
     unsentms = [f for f in mslist if f not in sentlist]
     logger.info('%d miniSEED files have already been sent, not resending.' % (len( mslist) - len(unsentms)))
-    send2passcal(unsentms, sentlist)    
+    send2passcal(unsentms, sentlist)
     write_sent_file_list(sentlist)
+
+if __name__ == '__main__':
+    main()
diff --git a/data2passcal/install.py b/data2passcal/install.py
deleted file mode 100644
index fd56a90f9bf1379b55d0aa124f0073c273495aba..0000000000000000000000000000000000000000
--- a/data2passcal/install.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-
-import shutil, os, stat, sys
-from compileall import *
-
-#   Location of PASSCAL distribution
-ROOTDIR = '/opt/passcal'
-#
-if len(sys.argv) > 1 :
-    ROOTDIR = sys.argv[1]
-elif os.environ.has_key ('PASSCAL') :
-    ROOTDIR = os.environ['PASSCAL']
-else :
-    sys.stderr.write ("PASSCAL environment variable not set!\n")
-    sys.exit ()
-
-PROGDIR = os.getcwd ()
-PROG = os.path.basename (PROGDIR)
-LIBDIR = ROOTDIR + '/lib/python'
-BINDIR = ROOTDIR + '/bin'
-LIBPROG = LIBDIR + '/' + PROG
-
-PROGS = ('data2passcal',)
-
-LIBS  = ()
-
-#   Delete libs
-for p in LIBS :
-    p = p + '.pyc'
-    try :
-        os.remove (p)
-    except OSError :
-        pass
-#   Compile
-compile_dir (".")
-#   Make libs dir
-command = 'mkdir -p ' + LIBDIR
-os.system (command)
-#   Remove old libs
-try :
-    shutil.rmtree (LIBPROG)
-except OSError :
-    pass
-
-#   install libraries
-shutil.copytree (PROGDIR, LIBPROG)
-
-command = 'mkdir -p ' + BINDIR
-os.system (command)
-
-#   install programs
-for p in PROGS :
-    src = p
-    dst = BINDIR + '/' + p
-    try :
-        os.remove (dst)
-    except OSError :
-        pass
-    print src, dst
-    shutil.copy (src, dst)
-    os.chmod (dst, 0557)
diff --git a/setup.cfg b/setup.cfg
index c942eaed07fa9d6286c87d6bfd2bc6e5713e173b..86190ffcd4bd6c7fcec3e17846801616bd4a59c2 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 2014.125
+current_version = 2018.171
 commit = True
 tag = True
 
diff --git a/setup.py b/setup.py
index a0ed1c78ed2e9f33d3e56756b0e518f6f39fda4e..afcfad780540cb996c961f69c70fc9e2e638764c 100644
--- a/setup.py
+++ b/setup.py
@@ -51,6 +51,6 @@ setup(
     packages=find_packages(include=['data2passcal']),
     test_suite='tests',
     url='https://git.passcal.nmt.edu/passoft/data2passcal',
-    version='2014.125',
+    version='2018.171',
     zip_safe=False,
 )