diff --git a/source/python/classes/EcFlexpart.py b/source/python/classes/EcFlexpart.py
index b90c8ecfe033c4b34d450f23e3f7ee82ea86859d..bcac71720577591e4d407546ce06a432c29d392d 100644
--- a/source/python/classes/EcFlexpart.py
+++ b/source/python/classes/EcFlexpart.py
@@ -80,9 +80,11 @@ import shutil
 import subprocess
 from datetime import datetime, timedelta
 import numpy as np
-from gribapi import grib_set, grib_index_select, grib_new_from_index, grib_get,\
-                    grib_write, grib_get_values, grib_set_values, grib_release,\
-                    grib_index_release, grib_index_get
+
+from eccodes import (codes_index_select, codes_new_from_index, codes_get,
+                     codes_get_values, codes_set_values, codes_set,
+                     codes_write, codes_release, codes_new_from_index,
+                     codes_index_release)
 
 # software specific classes and modules from flex_extract
 sys.path.append('../')
@@ -788,10 +790,10 @@ class EcFlexpart(object):
             print('current product: ', prod)
 
             for i in range(len(index_keys)):
-                grib_index_select(iid, index_keys[i], prod[i])
+                codes_index_select(iid, index_keys[i], prod[i])
 
             # get first id from current product
-            gid = grib_new_from_index(iid)
+            gid = codes_new_from_index(iid)
 
             # if there is no data for this specific time combination / product
             # skip the rest of the for loop and start with next timestep/product
@@ -799,9 +801,9 @@ class EcFlexpart(object):
                 continue
 
             # create correct timestamp from the three time informations
-            cdate = str(grib_get(gid, 'date'))
-            ctime = '{:0>2}'.format(grib_get(gid, 'time')/100)
-            cstep = '{:0>3}'.format(grib_get(gid, 'step'))
+            cdate = str(codes_get(gid, 'date'))
+            ctime = '{:0>2}'.format(codes_get(gid, 'time')/100)
+            cstep = '{:0>3}'.format(codes_get(gid, 'step'))
             t_date = datetime.strptime(cdate + ctime, '%Y%m%d%H')
             t_dt = t_date + timedelta(hours=int(cstep))
             t_m1dt = t_date + timedelta(hours=int(cstep)-int(c.dtime))
@@ -833,13 +835,13 @@ class EcFlexpart(object):
             while 1:
                 if not gid:
                     break
-                cparamId = str(grib_get(gid, 'paramId'))
-                step = grib_get(gid, 'step')
-                time = grib_get(gid, 'time')
-                ni = grib_get(gid, 'Ni')
-                nj = grib_get(gid, 'Nj')
+                cparamId = str(codes_get(gid, 'paramId'))
+                step = codes_get(gid, 'step')
+                time = codes_get(gid, 'time')
+                ni = codes_get(gid, 'Ni')
+                nj = codes_get(gid, 'Nj')
                 if cparamId in valsdict.keys():
-                    values = grib_get_values(gid)
+                    values = codes_get_values(gid)
                     vdp = valsdict[cparamId]
                     svdp = svalsdict[cparamId]
  #                   sd = stepsdict[cparamId]
@@ -878,17 +880,17 @@ class EcFlexpart(object):
                             else:
                                 values = svdp[0]
 
-                        grib_set_values(gid, values)
+                        codes_set_values(gid, values)
 
                         if c.maxstep > 12:
-                            grib_set(gid, 'step', max(0, step-2*int(c.dtime)))
+                            codes_set(gid, 'step', max(0, step-2*int(c.dtime)))
                         else:
-                            grib_set(gid, 'step', 0)
-                            grib_set(gid, 'time', t_m2dt.hour*100)
-                            grib_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d')))
+                            codes_set(gid, 'step', 0)
+                            codes_set(gid, 'time', t_m2dt.hour*100)
+                            codes_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d')))
 
                         with open(fnout, 'w') as f_handle:
-                            grib_write(gid, f_handle)
+                            codes_write(gid, f_handle)
 
                         if c.basetime:
                             t_enddate = datetime.strptime(c.end_date +
@@ -908,16 +910,16 @@ class EcFlexpart(object):
                            t_dt == t_enddate:
 
                             values = svdp[3]
-                            grib_set_values(gid, values)
-                            grib_set(gid, 'step', 0)
+                            codes_set_values(gid, values)
+                            codes_set(gid, 'step', 0)
                             truedatetime = t_m2dt + timedelta(hours=
-                                                             2*int(c.dtime))
-                            grib_set(gid, 'time', truedatetime.hour * 100)
-                            grib_set(gid, 'date', truedatetime.year * 10000 +
-                                     truedatetime.month * 100 +
-                                     truedatetime.day)
+                                                              2*int(c.dtime))
+                            codes_set(gid, 'time', truedatetime.hour * 100)
+                            codes_set(gid, 'date', truedatetime.year * 10000 +
+                                      truedatetime.month * 100 +
+                                      truedatetime.day)
                             with open(hnout, 'w') as h_handle:
-                                grib_write(gid, h_handle)
+                                codes_write(gid, h_handle)
 
                             #values = (svdp[1]+svdp[2])/2.
                             if cparamId == '142' or cparamId == '143':
@@ -925,21 +927,21 @@ class EcFlexpart(object):
                             else:
                                 values = disaggregation.dapoly(list(reversed(svdp)))
 
-                            grib_set(gid, 'step', 0)
+                            codes_set(gid, 'step', 0)
                             truedatetime = t_m2dt + timedelta(hours=int(c.dtime))
-                            grib_set(gid, 'time', truedatetime.hour * 100)
-                            grib_set(gid, 'date', truedatetime.year * 10000 +
+                            codes_set(gid, 'time', truedatetime.hour * 100)
+                            codes_set(gid, 'date', truedatetime.year * 10000 +
                                      truedatetime.month * 100 +
                                      truedatetime.day)
-                            grib_set_values(gid, values)
+                            codes_set_values(gid, values)
                             with open(gnout, 'w') as g_handle:
-                                grib_write(gid, g_handle)
+                                codes_write(gid, g_handle)
 
-                grib_release(gid)
+                codes_release(gid)
 
-                gid = grib_new_from_index(iid)
+                gid = codes_new_from_index(iid)
 
-        grib_index_release(iid)
+        codes_index_release(iid)
 
         return
 
@@ -1013,10 +1015,10 @@ class EcFlexpart(object):
             print('current product: ', prod)
 
             for i in range(len(index_keys)):
-                grib_index_select(iid, index_keys[i], prod[i])
+                codes_index_select(iid, index_keys[i], prod[i])
 
             # get first id from current product
-            gid = grib_new_from_index(iid)
+            gid = codes_new_from_index(iid)
 
             # if there is no data for this specific time combination / product
             # skip the rest of the for loop and start with next timestep/product
@@ -1031,9 +1033,9 @@ class EcFlexpart(object):
                 fdict[k] = open(fortfile, 'w')
 
             # create correct timestamp from the three time informations
-            cdate = str(grib_get(gid, 'date'))
-            ctime = '{:0>2}'.format(grib_get(gid, 'time')/100)
-            cstep = '{:0>3}'.format(grib_get(gid, 'step'))
+            cdate = str(codes_get(gid, 'date'))
+            ctime = '{:0>2}'.format(codes_get(gid, 'time')/100)
+            cstep = '{:0>3}'.format(codes_get(gid, 'step'))
             timestamp = datetime.strptime(cdate + ctime, '%Y%m%d%H')
             timestamp += timedelta(hours=int(cstep))
             cdate_hour = datetime.strftime(timestamp, '%Y%m%d%H')
@@ -1061,34 +1063,34 @@ class EcFlexpart(object):
             while 1:
                 if not gid:
                     break
-                paramId = grib_get(gid, 'paramId')
-                gridtype = grib_get(gid, 'gridType')
-                levtype = grib_get(gid, 'typeOfLevel')
+                paramId = codes_get(gid, 'paramId')
+                gridtype = codes_get(gid, 'gridType')
+                levtype = codes_get(gid, 'typeOfLevel')
                 if paramId == 77: # ETADOT
-                    grib_write(gid, fdict['21'])
+                    codes_write(gid, fdict['21'])
                 elif paramId == 130: # T
-                    grib_write(gid, fdict['11'])
+                    codes_write(gid, fdict['11'])
                 elif paramId == 131 or paramId == 132: # U, V wind component
-                    grib_write(gid, fdict['10'])
+                    codes_write(gid, fdict['10'])
                 elif paramId == 133 and gridtype != 'reduced_gg': # Q
-                    grib_write(gid, fdict['17'])
+                    codes_write(gid, fdict['17'])
                 elif paramId == 133 and gridtype == 'reduced_gg': # Q, gaussian
-                    grib_write(gid, fdict['18'])
+                    codes_write(gid, fdict['18'])
                 elif paramId == 135: # W
-                    grib_write(gid, fdict['19'])
+                    codes_write(gid, fdict['19'])
                 elif paramId == 152: # LNSP
-                    grib_write(gid, fdict['12'])
+                    codes_write(gid, fdict['12'])
                 elif paramId == 155 and gridtype == 'sh': # D
-                    grib_write(gid, fdict['13'])
+                    codes_write(gid, fdict['13'])
                 elif paramId == 246 or paramId == 247: # CLWC, CIWC
                     # sum cloud liquid water and ice
                     if not scwc:
-                        scwc = grib_get_values(gid)
+                        scwc = codes_get_values(gid)
                     else:
-                        scwc += grib_get_values(gid)
-                        grib_set_values(gid, scwc)
-                        grib_set(gid, 'paramId', 201031)
-                        grib_write(gid, fdict['22'])
+                        scwc += codes_get_values(gid)
+                        codes_set_values(gid, scwc)
+                        codes_set(gid, 'paramId', 201031)
+                        codes_write(gid, fdict['22'])
                 elif c.wrf and paramId in [129, 138, 155] and \
                       levtype == 'hybrid': # Z, VO, D
                     # do not do anything right now
@@ -1098,7 +1100,7 @@ class EcFlexpart(object):
                     if paramId not in savedfields:
                         # SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR
                         # and all ADDPAR parameter
-                        grib_write(gid, fdict['16'])
+                        codes_write(gid, fdict['16'])
                         savedfields.append(paramId)
                     else:
                         print('duplicate ' + str(paramId) + ' not written')
@@ -1108,15 +1110,15 @@ class EcFlexpart(object):
                         # model layer
                         if levtype == 'hybrid' and \
                            paramId in [129, 130, 131, 132, 133, 138, 155]:
-                            grib_write(gid, fwrf)
+                            codes_write(gid, fwrf)
                         # sfc layer
                         elif paramId in wrfpars:
-                            grib_write(gid, fwrf)
+                            codes_write(gid, fwrf)
                 except AttributeError:
                     pass
 
-                grib_release(gid)
-                gid = grib_new_from_index(iid)
+                codes_release(gid)
+                gid = codes_new_from_index(iid)
 
             for f in fdict.values():
                 f.close()
@@ -1170,7 +1172,7 @@ class EcFlexpart(object):
         if c.wrf:
             fwrf.close()
 
-        grib_index_release(iid)
+        codes_index_release(iid)
 
         return
 
diff --git a/source/python/classes/GribTools.py b/source/python/classes/GribTools.py
index 7d375b18bce7fbaeace888d41fadcb27c46f012f..068b1f5cfc49cac00adbf78385b82b710f495cbe 100644
--- a/source/python/classes/GribTools.py
+++ b/source/python/classes/GribTools.py
@@ -43,10 +43,11 @@
 # MODULES
 # ------------------------------------------------------------------------------
 import os
-from gribapi import grib_new_from_file, grib_is_defined, grib_get, \
-                    grib_release, grib_set, grib_write, grib_index_read, \
-                    grib_index_new_from_file, grib_index_add_file,  \
-                    grib_index_write
+
+from eccodes import (codes_grib_new_from_file, codes_is_defined, codes_get,
+                     codes_release, codes_set, codes_write, codes_index_read,
+                     codes_index_new_from_file, codes_index_add_file,
+                     codes_index_write)
 
 # ------------------------------------------------------------------------------
 # CLASS
@@ -103,9 +104,9 @@ class GribTools(object):
         return_list = []
 
         while 1:
-            gid_in = grib_new_from_file(fileid)
+            gid = codes_new_from_file(fileid)
 
-            if gid_in is None:
+            if gid is None:
                 break
 
             if len(wherekeynames) != len(wherekeyvalues):
@@ -115,20 +116,20 @@ class GribTools(object):
             select = True
             i = 0
             for wherekey in wherekeynames:
-                if not grib_is_defined(gid_in, wherekey):
+                if not codes_is_defined(gid, wherekey):
                     raise Exception("where key was not defined")
 
                 select = (select and (str(wherekeyvalues[i]) ==
-                                      str(grib_get(gid_in, wherekey))))
+                                      str(codes_get(gid, wherekey))))
                 i += 1
 
             if select:
                 llist = []
                 for key in keynames:
-                    llist.extend([str(grib_get(gid_in, key))])
+                    llist.extend([str(codes_get(gid, key))])
                 return_list.append(llist)
 
-            grib_release(gid_in)
+            codes_release(gid)
 
         fileid.close()
 
@@ -177,9 +178,9 @@ class GribTools(object):
         fin = open(fromfile)
 
         while 1:
-            gid_in = grib_new_from_file(fin)
+            gid = codes_new_from_file(fin)
 
-            if gid_in is None:
+            if gid is None:
                 break
 
             if len(wherekeynames) != len(wherekeyvalues):
@@ -188,22 +189,22 @@ class GribTools(object):
             select = True
             i = 0
             for wherekey in wherekeynames:
-                if not grib_is_defined(gid_in, wherekey):
+                if not codes_is_defined(gid, wherekey):
                     raise Exception("where Key was not defined")
 
                 select = (select and (str(wherekeyvalues[i]) ==
-                                      str(grib_get(gid_in, wherekey))))
+                                      str(codes_get(gid, wherekey))))
                 i += 1
 
             if select:
                 i = 0
                 for key in keynames:
-                    grib_set(gid_in, key, keyvalues[i])
+                    codes_set(gid, key, keyvalues[i])
                     i += 1
 
-            grib_write(gid_in, fout)
+            codes_write(gid, fout)
 
-            grib_release(gid_in)
+            codes_release(gid)
 
         fin.close()
         fout.close()
@@ -244,9 +245,9 @@ class GribTools(object):
         fout = open(self.filenames, filemode)
 
         while 1:
-            gid_in = grib_new_from_file(fin)
+            gid = codes_new_from_file(fin)
 
-            if gid_in is None:
+            if gid is None:
                 break
 
             if len(keynames) != len(keyvalues):
@@ -255,21 +256,21 @@ class GribTools(object):
             select = True
             i = 0
             for key in keynames:
-                if not grib_is_defined(gid_in, key):
+                if not codes_is_defined(gid, key):
                     raise Exception("Key was not defined")
 
                 if selectWhere:
                     select = (select and (str(keyvalues[i]) ==
-                                          str(grib_get(gid_in, key))))
+                                          str(codes_get(gid, key))))
                 else:
                     select = (select and (str(keyvalues[i]) !=
-                                          str(grib_get(gid_in, key))))
+                                          str(codes_get(gid, key))))
                 i += 1
 
             if select:
-                grib_write(gid_in, fout)
+                codes_write(gid, fout)
 
-            grib_release(gid_in)
+            codes_release(gid)
 
         fin.close()
         fout.close()
@@ -300,18 +301,18 @@ class GribTools(object):
         iid = None
 
         if os.path.exists(index_file):
-            iid = grib_index_read(index_file)
+            iid = codes_index_read(index_file)
             print("Use existing index file: %s " % (index_file))
         else:
             for filename in self.filenames:
                 print("Inputfile: %s " % (filename))
                 if iid is None:
-                    iid = grib_index_new_from_file(filename, index_keys)
+                    iid = codes_index_new_from_file(filename, index_keys)
                 else:
-                    grib_index_add_file(iid, filename)
+                    codes_index_add_file(iid, filename)
 
             if iid is not None:
-                grib_index_write(iid, index_file)
+                codes_index_write(iid, index_file)
 
         print('... index done')