diff --git a/AirSeaFluxCode.py b/AirSeaFluxCode.py
index b21f1e42fc1f4c0d11a5f82bc20d2d8b5cb2cc35..746146dbc5eea836a88a0480125867c29644333f 100644
--- a/AirSeaFluxCode.py
+++ b/AirSeaFluxCode.py
@@ -1,8 +1,8 @@
 import numpy as np
 import sys
 import logging
-from flux_subs import (kappa, CtoK, get_heights, get_skin, get_gust, get_L,
-                       get_hum, get_strs, psim_calc, psit_calc, 
+from flux_subs import (kappa, CtoK, get_heights, get_init, get_skin, get_gust,
+                       get_L, get_hum, get_strs, psim_calc, psit_calc, 
                        cdn_calc, cd_calc, ctcq_calc, ctcqn_calc)
 
 
@@ -112,73 +112,17 @@ def AirSeaFluxCode(spd, T, SST, lat=None, hum=None, P=None,
     """
     logging.basicConfig(filename='flux_calc.log',
                         format='%(asctime)s %(message)s',level=logging.INFO)
-    if ((type(spd) != np.ndarray) or (type(T) != np.ndarray) or
-        (type(SST) != np.ndarray)):
-        sys.exit("input type of spd, T and SST should be numpy.ndarray")
+    lat, P, Rl, Rs, cskin, gust, tol, L = get_init(spd, T, SST, lat, P, Rl, Rs,
+                                                   cskin, gust, L, tol, meth,
+                                                   qmeth)
     ref_ht, tlapse = 10, 0.0098        # reference height, lapse rate
     h_in = get_heights(hin, len(spd))  # heights of input measurements/fields
     h_out = get_heights(hout, 1)       # desired height of output variables
-    # if input values are nan break
-    if meth not in ["S80", "S88", "LP82", "YT96", "UA", "LY04", "C30", "C35",
-                    "C40","ERA5"]:
-        sys.exit("unknown method")
-    if qmeth not in ["HylandWexler", "Hardy", "Preining", "Wexler", "CIMO",
-                     "GoffGratch", "MagnusTetens", "Buck", "Buck2", "WMO",
-                     "WMO2000", "Sonntag", "Bolton", "IAPWS", "MurphyKoop"]:
-        sys.exit("unknown q-method")
-    if (np.all(np.isnan(spd)) or np.all(np.isnan(T)) or np.all(np.isnan(SST))):
-        sys.exit("input wind, T or SST is empty")
-        logging.debug('all spd or T or SST input is nan')
-    if (np.all(np.isnan(spd)) or np.all(np.isnan(T)) or np.all(np.isnan(SST))):
-        sys.exit("input wind, T or SST is empty")
-        logging.debug('all spd or T or SST input is nan')
-    if (np.all(lat == None)):  # set latitude to 45deg if empty
-        lat = 45*np.ones(spd.shape)
-    elif ((np.all(lat != None)) and (np.size(lat) == 1)):
-        lat = np.ones(spd.shape)*np.copy(lat)
-    if ((np.all(P == None)) or np.all(np.isnan(P))):
-        P = np.ones(spd.shape)*1013
-        logging.debug('input P is empty and set to 1013hPa')
-    elif (((np.all(P != None)) or np.all(~np.isnan(P))) and np.size(P) == 1):
-        P = np.ones(spd.shape)*np.copy(P)
-    if (np.all(Rl == None) or np.all(np.isnan(Rl))):
-        Rl = np.ones(spd.shape)*370    # set to default for COARE3.5
-    if (np.all(Rs == None) or np.all(np.isnan(Rs))):
-        Rs = np.ones(spd.shape)*150  # set to default for COARE3.5
-    if ((gust == None) and (meth == "C30" or meth == "C35" or meth == "C40")):
-        gust = [1, 1.2, 600]
-    elif ((gust == None) and (meth == "UA" or meth == "ERA5")):
-        gust = [1, 1, 1000]
-    elif (gust == None):
-        gust = [1, 1.2, 800]
-    elif (np.size(gust) < 3):
-        sys.exit("gust input must be a 3x1 array")
-    if (tol == None):
-        tol = ['flux', 0.01, 1, 1]
-    elif (tol[0] not in ['flux', 'ref', 'all']):
-        sys.exit("unknown tolerance input")
-    if ((cskin == None) and (meth == "S80" or meth == "S88" or meth == "LP82"
-                             or meth == "YT96")):
-       cskin = 0
-    elif ((cskin == None) and (meth == "UA" or meth == "LY04" or meth == "C30"
-                               or meth == "C35" or meth == "C40"
-                               or meth == "ERA5")):
-       cskin = 1
+
     logging.info('method %s, inputs: lat: %s | P: %s | Rl: %s |'
-                 ' Rs: %s | gust: %s | cskin: %s', meth,
+                 ' Rs: %s | gust: %s | cskin: %s | L : %s', meth,
                  np.nanmedian(lat), np.nanmedian(P), np.nanmedian(Rl),
-                 np.nanmedian(Rs), gust, cskin)
-    if (L not in [None, 0, 1, 2, 3]):
-        sys.exit("L input must be either None, 0, 1, 2 or 3")
-    if ((L == None) and (meth == "S80" or meth == "S88" or meth == "LP82"
-                             or meth == "YT96" or meth == "LY04")):
-       L = 0
-    elif ((L == None) and (meth == "UA")):
-       L = 1
-    elif ((L == None) and (meth == "ERA5")):
-       L = 2
-    elif ((L == None) and (meth == "C30" or meth == "C35" or meth == "C40")):
-       L = 3
+                 np.nanmedian(Rs), gust, cskin, L)
     ####
     th = np.where(T < 200, (np.copy(T)+CtoK) *
                   np.power(1000/P,287.1/1004.67),