diff --git a/docker_build/docker/magic/Dockerfile b/docker_build/docker/magic/Dockerfile
index 26c11ff..51e470b 100644
--- a/docker_build/docker/magic/Dockerfile
+++ b/docker_build/docker/magic/Dockerfile
@@ -3,6 +3,15 @@
 
 # Common development tools and libraries (kitchen sink approach)
 RUN yum groupinstall -y "Development Tools" "Development Libraries"
+RUN yum -y install centos-release-scl && \
+    yum -y install devtoolset-8 devtoolset-8-libatomic-devel
+
+ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc \
+    CPP=/opt/rh/devtoolset-8/root/usr/bin/cpp \
+    CXX="/opt/rh/devtoolset-8/root/usr/bin/g++" \
+    PATH=/opt/rh/devtoolset-8/root/usr/bin:$PATH \
+    LD_LIBRARY_PATH=/opt/rh/devtoolset-8/root/usr/lib64:/opt/rh/devtoolset-8/root/usr/lib:/opt/rh/devtoolset-8/root/usr/lib64/dyninst:/opt/rh/devtoolset-8/root/usr/lib/dyninst:/opt/rh/devtoolset-8/root/usr/lib64:/opt/rh/devtoolset-8/root/usr/lib:$LD_LIBRARY_PATH
+#
 
 # magic dependencies
 RUN yum install -y csh wget tcl-devel tk-devel libX11-devel cairo-devel ncurses-devel
@@ -13,7 +22,7 @@
 
 WORKDIR "magic"
 
-RUN git checkout magic-8.2
+RUN git checkout bebd603296d4afa4ff413669cef3b058e9fccf39
 
 # build
 RUN ./configure --prefix=/build && \
diff --git a/docker_build/tar/magic.tar.gz b/docker_build/tar/magic.tar.gz
index ea2fd0e..7989082 100644
--- a/docker_build/tar/magic.tar.gz
+++ b/docker_build/tar/magic.tar.gz
Binary files differ
diff --git a/pdks/ef-skywater-s8 b/pdks/ef-skywater-s8
index fa4034e..64a70e1 160000
--- a/pdks/ef-skywater-s8
+++ b/pdks/ef-skywater-s8
@@ -1 +1 @@
-Subproject commit fa4034ee98ba25ccca37f7116f1df5d175989864
+Subproject commit 64a70e15700965676a29e5e942f83078bbcb232a
diff --git a/scripts/magic.tcl b/scripts/magic.tcl
index 5cba479..0d77693 100644
--- a/scripts/magic.tcl
+++ b/scripts/magic.tcl
@@ -1,35 +1,13 @@
-scalegrid 1 2
-box 0 0 0 0
-drc off
-snap int
-
-# Read tech lef
-#addpath ./platforms/$::env(PLATFORM)
-#load libcell_scs8lp; # ?
-lef read $::env(MERGED_LEF)
-
-
-# Read gds files
-gds readonly true
-gds rescale false
-foreach gdsFile $::env(GDS_FILES) {
-  gds read $gdsFile
-}
-
 
 # Read def and load design
 def read $::env(CURRENT_DEF)
-load $::env(DESIGN_NAME)
+# load $::env(DESIGN_NAME)
 
 # Write gds
-select top cell
-expand
 gds write $::env(magic_result_file_tag).gds
 
 puts "GDS write complete"
 
 lef write $::env(magic_result_file_tag).lef -hide
 lef write $::env(magic_result_file_tag).full.lef 
-quit -noprompt
-exit
 
diff --git a/scripts/padframe2fp.py b/scripts/padframe2fp.py
index 9906c6f..2ef029e 100644
--- a/scripts/padframe2fp.py
+++ b/scripts/padframe2fp.py
@@ -7,6 +7,7 @@
 PINS_REGEX = r'PIN\s+(\S+).*PORT\s+(.*;\s+)END.*END\s+\1\n'
 PLACED_COMP_REGEX = r"^\s*-\s+([^\s]+)\s+([^\s]+)\s+\+\s+PLACED\s+\(\s(-?\d+)\s(-?\d+)\s\)\s+([NEWS])\s+;$"
 PIN_IGNORE = ['VSS', 'VDD', 'PAD', 'in3v', 'vdd']
+NETS_IGNORE = ['vdd', 'vss']
 NETSECTION_REGEX = r"^NETS\s+\S+\s+;\s+(.*)END NETS\s+"
 # \s+([NEWS])\s+;$"
 def getMacroPins(content, macro_name):
@@ -51,8 +52,13 @@
     nets = filter(None, nets_section[0].replace('\n', ' ').split("- "))
     nets_dict = {}
     for net in nets:
-        connection = re.findall(r"\s*(\S+)\s+\(\s+(.*)\s+\)\s+\(\s+(.*)\s+\)\s+;", net)[0]
-        nets_dict[connection[0]] = connection[1:]
+        net_name = re.findall(r"\s*(\S+).*;",net)
+        if any(net_name[0].find(net_ignore) != -1 for net_ignore in NETS_IGNORE):
+            continue
+        connections = re.findall(r"\(\s+(.*?)\s+\)",net)
+        connections = [connection.replace('\\','') for connection in connections]
+        nets_dict[net_name[0]] = connections
+        #print(net_name, connections)
 
     return nets_dict
 
@@ -104,7 +110,6 @@
     for pin in macro_data["pins"]:
         if any(pin.find(pin_ignore) != -1 for pin_ignore in PIN_IGNORE):
             continue
-        pin_cnt += 1
         pin_data = macro_data["pins"][pin]
         # print(pin_data)
         #pin_tag = comp+"."+comp_data["macro"]+'.'+pin
@@ -115,7 +120,9 @@
                 pin_tag = net
                 found = True
                 break
-        if not found: continue
+        if not found:
+            continue
+        pin_cnt += 1
         pin_section += "- %s + NET %s\n+ PLACED ( %d %d ) %s" % \
         (pin_tag, pin_tag, pos_x, pos_y, orientation)
         for layer in pin_data:
diff --git a/scripts/run_magic.tcl b/scripts/run_magic.tcl
index 69beb0f..b125f13 100644
--- a/scripts/run_magic.tcl
+++ b/scripts/run_magic.tcl
@@ -1,8 +1,13 @@
+set magicrc $::env(TMP_DIR)/magic.magicrc
+set ::env(PDKPATH) "$::env(PDK_ROOT)/ef-skywater-s8/EFS8A"
+set ::env(MAGPATH) "$::env(PDKPATH)/libs.ref/maglef"
+exec envsubst < $::env(SCRIPTS_DIR)/tmp.magicrc > $magicrc
 exec magic \
         -noconsole \
         -dnull \
-        -norcfile \
-        -T $::env(MAGIC_TECH_FILE) \
+        -rcfile $magicrc \
         $::env(SCRIPTS_DIR)/magic.tcl \
 	</dev/null \
         |& tee $::env(TERMINAL_OUTPUT) $::env(magic_log_file_tag).log
+
+
diff --git a/scripts/tcl_commands/all.tcl b/scripts/tcl_commands/all.tcl
index cc0fc3b..7083236 100644
--- a/scripts/tcl_commands/all.tcl
+++ b/scripts/tcl_commands/all.tcl
@@ -346,6 +346,11 @@
 		puts "Streaming out GDS II..."
 		set ::env(CURRENT_STAGE) finishing
 		if {[catch {exec tclsh $::env(SCRIPTS_DIR)/run_magic.tcl} issue]} { }
+#		set PDKPATH $::env(PDK_ROOT)/$::env(PDK)/ 
+#		set tech $PDKPATH/libs.tech/magic/current/EFS8A.tech
+#		cd $::env(TMP_DIR)
+#		exec /ef/apps/bin/magicGdrc -T $tech $::env(magic_result_file_tag).gds $::env(DESIGN_NAME) \
+			|& tee $::env(TERMINAL_OUTPUT) $::env(magic_log_file_tag).drc
 	}
 }
 
diff --git a/scripts/tcl_commands/placement.tcl b/scripts/tcl_commands/placement.tcl
index 46b7fd5..ba9f5b5 100644
--- a/scripts/tcl_commands/placement.tcl
+++ b/scripts/tcl_commands/placement.tcl
@@ -41,6 +41,10 @@
 	try_catch openroad -exit $::env(SCRIPTS_DIR)/openroad/or_opendp.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(opendp_log_file_tag)_openroad.log
 	TIMER::timer_stop
 	exec echo "[TIMER::get_runtime]" >> $::env(opendp_log_file_tag)_runtime.txt
+	if {![catch {eval exec grep -q "FAIL" $::env(opendp_log_file_tag).log}]}  {
+		puts "Error: Check $::env(opendp_log_file_tag).log"
+		exit 1
+	}
 	set_def $::env(SAVE_DEF)
 }
 
diff --git a/scripts/tmp.magicrc b/scripts/tmp.magicrc
new file mode 100644
index 0000000..323515c
--- /dev/null
+++ b/scripts/tmp.magicrc
@@ -0,0 +1,53 @@
+puts stdout "Sourcing design .magicrc for technology EFS8A ..."
+
+# Put grid on 0.005 pitch.  This is important, as some commands don't
+# rescale the grid automatically (such as lef read?).
+
+#set scalefac [tech lambda]
+if {[lindex [tech lambda] 1] < 2} {
+    scalegrid 1 2
+}
+
+drc off
+# drc euclidean on
+
+#set PDKPATH "${PDK_ROOT}/pdks/ef-skywater-s8/EFS8A"
+
+# loading technology
+tech load $PDKPATH/libs.tech/magic/current/EFS8A.tech
+
+
+# load techlef ?
+lef read ${TECH_LEF}
+
+# load device generator
+source $PDKPATH/libs.tech/magic/current/EFS8A.tcl
+
+# load bind keys (optional)
+source $PDKPATH/libs.tech/magic/current/EFS8A-BindKeys
+
+# set units to lambda grid 
+snap lambda
+
+# add path to reference cells
+#set MAGPATH "${PDKPATH}/libs.ref/maglef"
+addpath ${MAGPATH}/primdev
+addpath ${MAGPATH}/s8_osu130
+addpath ${MAGPATH}/efs8hd
+addpath ${MAGPATH}/efs8_pads
+#addpath ${MAGPATH}/s8fmlt
+#addpath ${MAGPATH}/s8iom0
+#addpath ${MAGPATH}/scs8hd
+#addpath ${MAGPATH}/scs8hdll
+#addpath ${MAGPATH}/scs8hvl
+#addpath ${MAGPATH}/scs8hs
+#addpath ${MAGPATH}/scs8ms
+#addpath ${MAGPATH}/scs8ls
+#addpath ${MAGPATH}/scs8lp
+
+# add path to GDS cells
+
+# add path to IP from catalog.  This procedure defined in the PDK script.
+catch {magic::query_mylib_ip}
+# add path to local IP from user design space.  Defined in the PDK script.
+catch {magic::query_my_projects}
