diff --git a/VERSION b/VERSION
index ad18496..15bcce9 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.160
+1.0.161
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 9b821e2..3aecb93 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -827,6 +827,7 @@
 		-techlef %l/latest/tech/*.tlef \
 		-spice %l/latest/cells/*/*.spice compile-only \
 			sort=custom/scripts/sort_pdkfiles.py \
+			filter=custom/scripts/fix_device_models.py \
 		-cdl %l/latest/cells/*/*.cdl ignore=topography compile-only \
 			sort=custom/scripts/sort_pdkfiles.py \
 		-lef %l/latest/cells/*/*.magic.lef compile-only \
diff --git a/sky130/custom/scripts/fix_device_models.py b/sky130/custom/scripts/fix_device_models.py
new file mode 100755
index 0000000..90a8434
--- /dev/null
+++ b/sky130/custom/scripts/fix_device_models.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+#
+# fix_device_models ---
+#
+# This script fixes the issue where devices in the digital libraries did
+# not get the proper name conversion;  specifically, the "conb" cell has
+# resistor type "short" which should be "sky130_fd_pr__res_generic_po",
+# and the pw2nd device model name is missing the suffix "_05v5".
+#
+# This script is a filter to be run by setting the name of this script as
+# the value to "filter=" for the model install in the sky130 Makefile.
+
+import re
+import os
+import sys
+
+def filter(inname, outname):
+
+    # Read input
+    try:
+        with open(inname, 'r') as inFile:
+            stext = inFile.read()
+            slines = stext.splitlines()
+    except:
+        print('fix_device_models.py: failed to open ' + fnmIn + ' for reading.', file=sys.stderr)
+        return 1
+
+    # Process input with regexp
+
+    fixedlines = []
+    modified = False
+
+    dioderex = re.compile('.*[ \t]+sky130_fd_pr__diode_pw2nd[ \t]+')
+    shortrex = re.compile('.*[ \t]+short[ \t]+')
+
+    for line in slines:
+
+        # Check for incorrect diode reference
+        dmatch = dioderex.match(line)
+        # Check for incorrect resistor reference
+        smatch = shortrex.match(line)
+        if dmatch:
+            fixedlines.append(re.sub('pw2nd', 'pw2nd_05v5', line))
+            modified = True
+        elif smatch:
+            fixedlines.append(re.sub('short', 'sky130_fd_pr__res_generic_po', line))
+            modified = True
+        else:
+            fixedlines.append(line)
+
+    # 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('fix_device_models.py: failed to open ' + outname + ' for writing.', file=sys.stderr)
+            return 1
+
+
+if __name__ == '__main__':
+
+    # This script expects to get one or two arguments.  One argument is
+    # mandatory and is the input file.  The other argument is optional and
+    # is the output file.  The output file and input file may be the same
+    # name, in which case the original input is overwritten.
+
+    options = []
+    arguments = []
+    for item in sys.argv[1:]:
+        if item.find('-', 0) == 0:
+            options.append(item[1:])
+        else:
+            arguments.append(item)
+
+    if len(arguments) > 0:
+        infilename = arguments[0]
+
+    if len(arguments) > 1:
+        outfilename = arguments[1]
+    else:
+        outfilename = None
+
+    result = filter(infilename, outfilename)
+    sys.exit(result)
