diff --git a/config/obskind.csv b/config/obskind.csv
new file mode 100644
index 0000000000000000000000000000000000000000..4e99e2749b93d146186649cb4659cde37662f5a6
--- /dev/null
+++ b/config/obskind.csv
@@ -0,0 +1,333 @@
+RADIOSONDE_U_WIND_COMPONENT,1
+RADIOSONDE_V_WIND_COMPONENT,2
+RADIOSONDE_GEOPOTENTIAL_HGT,3
+RADIOSONDE_SURFACE_PRESSURE,4
+RADIOSONDE_TEMPERATURE,5
+RADIOSONDE_SPECIFIC_HUMIDITY,6
+DROPSONDE_U_WIND_COMPONENT,7
+DROPSONDE_V_WIND_COMPONENT,8
+DROPSONDE_SURFACE_PRESSURE,9
+DROPSONDE_TEMPERATURE,10
+DROPSONDE_SPECIFIC_HUMIDITY,11
+AIRCRAFT_U_WIND_COMPONENT,12
+AIRCRAFT_V_WIND_COMPONENT,13
+AIRCRAFT_TEMPERATURE,14
+AIRCRAFT_SPECIFIC_HUMIDITY,15
+ACARS_U_WIND_COMPONENT,16
+ACARS_V_WIND_COMPONENT,17
+ACARS_TEMPERATURE,18
+ACARS_SPECIFIC_HUMIDITY,19
+MARINE_SFC_U_WIND_COMPONENT,20
+MARINE_SFC_V_WIND_COMPONENT,21
+MARINE_SFC_TEMPERATURE,22
+MARINE_SFC_SPECIFIC_HUMIDITY,23
+MARINE_SFC_PRESSURE,24
+LAND_SFC_U_WIND_COMPONENT,25
+LAND_SFC_V_WIND_COMPONENT,26
+LAND_SFC_TEMPERATURE,27
+LAND_SFC_SPECIFIC_HUMIDITY,28
+LAND_SFC_PRESSURE,29
+SAT_U_WIND_COMPONENT,30
+SAT_V_WIND_COMPONENT,31
+ATOV_TEMPERATURE,32
+AIRS_TEMPERATURE,33
+AIRS_SPECIFIC_HUMIDITY,34
+GPS_PRECIPITABLE_WATER,35
+VADWND_U_WIND_COMPONENT,36
+VADWND_V_WIND_COMPONENT,37
+CIMMS_AMV_U_WIND_COMPONENT,38
+CIMMS_AMV_V_WIND_COMPONENT,39
+DOPPLER_RADIAL_VELOCITY,40
+RADAR_REFLECTIVITY,41
+RADAR_CLEARAIR_REFLECTIVITY,42
+PRECIPITATION_FALL_SPEED,43
+METAR_U_10_METER_WIND,44
+METAR_V_10_METER_WIND,45
+METAR_TEMPERATURE_2_METER,46
+METAR_SPECIFIC_HUMIDITY_2_METER,47
+METAR_SURFACE_PRESSURE,48
+METAR_POT_TEMP_2_METER,49
+DEWPOINT,50
+DEWPOINT_2_METER,51
+BUOY_DEWPOINT,52
+SHIP_DEWPOINT,53
+SYNOP_DEWPOINT,54
+AIREP_DEWPOINT,55
+AMDAR_DEWPOINT,56
+PILOT_DEWPOINT,57
+BOGUS_DEWPOINT,58
+AIRS_DEWPOINT,59
+METAR_DEWPOINT_2_METER,60
+RADIOSONDE_DEWPOINT,61
+DROPSONDE_DEWPOINT,62
+AIRCRAFT_DEWPOINT,63
+ACARS_DEWPOINT,64
+MARINE_SFC_DEWPOINT,65
+LAND_SFC_DEWPOINT,66
+RADIOSONDE_RELATIVE_HUMIDITY,67
+DROPSONDE_RELATIVE_HUMIDITY,68
+AIRCRAFT_RELATIVE_HUMIDITY,69
+ACARS_RELATIVE_HUMIDITY,70
+MARINE_SFC_RELATIVE_HUMIDITY,71
+LAND_SFC_RELATIVE_HUMIDITY,72
+METAR_RELATIVE_HUMIDITY_2_METER,73
+AIRS_RELATIVE_HUMIDITY,74
+MESONET_RELATIVE_HUMIDITY,75
+RADIOSONDE_SURFACE_ALTIMETER,76
+DROPSONDE_SURFACE_ALTIMETER,77
+MARINE_SFC_ALTIMETER,78
+LAND_SFC_ALTIMETER,79
+METAR_ALTIMETER,80
+MESONET_SURFACE_ALTIMETER,81
+TEMPERATURE,82
+SPECIFIC_HUMIDITY,83
+PRESSURE,84
+GPSRO_REFRACTIVITY,85
+VORTEX_LAT,86
+VORTEX_LON,87
+VORTEX_PMIN,88
+VORTEX_WMAX,89
+BUOY_U_WIND_COMPONENT,90
+BUOY_V_WIND_COMPONENT,91
+BUOY_SURFACE_PRESSURE,92
+BUOY_TEMPERATURE,93
+SHIP_U_WIND_COMPONENT,94
+SHIP_V_WIND_COMPONENT,95
+SHIP_SURFACE_PRESSURE,96
+SHIP_TEMPERATURE,97
+SYNOP_U_WIND_COMPONENT,98
+SYNOP_V_WIND_COMPONENT,99
+SYNOP_SURFACE_PRESSURE,100
+SYNOP_SPECIFIC_HUMIDITY,101
+SYNOP_TEMPERATURE,102
+AIREP_U_WIND_COMPONENT,103
+AIREP_V_WIND_COMPONENT,104
+AIREP_PRESSURE,105
+AIREP_TEMPERATURE,106
+AMDAR_U_WIND_COMPONENT,107
+AMDAR_V_WIND_COMPONENT,108
+AMDAR_PRESSURE,109
+AMDAR_TEMPERATURE,110
+PILOT_U_WIND_COMPONENT,111
+PILOT_V_WIND_COMPONENT,112
+PILOT_PRESSURE,113
+PILOT_TEMPERATURE,114
+BOGUS_U_WIND_COMPONENT,115
+BOGUS_V_WIND_COMPONENT,116
+BOGUS_PRESSURE,117
+BOGUS_TEMPERATURE,118
+PROFILER_U_WIND_COMPONENT,119
+PROFILER_V_WIND_COMPONENT,120
+PROFILER_PRESSURE,121
+SATEM_THICKNESS,122
+NOAA_1_VTPR1_RADIANCE,123
+NOAA_2_VTPR1_RADIANCE,124
+NOAA_3_VTPR1_RADIANCE,125
+NOAA_4_VTPR1_RADIANCE,126
+NOAA_5_HIRS_RADIANCE,127
+NOAA_5_MSU_TB,128
+NOAA_5_AVHRR_RADIANCE,129
+NOAA_6_HIRS_RADIANCE,130
+NOAA_6_MSU_TB,131
+NOAA_6_AVHRR_RADIANCE,132
+NOAA_7_HIRS_RADIANCE,133
+NOAA_7_MSU_TB,134
+NOAA_7_AVHRR_RADIANCE,135
+NOAA_8_HIRS_RADIANCE,136
+NOAA_8_MSU_TB,137
+NOAA_8_AVHRR_RADIANCE,138
+NOAA_9_HIRS_RADIANCE,139
+NOAA_9_MSU_TB,140
+NOAA_9_AVHRR_RADIANCE,141
+NOAA_10_HIRS_RADIANCE,142
+NOAA_10_MSU_TB,143
+NOAA_10_AVHRR_RADIANCE,144
+NOAA_11_HIRS_RADIANCE,145
+NOAA_11_MSU_TB,146
+NOAA_11_AVHRR_RADIANCE,147
+NOAA_12_HIRS_RADIANCE,148
+NOAA_12_MSU_TB,149
+NOAA_12_AVHRR_RADIANCE,150
+NOAA_13_AVHRR_RADIANCE,151
+NOAA_14_HIRS_RADIANCE,152
+NOAA_14_MSU_TB,153
+NOAA_14_AVHRR_RADIANCE,154
+NOAA_15_HIRS_RADIANCE,155
+NOAA_15_AMSUA_TB,156
+NOAA_15_AMSUB_TB,157
+NOAA_15_AVHRR_RADIANCE,158
+NOAA_16_HIRS_RADIANCE,159
+NOAA_16_AMSUA_TB,160
+NOAA_16_AMSUB_TB,161
+NOAA_16_AVHRR_RADIANCE,162
+NOAA_17_HIRS_RADIANCE,163
+NOAA_17_AMSUA_TB,164
+NOAA_17_AMSUB_TB,165
+NOAA_17_AVHRR_RADIANCE,166
+NOAA_18_HIRS_RADIANCE,167
+NOAA_18_AMSUA_TB,168
+NOAA_18_AVHRR_RADIANCE,169
+NOAA_18_MHS_TB,170
+NOAA_19_HIRS_RADIANCE,171
+NOAA_19_AMSUA_TB,172
+NOAA_19_AVHRR_RADIANCE,173
+NOAA_19_MHS_TB,174
+NOAA_20_ATMS_TB,175
+NOAA_20_VIIRS_RADIANCE,176
+DMSP_8_SSMI_TB,177
+DMSP_9_SSMI_TB,178
+DMSP_10_SSMI_TB,179
+DMSP_11_SSMI_TB,180
+DMSP_11_SSMT2_TB,181
+DMSP_12_SSMI_TB,182
+DMSP_12_SSMT2_TB,183
+DMSP_13_SSMI_TB,184
+DMSP_14_SSMI_TB,185
+DMSP_14_SSMT2_TB,186
+DMSP_15_SSMI_TB,187
+DMSP_15_SSMT2_TB,188
+DMSP_16_SSMIS_TB,189
+DMSP_17_SSMIS_TB,190
+DMSP_18_SSMIS_TB,191
+DMSP_19_SSMIS_TB,192
+METEOSAT_1_MVIRI_RADIANCE,193
+METEOSAT_2_MVIRI_RADIANCE,194
+METEOSAT_3_MVIRI_RADIANCE,195
+METEOSAT_4_MVIRI_RADIANCE,196
+METEOSAT_5_MVIRI_RADIANCE,197
+METEOSAT_6_MVIRI_RADIANCE,198
+METEOSAT_7_MVIRI_RADIANCE,199
+GOES_4_SOUNDER_RADIANCE,200
+GOES_5_SOUNDER_RADIANCE,201
+GOES_6_SOUNDER_RADIANCE,202
+GOES_7_SOUNDER_RADIANCE,203
+GOES_8_IMAGER_RADIANCE,204
+GOES_8_SOUNDER_RADIANCE,205
+GOES_9_IMAGER_RADIANCE,206
+GOES_9_SOUNDER_RADIANCE,207
+GOES_10_IMAGER_RADIANCE,208
+GOES_10_SOUNDER_RADIANCE,209
+GOES_11_IMAGER_RADIANCE,210
+GOES_11_SOUNDER_RADIANCE,211
+GOES_12_IMAGER_RADIANCE,212
+GOES_12_SOUNDER_RADIANCE,213
+GOES_13_IMAGER_RADIANCE,214
+GOES_13_SOUNDER_RADIANCE,215
+GOES_14_IMAGER_RADIANCE,216
+GOES_14_SOUNDER_RADIANCE,217
+GOES_15_IMAGER_RADIANCE,218
+GOES_15_SOUNDER_RADIANCE,219
+GOES_16_ABI_RADIANCE,220
+GOES_17_ABI_RADIANCE,221
+GOES_18_ABI_RADIANCE,222
+GOES_19_ABI_RADIANCE,223
+GMS_1_IMAGER_RADIANCE,224
+GMS_2_IMAGER_RADIANCE,225
+GMS_3_IMAGER_RADIANCE,226
+GMS_4_IMAGER_RADIANCE,227
+GMS_5_IMAGER_RADIANCE,228
+FY2_2_VISSR_RADIANCE,229
+FY2_3_VISSR_RADIANCE,230
+FY2_4_VISSR_RADIANCE,231
+FY2_5_VISSR_RADIANCE,232
+FY2_7_VISSR_RADIANCE,233
+TRMM_1_TMI_TB,234
+ERS_1_ATSR_RADIANCE,235
+ERS_1_MWR_TB,236
+ERS_2_ATSR_RADIANCE,237
+ERS_2_MWR_TB,238
+EOS_1_MODIS_RADIANCE,239
+EOS_1_ASTER_RADIANCE,240
+EOS_2_AMSUA_TB,241
+EOS_2_AIRS_RADIANCE,242
+EOS_2_HSB_TB,243
+EOS_2_MODIS_RADIANCE,244
+EOS_2_AMSRE_TB,245
+METOP_1_HIRS_RADIANCE,246
+METOP_1_AMSUA_TB,247
+METOP_1_AVHRR_RADIANCE,248
+METOP_1_MHS_TB,249
+METOP_2_HIRS_RADIANCE,250
+METOP_2_AMSUA_TB,251
+METOP_2_AVHRR_RADIANCE,252
+METOP_2_MHS_TB,253
+METOP_3_AVHRR_RADIANCE,254
+ENVISAT_1_ATSR_RADIANCE,255
+ENVISAT_1_MWR_TB,256
+MSG_1_SEVIRI_RADIANCE,257
+MSG_2_SEVIRI_RADIANCE,258
+MSG_3_SEVIRI_RADIANCE,259
+MSG_4_SEVIRI_RADIANCE,260
+MSG_4_SEVIRI_TB,261
+MSG_4_SEVIRI_BDRF,262
+FY1_3_MVISR_RADIANCE,263
+FY1_4_MVISR_RADIANCE,264
+MTSAT_1_IMAGER_RADIANCE,265
+MTSAT_2_IMAGER_RADIANCE,266
+CORIOLIS_1_WINDSAT_TB,267
+JPSS_0_ATMS_TB,268
+JPSS_0_VIIRS_RADIANCE,269
+SENTINEL3_1_SLSTR_RADIANCE,270
+SENTINEL3_2_SLSTR_RADIANCE,271
+MEGHATR_1_SAPHIR_TB,272
+MEGHATR_1_MADRAS_TB,273
+FY3_1_MWTS_TB,274
+FY3_1_MWHS_TB,275
+FY3_1_IRAS_RADIANCE,276
+FY3_1_MWRI_TB,277
+FY3_2_MWTS_TB,278
+FY3_2_MWHS_TB,279
+FY3_2_MWRI_TB,280
+FY3_3_MWRI_TB,281
+FY3_3_MWTS2_TB,282
+FY3_3_MWHS2_TB,283
+FY3_3_MERSI1_RADIANCE,284
+FY3_4_MWRI_TB,285
+FY3_4_MWTS2_TB,286
+FY3_4_MWHS2_TB,287
+FY3_4_MERSI2_RADIANCE,288
+COMS_1_MI_RADIANCE,289
+METEOR_M_1_MSUMR_RADIANCE,290
+METEOR_M_2_MSUMR_RADIANCE,291
+METEOR_M_2_MTVZAGY_TB,292
+CALIPSO_1_IIR_RADIANCE,293
+GCOM_W_1_AMSR2_TB,294
+NIMBUS_3_MRIR_RADIANCE,295
+NIMBUS_4_THIR_RADIANCE,296
+NIMBUS_5_THIR_RADIANCE,297
+NIMBUS_6_HIRS_RADIANCE,298
+NIMBUS_6_SCAMS_TB,299
+NIMBUS_6_THIR_RADIANCE,300
+NIMBUS_7_SMMR_TB,301
+NIMBUS_7_THIR_RADIANCE,302
+HIMAWARI_8_AHI_RADIANCE,303
+HIMAWARI_9_AHI_RADIANCE,304
+MTG_1_FCI_RADIANCE,305
+SARAL_1_ALTIKA_TB,306
+METOPSG_1_ICI_TB,307
+METOPSG_1_METIMAGE_RADIANCE,308
+METOPSG_1_MWS_TB,309
+METOPSG_1_MWI_TB,310
+LANDSAT_4_TM_RADIANCE,311
+LANDSAT_5_TM_RADIANCE,312
+LANDSAT_7_TM_RADIANCE,313
+LANDSAT_8_TIRS_RADIANCE,314
+JASON_2_AMR_TB,315
+GPM_1_GMI_TB,316
+GPM_1_DPR_TB,317
+INSAT3_4_IMAGER_RADIANCE,318
+INSAT3_4_SOUNDER_RADIANCE,319
+INSAT3_5_IMAGER_RADIANCE,320
+INSAT3_5_SOUNDER_RADIANCE,321
+TICFIRE_1_MBFIRI_RADIANCE,322
+ISS_1_ECOSTRES_RADIANCE,323
+HJ1_2_IRMSS_RADIANCE,324
+GKOMPSAT2_1_AMI_RADIANCE,325
+GCOM_C_1_SGLI_RADIANCE,326
+SMOS_1_MIRAS_TB,327
+ORS_6_COWVR_TB,328
+FY4_1_AGRI_RADIANCE,329
+TROPICS_0_TROPICS_TB,330
+GF5_1_VIMS_RADIANCE,331
+HY2_1_MWRI_TB,332
+CLOUDSAT_1_CPR_TB,333
diff --git a/dartwrf/create_obsseq.py b/dartwrf/create_obsseq.py
index 67f846515dbf8d05e2b72a4425a2f37ecb599c5e..92c325214ca5e0977c4490e68628b28eb054d471 100755
--- a/dartwrf/create_obsseq.py
+++ b/dartwrf/create_obsseq.py
@@ -5,44 +5,17 @@ according to which observations are generated and subsequently assimilated.
 import os, sys, warnings
 import numpy as np
 import datetime as dt
+import csv
 from pysolar.solar import get_altitude, get_azimuth
 
 from config.cfg import exp
 from config.cluster import cluster
 from dartwrf.obs import calculate_obs_locations as col
 
-def obskind_read():
-    """Read dictionary of observation types + ID numbers ("kind") 
-    from DART f90 script
-    """
-
-    definitionfile = cluster.scriptsdir+'/../config/obs_kind_mod.f90'
-    with open(definitionfile, 'r') as f:
-        kind_def_f = f.readlines()
-
-    obskind_nrs = {}
-    for i, line in enumerate(kind_def_f):
-        if 'Integer definitions for DART OBS TYPES' in line:
-            # data starts below this line
-            i_start = i
-            break
-    for line in kind_def_f[i_start+1:]:
-        if 'MAX_DEFINED_TYPES_OF_OBS' in line:
-            # end of data
-            break
-        if '::' in line:
-            # a line looks like this
-            # integer, parameter, public ::       MSG_4_SEVIRI_TB =   261
-            data = line.split('::')[-1].split('=')
-            kind_str = data[0].strip()
-            kind_nr = int(data[1].strip())
-            obskind_nrs[kind_str] = kind_nr
-    return obskind_nrs
-
 
 #####################
 # Global variables
-obs_kind_nrs = obskind_read()  # DART internal indices
+obs_kind_nrs = csv.DictReader(open("config/obskind.csv"))  # DART internal indices
 
 # position on earth for RTTOV ray geometry
 lat0 = 45.
diff --git a/dartwrf/workflows.py b/dartwrf/workflows.py
index 0c656e67b5d294fbfe05f2ddb0f0e5903bea82bf..43d9504f65a1f9f941197e98c5a7e2eb8adcfc32 100644
--- a/dartwrf/workflows.py
+++ b/dartwrf/workflows.py
@@ -12,6 +12,14 @@ import importlib
 from dartwrf.utils import script_to_str
 from config.cfg import exp
 
+
+
+
+def dict_to_csv(d, outfile):
+    with open(outfile, 'w') as f:
+        for key in d.keys():
+            f.write("%s,%s\n"%(key,d[key]))
+
 class WorkFlows(object):
     def __init__(self, exp_config='cfg.py', server_config='server.py'):
         """Set up the experiment folder in `archivedir`.
@@ -34,8 +42,34 @@ class WorkFlows(object):
 
         # copy obs kind def to config, we will read a table from there
         # file needs to exist within package so sphinx can read it
-        shutil.copy(cluster.dart_srcdir+'/../../../assimilation_code/modules/observations/obs_kind_mod.f90',
-                    cluster.scriptsdir+'/../config/')
+        def obskind_read():
+            """Read dictionary of observation types + ID numbers ("kind") 
+            from DART f90 script
+            """
+            definitionfile = self.cluster.dart_srcdir+'/../../../assimilation_code/modules/observations/obs_kind_mod.f90'
+            with open(definitionfile, 'r') as f:
+                kind_def_f = f.readlines()
+
+            obskind_nrs = {}
+            for i, line in enumerate(kind_def_f):
+                if 'Integer definitions for DART OBS TYPES' in line:
+                    # data starts below this line
+                    i_start = i
+                    break
+            for line in kind_def_f[i_start+1:]:
+                if 'MAX_DEFINED_TYPES_OF_OBS' in line:
+                    # end of data
+                    break
+                if '::' in line:
+                    # a line looks like this
+                    # integer, parameter, public ::       MSG_4_SEVIRI_TB =   261
+                    data = line.split('::')[-1].split('=')
+                    kind_str = data[0].strip()
+                    kind_nr = int(data[1].strip())
+                    obskind_nrs[kind_str] = kind_nr
+            return obskind_nrs
+        
+        dict_to_csv(obskind_read(), self.cluster.scriptsdir+'/../config/obskind.csv')
             
         # Copy scripts to self.cluster.archivedir folder
         os.makedirs(self.cluster.archivedir, exist_ok=True)