--- Object.php.orig	2012-04-01 09:28:05.195658336 +0200
+++ Object.php	2012-04-04 14:32:55.631660180 +0200
@@ -90,22 +90,24 @@
      */
     public function getValue($attribute)
     {
-        if (isset($this->attributes[$attribute]) &&
-            Horde::hookExists('decode_attribute', 'turba')) {
-            try {
-                return Horde::callHook('decode_attribute', array($attribute, $this->attributes[$attribute], $this), 'turba');
-            } catch (Turba_Exception $e) {}
-        }
+        /* compose composite fields */
         if (isset($this->driver->map[$attribute]) &&
             is_array($this->driver->map[$attribute])) {
             $args = array();
             foreach ($this->driver->map[$attribute]['fields'] as $field) {
                 $args[] = $this->getValue($field);
             }
-            return Turba::formatCompositeField($this->driver->map[$attribute]['format'], $args);
-        } elseif (!isset($this->attributes[$attribute])) {
-            return null;
-        } elseif (isset($GLOBALS['attributes'][$attribute]) &&
+            $this->attributes[$attribute] = Turba::formatCompositeField($this->driver->map[$attribute]['format'], $args);
+        } 
+	/* call decode_attribute hook */
+        if (isset($this->attributes[$attribute]) &&
+            Horde::hookExists('decode_attribute', 'turba')) {
+            try {
+                $this->attributes[$attribute] = Horde::callHook('decode_attribute', array($attribute, $this->attributes[$attribute], $this), 'turba');
+            } catch (Turba_Exception $e) {}
+        }
+	/* wrap images in data/file array */
+        if (isset($GLOBALS['attributes'][$attribute]) &&
                   ($GLOBALS['attributes'][$attribute]['type'] == 'image')) {
             return empty($this->attributes[$attribute])
                 ? null