diff --git a/acmc/phen.py b/acmc/phen.py
index 9b82186d7b4cc7c82b530d5bc1ca86bbe0edc03e..0fb669ce46c37ee92eb17238e4483d5ddb9ffe36 100644
--- a/acmc/phen.py
+++ b/acmc/phen.py
@@ -705,7 +705,7 @@ def translate_codes(
             # otherwise do reverse mapping if enabled and it exists
             elif do_reverse_translate and map_path_reversed.exists():
                 codes = _translate_codes(
-                    map_path_reversed, source_df, source_code_type, codes
+                    map_path_reversed, source_df, source_code_type, codes, reverse=True
                 )
             else:
                 _logger.warning(
@@ -723,12 +723,19 @@ def translate_codes(
     return codes
 
 
-def _translate_codes(map_path, source_df, source_code_type, codes) -> pd.DataFrame:
+def _translate_codes(
+    map_path, source_df, source_code_type, codes, reverse=False
+) -> pd.DataFrame:
     # get mapping
     df_map = pd.read_parquet(map_path)
 
     # do mapping
-    translated_df = pd.merge(source_df[source_code_type], df_map, how="left")
+    if not (reverse):
+        translated_df = pd.merge(source_df[source_code_type], df_map, how="left")
+    else:
+        translated_df = pd.merge(
+            source_df[source_code_type], df_map, how="left"
+        )  # output codes from target as reversed
 
     # normalise the output
     translated_df.columns = pd.Index(["SOURCE_CONCEPT", "CONCEPT"])