Index: source/python/mods/__init__.py
===================================================================
--- source/python/mods/__init__.py	(revision 25b14bea5de21f28364c210382513c1c9b792d61)
+++ source/python/mods/__init__.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #*******************************************************************************
Index: source/python/mods/checks.py
===================================================================
--- source/python/mods/checks.py	(revision f20af73aa9e9795d13fa35aa9462bfca4039b2de)
+++ source/python/mods/checks.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #*******************************************************************************
@@ -31,7 +31,7 @@
 except ImportError:
     import builtins as exceptions
-from .tools import my_error, silent_remove
 from datetime import datetime
 import numpy as np
+from .tools import my_error, silent_remove
 # ------------------------------------------------------------------------------
 # FUNCTIONS
Index: source/python/mods/disaggregation.py
===================================================================
--- source/python/mods/disaggregation.py	(revision 6f951ca0346aa6a2c3e11ee62df85214a290d838)
+++ source/python/mods/disaggregation.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #*******************************************************************************
Index: source/python/mods/get_mars_data.py
===================================================================
--- source/python/mods/get_mars_data.py	(revision f20af73aa9e9795d13fa35aa9462bfca4039b2de)
+++ source/python/mods/get_mars_data.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #*******************************************************************************
@@ -176,5 +176,5 @@
     with open(marsfile, 'w') as f:
         f.write('request_number' + ', ')
-        f.write(', '.join(str(key) for key in sorted(attrs.iterkeys())))
+        f.write(', '.join(str(key) for key in sorted(attrs.keys())))
         f.write('\n')
 
Index: source/python/mods/prepare_flexpart.py
===================================================================
--- source/python/mods/prepare_flexpart.py	(revision f20af73aa9e9795d13fa35aa9462bfca4039b2de)
+++ source/python/mods/prepare_flexpart.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #*******************************************************************************
Index: source/python/mods/profiling.py
===================================================================
--- source/python/mods/profiling.py	(revision 25b14bea5de21f28364c210382513c1c9b792d61)
+++ source/python/mods/profiling.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #************************************************************************
@@ -66,5 +66,5 @@
         result = fn(*args, **kwargs)
         t2 = time.time()
-        print("@timefn:" + fn.func_name + " took " + str(t2 - t1) + " seconds")
+        print("@timefn:" + fn.__name__ + " took " + str(t2 - t1) + " seconds")
 
         return result
Index: source/python/mods/tools.py
===================================================================
--- source/python/mods/tools.py	(revision f20af73aa9e9795d13fa35aa9462bfca4039b2de)
+++ source/python/mods/tools.py	(revision 79729d5dfa465f4ecb605e2c76c10d614028dc21)
@@ -1,3 +1,3 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #*******************************************************************************
@@ -368,5 +368,5 @@
                                  stderr=subprocess.PIPE,
                                  bufsize=1)
-            pout = p.communicate(input=message + '\n\n')[0]
+            pout = p.communicate(input=message.encode() + '\n\n')[0]
         except ValueError as e:
             print('... ERROR: ' + str(e))
@@ -433,5 +433,5 @@
     '''
     try:
-        pools = map(tuple, args) * kwds.get('repeat', 1)
+        pools = [tuple(arg) for arg in args] * kwds.get('repeat', 1)
         result = [[]]
         for pool in pools:
@@ -533,5 +533,5 @@
     ipar = []
     for par in cpar:
-        for k, v in table.iteritems():
+        for k, v in table.items():
             if par == k or par == v:
                 ipar.append(int(k))
@@ -574,5 +574,5 @@
     spar = []
     for par in cpar:
-        for k, v in table.iteritems():
+        for k, v in table.items():
             if par == k or par == v:
                 spar.append(k + '.128')
@@ -726,5 +726,5 @@
         sys.exit('... ECACCESS-JOB-SUBMIT FAILED!')
 
-    return job_id
+    return job_id.decode()
 
 
@@ -827,5 +827,5 @@
 
     if not purefc:
-        it = ((end_date - start_date).days + 1) * 24/int(dtime)
+        it = ((end_date - start_date).days + 1) * 24 // int(dtime)
     else:
         # #no of step * #no of times * #no of days
