diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 989e6c3..9bc14de 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -811,6 +811,8 @@
 		2>&1 | tee -a ${SKY130A}_make.log || true
 	./custom/scripts/process_params.py \
 		2>&1 | tee -a ${SKY130A}_make.log || true
+	./custom/scripts/montecarlo_hack.py \
+		2>&1 | tee -a ${SKY130A}_make.log || true
 	# Custom:  Add "mc" section to sky130.lib.spice
 	head -n-1 ${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/sky130.lib.spice \
 		| ${SED} -e '/^\.lib/a.param mc_pr_switch=0' \
diff --git a/sky130/custom/scripts/montecarlo_hack.py b/sky130/custom/scripts/montecarlo_hack.py
new file mode 100755
index 0000000..2c8ce48
--- /dev/null
+++ b/sky130/custom/scripts/montecarlo_hack.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+#
+#--------------------------------------------------------------------
+# Workaround for the problem that ngspice is unable to accept a
+# parameter name that shadows a device name.  Parameters in the
+# files critical.spice and montecarlo.spice that shadow parameter
+# names have the leading sky130_fd_pr__ stripped off to prevent
+# this from being a problem.
+#--------------------------------------------------------------------
+
+import os
+import re
+import sys
+
+searchpath = ['sky130A/libs.tech/ngspice/parameters/critical.spice',
+	'sky130A/libs.tech/ngspice/parameters/montecarlo.spice']
+
+if len(sys.argv) > 1:
+    searchpath = sys.argv[1]
+
+# Flag all parameters that have the same name as devices.
+# These parameters are unused and must be deleted.
+
+excludelist = [
+	'sky130_fd_pr__nfet_20v0_nvt_iso',
+	'sky130_fd_pr__nfet_20v0_nvt',
+	'sky130_fd_pr__nfet_20v0_iso',
+	'sky130_fd_pr__nfet_20v0_zvt',
+	'sky130_fd_pr__nfet_20v0',
+	'sky130_fd_pr__pfet_20v0',
+	'sky130_fd_pr__nfet_01v8_lvt',
+	'sky130_fd_pr__pfet_01v8_mvt',
+	'sky130_fd_pr__pfet_01v8',
+	'sky130_fd_pr__nfet_g5v0d16v0',
+	'sky130_fd_pr__pfet_g5v0d16v0',
+	'sky130_fd_pr__special_nfet_pass_lvt',
+	'sky130_fd_pr__pnp_05v5_W0p68L0p68']
+
+# For each entry in the exclude list, create a regular expression
+# for detecting that entry and excluding other similar cases that
+# aren't the parameter.  Items with preceding "/" are the device
+# filename, and items with additional text are other parameters.
+
+rexpat = {}
+rexdict = {}
+
+for item in excludelist:
+    rexpat[item] = '([^/])' + item + '(?=[^_])'
+    rexdict[item] = re.compile('([^/])' + item + '(?=[^_])')
+
+#--------------------------------------------------------------------
+
+for infile_name in searchpath:
+    filepath = os.path.split(infile_name)[0]
+    outfile_name = os.path.join(filepath, 'temp')
+
+    infile = open(infile_name, 'r')
+    outfile = open(outfile_name, 'w')
+
+    line_number = 0
+    replaced_something = False
+    for line in infile:
+        line_number += 1
+
+        newline = line
+        for device in excludelist:
+            rmatch = rexdict[device].search(line)
+            if rmatch:
+                replacement = device[14:]
+                newline = re.sub(rexpat[device], '\g<1>' + replacement, newline)
+                replaced_something = True
+
+        outfile.write(newline)
+
+    infile.close()
+    outfile.close()
+    if replaced_something:
+        print("Something was replaced in '{}'".format(infile_name))
+        os.rename(outfile_name, infile_name)
+    else:
+        print("Nothing was replaced in '{}'.".format(infile_name))
+        os.remove(outfile_name)
+
diff --git a/sky130/custom/scripts/process_params.py b/sky130/custom/scripts/process_params.py
index 64647c4..1c0e44a 100755
--- a/sky130/custom/scripts/process_params.py
+++ b/sky130/custom/scripts/process_params.py
@@ -25,17 +25,6 @@
 
 filelist = []
 
-# Manual hack---flag all parameters that have the same name as devices.
-# These parameters are unused and must be deleted.
-
-excludelist = ['sky130_fd_pr__nfet_20v0_nvt', 'sky130_fd_pr__nfet_20v0_nvt_iso',
-	'sky130_fd_pr__nfet_20v0', 'sky130_fd_pr__nfet_20v0_iso',
-	'sky130_fd_pr__nfet_20v0_zvt', 'sky130_fd_pr__pfet_20v0',
-	'sky130_fd_pr__nfet_01v8_lvt', 'sky130_fd_pr__special_nfet_pass_lvt',
-	'sky130_fd_pr__nfet_g5v0d16v0', 'sky130_fd_pr__pfet_01v8_mvt',
-	'sky130_fd_pr__pnp_05v5_W0p68L0p68', 'sky130_fd_pr__pfet_01v8',
-	'sky130_fd_pr__pfet_g5v0d16v0']
-
 #--------------------------------------------------------------------
 # Step 1.  Gather variables
 #--------------------------------------------------------------------
@@ -68,15 +57,8 @@
                         if 'vary' in tokens:
                             if ('dist=gauss' in tokens) or ('gauss' in tokens):
                                 process_param = tokens[2]
-                                # Issue:  There are improper parameters that
-                                # shadow device names.  They are not used and
-                                # should be detected and elminated.
-                                if (process_param in excludelist):
-                                    print('Found parameter ' + process_param + ' that shadows a device name.')
-                                    replacement = ''
-                                else:
-                                    std_dev = float(tokens[-1].split('=')[-1])
-                                    replacement = ' + {}*AGAUSS(0,{!s},1)'.format(pr_switch_param, std_dev)
+                                std_dev = float(tokens[-1].split('=')[-1])
+                                replacement = ' + {}*AGAUSS(0,{!s},1)'.format(pr_switch_param, std_dev)
                                 process_params.append((process_param, replacement))
 
             infile.close()
@@ -125,12 +107,9 @@
                     newline = line
                     for (param, replacement) in process_params:
                         if ' ' + param + ' ' in newline:
+                            newline = newline.strip('\n') + replacement + '\n'
+                            print("  Line {}: Found process parameter '{}' and appended '{}'.".format(line_number, param, replacement))
                             replaced_something = True
-                            if replacement == '':
-                                newline = '** ' + newline
-                            else:
-                                newline = newline.strip('\n') + replacement + '\n'
-                                print("  Line {}: Found process parameter '{}' and appended '{}'.".format(line_number, param, replacement))
                     outfile.write(newline)
                 else:
                     outfile.write(line)
