diff --git a/requirements.txt b/requirements.txt
index ab530153df9c7f24ff69b7958cb15ec2d2393cf1..ebf1ff5c9c85eb5f24336bdb0d21e0f0ca384d12 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,4 +7,5 @@ pytest
 xlrd
 h5py
 pandas
+future
 
diff --git a/setup.py b/setup.py
index 2e93d5cd0b98371b39c8a2c6bd2aa9b0d77fce2b..aa0164766b663db36684ff90b86d6b1849d823d1 100644
--- a/setup.py
+++ b/setup.py
@@ -8,14 +8,27 @@
     http://pyscaffold.readthedocs.org/
 """
 
+import os
 import sys
 from setuptools import setup
 
+from distutils.extension import Extension
+from Cython.Distutils import build_ext
+
 
 def setup_package():
+
+    path = 'wetb/fatigue_tools/rainflowcounting/'
+    module = 'wetb.fatigue_tools.rainflowcounting'
+    names = ['pair_range', 'peak_trough', 'rainflowcount_astm']
+    extlist = [Extension('%s.%s' % (module, n),
+                         [os.path.join(path, n)+'.pyx']) for n in names]
+
     needs_sphinx = {'build_sphinx', 'upload_docs'}.intersection(sys.argv)
     sphinx = ['sphinx'] if needs_sphinx else []
     setup(setup_requires=['six', 'pyscaffold>=2.5a0,<2.6a0'] + sphinx,
+          cmdclass = {'build_ext': build_ext},
+          ext_modules = extlist,
           use_pyscaffold=True)
 
 
diff --git a/wetb/__init__.py b/wetb/__init__.py
index a49f1a1760ad7fd9430e910ac48b412a1367990f..6bd6d64443319049f1a7e32aa2281329ccae6294 100644
--- a/wetb/__init__.py
+++ b/wetb/__init__.py
@@ -1,3 +1,9 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import pkg_resources
 test = "TEST"
 try:
diff --git a/wetb/dlc/__init__.py b/wetb/dlc/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wetb/dlc/high_level.py b/wetb/dlc/high_level.py
index de5029011bdead7ef11242f2da64fe15131e1cc3..ffdd0b5ab69a6261bcfce0a8b7e7b8d209ac8b15 100644
--- a/wetb/dlc/high_level.py
+++ b/wetb/dlc/high_level.py
@@ -3,6 +3,16 @@ Created on 01/10/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import int
+from builtins import map
+from builtins import str
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 import pandas as pd
 import numpy as np
 import glob
@@ -255,7 +265,7 @@ class DLCHighLevel(object):
                 if files:
                     f_prob = self.probability(props, files[0], files) / len(files)
                     f_hours_pr_20year = 365 * 24 * years * f_prob
-                    for f in files:
+                    for f in sorted(files):
                         fh_lst.append((f, f_hours_pr_20year))
         return fh_lst
 
diff --git a/wetb/dlc/tests/test_files/DLC_test.xlsx b/wetb/dlc/tests/test_files/DLC_test.xlsx
index 02ae074820efdf1a916648250cbf1fc2e8e01275..a5ce9710e36966c718266794b0689f631ec6a9c2 100644
Binary files a/wetb/dlc/tests/test_files/DLC_test.xlsx and b/wetb/dlc/tests/test_files/DLC_test.xlsx differ
diff --git a/wetb/dlc/tests/test_high_level.py b/wetb/dlc/tests/test_high_level.py
index 3e931e83f64f32635447cd7a61284696a3be7eca..48b8f37a190ed120ea700aaa19518790eb3657df 100644
--- a/wetb/dlc/tests/test_high_level.py
+++ b/wetb/dlc/tests/test_high_level.py
@@ -3,6 +3,12 @@ Created on 09/10/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.dlc.high_level import DLCHighLevel, Weibull
 import os
@@ -42,12 +48,12 @@ class TestDLCHighLevel(unittest.TestCase):
 
     def test_file_hour_lst(self):
         f, h = self.dlc_hl.file_hour_lst()[0]
-        self.assertEqual(os.path.abspath(f), os.path.abspath(testfilepath + 'res/DLC12_IEC61400-1ed3/dlc12_wsp04_wdir350_s3001.sel'))
+        self.assertEqual(os.path.abspath(f), os.path.abspath(testfilepath + 'res/dlc12_iec61400-1ed3/dlc12_wsp04_wdir350_s3001.sel'))
         self.assertEqual(h, .975 * .25 * 0.11002961306549919 / 2 * 20 * 365 * 24)
 
     def test_file_hour_lst_count(self):
         f, h = self.dlc_hl.file_hour_lst()[-1]
-        self.assertEqual(os.path.abspath(f), os.path.abspath(testfilepath + 'res/DLC31_IEC61400-1ed3/dlc31_wsp25_wdir000_s0000.sel'))
+        self.assertEqual(os.path.abspath(f), os.path.abspath(testfilepath + 'res/dlc31_iec61400-1ed3/dlc31_wsp25_wdir000_s0000.sel'))
         self.assertAlmostEqual(h, 0.0087201928 * 1 * (50 / 1100) * 20 * 365 * 24)
 
 
diff --git a/wetb/fast/fast_io.py b/wetb/fast/fast_io.py
index 576fe69240eec4b0e168aa57a636801d18796964..7d331df5903f74899c1a329c8989f2bbbc8799fd 100644
--- a/wetb/fast/fast_io.py
+++ b/wetb/fast/fast_io.py
@@ -3,6 +3,15 @@ Created on 03/09/2015
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import open
+from builtins import map
+from builtins import range
+from future import standard_library
+standard_library.install_aliases()
 import os
 import numpy as np
 import struct
@@ -62,7 +71,6 @@ def load_binary_output(filename):
     """
     def fread(fid, n, type):
         fmt, nbytes = {'uint8': ('B', 1), 'int16':('h', 2), 'int32':('i', 4), 'float32':('f', 4), 'float64':('d', 8)}[type]
-
         return struct.unpack(fmt * n, fid.read(nbytes * n))
 
     FileFmtID_WithTime = 1  #% File identifiers used in FAST
diff --git a/wetb/fast/tests/test_fast_io.py b/wetb/fast/tests/test_fast_io.py
index cd656553ecc546b5b3846a74d904899d980efa21..187dccfb4e4e0dafa34d43680c7b99974b105016 100644
--- a/wetb/fast/tests/test_fast_io.py
+++ b/wetb/fast/tests/test_fast_io.py
@@ -3,6 +3,12 @@ Created on 03/09/2015
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 
 from wetb.fast.fast_io import load_output
diff --git a/wetb/fast/tests/test_files/DTU10MW.out b/wetb/fast/tests/test_files/DTU10MW.out
index 63ed812fcd9aa8bc3f3d21b95a1f38e5b503719d..e3d4386f79283ce34610c802be2feed0fc500ff7 100644
--- a/wetb/fast/tests/test_files/DTU10MW.out
+++ b/wetb/fast/tests/test_files/DTU10MW.out
@@ -5,7 +5,7 @@ The aerodynamic calculations were made by AeroDyn (v13.00.02a-bjj, 20-Feb-2013).
  DTU 10.0 MW Baseline Wind Turbine for Use in Onshore Analysis.
 
 Time	RotPwr	RotTorq	RotCq	RotCt	RotCp	TipDxb1	TipDyb1	TipDzb1	TTDspSS	TTDspAx	BldPitch1	RotSpeed	TTDspFA	TTDspSS	TTDspTwst	RootFxc1	RootFyc1	RootFzc1	RootMxc1	RootMyc1	RootMzc1	YawBrFxp	YawBrFyp	YawBrFzp	YawBrMxp	YawBrMyp	YawBrMzp	TwrBsFxt	TwrBsFyt	TwrBsFzt	TwrBsMxt	TwrBsMyt	TwrBsMzt
-(s)	(kW)	(kN·m)	(-)	(-)	(-)	(m)	(m)	(m)	(m)	(m)	(deg)	(rpm)	(m)	(m)	(deg)	(kN)	(kN)	(kN)	(kN·m)	(kN·m)	(kN·m)	(kN)	(kN)	(kN)	(kN·m)	(kN·m)	(kN·m)	(kN)	(kN)	(kN)	(kN·m)	(kN·m)	(kN·m)
+(s)	(kW)	(kNm)	(-)	(-)	(-)	(m)	(m)	(m)	(m)	(m)	(deg)	(rpm)	(m)	(m)	(deg)	(kN)	(kN)	(kN)	(kNm)	(kNm)	(kNm)	(kN)	(kN)	(kN)	(kN?)	(kN?)	(kN?)	(kN)	(kN)	(kN)	(kN?)	(kN?)	(kN?)
    0.013	 1.975E+00	 2.936E+00	 3.365E-05	 2.217E-01	 2.525E-04	 7.179E-03	-7.895E-04	-6.676E-07	-2.904E-06	 0.000E+00	 0.000E+00	 6.425E+00	-7.504E-06	-2.904E-06	 0.000E+00	 5.690E+01	-1.951E+01	 1.455E+02	 3.834E+02	 7.714E+02	-1.468E+02	 1.026E+02	-1.653E+00	-6.488E+03	-1.183E+01	-3.190E+03	-7.512E+01	-6.320E+01	-4.084E-01	-1.266E+04	 8.350E+00	-1.460E+03	-7.512E+01
    0.025	 6.008E+00	 8.925E+00	 1.023E-04	 2.284E-01	 7.678E-04	 2.871E-02	-3.181E-03	-6.654E-06	-1.083E-05	 0.000E+00	 0.000E+00	 6.428E+00	-2.932E-05	-1.083E-05	 0.000E+00	 6.112E+01	-1.687E+01	 1.466E+02	 3.212E+02	 9.748E+02	-1.468E+02	 1.025E+02	-1.581E+00	-6.510E+03	-1.562E+01	-3.286E+03	-2.372E+02	-5.777E+01	-2.107E-02	-1.268E+04	-2.425E-01	-1.248E+03	-2.372E+02
    0.038	 1.098E+01	 1.632E+01	 1.870E-04	 2.606E-01	 1.404E-03	 6.345E-02	-6.971E-03	-4.027E-05	-2.248E-05	 0.000E+00	 0.000E+00	 6.429E+00	-6.162E-05	-2.248E-05	 0.000E+00	 7.472E+01	-1.982E+01	 1.470E+02	 2.589E+02	 1.424E+03	-9.386E+01	 1.045E+02	-1.624E+00	-6.539E+03	-2.260E+01	-3.461E+03	-4.536E+02	-4.893E+01	 4.804E-01	-1.271E+04	-1.146E+01	-9.085E+02	-4.536E+02
diff --git a/wetb/fatigue_tools/bearing_damage.py b/wetb/fatigue_tools/bearing_damage.py
index 04af76dd43adb353215f657d59326517e41653b5..fa509db242fe943b4da6b59a6aabe5c8b6eca109 100644
--- a/wetb/fatigue_tools/bearing_damage.py
+++ b/wetb/fatigue_tools/bearing_damage.py
@@ -3,6 +3,13 @@ Created on 13/10/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 
 def bearing_damage(angle_moment_lst, m=3, thresshold=0.1):
     """Function ported from Matlab.
diff --git a/wetb/fatigue_tools/fatigue.py b/wetb/fatigue_tools/fatigue.py
index 98bad48131ca3a0ba9af455fe3fed2bf4db02c33..e26089ce4f5c6717651908ac1e35ef918d52fb9b 100644
--- a/wetb/fatigue_tools/fatigue.py
+++ b/wetb/fatigue_tools/fatigue.py
@@ -14,6 +14,12 @@ or
 - 'rainflow_astm' (based on the c-implementation by Adam Nieslony found at the MATLAB Central File Exchange
                    http://www.mathworks.com/matlabcentral/fileexchange/3026)
 '''
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import numpy as np
 from wetb.fatigue_tools.rainflowcounting import rainflowcount
 
diff --git a/wetb/fatigue_tools/rainflowcounting/compile.py b/wetb/fatigue_tools/rainflowcounting/compile.py
index caa0465633726433b58df7eb06774f2a0e2c2462..ba4576622a7bb3bfc76fbef7c76379d63cf64ed5 100644
--- a/wetb/fatigue_tools/rainflowcounting/compile.py
+++ b/wetb/fatigue_tools/rainflowcounting/compile.py
@@ -1,3 +1,9 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 from wetb.utils.cython_compile.cython_compile import cython_import
 cython_import('pair_range')
 cython_import('peak_trough')
diff --git a/wetb/fatigue_tools/rainflowcounting/pair_range.py b/wetb/fatigue_tools/rainflowcounting/pair_range.py
index 6a493d701e5760682061369f6f2c1414f8d63ce1..c3048fad65ba94fcb3724258e120bc8b73609c96 100644
--- a/wetb/fatigue_tools/rainflowcounting/pair_range.py
+++ b/wetb/fatigue_tools/rainflowcounting/pair_range.py
@@ -1,3 +1,9 @@
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 import cython
 import numpy as np
diff --git a/wetb/fatigue_tools/rainflowcounting/pair_range.pyx b/wetb/fatigue_tools/rainflowcounting/pair_range.pyx
new file mode 100755
index 0000000000000000000000000000000000000000..5ed95be5b1501d2d938fa3a3e33781d5f5f2969d
--- /dev/null
+++ b/wetb/fatigue_tools/rainflowcounting/pair_range.pyx
@@ -0,0 +1,201 @@
+import cython
+import numpy as np
+cimport numpy as np
+
+import cython
+import numpy as np
+# cimport numpy as np
+
+
+@cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int)
+def pair_range_amplitude(x):  # cpdef pair_range(np.ndarray[long,ndim=1]  x):
+    """
+    Returns a list of half-cycle-amplitudes
+    x: Peak-Trough sequence (integer list of local minima and maxima)
+
+    This routine is implemented according to
+    "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A
+    except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix
+    """
+
+    x = x - np.min(x)
+    k = np.max(x)
+    n = x.shape[0]
+    S = np.zeros(n + 1)
+
+    #A = np.zeros(k+1)
+    flow = []
+    S[1] = x[0]
+    ptr = 1
+    p = 1
+    q = 1
+    f = 0
+    # phase 1
+    while True:
+        p += 1
+        q += 1
+
+        # read
+        S[p] = x[ptr]
+        ptr += 1
+
+        if q == n:
+            f = 1
+        while p >= 4:
+            if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) \
+                or\
+                    (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]):
+                ampl = abs(S[p - 2] - S[p - 1])
+                # A[ampl]+=2 #Two half cycles
+                flow.append(ampl)
+                flow.append(ampl)
+                S[p - 2] = S[p]
+
+                p -= 2
+            else:
+                break
+
+        if f == 0:
+            pass
+        else:
+            break
+    # phase 2
+    q = 0
+    while True:
+        q += 1
+        if p == q:
+            break
+        else:
+            ampl = abs(S[q + 1] - S[q])
+            # A[ampl]+=1
+            flow.append(ampl)
+    return flow
+
+
+
+
+
+@cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int)
+def pair_range_from_to(x):  # cpdef pair_range(np.ndarray[long,ndim=1]  x):
+    """
+    Returns a list of half-cycle-amplitudes
+    x: Peak-Trough sequence (integer list of local minima and maxima)
+
+    This routine is implemented according to
+    "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A
+    except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix
+    """
+
+    x = x - np.min(x)
+    k = np.max(x)
+    n = x.shape[0]
+    S = np.zeros(n + 1)
+
+    A = np.zeros((k + 1, k + 1))
+    S[1] = x[0]
+    ptr = 1
+    p = 1
+    q = 1
+    f = 0
+    # phase 1
+    while True:
+        p += 1
+        q += 1
+
+        # read
+        S[p] = x[ptr]
+        ptr += 1
+
+        if q == n:
+            f = 1
+        while p >= 4:
+            #print S[p - 3:p + 1]
+            #print S[p - 2], ">", S[p - 3], ", ", S[p - 1], ">=", S[p - 3], ", ", S[p], ">=", S[p - 2], (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2])
+            #print S[p - 2], "<", S[p - 3], ", ", S[p - 1], "<=", S[p - 3], ", ", S[p], "<=", S[p - 2], (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2])
+            #print (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) or (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2])
+            if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) or \
+               (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]):
+                A[S[p - 2], S[p - 1]] += 1
+                A[S[p - 1], S[p - 2]] += 1
+                S[p - 2] = S[p]
+                p -= 2
+            else:
+                break
+
+        if f == 1:
+            break  # q==n
+    # phase 2
+    q = 0
+    while True:
+        q += 1
+        if p == q:
+            break
+        else:
+            #print S[q], "to", S[q + 1]
+            A[S[q], S[q + 1]] += 1
+    return A
+
+@cython.locals(p=cython.int, q=cython.int, f=cython.int, flow=list, k=cython.int, n=cython.int, ptr=cython.int)
+def pair_range_amplitude_mean(x):  # cpdef pair_range(np.ndarray[long,ndim=1]  x):
+    """
+    Returns a list of half-cycle-amplitudes
+    x: Peak-Trough sequence (integer list of local minima and maxima)
+
+    This routine is implemented according to
+    "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A
+    except that a list of half-cycle-amplitudes are returned instead of a from_level-to_level-matrix
+    """
+
+    x = x - np.min(x)
+    k = np.max(x)
+    n = x.shape[0]
+    S = np.zeros(n + 1)
+    ampl_mean = []
+    A = np.zeros((k + 1, k + 1))
+    S[1] = x[0]
+    ptr = 1
+    p = 1
+    q = 1
+    f = 0
+    # phase 1
+    while True:
+        p += 1
+        q += 1
+
+                # read
+        S[p] = x[ptr]
+        ptr += 1
+
+        if q == n:
+            f = 1
+        while p >= 4:
+            if (S[p - 2] > S[p - 3] and S[p - 1] >= S[p - 3] and S[p] >= S[p - 2]) \
+                or\
+                    (S[p - 2] < S[p - 3] and S[p - 1] <= S[p - 3] and S[p] <= S[p - 2]):
+                # Extract two intermediate half cycles
+                ampl = abs(S[p - 2] - S[p - 1])
+                mean = (S[p - 2] + S[p - 1]) / 2
+                ampl_mean.append((ampl, mean))
+                ampl_mean.append((ampl, mean))
+
+                S[p - 2] = S[p]
+
+                p -= 2
+            else:
+                break
+
+        if f == 0:
+            pass
+        else:
+            break
+    # phase 2
+    q = 0
+    while True:
+        q += 1
+        if p == q:
+            break
+        else:
+            ampl = abs(S[q + 1] - S[q])
+            mean = (S[q + 1] + S[q]) / 2
+            ampl_mean.append((ampl, mean))
+    return ampl_mean
diff --git a/wetb/fatigue_tools/rainflowcounting/peak_trough.py b/wetb/fatigue_tools/rainflowcounting/peak_trough.py
index fc6bde699eee1cbd1406f58bca043a5f637bfa42..7ae9b20da089f9f6bfe3787db438ee335a0ab725 100644
--- a/wetb/fatigue_tools/rainflowcounting/peak_trough.py
+++ b/wetb/fatigue_tools/rainflowcounting/peak_trough.py
@@ -1,3 +1,9 @@
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import cython
 import numpy as np
 #cimport numpy as np
diff --git a/wetb/fatigue_tools/rainflowcounting/peak_trough.pyx b/wetb/fatigue_tools/rainflowcounting/peak_trough.pyx
new file mode 100755
index 0000000000000000000000000000000000000000..f65a24388482a0ca92aa1b94b6957ad17e2af6d4
--- /dev/null
+++ b/wetb/fatigue_tools/rainflowcounting/peak_trough.pyx
@@ -0,0 +1,103 @@
+import cython
+import numpy as np
+cimport numpy as np
+import cython
+import numpy as np
+cimport numpy as np
+
+@cython.locals(BEGIN=cython.int, MINZO=cython.int, MAXZO=cython.int, ENDZO=cython.int, \
+               R=cython.int, L=cython.int, i=cython.int, p=cython.int, f=cython.int)
+cpdef np.ndarray[long,ndim=1] peak_trough(np.ndarray[long,ndim=1] x, int R):
+    """
+    Returns list of local maxima/minima.
+
+    x: 1-dimensional numpy array containing signal
+    R: Thresshold (minimum difference between succeeding min and max
+
+    This routine is implemented directly as described in
+    "Recommended Practices for Wind Turbine Testing - 3. Fatigue Loads", 2. edition 1990, Appendix A
+    """
+
+    BEGIN = 0
+    MINZO = 1
+    MAXZO = 2
+    ENDZO = 3
+    S = np.zeros(x.shape[0] + 1, dtype=np.int)
+
+    L = x.shape[0]
+    goto = BEGIN
+
+    while 1:
+        if goto == BEGIN:
+            trough = x[0]
+            peak = x[0]
+
+            i = 0
+            p = 1
+            f = 0
+            while goto == BEGIN:
+                i += 1
+                if i == L:
+                    goto = ENDZO
+                    continue
+                else:
+                    if x[i] > peak:
+                        peak = x[i]
+                        if peak - trough >= R:
+                            S[p] = trough
+                            goto = MAXZO
+                            continue
+                    elif x[i] < trough:
+                        trough = x[i]
+                        if peak - trough >= R:
+                            S[p] = peak
+                            goto = MINZO
+                            continue
+
+        elif goto == MINZO:
+            f = -1
+
+            while goto == MINZO:
+                i += 1
+                if i == L:
+                    goto = ENDZO
+                    continue
+                else:
+                    if x[i] < trough:
+                        trough = x[i]
+                    else:
+                        if x[i] - trough >= R:
+                            p += 1
+                            S[p] = trough
+                            peak = x[i]
+                            goto = MAXZO
+                            continue
+        elif goto == MAXZO:
+            f = 1
+            while goto == MAXZO:
+                i += 1
+                if i == L:
+                    goto = ENDZO
+                    continue
+                else:
+                    if x[i] > peak:
+                        peak = x[i]
+                    else:
+                        if peak - x[i] >= R:
+                            p += 1
+                            S[p] = peak
+                            trough = x[i]
+                            goto = MINZO
+                            continue
+        elif goto == ENDZO:
+
+            n = p + 1
+            if abs(f) == 1:
+                if f == 1:
+                    S[n] = peak
+                else:
+                    S[n] = trough
+            else:
+                S[n] = (trough + peak) / 2
+            S = S[1:n + 1]
+            return S
diff --git a/wetb/fatigue_tools/rainflowcounting/rainflowcount.py b/wetb/fatigue_tools/rainflowcounting/rainflowcount.py
index 304cf570877dfb7dd1caccb3ff68f12c7a0ea162..645da85e332a8cd5296d602e982c46b1cd79c1cf 100644
--- a/wetb/fatigue_tools/rainflowcounting/rainflowcount.py
+++ b/wetb/fatigue_tools/rainflowcounting/rainflowcount.py
@@ -1,3 +1,10 @@
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 import numpy as np
 from wetb.utils.cython_compile.cython_compile import cython_import
 
diff --git a/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.py b/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.py
index 06924c526cb5007e3e50ed9a1e678c41b60a8f3c..2cb2b2d4a9391bf39c17c5d6380cafa90b7706ff 100644
--- a/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.py
+++ b/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.py
@@ -13,6 +13,13 @@ from cy_rainflowcount import find_extremes,rainflow
 ext = find_extremes(np.array([-2,0,1,0,-3,0,5,0,-1,0,3,0,-4,0,4,0,-2]).astype(np.double))
 print rainflow(ext)
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import range
+from future import standard_library
+standard_library.install_aliases()
 
 import numpy as np
 
diff --git a/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.pyx b/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.pyx
new file mode 100755
index 0000000000000000000000000000000000000000..a06f514a61ee13fcbc874b058570cff60b8938e4
--- /dev/null
+++ b/wetb/fatigue_tools/rainflowcounting/rainflowcount_astm.pyx
@@ -0,0 +1,105 @@
+import cython
+import numpy as np
+cimport numpy as np
+'''
+Created on 27/02/2013
+
+@author: mmpe
+
+
+
+How to use:
+
+import_cython("cy_rainflowcount",'cy_rainflowcount.py','')
+from cy_rainflowcount import find_extremes,rainflow
+
+ext = find_extremes(np.array([-2,0,1,0,-3,0,5,0,-1,0,3,0,-4,0,4,0,-2]).astype(np.double))
+print rainflow(ext)
+'''
+
+import numpy as np
+
+
+cpdef find_extremes(np.ndarray[double,ndim=1] signal):
+    """return indexes of local minima and maxima plus first and last element of signal"""
+
+    cdef int pi, i
+    # sign of gradient
+    sign_grad = np.int8(np.sign(np.diff(signal)))
+
+    # remove plateaus(sign_grad==0) by sign_grad[plateau_index]=sign_grad[plateau_index-1]
+    plateau_indexes, = np.where(sign_grad == 0)
+    if len(plateau_indexes) > 0 and plateau_indexes[0] == 0:
+        # first element is a plateau
+        if len(plateau_indexes) == len(sign_grad):
+                # All values are equal to crossing level!
+                return np.array([0])
+
+        # set first element = first element which is not a plateau and delete plateau index
+        i = 0
+        while sign_grad[i] == 0:
+            i += 1
+        sign_grad[0] = sign_grad[i]
+
+        plateau_indexes = np.delete(plateau_indexes, 0)
+
+    for pi in plateau_indexes.tolist():
+        sign_grad[pi] = sign_grad[pi - 1]
+
+    extremes, = np.where(np.r_[1, (sign_grad[1:] * sign_grad[:-1] < 0), 1])
+
+    return signal[extremes]
+
+
+cpdef rainflowcount(np.ndarray[double,ndim=1] sig):
+    """Cython compilable rain ampl_mean count without time analysis
+
+
+    This implemementation is based on the c-implementation by Adam Nieslony found at
+    the MATLAB Central File Exchange http://www.mathworks.com/matlabcentral/fileexchange/3026
+
+    References
+    ----------
+    Adam Nieslony, "Determination of fragments of multiaxial service loading
+    strongly influencing the fatigue of machine components,"
+    Mechanical Systems and Signal Processing 23, no. 8 (2009): 2712-2721.
+
+    and is based on the following standard:
+    ASTM E 1049-85 (Reapproved 1997), Standard practices for cycle counting in
+    fatigue analysis, in: Annual Book of ASTM Standards, vol. 03.01, ASTM,
+    Philadelphia, 1999, pp. 710-718.
+
+    Copyright (c) 1999-2002 by Adam Nieslony
+
+    Ported to Cython compilable Python by Mads M Pedersen
+    In addition peak amplitude is changed to peak to peak amplitude
+
+
+    """
+
+    cdef int sig_ptr, index
+    cdef double ampl
+    a = []
+    sig_ptr = 0
+    ampl_mean = []
+    for _ in range(len(sig)):
+        a.append(sig[sig_ptr])
+        sig_ptr += 1
+        while len(a) > 2 and abs(a[-3] - a[-2]) <= abs(a[-2] - a[-1]):
+            ampl = abs(a[-3] - a[-2])
+            mean = (a[-3] + a[-2]) / 2;
+            if len(a) == 3:
+                del a[0]
+                if ampl > 0:
+                    ampl_mean.append((ampl, mean))
+            elif len(a) > 3:
+                del a[-3:-1]
+                if ampl > 0:
+                    ampl_mean.append((ampl, mean))
+                    ampl_mean.append((ampl, mean))
+    for index in range(len(a) - 1):
+        ampl = abs(a[index] - a[index + 1])
+        mean = (a[index] + a[index + 1]) / 2;
+        if ampl > 0:
+            ampl_mean.append((ampl, mean))
+    return ampl_mean
diff --git a/wetb/fatigue_tools/rainflowcounting/rfc_hist.py b/wetb/fatigue_tools/rainflowcounting/rfc_hist.py
index c7883e0e9139e52903ca5cad7e3d215b81d60ab0..65d3c00945c8f97f731af59972c4a8b2f55a7b25 100644
--- a/wetb/fatigue_tools/rainflowcounting/rfc_hist.py
+++ b/wetb/fatigue_tools/rainflowcounting/rfc_hist.py
@@ -1,3 +1,9 @@
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import numpy as np
 def rfc_hist(sig_rf, nrbins=46):
     """Histogram of rainflow counted cycles
diff --git a/wetb/fatigue_tools/tests/test_bearing_damage.py b/wetb/fatigue_tools/tests/test_bearing_damage.py
index a4ece3a68356b6d90fe3d32e0431f31323316c6a..37e33b48af2a1bfc2535ee832822938d5cf98fa9 100644
--- a/wetb/fatigue_tools/tests/test_bearing_damage.py
+++ b/wetb/fatigue_tools/tests/test_bearing_damage.py
@@ -3,6 +3,12 @@ Created on 16/07/2013
 
 @author: mmpe
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 
 import unittest
diff --git a/wetb/fatigue_tools/tests/test_fatigue.py b/wetb/fatigue_tools/tests/test_fatigue.py
index f5cb6bf06f6bca4e98ee707a6bce5a6b12f5c745..904c8717db8caccc45055d66a3434e0ddb359a44 100644
--- a/wetb/fatigue_tools/tests/test_fatigue.py
+++ b/wetb/fatigue_tools/tests/test_fatigue.py
@@ -3,6 +3,12 @@ Created on 16/07/2013
 
 @author: mmpe
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 import unittest
 
diff --git a/wetb/gtsdf/__init__.py b/wetb/gtsdf/__init__.py
index d31e802bfee4fe33cfcebd271feb7956e2f29ba8..0ba329148e5bf2a39f22b1e821d4315e6f1172f8 100644
--- a/wetb/gtsdf/__init__.py
+++ b/wetb/gtsdf/__init__.py
@@ -24,6 +24,12 @@ This module contains three methods:
 .. _append_block: gtsdf.html#gtsdf.append_block
 
 """
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 d = None
 d = dir()
diff --git a/wetb/gtsdf/gtsdf.py b/wetb/gtsdf/gtsdf.py
index ae72830af5a7cdfb60a03abd8db1bd6ac7903095..b948765bf458e127e669d5ed0cf52f0934256514 100644
--- a/wetb/gtsdf/gtsdf.py
+++ b/wetb/gtsdf/gtsdf.py
@@ -1,4 +1,9 @@
 from __future__ import division, print_function, absolute_import, unicode_literals
+from builtins import zip
+from builtins import range
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 import warnings
 from wetb.gtsdf.unix_time import from_unix
 try:
@@ -218,7 +223,9 @@ def save(filename, data, **kwargs):
 
     if not filename.lower().endswith('.hdf5'):
         filename += ".hdf5"
-    os.makedirs(os.path.dirname(os.path.abspath(filename)), exist_ok=True)
+    # exist_ok does not exist in Python27
+    if not os.path.exists(os.path.dirname(os.path.abspath(filename))):
+        os.makedirs(os.path.dirname(os.path.abspath(filename)))#, exist_ok=True)
     f = h5py.File(filename, "w")
     try:
         f.attrs["type"] = "General time series data format"
diff --git a/wetb/gtsdf/tests/test_gtsdf.py b/wetb/gtsdf/tests/test_gtsdf.py
index 64a17022298f22c9fd302aff2bcd7996ecba96f8..c70016fd8b2fa7362ce12f1e42f28f8a858ea8f9 100644
--- a/wetb/gtsdf/tests/test_gtsdf.py
+++ b/wetb/gtsdf/tests/test_gtsdf.py
@@ -3,6 +3,14 @@ Created on 12/09/2013
 
 @author: mmpe
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import super
+from builtins import range
+from future import standard_library
+standard_library.install_aliases()
 
 import h5py
 import numpy as np
diff --git a/wetb/gtsdf/tests/test_unix_time.py b/wetb/gtsdf/tests/test_unix_time.py
index ea65ad805f55f359c7c7aac9299f7b98ba7beb15..434b7c3d87446840831aadf273943f2476604b07 100644
--- a/wetb/gtsdf/tests/test_unix_time.py
+++ b/wetb/gtsdf/tests/test_unix_time.py
@@ -3,6 +3,12 @@ Created on 03/12/2015
 
 @author: mmpe
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 import numpy as np
 import datetime
diff --git a/wetb/gtsdf/unix_time.py b/wetb/gtsdf/unix_time.py
index f8f10368d3da79e0c7d912ff41525b59fb2a1ed7..6bf435e3bd60c93a91ebcc9439cdd7e6b6629ce5 100644
--- a/wetb/gtsdf/unix_time.py
+++ b/wetb/gtsdf/unix_time.py
@@ -1,3 +1,10 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 from datetime import datetime, date
 import numpy as np
 timestamp0 = datetime.utcfromtimestamp(0)
diff --git a/wetb/hawc2/Hawc2io.py b/wetb/hawc2/Hawc2io.py
index 73242100b95e4f5956756defc5237c5522248f2f..a07fa475fb5e17ba9cc240c1e0b2cbaba625978d 100644
--- a/wetb/hawc2/Hawc2io.py
+++ b/wetb/hawc2/Hawc2io.py
@@ -27,6 +27,17 @@ Need to be done:
     * add error handling for allmost every thing
 
 """
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import int
+from builtins import range
+from builtins import open
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 import numpy as np
 import os
 ################################################################################
@@ -34,7 +45,7 @@ import os
 ################################################################################
 ## Read HAWC2 class
 ################################################################################
-class ReadHawc2:
+class ReadHawc2(object):
     """
     """
 ################################################################################
diff --git a/wetb/hawc2/__init__.py b/wetb/hawc2/__init__.py
index dc812796118487297af84df1acac5fc862a95560..36c882ec91a0e860bc24554d38838c738e0e249e 100644
--- a/wetb/hawc2/__init__.py
+++ b/wetb/hawc2/__init__.py
@@ -1,3 +1,9 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 d = None
 d = dir()
 
diff --git a/wetb/hawc2/ae_file.py b/wetb/hawc2/ae_file.py
index 1ddad3abaae9fd078262e1820b53eb0f3d5580b5..6d9c81f2cf13f2b918987e5ca4c4526665eb5f64 100644
--- a/wetb/hawc2/ae_file.py
+++ b/wetb/hawc2/ae_file.py
@@ -3,6 +3,15 @@ Created on 24/04/2014
 
 @author: MMPE
 '''
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from builtins import range
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
 
 import numpy as np
 
diff --git a/wetb/hawc2/ascii2bin/Example.py b/wetb/hawc2/ascii2bin/Example.py
index 78bdabcf121429dbe66f77c314779ab518e0049d..38785246e1e7a920711ce2ad2fbfdd21ec8378bf 100644
--- a/wetb/hawc2/ascii2bin/Example.py
+++ b/wetb/hawc2/ascii2bin/Example.py
@@ -3,6 +3,12 @@ Created on 06/09/2013
 
 @author: Mads M. Pedersen (mmpe@dtu.dk)
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 from wetb.hawc2.ascii2bin.ascii2bin import ascii2bin
 
 
diff --git a/wetb/hawc2/ascii2bin/__init__.py b/wetb/hawc2/ascii2bin/__init__.py
index d474090c8dd67a98116add385ccc2c8568d7526d..75704d40d2278f05556a90f31cfd06cb90fc5e5a 100644
--- a/wetb/hawc2/ascii2bin/__init__.py
+++ b/wetb/hawc2/ascii2bin/__init__.py
@@ -1,6 +1,12 @@
 """
 General Time Series Data Format - a HDF5 format for time series
 """
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 d = None
 d = dir()
diff --git a/wetb/hawc2/ascii2bin/ascii2bin.py b/wetb/hawc2/ascii2bin/ascii2bin.py
index 400baed3a6177b1c2611291974198b0bb8feb83a..11a09717917ec135e58de913e94dca69ac2d3d8b 100644
--- a/wetb/hawc2/ascii2bin/ascii2bin.py
+++ b/wetb/hawc2/ascii2bin/ascii2bin.py
@@ -1,3 +1,11 @@
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
 import sys
 import warnings
 
diff --git a/wetb/hawc2/ascii2bin/make_exe.py b/wetb/hawc2/ascii2bin/make_exe.py
index 6e785db127a563ed04c6b5731f8dc54778be94c7..7e31b83af2c8607331179e01e6b267da5b002daa 100644
--- a/wetb/hawc2/ascii2bin/make_exe.py
+++ b/wetb/hawc2/ascii2bin/make_exe.py
@@ -4,6 +4,8 @@ Created on 06/09/2013
 @author: Mads M. Pedersen (mmpe@dtu.dk)
 '''
 from __future__ import division, print_function, absolute_import, unicode_literals
+from future import standard_library
+standard_library.install_aliases()
 from build_exe.cx.build_cx_exe import NUMPY
 try: range = xrange; xrange = None
 except NameError: pass
diff --git a/wetb/hawc2/ascii2bin/pandas_dat_ascii2bin.py b/wetb/hawc2/ascii2bin/pandas_dat_ascii2bin.py
index f6b29a26158be1e999a273b62aa56be1e75a5956..059d581171e59e61b364bebcf9a412e77401a4c1 100644
--- a/wetb/hawc2/ascii2bin/pandas_dat_ascii2bin.py
+++ b/wetb/hawc2/ascii2bin/pandas_dat_ascii2bin.py
@@ -3,6 +3,13 @@ Created on 10/01/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import open
+from future import standard_library
+standard_library.install_aliases()
 
 import numpy as np
 from pandas import read_csv
diff --git a/wetb/hawc2/ascii2bin/tests/test_ascii2bin.py b/wetb/hawc2/ascii2bin/tests/test_ascii2bin.py
index 433758b3bad67000a06ad54f3bb38a51549cb270..6244b960a2906c3f956d7c8fa803b05dd0487981 100644
--- a/wetb/hawc2/ascii2bin/tests/test_ascii2bin.py
+++ b/wetb/hawc2/ascii2bin/tests/test_ascii2bin.py
@@ -3,6 +3,12 @@ Created on 29/10/2013
 
 @author: mmpe
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 from wetb.hawc2 import Hawc2io
 import numpy as np
 import os
diff --git a/wetb/hawc2/at_time_file.py b/wetb/hawc2/at_time_file.py
index 68abb64cec88b0a11b5bafd77eebfc03f6d3cf67..bc1bb4f241bec4f4a211d5a239b7f927904aab42 100644
--- a/wetb/hawc2/at_time_file.py
+++ b/wetb/hawc2/at_time_file.py
@@ -3,6 +3,14 @@ Created on 24/04/2014
 
 @author: MMPE
 '''
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from builtins import range
+from future import standard_library
+standard_library.install_aliases()
 
 import numpy as np
 class AtTimeFile(object):
diff --git a/wetb/hawc2/cmp_test_cases.py b/wetb/hawc2/cmp_test_cases.py
index 9acd5357f8f1dd05555961f160db250c4c72bd8d..b1d4f1a2140d5078104e2e84115d53e0b4567baa 100644
--- a/wetb/hawc2/cmp_test_cases.py
+++ b/wetb/hawc2/cmp_test_cases.py
@@ -1,3 +1,13 @@
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import open
+from builtins import range
+from builtins import str
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 import string
 import shutil
 import numpy as np
diff --git a/wetb/hawc2/htc_contents.py b/wetb/hawc2/htc_contents.py
index 9b86dd6beff8d6e38eb6ba789300e145d2bc52c1..6b76a14af46b0f8772e5b060c0d11299c8ad0ebb 100644
--- a/wetb/hawc2/htc_contents.py
+++ b/wetb/hawc2/htc_contents.py
@@ -6,6 +6,15 @@ Created on 20/01/2014
 See documentation of HTCFile below
 
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import zip
+from builtins import int
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 from collections import OrderedDict
 import collections
 
@@ -18,7 +27,8 @@ class OrderedDict(collections.OrderedDict):
 
 
 def parse_next_line(lines):
-    line, *comments = lines.pop(0).split(";")
+    _3to2list = list(lines.pop(0).split(";"))
+    line, comments, = _3to2list[:1] + [_3to2list[1:]]
     comments = ";".join(comments).rstrip()
     while lines and lines[0].lstrip().startswith(";"):
         comments += "\n%s" % lines.pop(0).rstrip()
@@ -52,7 +62,8 @@ class HTCContents(object):
             return self.contents[args[0]]
 
     def __setattr__(self, *args, **kwargs):
-        k, *v = args
+        _3to2list1 = list(args)
+        k, v, = _3to2list1[:1] + [_3to2list1[1:]]
         if k in dir(self):  # in ['section', 'filename', 'lines']:
             return object.__setattr__(self, *args, **kwargs)
         self.contents[k] = HTCLine(k, v, "")
@@ -163,7 +174,8 @@ class HTCLine(HTCContents):
     def from_lines(lines):
         line, end_comments = parse_next_line(lines)
         if len(line.split()) > 0:
-            name, *values = line.split()
+            _3to2list3 = list(line.split())
+            name, values, = _3to2list3[:1] + [_3to2list3[1:]]
         else:
             name = line
             values = []
@@ -245,7 +257,8 @@ class HTCSensor(HTCLine):
     def from_lines(lines):
         line, comments = parse_next_line(lines)
         if len(line.split()) > 2:
-            type, sensor, *values = line.split()
+            _3to2list5 = list(line.split())
+            type, sensor, values, = _3to2list5[:2] + [_3to2list5[2:]]
         else:
             type, sensor = line.split()
             values = []
diff --git a/wetb/hawc2/htc_file.py b/wetb/hawc2/htc_file.py
index 1bcea1d727a288ec1061b7b0e6a5d52036fcb541..54a742a53645cb1425e658c9dcbb62c3c141db3f 100644
--- a/wetb/hawc2/htc_file.py
+++ b/wetb/hawc2/htc_file.py
@@ -6,6 +6,14 @@ Created on 20/01/2014
 See documentation of HTCFile below
 
 '''
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 from collections import OrderedDict
 
 from wetb.hawc2.htc_contents import HTCContents, HTCSection, HTCLine, \
@@ -74,7 +82,9 @@ class HTCFile(HTCContents, HTCDefaults):
             filename = self.filename
         else:
             self.filename = filename
-        os.makedirs(os.path.dirname(filename), exist_ok=True)
+        # exist_ok does not exist in Python27
+        if not os.path.exists(os.path.dirname(filename)):
+            os.makedirs(os.path.dirname(filename))#, exist_ok=True)
         with open(filename, 'w') as fid:
             fid.write(str(self))
 
diff --git a/wetb/hawc2/log_file.py b/wetb/hawc2/log_file.py
index d049610d24551f0bad541fa48e6f45aaef9348ec..d8cde89f98bb058bb549937dbc1b6c6370bf2d9e 100644
--- a/wetb/hawc2/log_file.py
+++ b/wetb/hawc2/log_file.py
@@ -3,6 +3,14 @@ Created on 18/11/2015
 
 @author: MMPE
 '''
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import open
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
 import os
 from wetb.hawc2.htc_file import HTCFile
 from collections import OrderedDict
@@ -59,7 +67,9 @@ class LogFile(object):
     def __str__(self):
         return self.txt
     def clear(self):
-        os.makedirs(os.path.dirname(self.filename), exist_ok=True)
+        # exist_ok does not exist in Python27
+        if not os.path.exists(os.path.dirname(self.filename)):
+            os.makedirs(os.path.dirname(self.filename))#, exist_ok=True)
         with open(self.filename, 'w'):
             pass
         self.reset()
@@ -98,7 +108,8 @@ class LogFile(object):
                 if len(txt.strip()):
                     self.lastline = (txt.strip()[max(0, txt.strip().rfind("\n")):]).strip()
                 if self.status == INITIALIZATION:
-                    init_txt, *rest = txt.split("Starting simulation")
+                    _3to2list = list(txt.split("Starting simulation"))
+                    init_txt, rest, = _3to2list[:1] + [_3to2list[1:]]
                     if self.hawc2version == "Unknown" and "Version ID" in init_txt:
                         self.hawc2version = txt.split("Version ID : ")[1].split("\n", 1)[0].strip()
                     if "*** ERROR ***" in init_txt:
@@ -113,7 +124,8 @@ class LogFile(object):
                         if i1 > -1:
                             self.start_time = (self.extract_time(txt[i1:]), time.time())
 
-                    simulation_txt, *rest = txt.split('Elapsed time')
+                    _3to2list1 = list(txt.split('Elapsed time'))
+                    simulation_txt, rest, = _3to2list1[:1] + [_3to2list1[1:]]
                     if "*** ERROR ***" in simulation_txt:
                         self.errors.extend([l.strip() for l in simulation_txt.strip().split("\n") if "error" in l.lower()])
                     i1 = simulation_txt.rfind("Global time")
diff --git a/wetb/hawc2/pc_file.py b/wetb/hawc2/pc_file.py
index 92ff0d09c7ce98e35ae29b6bb70dbeed5b375044..49893db698c55ff2117995addaae22ae7e9b802a 100644
--- a/wetb/hawc2/pc_file.py
+++ b/wetb/hawc2/pc_file.py
@@ -3,6 +3,15 @@ Created on 24/04/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import open
+from builtins import range
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
 
 from wetb.hawc2.ae_file import AEFile
 import numpy as np
diff --git a/wetb/hawc2/sel_file.py b/wetb/hawc2/sel_file.py
index f6f0e6ac5a3c77cfff0a55c893ce1c67ca3ce155..a01c0183a505c6dec40ba98fa6775a878f2180cf 100644
--- a/wetb/hawc2/sel_file.py
+++ b/wetb/hawc2/sel_file.py
@@ -1,3 +1,13 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from builtins import str
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 from datetime import datetime
 import os
 import numpy as np
@@ -5,7 +15,7 @@ import numpy as np
 
 BINARY = "BINARY"
 ASCII = "ASCII"
-class SelFile():
+class SelFile(object):
     """Class for reading HAWC2 sel-files
     Attributes
     ----------
diff --git a/wetb/hawc2/shear_file.py b/wetb/hawc2/shear_file.py
index b0e8126233f2102cd0822a71d9d158fac6e5bb81..04a768beb4d20d2832604c2d08f3264aca16c8f0 100644
--- a/wetb/hawc2/shear_file.py
+++ b/wetb/hawc2/shear_file.py
@@ -3,6 +3,14 @@ Created on 24/04/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import range
+from builtins import open
+from future import standard_library
+standard_library.install_aliases()
 
 import numpy as np
 import os
@@ -43,7 +51,9 @@ def save(filename, y_coordinates, z_coordinates, u=None, v=None, w=None):
 
             assert vuw[i].shape == shape, (i, vuw[i].shape, shape)
 
-    os.makedirs(os.path.dirname(filename), exist_ok=True)
+    # exist_ok does not exist in Python27
+    if not os.path.exists(os.path.dirname(filename)):
+        os.makedirs(os.path.dirname(filename))#, exist_ok=True)
     with open(filename, 'w') as fid:
         fid.write(" # autogenerated shear file\n")
         fid.write("  %d %d\n" % (len(y_coordinates), len(z_coordinates)))
diff --git a/wetb/hawc2/simulation.py b/wetb/hawc2/simulation.py
index 3afc961cef9386930aeedbe95ec78a3a41b9bb4c..f4d38e7003da64372460d12e266db75c2720d8ba 100644
--- a/wetb/hawc2/simulation.py
+++ b/wetb/hawc2/simulation.py
@@ -1,3 +1,11 @@
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import open
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 import os
 from wetb.hawc2.htc_file import HTCFile
 from wetb.hawc2.log_file import LogFile
@@ -130,7 +138,9 @@ class Simulation(object):
                 src = os.path.join(self.modelpath, src)
             for src_file in glob.glob(src):
                 dst = os.path.join(self.tmp_modelpath, os.path.relpath(src_file, self.modelpath))
-                os.makedirs(os.path.dirname(dst), exist_ok=True)
+                # exist_ok does not exist in Python27
+                if not os.path.exists(os.path.dirname(dst)):
+                    os.makedirs(os.path.dirname(dst))#, exist_ok=True)
                 shutil.copy(src_file, dst)
                 if not os.path.isfile(dst) or os.stat(dst).st_size != os.stat(src_file).st_size:
                     print ("error copy ", dst)
@@ -161,7 +171,9 @@ class Simulation(object):
 
             for src_file in glob.glob(src):
                 dst_file = os.path.join(self.modelpath, os.path.relpath(src_file, self.tmp_modelpath))
-                os.makedirs(os.path.dirname(dst_file), exist_ok=True)
+                # exist_ok does not exist in Python27
+                if not os.path.exists(os.path.dirname(dst_file)):
+                    os.makedirs(os.path.dirname(dst_file))#, exist_ok=True)
                 if not os.path.isfile(dst_file) or os.path.getmtime(dst_file) != os.path.getmtime(src_file):
                     shutil.copy(src_file, dst_file)
 
diff --git a/wetb/hawc2/tests/test_AtTimeFile.py b/wetb/hawc2/tests/test_AtTimeFile.py
index 77943ee72b027b17e626bab0f22639f4c24814bc..8f1fae91612b54c5e0cec78a7308a3ddf95f46f7 100644
--- a/wetb/hawc2/tests/test_AtTimeFile.py
+++ b/wetb/hawc2/tests/test_AtTimeFile.py
@@ -3,6 +3,12 @@ Created on 17/07/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.hawc2.at_time_file import AtTimeFile
 import numpy as np
diff --git a/wetb/hawc2/tests/test_ae_file.py b/wetb/hawc2/tests/test_ae_file.py
index 2dc82ae9776434fff0bce04875a6a39716a2146c..4e57189110f99d4f914a352f9805d32971532b73 100644
--- a/wetb/hawc2/tests/test_ae_file.py
+++ b/wetb/hawc2/tests/test_ae_file.py
@@ -3,6 +3,12 @@ Created on 05/11/2015
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.hawc2.ae_file import AEFile
 import os
diff --git a/wetb/hawc2/tests/test_compare_test_cases.py b/wetb/hawc2/tests/test_compare_test_cases.py
index 798f70cce5a54b221efd7465759a1f588388d6ae..a22bc789d4be5a8c73eb88c1f07f76a47f6aa911 100644
--- a/wetb/hawc2/tests/test_compare_test_cases.py
+++ b/wetb/hawc2/tests/test_compare_test_cases.py
@@ -3,6 +3,12 @@ Created on 17/07/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.hawc2.cmp_test_cases import CompareTestCases
 import numpy as np
diff --git a/wetb/hawc2/tests/test_hawc2io.py b/wetb/hawc2/tests/test_hawc2io.py
index f8e0b09c57989db2e5e55b6acc1346001b6b0980..4d83a2e6b4279361221274eca3f9492da3e8802f 100644
--- a/wetb/hawc2/tests/test_hawc2io.py
+++ b/wetb/hawc2/tests/test_hawc2io.py
@@ -3,6 +3,12 @@ Created on 05/11/2015
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 import numpy as np
 from wetb.hawc2.Hawc2io import ReadHawc2
diff --git a/wetb/hawc2/tests/test_htc_file.py b/wetb/hawc2/tests/test_htc_file.py
index 7827b1ed81a0158558fad991c2065ae4cc335c5c..d12ddae628259dbd5abb4c20934fd2448c127130 100644
--- a/wetb/hawc2/tests/test_htc_file.py
+++ b/wetb/hawc2/tests/test_htc_file.py
@@ -3,6 +3,15 @@ Created on 17/07/2014
 
 @author: MMPE
 '''
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from builtins import str
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 import os
 import unittest
 
diff --git a/wetb/hawc2/tests/test_logfile.py b/wetb/hawc2/tests/test_logfile.py
index 170f83e085e36577d107015b42358c6daef03260..1760c98bb336502d7c470b3783a6b2caecd65fc8 100644
--- a/wetb/hawc2/tests/test_logfile.py
+++ b/wetb/hawc2/tests/test_logfile.py
@@ -3,6 +3,13 @@ Created on 18/11/2015
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.hawc2.log_file import LogFile, \
     INITIALIZATION, SIMULATING, DONE, PENDING
diff --git a/wetb/hawc2/tests/test_pc_file.py b/wetb/hawc2/tests/test_pc_file.py
index aeaaa5e371e5b1555ee6abb348b10c3ccaa77cc7..e5a7027925477f7341190ea7a0c626cca1b74a5a 100644
--- a/wetb/hawc2/tests/test_pc_file.py
+++ b/wetb/hawc2/tests/test_pc_file.py
@@ -3,6 +3,12 @@ Created on 17/07/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import os
 import unittest
 from wetb.hawc2.pc_file import PCFile
diff --git a/wetb/hawc2/tests/test_sel_file.py b/wetb/hawc2/tests/test_sel_file.py
index f6e1b51f6084dba41fb76c672cc947cfba1adf80..d7593ae78e0241b7caf242d3313ba8161866a893 100644
--- a/wetb/hawc2/tests/test_sel_file.py
+++ b/wetb/hawc2/tests/test_sel_file.py
@@ -3,6 +3,12 @@ Created on 17/07/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.hawc2.sel_file import SelFile, BINARY, ASCII
 from datetime import datetime
diff --git a/wetb/hawc2/tests/test_shear_file.py b/wetb/hawc2/tests/test_shear_file.py
index 19f307ae8f5bb0533cd010c36b8486da56f89a38..3418f98580441f053c6444d8d2aab346620f127e 100644
--- a/wetb/hawc2/tests/test_shear_file.py
+++ b/wetb/hawc2/tests/test_shear_file.py
@@ -3,6 +3,13 @@ Created on 05/11/2015
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 from wetb.hawc2 import shear_file
 import numpy as np
diff --git a/wetb/prepost/DataChecks.py b/wetb/prepost/DataChecks.py
index e241210d8db78a01d60e107e69cc513c7c1b5163..58dd4732a3ceb702d55190455c99d586016693fd 100644
--- a/wetb/prepost/DataChecks.py
+++ b/wetb/prepost/DataChecks.py
@@ -4,6 +4,12 @@ Created on Mon Mar  5 16:00:02 2012
 
 @author: dave
 """
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 
 
diff --git a/wetb/prepost/Simulations.py b/wetb/prepost/Simulations.py
index 5847a5a50fec0ce03c3bf1e790748e1013c71616..5d5b2a0320623aefec3476e433f5f247bc069ab9 100755
--- a/wetb/prepost/Simulations.py
+++ b/wetb/prepost/Simulations.py
@@ -6,6 +6,19 @@ Created on Tue Nov  1 15:16:34 2011
 __author__ = "David Verelst <dave@dtu.dk>"
 __license__ = "GPL-2+"
 """
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import dict
+from builtins import open
+from builtins import zip
+from builtins import range
+from builtins import str
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 
 
 
@@ -1201,7 +1214,7 @@ def logcheck_case(errorlogs, cases, case, silent=False):
     #errorlogs.save()
 
 
-class Log:
+class Log(object):
     """
     Class for convinient logging. Create an instance and add lines to the
     logfile as a list with the function add.
@@ -1237,7 +1250,7 @@ class Log:
         for k in self.log:
             print(k)
 
-class HtcMaster:
+class HtcMaster(object):
     """
     """
 
@@ -1828,7 +1841,7 @@ class HtcMaster:
                 self.tags[key] = self.tags[key].lower()
 
 
-class PBS:
+class PBS(object):
     """
     The part where the actual pbs script is writtin in this class (functions
     create(), starting() and ending() ) is based on the MS Excel macro
@@ -2452,7 +2465,7 @@ class PBS:
 # TODO: rewrite the error log analysis to something better. Take different
 # approach: start from the case and see if the results are present. Than we
 # also have the tags_dict available when log-checking a certain case
-class ErrorLogs:
+class ErrorLogs(object):
     """
     Analyse all HAWC2 log files in any given directory
     ==================================================
@@ -2836,12 +2849,12 @@ class ErrorLogs:
             f.write(contents)
 
 
-class ModelData:
+class ModelData(object):
     """
     Second generation ModelData function. The HawcPy version is crappy, buggy
     and not mutch of use in the optimisation context.
     """
-    class st_headers:
+    class st_headers(object):
         """
         Indices to the respective parameters in the HAWC2 st data file
         """
@@ -3261,7 +3274,7 @@ class WeibullParameters(object):
 
 # FIXME: Cases has a memory leek somewhere, this whole thing needs to be
 # reconsidered and rely on a DataFrame instead of a dict!
-class Cases:
+class Cases(object):
     """
     Class for the old htc_dict
     ==========================
@@ -4947,7 +4960,7 @@ class Cases:
         h5f.close()
 
 
-class EnvelopeClass:
+class EnvelopeClass(object):
     """
     Class with the definition of the table for the envelope results
     """
@@ -4962,7 +4975,7 @@ class EnvelopeClass:
 
 
 # TODO: implement this
-class Results():
+class Results(object):
     """
     Move all Hawc2io to here? NO: this should be the wrapper, to interface
     the htc_dict with the io functions
diff --git a/wetb/prepost/dlcdefs.py b/wetb/prepost/dlcdefs.py
index 8627cb1f17af71a2e9a3f27687d44a7fe9b924e7..21dd670070e012023e77d73ea45e43cb2f019198 100644
--- a/wetb/prepost/dlcdefs.py
+++ b/wetb/prepost/dlcdefs.py
@@ -4,6 +4,13 @@ Created on Wed Nov  5 14:01:25 2014
 
 @author: dave
 """
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 
 
 
diff --git a/wetb/prepost/dlcplots.py b/wetb/prepost/dlcplots.py
index 880d5ae50db29f4710039d150e1281d72325cd72..1d5b3e12fd6703793139c665d6b62281b9cb694e 100644
--- a/wetb/prepost/dlcplots.py
+++ b/wetb/prepost/dlcplots.py
@@ -4,6 +4,13 @@ Created on Tue Sep 16 10:21:11 2014
 
 @author: dave
 """
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 
 
 
diff --git a/wetb/prepost/dlctemplate.py b/wetb/prepost/dlctemplate.py
index 47d795b78f67a21b3e4d36207ca9d2b37ae96445..39d1b00a850dfd6b11ce3bb95c3ba5a39732c572 100755
--- a/wetb/prepost/dlctemplate.py
+++ b/wetb/prepost/dlctemplate.py
@@ -4,6 +4,15 @@ Created on Thu Sep 18 13:00:25 2014
 
 @author: dave
 """
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import dict
+from builtins import str
+from builtins import range
+from future import standard_library
+standard_library.install_aliases()
 
 
 
diff --git a/wetb/prepost/filters.py b/wetb/prepost/filters.py
index 760ffe27fcbe5964d901b1875bc295b0d36f35c5..22f6fd6cd33c92da67b8e1c3395ad3c5a4c5f6fb 100644
--- a/wetb/prepost/filters.py
+++ b/wetb/prepost/filters.py
@@ -4,6 +4,13 @@ Created on Sun Jan 20 18:14:02 2013
 
 @author: dave
 """
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 
 
 
@@ -16,7 +23,7 @@ from wetb.prepost.misc import calc_sample_rate
 from wetb.prepost import mplutils
 
 
-class Filters:
+class Filters(object):
 
     def __init__(self):
         pass
diff --git a/wetb/prepost/h2_vs_hs2.py b/wetb/prepost/h2_vs_hs2.py
index 752bca8a3ad0d4501cf8762b2f5ec0a165cbd4c9..f0d1f1498fe0952002460d9ccfb813d2464320bb 100644
--- a/wetb/prepost/h2_vs_hs2.py
+++ b/wetb/prepost/h2_vs_hs2.py
@@ -4,6 +4,18 @@ Created on Mon Nov  2 15:23:15 2015
 
 @author: dave
 """
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import range
+from builtins import zip
+from builtins import dict
+from builtins import str
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 
 import os
 
@@ -18,7 +30,7 @@ from wetb.prepost import hawcstab2 as hs2
 from wetb.prepost import mplutils
 
 
-class ConfigBase:
+class ConfigBase(object):
 
     def __init__(self):
         pass
diff --git a/wetb/prepost/hawcstab2.py b/wetb/prepost/hawcstab2.py
index c1afefe01620cb758e7bcbe7ad1f777b59936e78..5597f2c104548bb3bf1996695d74f38cefb5a71a 100644
--- a/wetb/prepost/hawcstab2.py
+++ b/wetb/prepost/hawcstab2.py
@@ -4,6 +4,16 @@ Created on Tue Jan 14 14:12:58 2014
 
 @author: dave
 """
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import range
+from builtins import open
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 
 
 
@@ -17,7 +27,7 @@ import pandas as pd
 from wetb.prepost import mplutils
 
 
-class dummy:
+class dummy(object):
     def __init__(self):
         pass
 
diff --git a/wetb/prepost/misc.py b/wetb/prepost/misc.py
index 0c7bd3bbe808b3cc30fae5cd4682686423ac407f..965c24b7a26005dcc3ac87447fe9c2a6ecb7f9c3 100644
--- a/wetb/prepost/misc.py
+++ b/wetb/prepost/misc.py
@@ -6,6 +6,18 @@ Library for general stuff
 
 @author: dave
 """
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import range
+from builtins import dict
+from builtins import int
+from builtins import open
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 
 
 
@@ -27,7 +39,7 @@ from matplotlib import pyplot as plt
 import pandas as pd
 
 
-class Logger:
+class Logger(object):
     """The Logger class can be used to redirect standard output to a log file.
     Usage: Create a Logger object and redirect standard output to the Logger
     object.  For example:
diff --git a/wetb/prepost/mplutils.py b/wetb/prepost/mplutils.py
index e77b0b0509e6beff82b736df374d19fb25875bc4..b8ca174a3a72b42fab45c9ee6b5030dfa0931349 100644
--- a/wetb/prepost/mplutils.py
+++ b/wetb/prepost/mplutils.py
@@ -4,6 +4,16 @@ Created on Wed Nov 23 11:22:50 2011
 
 @author: dave
 """
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import range
+from builtins import int
+from builtins import dict
+from builtins import round
+from future import standard_library
+standard_library.install_aliases()
 
 
 
diff --git a/wetb/prepost/prepost.py b/wetb/prepost/prepost.py
index 0aa94dd5e08c1cee966824a5170ef7c65a1d60d7..44898d13f894f046e64c86efeb97e850f9a16443 100644
--- a/wetb/prepost/prepost.py
+++ b/wetb/prepost/prepost.py
@@ -4,6 +4,13 @@ Created on Tue Mar 10 18:47:32 2015
 
 @author: dave
 """
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import open
+from future import standard_library
+standard_library.install_aliases()
 
 
 
diff --git a/wetb/prepost/windIO.py b/wetb/prepost/windIO.py
index 162e220adb8d1315e5444461d75c2db94a085eb9..b166e14d2fed9850309691bbcc5697ea7d1d9614 100755
--- a/wetb/prepost/windIO.py
+++ b/wetb/prepost/windIO.py
@@ -4,6 +4,18 @@ Created on Thu Apr  3 19:53:59 2014
 
 @author: dave
 """
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import dict
+from builtins import open
+from builtins import range
+from builtins import str
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
+from builtins import object
 
  # always devide as floats
 
@@ -39,7 +51,7 @@ from wetb.fatigue_tools.rainflowcounting.rainflowcount import rainflow_astm as r
 from wetb.fatigue_tools.rainflowcounting.rfc_hist import rfc_hist as rfc_hist
 
 
-class LoadResults:
+class LoadResults(object):
     """Read a HAWC2 result data file
 
     Usage:
@@ -1275,7 +1287,7 @@ def ReadEigenStructure(file_path, file_name, debug=False, max_modes=500):
     return modes_arr
 
 
-class UserWind:
+class UserWind(object):
     """
     """
 
@@ -1533,7 +1545,7 @@ class UserWind:
             np.savetxt(f, w_coord.reshape((w_coord.size,1)), fmt='% 8.02f')
 
 
-class WindProfiles:
+class WindProfiles(object):
 
     def __init__(self):
         pass
@@ -1588,7 +1600,7 @@ class WindProfiles:
         return a_phi * t1 * t2 * t3
 
 
-class Turbulence:
+class Turbulence(object):
 
     def __init__(self):
 
diff --git a/wetb/utils/caching.py b/wetb/utils/caching.py
index 184825ede0a2fd20bb3714856223ad96ac595647..6f5df273165e5ffd56b539017b239165b8265796 100644
--- a/wetb/utils/caching.py
+++ b/wetb/utils/caching.py
@@ -3,6 +3,12 @@ Created on 07/02/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import inspect
 
 def set_cache_property(obj, name, get_func, set_func=None):
diff --git a/wetb/utils/cython_compile/__init__.py b/wetb/utils/cython_compile/__init__.py
index 8d7b1d75f5bd28e05d322f0edf4abec2c514ea6b..7db504d7fb31152836d8c88fcbc87882dff54f60 100644
--- a/wetb/utils/cython_compile/__init__.py
+++ b/wetb/utils/cython_compile/__init__.py
@@ -1,3 +1,9 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 d = None;d = dir()
 
 from .cython_compile import cython_compile, cython_import, cython_compile_autodeclare, is_compiled
diff --git a/wetb/utils/cython_compile/cython_compile.py b/wetb/utils/cython_compile/cython_compile.py
index 41ccc881acaa4b24814acd5823224546a5f2d325..02213aee94cbdb50211d595a9a501def2955fad9 100644
--- a/wetb/utils/cython_compile/cython_compile.py
+++ b/wetb/utils/cython_compile/cython_compile.py
@@ -7,6 +7,16 @@ Created on 10/07/2013
 Wrapper functions and decorators for compiling functions using Cython
 
 '''
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import dict
+from builtins import open
+from builtins import zip
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 import inspect
 import os
 import re
diff --git a/wetb/utils/cython_compile/examples/cycheck.py b/wetb/utils/cython_compile/examples/cycheck.py
index b3979a91d8d4bd8c9578b074ae0c6b65b49e8921..602cbf3521261a1565a51dc443890686665cb60c 100644
--- a/wetb/utils/cython_compile/examples/cycheck.py
+++ b/wetb/utils/cython_compile/examples/cycheck.py
@@ -3,6 +3,14 @@ Created on 29/03/2013
 
 @author: Mads
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import range
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
 import cython
 import math
 
diff --git a/wetb/utils/cython_compile/examples/examples.py b/wetb/utils/cython_compile/examples/examples.py
index 037482dd07935ff014c8d287e6292dfa8c69e4aa..14f794fe31c4866f8f8597e2ace752e2322c8c74 100644
--- a/wetb/utils/cython_compile/examples/examples.py
+++ b/wetb/utils/cython_compile/examples/examples.py
@@ -3,6 +3,14 @@ Created on 11/07/2013
 
 @author: Mads M. Pedersen (mmpe@dtu.dk)
 '''
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from builtins import range
+from builtins import int
+from future import standard_library
+standard_library.install_aliases()
 import math
 
 from wetb.utils.cython_compile.cython_compile import cython_compile, \
diff --git a/wetb/utils/geometry.py b/wetb/utils/geometry.py
index 586ad401e0b514fa234d33c11424700ec1497141..01a4daf6e0cbac576dbc95711ab7205957b9a8eb 100644
--- a/wetb/utils/geometry.py
+++ b/wetb/utils/geometry.py
@@ -1,3 +1,10 @@
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from builtins import map
+from future import standard_library
+standard_library.install_aliases()
 import numpy as np
 
 def rad(deg):
diff --git a/wetb/utils/process_exec.py b/wetb/utils/process_exec.py
index caeb49750b88a33e96961aec34bef5eacc9f6c7f..04dfa697dc683f49c31b862a50df8cdf828b1f7e 100644
--- a/wetb/utils/process_exec.py
+++ b/wetb/utils/process_exec.py
@@ -3,6 +3,14 @@ Created on 10/03/2014
 
 @author: MMPE
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import range
+from builtins import str
+from future import standard_library
+standard_library.install_aliases()
 
 import os
 import psutil
diff --git a/wetb/utils/tests/test_caching.py b/wetb/utils/tests/test_caching.py
index d17dd925253688cbe789811616a36e63e0263bfd..5ffa33f2d719d9c41bf7dcebf79b069573ec4dd1 100644
--- a/wetb/utils/tests/test_caching.py
+++ b/wetb/utils/tests/test_caching.py
@@ -3,6 +3,12 @@ Created on 08/11/2013
 
 @author: mmpe
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import multiprocessing
 import time
 import unittest
diff --git a/wetb/utils/tests/test_geometry.py b/wetb/utils/tests/test_geometry.py
index d5b0a2be4fb671fa2502ccf012d551c7a4b691eb..291864c108a2819e279be9c787e92899305241f2 100644
--- a/wetb/utils/tests/test_geometry.py
+++ b/wetb/utils/tests/test_geometry.py
@@ -3,6 +3,12 @@ Created on 15/01/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 import unittest
 
 import wetb.gtsdf
diff --git a/wetb/utils/timing.py b/wetb/utils/timing.py
index ab67d8b1c7ec18a9899fd30a07656b894efa0f31..7e148cb8df5a70c4bf84784cae02548a726e749c 100644
--- a/wetb/utils/timing.py
+++ b/wetb/utils/timing.py
@@ -1,3 +1,11 @@
+from __future__ import print_function
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import absolute_import
+from builtins import dict
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 from six import exec_
 import time
 import inspect
diff --git a/wetb/wind/shear.py b/wetb/wind/shear.py
index fb832a2559edfbd099e1524f34f77a3252b593d9..77e70135fcd42753b2b0f304e9ef85d1ef86224d 100644
--- a/wetb/wind/shear.py
+++ b/wetb/wind/shear.py
@@ -3,6 +3,12 @@ Created on 16/06/2014
 
 @author: MMPE
 '''
+from __future__ import division
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
 
 from scipy.optimize.optimize import fmin
 import numpy as np
diff --git a/wetb/wind/tests/test_Shear.py b/wetb/wind/tests/test_Shear.py
index 981d4ac61c6c3c94983237ef230d31dea6fd749b..af1f6f0a539395b97053cddd7b11f94ce86aef71 100644
--- a/wetb/wind/tests/test_Shear.py
+++ b/wetb/wind/tests/test_Shear.py
@@ -3,6 +3,13 @@ Created on 05/06/2012
 
 @author: Mads
 '''
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from builtins import zip
+from future import standard_library
+standard_library.install_aliases()
 import os
 from wetb.utils.geometry import xyz2uvw
 import wetb.gtsdf