diff --git a/pepys_import/file/highlighter/support/export.py b/pepys_import/file/highlighter/support/export.py
index b62a2685..b873a504 100644
--- a/pepys_import/file/highlighter/support/export.py
+++ b/pepys_import/file/highlighter/support/export.py
@@ -16,6 +16,14 @@ def export_report(filename, chars, dict_colors, include_key=False):
 
     f_out = open(filename, "w")
 
+    html_header = """<html>
+    <head>
+    </head>
+    <body style="font-family: Courier">
+    """
+
+    f_out.write(html_header)
+
     last_hash = ""
 
     for char in chars:
@@ -92,4 +100,9 @@ def export_report(filename, chars, dict_colors, include_key=False):
             )
         f_out.write("</ul>")
 
+    html_footer = """</body>
+    </html>"""
+
+    f_out.write(html_footer)
+
     f_out.close()
diff --git a/pepys_import/file/highlighter/support/line.py b/pepys_import/file/highlighter/support/line.py
index b7e03991..2b1ef0fc 100644
--- a/pepys_import/file/highlighter/support/line.py
+++ b/pepys_import/file/highlighter/support/line.py
@@ -82,19 +82,23 @@ class Line:
 
         return self.tokens_array
 
-    def record(self, tool, message):
+    def record(self, tool: str, field: str, value: str, units: str = "n/a"):
         """
         Record a usage of the whole line, by adding a SingleUsage object to each of the
         relevant characters in the char array referenced by each SubToken child.
 
         Args:
-            tool (str): The name of the parser tool that has identified the field
-            message (str): A description of how the data has been interpreted, and
-            what will represent it in the database
+            tool(str):  name of the module handling the import
+            field(str): what the token is being interpreted as
+            value(str): what value the token provided
+            units(str): the units of the token
         """
         self.highlighted_file.fill_char_array_if_needed()
 
+        tool_field = tool + "/" + field
+        message = "Value:" + str(value) + " Units:" + str(units)
+
         for child in self.children:
             for i in range(int(child.start()), int(child.end())):
-                usage = SingleUsage(tool, message)
+                usage = SingleUsage(tool_field, message)
                 child.chars[i].usages.append(usage)

Highlighted file should have fixed width font
This isn't a step to introduce lots of formatting, but we should Style the content of the extraction highlight file to have fixed width font.
diff --git a/tests/highlighter_tests/test_Recording.py b/tests/highlighter_tests/test_Recording.py
index 0ddf95c4..feb54137 100644
--- a/tests/highlighter_tests/test_Recording.py
+++ b/tests/highlighter_tests/test_Recording.py
@@ -92,12 +92,12 @@ class UsageRecordingTests(unittest.TestCase):
         self.assertEqual("Value:VALUE Units:UNITS", first_usage.message)
 
         # make another recordd
-        firstLine.record(field, value)
+        firstLine.record(tool, field, value, units)
         self.assertEqual(2, len(first_entry.usages))
         second_usage = first_entry.usages[1]
         self.assertTrue(second_usage is not None, "should have a usage")
-        self.assertEqual("FIELD", second_usage.tool_field)
-        self.assertEqual("VALUE", second_usage.message)
+        self.assertEqual("TOOL/FIELD", second_usage.tool_field)
+        self.assertEqual("Value:VALUE Units:UNITS", second_usage.message)
 
     def test_multi_lines(self):
         dataFile = HighlightedFile(DATA_FILE)
diff --git a/tests/highlighter_tests/test_html.py b/tests/highlighter_tests/test_html.py
new file mode 100644
index 00000000..8623af3b
--- /dev/null
+++ b/tests/highlighter_tests/test_html.py
@@ -0,0 +1,35 @@
+import os
+import unittest
+from pepys_import.file.highlighter.highlighter import HighlightedFile
+
+path = os.path.abspath(__file__)
+dir_path = os.path.dirname(path)
+
+DATA_FILE = os.path.join(dir_path, "sample_files/file.txt")
+OUTPUT_FOLDER = os.path.join(dir_path, "sample_files/")
+
+
+class TestHTML(unittest.TestCase):
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        if os.path.exists(os.path.join(OUTPUT_FOLDER, "test_highlighted.html")):
+            os.remove(os.path.join(OUTPUT_FOLDER, "test_highlighted.html"))
+        pass
+
+    def test_html_is_monospaced(self):
+        dataFile = HighlightedFile(DATA_FILE)
+
+        lines = dataFile.lines()
+        lines[0].record("Test Name", "Test Field", "Test Value", "Test Units")
+
+        output_file = os.path.join(OUTPUT_FOLDER, "test_highlighted.html")
+
+        dataFile.export(output_file, True)
+
+        with open(output_file, "r") as f:
+            output_contents = f.read()
+
+        assert "<html>" in output_contents
+        assert '<body style="font-family: Courier">' in output_contents

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest flake8 black
apt-get update apt-get install -y gcc libgdal-dev libproj-dev libsqlite3-dev spatialite-bin libsqlite3-mod-spatialite
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
black==22.8.0
certifi==2021.5.30
click==8.0.4
dataclasses==0.8
flake8==5.0.4
GeoAlchemy2==0.11.1
importlib-metadata==4.2.0
iniconfig==1.1.1
iterfzf==0.5.0.20.0
lxml==4.5.0
mccabe==0.7.0
mypy-extensions==1.0.0
packaging==21.3
pathspec==0.9.0
-e git+https://github.com/debrief/pepys-import.git@0b52a164676a7811ab50a1795003732909a0df32#egg=pepys_import
Pint==0.9
platformdirs==2.4.0
pluggy==1.0.0
prompt-toolkit==3.0.36
psycopg2==2.7.7
py==1.11.0
pycodestyle==2.9.1
pyfiglet==0.8.post1
pyflakes==2.5.0
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.8.1
six==1.17.0
SQLAlchemy==1.3.10
tabulate==0.8.10
tomli==1.2.3
typed-ast==1.5.5
typing_extensions==4.1.1
wcwidth==0.2.13
zipp==3.6.0

name: pepys-import
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - black==22.8.0
      - click==8.0.4
      - dataclasses==0.8
      - flake8==5.0.4
      - geoalchemy2==0.11.1
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - iterfzf==0.5.0.20.0
      - lxml==4.5.0
      - mccabe==0.7.0
      - mypy-extensions==1.0.0
      - packaging==21.3
      - pathspec==0.9.0
      - pint==0.9
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - prompt-toolkit==3.0.36
      - psycopg2==2.7.7
      - py==1.11.0
      - pycodestyle==2.9.1
      - pyfiglet==0.8.post1
      - pyflakes==2.5.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.8.1
      - six==1.17.0
      - sqlalchemy==1.3.10
      - tabulate==0.8.10
      - tomli==1.2.3
      - typed-ast==1.5.5
      - typing-extensions==4.1.1
      - wcwidth==0.2.13
      - zipp==3.6.0
prefix: /opt/conda/envs/pepys-import

tests/highlighter_tests/test_Recording.py::UsageRecordingTests::test_RecordTokens tests/highlighter_tests/test_html.py::TestHTML::test_html_is_monospaced
tests/highlighter_tests/test_Recording.py::UsageRecordingTests::test_CreateChars tests/highlighter_tests/test_Recording.py::UsageRecordingTests::test_multi_lines
pepys_import/file/highlighter/support/line.py pepys_import/file/highlighter/support/export.py
pepys_import/file/highlighter/support/line.py pepys_import/file/highlighter/support/export.py