diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 32bd1a0..fae19ff 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -1331,7 +1331,7 @@
 		-lef %l/*/*.lef \
 		-lib %l/*/*.lib \
 		-gds %l/*/*.gds options=custom/scripts/gds_import_sram.tcl \
-		-spice %l/*/*[0-9].sp filter=custom/scripts/sp_to_spice.py \
+		-spice %l/*/*.lvs.sp filter=custom/scripts/sp_to_spice.py \
 		-verilog %l/*/*.v \
 		-library general sky130_sram_macros 2>&1 | tee -a ${SKY130A}_make.log
 
diff --git a/sky130/custom/scripts/sp_to_spice.py b/sky130/custom/scripts/sp_to_spice.py
index bbcc641..1d0c91d 100755
--- a/sky130/custom/scripts/sp_to_spice.py
+++ b/sky130/custom/scripts/sp_to_spice.py
@@ -10,6 +10,7 @@
 # the value to "filter=" for the model install in the sky130 Makefile.
 
 import os
+import re
 import sys
 
 def filter(inname):
@@ -24,9 +25,69 @@
         print('No such file ' + inname)
         return 1
 
-    print('Renaming file ' + filename + ' to ' + newname)
-    os.rename(inname, outname)
-    return 0
+    print('Converting file ' + filename + ' to ' + newname + ' by reversing buses and scaling l and w.')
+    # Read input
+    try:
+        with open(inname, 'r') as inFile:
+            stext = inFile.read()
+            slines = stext.splitlines()
+    except:
+        print('sp_to_spice.py: failed to open ' + inname + ' for reading.', file=sys.stderr)
+        return 1
+
+    fixedlines = []
+    modified = False
+    base_rex = re.compile(r'([^\[]*).*')  # regular expression for matching base signal
+
+    for line in slines:
+
+        # remove 'u' suffix from 'l' and 'w' parameters
+        newline = re.sub('([ \t][lL]=[0-9\.]*)u', r'\1', line)
+        newline = re.sub('([ \t][wW]=[0-9\.]*)u', r'\1', newline)
+
+        # reverse bus indices - NOTE: Only works if all ports are on the subckt line
+        if newline.startswith(".subckt ") or newline.startswith(".SUBCKT "):
+            tokens = newline.split()
+            if tokens[1] == filebits[0]:  # top subckt
+                bus_start = 2
+                last_base = base_rex.match(tokens[2])[1]
+                i = 3
+                while i < len(tokens):
+                    base_match = base_rex.match(tokens[i])  # always matches one base net
+                    if last_base != base_match[1]:
+                        tokens[bus_start:i] = tokens[i-1:bus_start-1:-1]  # reverse the bus indices
+                        bus_start = i
+                        last_base = base_match[1]
+                    i += 1
+                tokens[bus_start:i] = tokens[i-1:bus_start-1:-1]
+                newline = " ".join(tokens)
+
+        if line != newline:
+            modified = True
+
+        fixedlines.append(newline)
+
+    # Write output
+    if outname == None:
+        for i in fixedlines:
+            print(i)
+    else:
+        # If the output is a symbolic link but no modifications have been made,
+        # then leave it alone.  If it was modified, then remove the symbolic
+        # link before writing.
+        if os.path.islink(outname):
+            if not modified:
+                return 0
+            else:
+                os.unlink(outname)
+        try:
+            with open(outname, 'w') as outFile:
+                for i in fixedlines:
+                    print(i, file=outFile)
+        except:
+            print('sp_to_spice.py: failed to open ' + outname + ' for writing.', file=sys.stderr)
+            return 1
+
 
 if __name__ == '__main__':
 
