diff --git a/src/acpi/aml/namespace.rs b/src/acpi/aml/namespace.rs
index 64ebb058cf4b64fe3b199581fc751feb8735fb84..64f02abc2b8612a99c3c628b1f0f9d236ff4a51a 100644
--- a/src/acpi/aml/namespace.rs
+++ b/src/acpi/aml/namespace.rs
@@ -4,6 +4,7 @@ use collections::string::ToString;
 use collections::vec::Vec;
 
 use core::fmt::{Debug, Formatter, Error};
+use core::str::FromStr;
 
 use super::termlist::parse_term_list;
 use super::namedobj::{ RegionSpace, FieldFlags };
@@ -124,6 +125,29 @@ impl Debug for AmlValue {
 }
 
 impl AmlValue {
+    pub fn get_type_string(&self) -> String {
+        match *self {
+            AmlValue::Uninitialized => String::from_str("[Uninitialized Object]").unwrap(),
+            AmlValue::Integer(_) => String::from_str("[Integer]").unwrap(),
+            AmlValue::String(_) => String::from_str("[String]").unwrap(),
+            AmlValue::Buffer(_) => String::from_str("[Buffer]").unwrap(),
+            AmlValue::Package(_) => String::from_str("[Package]").unwrap(),
+            AmlValue::FieldUnit(_) => String::from_str("[Field]").unwrap(),
+            AmlValue::Device(_) => String::from_str("[Device]").unwrap(),
+            AmlValue::Event(_) => String::from_str("[Event]").unwrap(),
+            AmlValue::Method(_) => String::from_str("[Control Method]").unwrap(),
+            AmlValue::Mutex(_) => String::from_str("[Mutex]").unwrap(),
+            AmlValue::OperationRegion(_) => String::from_str("[Operation Region]").unwrap(),
+            AmlValue::PowerResource(_) => String::from_str("[Power Resource]").unwrap(),
+            AmlValue::Processor(_) => String::from_str("[Processor]").unwrap(),
+            AmlValue::ThermalZone(_) => String::from_str("[Thermal Zone]").unwrap(),
+            AmlValue::BufferField(_) => String::from_str("[Buffer Field]").unwrap(),
+            AmlValue::DDBHandle(_) => String::from_str("[DDB Handle]").unwrap(),
+            AmlValue::DebugObject => String::from_str("[Debug Object]").unwrap(),
+            _ => String::new()
+        }
+    }
+    
     pub fn get_as_type(&self, t: AmlValue) -> Result<AmlValue, AmlError> {
         match t {
             AmlValue::None => Ok(AmlValue::None),
diff --git a/src/acpi/aml/type2opcode.rs b/src/acpi/aml/type2opcode.rs
index 20dc7566a9f69388556e8af14762a1998af56164..5802584db1455ddd49e273f04c84ce1610876d2c 100644
--- a/src/acpi/aml/type2opcode.rs
+++ b/src/acpi/aml/type2opcode.rs
@@ -1106,16 +1106,60 @@ fn parse_def_concat(data: &[u8],
         })
     }
     
-    // TODO: Compute the result
-    // TODO: Store the result
     parser_opcode!(data, 0x73);
 
     let lhs = parse_term_arg(&data[1..], ctx)?;
     let rhs = parse_term_arg(&data[1 + lhs.len..], ctx)?;
     let target = parse_target(&data[1 + lhs.len + rhs.len..], ctx)?;
 
+    let result = match lhs.val {
+        AmlValue::Integer(i) => {
+            let j = AmlValue::Integer(rhs.val.get_as_integer()?);
+
+            let mut first = lhs.val.get_as_buffer()?.clone();
+            let mut second = j.get_as_buffer()?.clone();
+
+            first.append(&mut second);
+
+            AmlValue::Buffer(first)
+        },
+        AmlValue::String(s) => {
+            let t = if let Ok(t) = rhs.val.get_as_string() {
+                t
+            } else {
+                rhs.val.get_type_string()
+            };
+
+            AmlValue::String(format!("{}{}", s, t))
+        },
+        AmlValue::Buffer(b) => {
+            let mut b = b.clone();
+            let mut c = if let Ok(c) = rhs.val.get_as_buffer() {
+                c.clone()
+            } else {
+                AmlValue::String(rhs.val.get_type_string()).get_as_buffer()?.clone()
+            };
+
+            b.append(&mut c);
+
+            AmlValue::Buffer(b)
+        },
+        _ => {
+            let first = lhs.val.get_type_string();
+            let second = if let Ok(second) = rhs.val.get_as_string() {
+                second
+            } else {
+                rhs.val.get_type_string()
+            };
+
+            AmlValue::String(format!("{}{}", first, second))
+        }
+    };
+
+    ctx.modify(target.val, result.clone())?;
+
     Ok(AmlParseType {
-        val: AmlValue::Uninitialized,
+        val: result,
         len: 1 + lhs.len + rhs.len + target.len
     })
 }