diff --git a/sky130/custom/scripts/check_antenna.py b/sky130/custom/scripts/check_antenna.py
index 86441d3..031fa5e 100755
--- a/sky130/custom/scripts/check_antenna.py
+++ b/sky130/custom/scripts/check_antenna.py
@@ -40,9 +40,9 @@
                 print('Error:  Cannot find file ' + layout_name + '.mag')
                 return
             else:
-                magpath = os.getcwd + '/mag'
+                magpath = os.getcwd() + '/mag'
         else:
-            magpath = os.getcwd
+            magpath = os.getcwd()
 
     if output_file == '':
         output_file = layout_name + '_ant.txt'
@@ -52,8 +52,10 @@
 
     myenv = os.environ.copy()
     myenv['MAGTYPE'] = 'mag'
-
-    if os.path.isfile(magpath + '/.magicrc'):
+    
+    if os.path.isfile('/usr/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc'):
+       rcfile = '/usr/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc'
+    elif os.path.isfile(magpath + '/.magicrc'):
        rcfile = magpath + '/.magicrc'
     elif os.path.isfile(os.getcwd() + '/.magicrc'):
        rcfile = os.getcwd() + '/.magicrc'
@@ -67,7 +69,7 @@
         else:
             print('Error: Cannot get magic rcfile for the technology!')
             return
-
+    
     # Generate the antenna check Tcl script
 
     print('Evaluating antenna rule violations on layout ' + layout_name)
@@ -93,7 +95,7 @@
     print('Antenna violation checks on cell ' + layout_name, file=ofile)
     print('--------------------------------------------', file=ofile)
 
-    print('Running: magic -dnull -noconsole 
+    print('Running: magic -dnull -noconsole') 
 
     mproc = subprocess.run(['magic', '-dnull', '-noconsole',
 		'-rcfile', rcfile, 'run_magic_antenna.tcl'],
diff --git a/sky130/custom/scripts/check_density.py b/sky130/custom/scripts/check_density.py
index feccc60..bd10471 100755
--- a/sky130/custom/scripts/check_density.py
+++ b/sky130/custom/scripts/check_density.py
@@ -55,34 +55,33 @@
         print("Wrong number of arguments given to check_density.py.")
         usage()
         sys.exit(0)
+        
+    relative_path=arguments[0]
 
-    gds_filepath = arguments[0]
-
-    gdspath = os.path.split(gds_filepath)[0]
+    gdspath = os.getcwd()+'/'+os.path.split(relative_path)[0]+'/'
     if gdspath == '':
         gdspath = os.getcwd()
 
+    gds_filepath = os.path.split(relative_path)[1]
+    
     if os.path.splitext(gds_filepath)[1] != '.gds':
         if os.path.splitext(gds_filepath)[1] == '':
             gds_filepath += '.gds'
         else:
             print('Error:  Project is not a GDS file!')
             sys.exit(1)
+    
+    gdsname = os.path.split(gds_filepath)[1]
+    gdsroot = os.path.splitext(gdsname)[0]
 
     # Check for valid path to the GDS file
 
     if not os.path.isdir(gdspath):
         print('Error:  Project path "' + gds_filepath + '" does not exist or is not readable.')
         sys.exit(1)
-
-    # Check for valid path to the layout directory (NOTE:  Should check for
-    # additional argument or open_pdks install if not in a standard project space;
-    # this needs to be done.)
-
-    gdsroot = os.path.split(gdspath)[0]
-    magpath = gdsroot + '/mag'
-    if not os.path.isdir(magpath):
-        print('Error:  Layout path "' + magpath + '" does not exist or is not readable.')
+        
+    if not os.path.isfile(gdspath+gds_filepath):
+        print('Error:  Project "' + gdspath+gds_filepath + '" does not exist or is not readable.')
         sys.exit(1)
 
     if '-debug' in optionlist:
@@ -92,9 +91,25 @@
 
     # NOTE:  There should be some attempt to find the installed PDK magicrc file
     # if there is no mag/ directory.
-    rcfile = magpath + '/.magicrc'
+    
+    
+    # Searching for rcfile
+    
+    rcfile_paths=[gdspath+'/.magicrc','/$PDK_PATH/libs.tech/magic/sky130A.magicrc','/usr/share/pdk/sky130A/libs.tech/magic/sky130A.magicrc']
+    
+    rcfile=''
+    
+    for rc_path in rcfile_paths:
+        if os.path.isfile(rc_path):
+            rcfile=rc_path
+            break
+    
+    if rcfile=='':
+        print('Error: .magicrc file not found.')
+        sys.exit(1)
 
-    with open(magpath + '/check_density.tcl', 'w') as ofile:
+    
+    with open(gdspath + '/check_density.tcl', 'w') as ofile:
         print('#!/bin/env wish', file=ofile)
         print('crashbackups stop', file=ofile)
         print('drc off', file=ofile)
@@ -112,6 +127,11 @@
         print('gds read ' + gds_filepath, file=ofile)
         print('', file=ofile)
 
+        # NOTE:  This assumes that the name of the GDS file is the name of the
+        # topmost cell (which should be passed as an option)
+        print('load ' + gdsroot)
+        print('', file=ofile)
+
         print('set midtime [orig_clock format [orig_clock seconds] -format "%D %T"]', file=ofile)
         print('puts stdout "Starting density checks: $midtime"', file=ofile)
         print('', file=ofile)
@@ -196,7 +216,7 @@
         print('        flush stdout', file=ofile)
         print('        update idletasks', file=ofile)
 
-        print('        load ' + project_with_id, file=ofile)
+        print('        load ' + gdsroot, file=ofile)
         print('        cellname delete tile', file=ofile)
 
         print('    }', file=ofile)
@@ -211,13 +231,13 @@
     myenv['MAGTYPE'] = 'mag'
 
     print('Running density checks on file ' + gds_filepath, flush=True)
-
+    
     mproc = subprocess.Popen(['magic', '-dnull', '-noconsole',
-		'-rcfile', rcfile, magpath + '/check_density.tcl'],
+		'-rcfile', rcfile, gdspath + '/check_density.tcl'],
 		stdin = subprocess.DEVNULL,
 		stdout = subprocess.PIPE,
 		stderr = subprocess.PIPE,
-		cwd = magpath,
+		cwd = gdspath,
 		env = myenv,
 		universal_newlines = True)
 
@@ -590,8 +610,8 @@
         print('***Error:  MET5 Density > 76%')
 
     if not keepmode:
-        if os.path.isfile(magpath + '/check_density.tcl'):
-            os.remove(magpath + '/check_density.tcl')
+        if os.path.isfile(gdspath + '/check_density.tcl'):
+            os.remove(gdspath + '/check_density.tcl')
 
     print('')
     print('Done!')
