diff --git a/src/acpi/aml/type2opcode.rs b/src/acpi/aml/type2opcode.rs
index d4591ce6614803af0f34e11de336a4f95a3ae94a..35f3faf855bbe57c19e4a2f059987b6aab414059 100644
--- a/src/acpi/aml/type2opcode.rs
+++ b/src/acpi/aml/type2opcode.rs
@@ -1077,16 +1077,30 @@ fn parse_def_cond_ref_of(data: &[u8],
         })
     }
     
-    // TODO: Compute the result
-    // TODO: Store the result
     parser_opcode_extended!(data, 0x12);
 
-    let operand = parse_super_name(&data[2..], ctx)?;
-    let target = parse_target(&data[2 + operand.len..], ctx)?;
+    let obj = parse_super_name(&data[2..], ctx)?;
+    let target = parse_target(&data[2 + obj.len..], ctx)?;
 
+    let res = match obj.val {
+        AmlValue::String(ref s) => {
+            match ctx.get(AmlValue::String(s.clone())) {
+                AmlValue::None => return Ok(AmlParseType {
+                    val: AmlValue::Integer(0),
+                    len: 1 + obj.len + target.len
+                }),
+                _ => ObjectReference::Object(s.clone())
+            }
+        },
+        AmlValue::ObjectReference(ref o) => o.clone(),
+        _ => return Err(AmlError::AmlValueError)
+    };
+
+    ctx.modify(target.val, AmlValue::ObjectReference(res));
+    
     Ok(AmlParseType {
-        val: AmlValue::Uninitialized,
-        len: 2 + operand.len + target.len
+        val: AmlValue::Integer(1),
+        len: 1 + obj.len + target.len
     })
 }