diff --git a/src/acpi/aml/namespace.rs b/src/acpi/aml/namespace.rs
index 6e6dfa9aa128986879e0f2028de2aaf2ed36dad8..18eb7a34e49bd5362ff55d1c8a1a5ff4cb0d3ced 100644
--- a/src/acpi/aml/namespace.rs
+++ b/src/acpi/aml/namespace.rs
@@ -12,7 +12,7 @@ use super::namedobj::{ RegionSpace, FieldFlags };
 use super::parser::{AmlExecutionContext, ExecutionState};
 use super::AmlError;
 
-use acpi::SdtSignature;
+use acpi::{SdtSignature, get_signature_from_index, get_index_from_signature};
 
 #[derive(Clone)]
 pub enum FieldSelector {
@@ -255,9 +255,13 @@ impl AmlValue {
     }
 
     pub fn get_as_ddb_handle(&self) -> Result<(Vec<String>, SdtSignature), AmlError> {
-        // TODO: Integer conversion
         match *self {
             AmlValue::DDBHandle(ref v) => Ok(v.clone()),
+            AmlValue::Integer(i) => if let Some(sig) = get_signature_from_index(i as usize) {
+                Ok((vec!(), sig))
+            } else {
+                Err(AmlError::AmlValueError)
+            },
             _ => Err(AmlError::AmlValueError)
         }
     }
@@ -317,6 +321,11 @@ impl AmlValue {
 
                 Ok(i)
             },
+            AmlValue::DDBHandle(ref v) => if let Some(idx) = get_index_from_signature(v.1.clone()) {
+                Ok(idx as u64)
+            } else {
+                Err(AmlError::AmlValueError)
+            },
             AmlValue::String(ref s) => {
                 let mut s = s.clone()[0..8].to_string().to_uppercase();
                 let mut i: u64 = 0;
diff --git a/src/acpi/mod.rs b/src/acpi/mod.rs
index 5902ebc55ce9999df7d029dda2ba85038c50b386..8324f8e03526bdef0a9be818097e28320caea9bd 100644
--- a/src/acpi/mod.rs
+++ b/src/acpi/mod.rs
@@ -227,6 +227,33 @@ pub fn load_table(signature: SdtSignature) {
     }
 }
 
+pub fn get_signature_from_index(index: usize) -> Option<SdtSignature> {
+    if let Some(ref order) = *(SDT_ORDER.read()) {
+        if index < order.len() {
+            Some(order[index].clone())
+        } else {
+            None
+        }
+    } else {
+        None
+    }
+}
+
+pub fn get_index_from_signature(signature: SdtSignature) -> Option<usize> {
+    if let Some(ref order) = *(SDT_ORDER.read()) {
+        let mut i = order.len();
+        while i > 0 {
+            i -= 1;
+
+            if order[i] == signature {
+                return Some(i);
+            }
+        }
+    }
+
+    None
+}
+
 pub struct Acpi {
     pub fadt: RwLock<Option<Fadt>>,
     pub namespace: RwLock<Option<BTreeMap<String, AmlValue>>>,