diff --git a/common/fix_missing_lef.py b/common/fix_missing_lef.py
new file mode 100644
index 0000000..9ed30e5
--- /dev/null
+++ b/common/fix_missing_lef.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+import re
+import os
+import sys
+import argparse
+
+
+parser = argparse.ArgumentParser(
+    description='This file fixes the missing')
+
+parser.add_argument('--skywater_path', '-sp',required=True,
+                    help='skywater path')
+
+parser.add_argument('--modify_hs_ms_diodes', '-mhmd',action='store_true', default=False,
+                help="modifies the hs and ms diode information.")
+
+parser.add_argument('--modify_vnb_vpb', '-mvv',action='store_true', default=False,
+                help="modifies the vnb and vpb of all cells in all libraries.")
+
+
+args = parser.parse_args()
+skywater_path = args.skywater_path
+modify_hs_ms_diodes = args.modify_hs_ms_diodes
+modify_vnb_vpb = args.modify_vnb_vpb
+
+libraries = ['sky130_fd_sc_hd','sky130_fd_sc_hdll','sky130_fd_sc_hs','sky130_fd_sc_ms','sky130_fd_sc_ls']
+
+if modify_vnb_vpb:
+    for lib in libraries:
+        modify_vpb_result_cmd = "sed -i 's/PIN VPB/PIN VPB\nDIRECTION INOUT ;\nUSE POWER ;/g' {lef} ".format(
+            lef= skywater_path+"/libraries/"+lib+"/*/cells/*/*.magic.lef"
+            )
+        subprocess.check_output(modify_vpb_result_cmd.split())
+
+        modify_vnb_result_cmd = "sed -i 's/PIN VNB/PIN VNB\nDIRECTION INOUT ;\nUSE GROUND ;/g' {lef} ".format(
+            lef= skywater_path+"/libraries/"+lib+"/*/cells/*/*.magic.lef"
+            )
+        subprocess.check_output(modify_vnb_result_cmd.split())
+
+if modify_hs_ms_diodes:
+    hs_lef =  skywater_path+"/libraries/sky130_fd_sc_hs/latest/cells/diode/sky130_fd_sc_hs__diode_2.magic.lef"
+    
+    hs_lef_FileOpener = open(hs_lef, "r")
+    if(path.exists(hs_lef_FileOpener)):
+        if hs_lef_FileOpener.mode == 'r':
+            hs_lef_Content = hs_lef_FileOpener.read()
+        hs_lef_FileOpener.close()
+        sections = hs_lef_Content.split("MACRO sky130_fd_sc_hs__diode_2")
+        sections.append(sections[1].split("END sky130_fd_sc_hs__diode_2")[1])
+        sections.append(sections[1].split("END sky130_fd_sc_hs__diode_2")[0])
+        # now sections[1] contains diode info;
+        sections[1] = sections[1].replace("CLASS BLOCK","CLASS CORE ANTENNACELL")
+        sections[1] = "\nSYMMETRY X Y ;\nSITE unit ;\n"+sections[1]
+        sections[1] = sections[1].replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n")
+        combined = "MACRO sky130_fd_sc_hs__diode_2".join(sections[0:1])
+        combined = combined+"END sky130_fd_sc_hs__diode_2"+ sections[2]
+        hs_lef_FileOpener = open(hs_lef,"w")
+        hs_lef_FileOpener.write(combined)
+        hs_lef_FileOpener.close()
+
+
+    ms_lef =  skywater_path+"/libraries/sky130_fd_sc_ms/latest/cells/diode/sky130_fd_sc_ms__diode_2.magic.lef"
+    
+    ms_lef_FileOpener = open(ms_lef, "r")
+    if(path.exists(ms_lef_FileOpener)):
+        if ms_lef_FileOpener.mode == 'r':
+            ms_lef_Content = ms_lef_FileOpener.read()
+        ms_lef_FileOpener.close()
+        sections = ms_lef_Content.split("MACRO sky130_fd_sc_ms__diode_2")
+        sections.append(sections[1].split("END sky130_fd_sc_ms__diode_2")[1])
+        sections.append(sections[1].split("END sky130_fd_sc_ms__diode_2")[0])
+        # now sections[1] contains diode info;
+        sections[1] = sections[1].replace("CLASS BLOCK","CLASS CORE ANTENNACELL")
+        sections[1] = "\nSYMMETRY X Y ;\nSITE unit ;\n"+sections[1]
+        sections[1] = sections[1].replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n")
+        combined = "MACRO sky130_fd_sc_ms__diode_2".join(sections[0:1])
+        combined = combined+"END sky130_fd_sc_ms__diode_2"+ sections[2]
+        ms_lef_FileOpener = open(ms_lef,"w")
+        ms_lef_FileOpener.write(combined)
+        ms_lef_FileOpener.close()
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index d509361..b6745bb 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -357,6 +357,8 @@
 	${CPP} ${SKY130A_DEFS} openlane/sky130_osu_sc_t18/tracks.info > ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/tracks.info
 
 vendor-a:
+	# Modify the LEF files to update hs and ms libraries
+	python3 ../common/foundry_install.py --modify_hs_ms_diodes --modify_vnb_vpb --skywater_path ${SKYWATER_PATH}
 	# Install device subcircuits from vendor files
 	${STAGE} -source ${SKYWATER_PATH} -target ${STAGING_PATH}/${SKY130A} \
 		-ngspice sky130_fd_pr/latest/models/* \
