diff --git a/common/og_gui_characterize.py b/common/cace.py
similarity index 99%
rename from common/og_gui_characterize.py
rename to common/cace.py
index 2eacab5..4443e75 100755
--- a/common/og_gui_characterize.py
+++ b/common/cace.py
@@ -46,7 +46,7 @@
 from settings import Settings
 from simhints import SimHints
 
-import og_config
+import config
 
 # User preferences file (if it exists)
 prefsfile = '~/design/.profile/prefs.json'
@@ -176,7 +176,7 @@
         self.help = HelpWindow(self, fontsize = fontsize)
 
         with io.StringIO() as buf, contextlib.redirect_stdout(buf):
-            self.help.add_pages_from_file(og_config.apps_path + '/characterize_help.txt')
+            self.help.add_pages_from_file(config.apps_path + '/characterize_help.txt')
             message = buf.getvalue()
 
         # Set the help display to the first page
@@ -222,7 +222,7 @@
         else:
             userid = os.environ['USER']
             p = subprocess.run(['/ef/apps/bin/withnet',
-			og_config.apps_path + '/og_uid_service.py', userid],
+			config.apps_path + '/og_uid_service.py', userid],
                         stdout = subprocess.PIPE)
             if p.stdout:
                 uid_string = p.stdout.splitlines()[0].decode('utf-8')
@@ -541,7 +541,7 @@
         designname = os.path.splitext(datasheet)[0]
         print('Cancel characterization of ' + designname + ' (' + dspath + ' )')
         subprocess.run(['/ef/apps/bin/withnet',
-			og_config.apps_path + '/cace_design_upload.py', '-cancel',
+			config.apps_path + '/cace_design_upload.py', '-cancel',
                         dspath])
         self.removeprogress()
         self.bbar.upload_button.configure(text='Submit', state = 'enabled',
@@ -724,7 +724,7 @@
             self.progress_bar_setup(dspath)
             self.update_idletasks()
         subprocess.run(['/ef/apps/bin/withnet',
-			og_config.apps_path + '/cace_design_upload.py',
+			config.apps_path + '/cace_design_upload.py',
                         dspath])
 
         # Remove the settings file
@@ -1043,7 +1043,7 @@
         print(' -layoutdir=' + dspath + '/mag' + ' -testbenchdir=' + dspath + '/testbench')
         print(' -datasheet=datasheet.json')
         
-        self.caceproc = subprocess.Popen([og_config.apps_path + '/cace_gensim.py', dspath,
+        self.caceproc = subprocess.Popen([config.apps_path + '/cace_gensim.py', dspath,
 			*modetext,
 			'-method=' + method,  # Call local mode w/method
 			'-simdir=' + dsdir,
diff --git a/common/og_config.py b/common/config.py
similarity index 100%
rename from common/og_config.py
rename to common/config.py
diff --git a/common/create_project.py b/common/create_project.py
index 787274f..125fcd3 100755
--- a/common/create_project.py
+++ b/common/create_project.py
@@ -58,7 +58,7 @@
             pdkpath = pdkname
             pdkname = os.path.split(pdkpath)[1]
         else:
-            pdkpath = os.path.join('/usr/share', 'pdk', pdkname)
+            pdkpath = os.path.join('PREFIX', 'pdk', pdkname)
     else:
         try:
             pdkpath = os.getenv()['PDK_PATH']
diff --git a/common/og_gui_manager.py b/common/project_manager.py
similarity index 99%
rename from common/og_gui_manager.py
rename to common/project_manager.py
index f6f4cc3..73ff0d8 100755
--- a/common/og_gui_manager.py
+++ b/common/project_manager.py
@@ -100,7 +100,7 @@
 from make_icon_from_soft import create_symbol
 from profile import Profile
 
-import og_config
+import config
 
 # Global name for design directory
 designdir = 'design'
@@ -655,7 +655,7 @@
         self.help = HelpWindow(self, fontsize=fontsize)
         
         with io.StringIO() as buf, contextlib.redirect_stdout(buf):
-            self.help.add_pages_from_file(og_config.apps_path + '/manager_help.txt')
+            self.help.add_pages_from_file(config.apps_path + '/manager_help.txt')
             message = buf.getvalue()
         
 
@@ -2847,7 +2847,7 @@
         
         try:
             
-            subprocess.Popen([og_config.apps_path + '/create_project.py', newproject, newpdk])
+            subprocess.Popen([config.apps_path + '/create_project.py', newproject, newpdk])
             
         except IOError as e:
             print('Error copying files: ' + str(e))
@@ -3370,7 +3370,7 @@
             if datasheet:
                 # use Popen, not run, so that application does not wait for it to exit.
                 dsheetroot = os.path.splitext(datasheet)[0]
-                subprocess.Popen([og_config.apps_path + '/og_gui_characterize.py',
+                subprocess.Popen([config.apps_path + '/cace.py',
 				datasheet])
         else:
             print("You must first select a project.", file=sys.stderr)
@@ -3417,19 +3417,19 @@
 
                 print('Synthesize design in qflow project directory ' + pname)
                 if development:
-                    subprocess.Popen([og_config.apps_path + '/qflow_manager.py',
+                    subprocess.Popen([config.apps_path + '/qflow_manager.py',
 				design, '-development', '-subproject=' + pname])
                 else:
-                    subprocess.Popen([og_config.apps_path + '/qflow_manager.py',
+                    subprocess.Popen([config.apps_path + '/qflow_manager.py',
 				design, '-subproject=' + pname])
             else:
                 print('Synthesize design ' + designname + ' (' + design + ')')
                 # use Popen, not run, so that application does not wait for it to exit.
                 if development:
-                    subprocess.Popen([og_config.apps_path + '/qflow_manager.py',
+                    subprocess.Popen([config.apps_path + '/qflow_manager.py',
 				design, designname, '-development'])
                 else:
-                    subprocess.Popen([og_config.apps_path + '/qflow_manager.py',
+                    subprocess.Popen([config.apps_path + '/qflow_manager.py',
 				design, designname])
         else:
             print("You must first select a project.", file=sys.stderr)
