diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BAROT.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BAROT.json
new file mode 100644
index 0000000000000000000000000000000000000000..eb6bac25488094cc28ac5f6a5568c27806a476f6
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BAROT.json
@@ -0,0 +1,4 @@
+{
+	"1":"aneroid",
+	"2":"mercurial"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BAROU.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BAROU.json
new file mode 100644
index 0000000000000000000000000000000000000000..798459ae86d641ded2fbb0c4ccab838c918e5b3a
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BAROU.json
@@ -0,0 +1,7 @@
+{
+	"1":"inches",
+	"2":"millimeters",
+	"3":"millibars",
+	"4":"unable to determine",
+	"5":"Paris inches"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BEAU.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BEAU.json
new file mode 100644
index 0000000000000000000000000000000000000000..17e5ce1f083a53d0f238f25f97908b378194e033
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.BEAU.json
@@ -0,0 +1,14 @@
+{
+	"01":"Light air",
+	"02":"Light breeze",
+	"03":"Gentle breeze",
+	"04":"Moderate breeze",
+	"05":"Fresh breeze",
+	"06":"Strong breeze",
+	"07":"High wind,moderate gale,near gale",
+	"08":"Gale,fresh gale",
+	"09":"Strong, severe gale",
+	"10":"Storm,whole gale",
+	"11":"Violent storm",
+	"12":"Hurricane force"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.CI.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.CI.json
new file mode 100644
index 0000000000000000000000000000000000000000..f5616272c9822a40a5707cb5979c7ef6188070c3
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.CI.json
@@ -0,0 +1,5 @@
+{
+	"1":"points",
+	"2":"degrees",
+	"3":"not indicated"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.MAT.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.MAT.json
new file mode 100644
index 0000000000000000000000000000000000000000..c6646d5aa8d07d10f3ca71b58d386edc01eec8f9
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.MAT.json
@@ -0,0 +1,6 @@
+{
+	"1":"wood",
+	"2":"iron",
+	"3":"composite",
+	"4":"not identified"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.NAT.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.NAT.json
new file mode 100644
index 0000000000000000000000000000000000000000..3f6a7150440f59b41bbc9188b229f9522e3609b3
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.NAT.json
@@ -0,0 +1,21 @@
+{
+	"01":"American",
+	"02":"British",
+	"03":"Chinese",
+	"04":"French",
+	"05":"Austrian",
+	"06":"Dutch",
+	"07":"Russian",
+	"08":"German",
+	"09":"Canadian",
+	"10":"Belgian",
+	"11":"Danish",
+	"12":"Italian",
+	"13":"Norwegian",
+	"14":"Nova Scotian",
+	"15":"Portuguese",
+	"16":"Scottish",
+	"17":"Swedish",
+	"21":"Singaporean",
+	"99":"undefined"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.RIG.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.RIG.json
new file mode 100644
index 0000000000000000000000000000000000000000..ffb7bf4e6bc4aaf5b4f1c75ff6075d8581bd8088
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.RIG.json
@@ -0,0 +1,9 @@
+{
+	"01":"ship",
+	"02":"bark or barque",
+	"03":"barkentine or barquentine",
+	"04":"brigantine",
+	"05":"schooner",
+	"06":"frigate",
+	"99":"not identified"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.SP.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.SP.json
new file mode 100644
index 0000000000000000000000000000000000000000..73858ab759243614bcf9d527ff74259deb325968
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.SP.json
@@ -0,0 +1,5 @@
+{
+	"1":"screw",
+	"2":"paddle",
+	"3":"not identified"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.SSTM.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.SSTM.json
new file mode 100644
index 0000000000000000000000000000000000000000..1304bc589dff7154cb2cbeed8a1318c067db61da
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.SSTM.json
@@ -0,0 +1,6 @@
+{
+	"1":"bucket",
+	"2":"intake",
+	"3":"as directed in the journals instructions",
+	"4":"not indicated"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.TEMPI.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.TEMPI.json
new file mode 100644
index 0000000000000000000000000000000000000000..45ef41b14179408abcd1e6daa2db5a6fda0dfc2e
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.TEMPI.json
@@ -0,0 +1,8 @@
+{
+	"1":"Fahrenheit",
+	"2":"Centigrade",
+	"3":"Attached thermometer is Fahrenheit. Bry bulb, wet bulb and water temperature are Centigrade",
+	"4":"Attached thermometer is Centigrade. Bry bulb, wet bulb and water temperature are Fahrenheit",
+	"5":"Water temperature is Centigrade with other temperatures in Fahrenheit",
+	"6":"Dry bulb and wet bulb are Centigrade with other temperatures in Fahrenheit"	
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.THERMOM.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.THERMOM.json
new file mode 100644
index 0000000000000000000000000000000000000000..694016e425451f1965903b9079cd71e4632002e6
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.THERMOM.json
@@ -0,0 +1,5 @@
+{
+	"1":"mounted as recommended in journal introduction",
+	"2":"not mounted as recommended in journal introduction",
+	"3":"not indicated"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.TI.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.TI.json
new file mode 100644
index 0000000000000000000000000000000000000000..a7eef69bb9565f4738fcfdd51ee04e6882e06775
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.TI.json
@@ -0,0 +1,4 @@
+{
+	"1":"AM (local)",
+	"2":"PM (local)"
+}
diff --git a/data_models/lib/imma1_d704/code_tables/ICOADS.C99.VESS.json b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.VESS.json
new file mode 100644
index 0000000000000000000000000000000000000000..e673a5e0955c9a464af1cb0a4c3b82308a9515ba
--- /dev/null
+++ b/data_models/lib/imma1_d704/code_tables/ICOADS.C99.VESS.json
@@ -0,0 +1,5 @@
+{
+	"1":"sailing ship",
+	"2":"steamer",
+	"3":"not identified"
+}
diff --git a/data_models/lib/imma1_d704/imma1_d704.json b/data_models/lib/imma1_d704/imma1_d704.json
index 380fb91d714e41d53f8370e516ee352f872eb923..1e41dd3e2ebb1b01830979ac6477f397ff130523 100644
--- a/data_models/lib/imma1_d704/imma1_d704.json
+++ b/data_models/lib/imma1_d704/imma1_d704.json
@@ -2284,18 +2284,21 @@
                   "description": "Rig (type of ship) as appeared at beginning of journal",
                   "field_length": 2,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.RIG",
                   "LMR6": false
               },
               "ship_material": {
                   "description": "Construction material",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.MAT",
                   "LMR6": false
               },
               "vessel_type": {
                   "description": "Type of vessel",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.VESS",
                   "LMR6": false
               },
               "vessel_length": {
@@ -2320,12 +2323,14 @@
                   "description": "Nation of registry",
                   "field_length": 2,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.NAT",
                   "LMR6": false
               },
               "screw_paddle": {
                   "description": "Screw or paddle",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.SP",
                   "LMR6": false
               },
               "hold_depth": {
@@ -2344,6 +2349,7 @@
                   "description": "Barometer type. Add code table",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.BAROT",
                   "LMR6": true
               },
               "baro_height": {
@@ -2368,6 +2374,7 @@
                   "description": "Barometer units",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.BAROU",
                   "LMR6": false
               },
               "baro_cor": {
@@ -2380,28 +2387,55 @@
                   "description": "Are thermos mounted as recommended in journal",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.THERMOM",
                   "LMR6": false
               },
               "SST_I": {
-                  "description": "Sea surface temperature method. Add code table",
+                  "description": "Sea surface temperature method",
                   "field_length": 1,
                   "column_type": "key",
+                  "codetable": "ICOADS.C99.SSTM",
                   "LMR6": true
               }
             }
         },
         "c99_voyage": {
-            "header": {"sentinal": "2", "field_layout":"fixed_width","length": 52,"disable_read":true},
+            "header": {"sentinal": "2", "length": 52,"field_layout":"fixed_width"},
             "elements": {
               "sentinal": {
                   "description": "Voyage header record identifier",
                   "field_length": 1,
                   "column_type": "str"
               },
-              "c99_rt2": {
-                  "description": "Voyage header record",
-                  "field_length": 51,
-                  "column_type": "str"
+              "reel_no":{
+                  "description": "Microfilm reel number. See if we want the zero padding or not...",
+                  "field_length": 3,
+                  "column_type": "str",
+                  "LMR6": true
+              },
+              "journal_no": {
+                  "description": "Marine Meteorological Journal number,right justified, zero padded",
+                  "field_length": 4,
+                  "column_type": "str",
+                  "LMR6": true
+              },
+              "frame_start": {
+                  "description": "As starting frame number in the voyage header record: ensures connection between header info and data",
+                  "field_length": 4,
+                  "column_type": "str",
+                  "LMR6": false
+              },
+              "from_city": {
+                  "description": "Departure port as it appears on the form",
+                  "field_length": 20,
+                  "column_type": "str",
+                  "LMR6": false
+              },
+              "to_city": {
+                  "description": "Destination port as it appears on the form",
+                  "field_length": 20,
+                  "column_type": "str",
+                  "LMR6": false
               }
             }
         },
@@ -2413,67 +2447,136 @@
                   "field_length": 1,
                   "column_type": "str"
               },
-              "Unknonwn1": {
-                  "description": "Unknonwn",
-                  "field_length": 27,
-                  "column_type": "str"
+              "reel_no":{
+                  "description": "Microfilm reel number. See if we want the zero padding or not...",
+                  "field_length": 3,
+                  "column_type": "str",
+                  "LMR6": true
               },
-              "LAT_DEG_AN": {
-                  "description": "latitude by account at noon",
+              "journal_no": {
+                  "description": "Marine Meteorological Journal number,right justified, zero padded",
+                  "field_length": 4,
+                  "column_type": "str",
+                  "LMR6": true
+              },
+              "frame_start": {
+                  "description": "As starting frame number in the voyage header record: ensures connection between header info and data",
+                  "field_length": 4,
+                  "column_type": "str",
+                  "LMR6": false
+              },
+              "frame": {
+                  "description": "Frame number at the top of each frame from which the daily inforation was extracted",
+                  "field_length": 4,
+                  "column_type": "str",
+                  "LMR6": false
+              },
+              "year": {
+                  "description": "As indicated in the form",
+                  "field_length": 4,
+                  "column_type": "Int16"
+              },
+              "month": {
+                  "description": "As indicated in the form",
+                  "field_length": 2,
+                  "column_type": "Int8"
+              },
+              "day": {
+                  "description": "As indicated in the form",
+                  "field_length": 2,
+                  "column_type": "Int8"
+              },
+              "distance": {
+                  "description": "Distance run by log since prededing run by log noon. Knots to tenths (tenth position blank if not reported)",
                   "field_length": 4,
-                  "scale": 0.01,
                   "column_type": "float16",
+                  "scale": 0.1,
+                  "LMR6": false
+              },
+              "lat_deg_an": {
+                  "description": "latitude by account at noon, degrees",
+                  "field_length": 2,
+                  "column_type": "Int8",
                   "LMR6": true
               },
-              "LAT_CP_AN": {
-                  "description": "latitude by account at noon",
+              "lat_min_an": {
+                  "description": "latitude by account at noon, minutes",
+                  "field_length": 2,
+                  "column_type": "Int8",
+                  "LMR6": true
+              },
+              "lat_hemis_an": {
+                  "description": "latitude by account at noon, hemisphere",
                   "field_length": 1,
                   "column_type": "str",
                   "LMR6": true
               },
-              "LON_DEG_AN": {
-                  "description": "longitude by account at noon",
-                  "field_length": 5,
-                  "scale": 0.01,
-                  "column_type": "float16",
+              "lon_deg_an": {
+                  "description": "longitude by account at noon, degrees",
+                  "field_length": 3,
+                  "column_type": "Int16",
+                  "LMR6": true
+              },
+              "lon_min_an": {
+                  "description": "longitude by account at noon, minutes",
+                  "field_length": 2,
+                  "column_type": "Int8",
                   "LMR6": true
               },
-              "LON_DEG_CP": {
-                  "description": "longitude by account at noon",
+              "lon_hemis_an": {
+                  "description": "longitude by account at noon, hemisphere",
                   "field_length": 1,
                   "column_type": "str",
                   "LMR6": true
               },
-              "LAT_DEG_ON": {
-                  "description": "latitude by observation at noon",
-                  "field_length": 4,
-                  "scale": 0.01,
-                  "column_type": "float16",
+              "lat_deg_on": {
+                  "description": "latitude by observation at noon, degrees",
+                  "field_length": 2,
+                  "column_type": "Int8",
+                  "LMR6": true
+              },
+              "lat_min_on": {
+                  "description": "latitude by observation at noon, minutes",
+                  "field_length": 2,
+                  "column_type": "Int8",
                   "LMR6": true
               },
-              "LAT_CP_ON": {
-                  "description": "latitude by observation at noon",
+              "lat_hemis_on": {
+                  "description": "latitude by observation at noon, hemisphere",
                   "field_length": 1,
                   "column_type": "str",
                   "LMR6": true
               },
-              "LON_DEG_OF": {
-                  "description": "longitude by chronometer from forenoon observation",
-                  "field_length": 5,
-                  "scale": 0.01,
-                  "column_type": "float16",
+              "lon_deg_of": {
+                  "description": "longitude by chronometer from forenoon observation, degrees",
+                  "field_length": 3,
+                  "column_type": "Int16",
                   "LMR6": true
               },
-              "LON_CP_OF": {
-                  "description": "longitude by chronometer from forenoon observation",
+              "lon_min_of": {
+                  "description": "longitude by chronometer from forenoon observation, minutes",
+                  "field_length": 2,
+                  "column_type": "Int8",
+                  "LMR6": true
+              },
+              "lon_hemis_of": {
+                  "description": "longitude by chronometer from forenoon observation, hemisphere",
                   "field_length": 1,
                   "column_type": "str",
                   "LMR6": true
               },
-              "Unknown2": {
-                  "description": "Unknonwn",
-                  "field_length": 11,
-                  "column_type": "str"
+              "current_speed": {
+                  "description": "Current speed in the past 24 hours. To knots hundreths",
+                  "field_length": 4,
+                  "column_type": "float16",
+                  "scale": 0.01,
+                  "LMR6": false
+              },
+              "current_direction": {
+                  "description": "Direction towards which the currents are moving. Code table? not in document, probably as other directions....",
+                  "field_length": 7,
+                  "column_type": "str",
+                  "LMR6": false
               }
             }
         },
@@ -2531,6 +2634,7 @@
                     "description": "Time indicator",
                     "field_length": 1,
                     "column_type": "key",
+                    "codetable": "ICOADS.C99.TI",
                     "LMR6": true
                 },
                 "hour": {
@@ -2547,15 +2651,16 @@
                     "LMR6": true
                 },
                 "compass_ind": {
-                    "description": "Compass indicator",
+                    "description": "Compass indicator. Reflects: course steered, compass correction, Leeway, ships true course",
                     "field_length": 1,
                     "column_type": "key",
+                    "codetable": "ICOADS.C99.CI",
                     "LMR6": false
                 },
                 "ship_course_compass": {
-                    "description": "Ship course steered by compass",
+                    "description": "Ship course steered by compass. See digitization format for translation",
                     "field_length": 7,
-                    "column_type": "key",
+                    "column_type": "str",
                     "LMR6": true
                 },
                 "compass_correction": {
@@ -2565,19 +2670,19 @@
                     "LMR6": false
                 },
                 "ship_course_true": {
-                    "description": "Ship course true",
+                    "description": "Ship course true. Same rules as course steered by compass",
                     "field_length": 7,
-                    "column_type": "key",
+                    "column_type": "str",
                     "LMR6": true
                 },
                 "wind_dir_mag": {
-                    "description": "Mean wind direction - magnetic",
+                    "description": "Mean wind direction - magnetic. Same rules as course steered by compass",
                     "field_length": 7,
-                    "column_type": "key",
+                    "column_type": "str",
                     "LMR6": true
                 },
                 "wind_dir_true": {
-                    "description": "Wind direction - true",
+                    "description": "Wind direction - true. Same rules as course steered by compass",
                     "field_length": 7,
                     "column_type": "str",
                     "LMR6": true
@@ -2586,6 +2691,7 @@
                     "description": "Mean Beaufort force",
                     "field_length": 2,
                     "column_type": "key",
+                    "codetable": "ICOADS.C99.BEAU",
                     "LMR6": true
                 },
                 "barometer": {
@@ -2599,6 +2705,7 @@
                     "description": "Temperature indicator",
                     "field_length": 1,
                     "column_type": "key",
+                    "codetable": "ICOADS.C99.TEMPI",
                     "LMR6": true
                 },
                 "attached_thermometer": {
@@ -2725,7 +2832,7 @@
                   "LMR6": true
               },
               "compass_ind": {
-                  "description": "Compass inficator",
+                  "description": "Compass indicator",
                   "field_length": 1,
                   "column_type": "key",
                   "LMR6": false