diff --git a/common/fix_missing_lef.py b/common/fix_missing_lef.py
index 9ed30e5..5b16849 100644
--- a/common/fix_missing_lef.py
+++ b/common/fix_missing_lef.py
@@ -1,10 +1,8 @@
 #!/usr/bin/env python3
 
-import re
-import os
-import sys
+from os import path
 import argparse
-
+import subprocess
 
 parser = argparse.ArgumentParser(
     description='This file fixes the missing')
@@ -28,54 +26,46 @@
 
 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"
+        modify_vpb_result_cmd = "sed -i 's/PIN VPB/PIN VPB\\nDIRECTION INOUT ;\\nUSE POWER ;/g' {lef} ".format(
+            lef= skywater_path+"/"+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"
+        print(modify_vpb_result_cmd)
+        #subprocess.call(modify_vpb_result_cmd.split(""))
+        subprocess.call([modify_vpb_result_cmd], shell=True)
+        modify_vnb_result_cmd = "sed -i 's/PIN VNB/PIN VNB\\nDIRECTION INOUT ;\\nUSE GROUND ;/g' {lef} ".format(
+            lef= skywater_path+"/"+lib+"/*/cells/*/*.magic.lef"
             )
-        subprocess.check_output(modify_vnb_result_cmd.split())
+        #subprocess.call(modify_vnb_result_cmd.split())
+        print(modify_vnb_result_cmd)
+        subprocess.call([modify_vnb_result_cmd], shell=True)
 
 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 =  str(skywater_path)+"/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(path.exists(hs_lef)):
         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_Content = hs_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL")
+        hs_lef_Content = hs_lef_Content.replace("MACRO sky130_fd_sc_hs__diode_2","MACRO sky130_fd_sc_hs__diode_2\nSYMMETRY X Y ;\nSITE unit ;\n")
+        hs_lef_Content = hs_lef_Content.replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n")
         hs_lef_FileOpener = open(hs_lef,"w")
-        hs_lef_FileOpener.write(combined)
+        hs_lef_FileOpener.write(hs_lef_Content)
         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 =  str(skywater_path)+"/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(path.exists(ms_lef)):
         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_Content = ms_lef_Content.replace("CLASS BLOCK","CLASS CORE ANTENNACELL")
+        ms_lef_Content = ms_lef_Content.replace("MACRO sky130_fd_sc_ms__diode_2","MACRO sky130_fd_sc_ms__diode_2\nSYMMETRY X Y ;\nSITE unit ;\n")
+        ms_lef_Content = ms_lef_Content.replace("PIN DIODE","PIN DIODE\nDIRECTION INPUT ;\nUSE SIGNAL ;\n")
         ms_lef_FileOpener = open(ms_lef,"w")
-        ms_lef_FileOpener.write(combined)
+        ms_lef_FileOpener.write(ms_lef_Content)
         ms_lef_FileOpener.close()
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index b6745bb..82237d0 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -358,7 +358,7 @@
 
 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}
+	python3 ../common/fix_missing_lef.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/* \
