diff --git a/imagecache_token.module b/imagecache_token.module
index 897c6d9..c07b048 100644
--- a/imagecache_token.module
+++ b/imagecache_token.module
@@ -142,6 +142,8 @@ function imagecache_token_tokens($type, $tokens, array $data = array(), array $o
     }
   }
 
+  $images_style_data = &drupal_static(__FUNCTION__);
+
   if ($type == 'image-field' && !empty($data['image-field'])) {
     foreach ($tokens as $token => $original) {
       $output = array();
@@ -155,19 +157,54 @@ function imagecache_token_tokens($type, $tokens, array $data = array(), array $o
           $output[] = theme('image_formatter', array('item' => $field, 'image_style' => $type));
         }
         elseif (isset($attribute) && !empty($attribute) && isset($field[$attribute])) {
-          $output[] = $field[$attribute];
+          if (in_array($attribute, array('width', 'height', 'mimetype'))) {
+
+            $styled_uri = image_style_path($type, $field['uri']);
+            $style      = image_style_load($type);
+
+            // Imagecrop module support.
+            global $imagecrop_style;
+            $imagecrop_style = $type;
+
+            // Create a derivative of the image for this style.
+            image_style_create_derivative($style, $field['uri'], $styled_uri);
+
+            // If the styled image's information wasn't loaded before then load
+            // it now; as this process is a little heavy, the information will
+            // be statically cached to avoid needing to reload the details for
+            // for another token.
+            if (empty($images_style_data[$styled_uri])) {
+              $images_style_data[$styled_uri] = image_get_info($styled_uri);
+            }
+
+            // Check for each supported attribute.
+            if ($attribute == 'width') {
+              $output[] = $images_style_data[$styled_uri]['width'];
+            }
+            if ($attribute == 'height') {
+              $output[] = $images_style_data[$styled_uri]['height'];
+            }
+            if ($attribute == 'mimetype') {
+              $output[] = $images_style_data[$styled_uri]['mime_type'];
+            }
+            if ($attribute == 'extension') {
+              $output[] = $images_style_data[$styled_uri]['extension'];
+            }
+            if ($attribute == 'filesize') {
+              $output[] = $images_style_data[$styled_uri]['file_size'];
+            }
+          }
+          else {
+            $output[] = $field[$attribute];
+          }
         }
         else {
-          $uri = '';
-          if (!empty($field['uri'])) {
-            $uri = $field['uri'];
-          }
-          elseif ($file = file_load($field['fid'])) {
-            $uri = $file->uri;
-          }
-          $output[] = !empty($uri) ? image_style_url($type, $uri) : '';
+          $output[] = image_style_url($token, $field['uri']);
         }
       }
+
+      // Compile each of the elements into a comma separated list, per standard
+      // Token practice.
       $replacements[$original] = implode(', ', $output);
     }
   }
@@ -186,10 +223,13 @@ function _imagegecache_token_image_attributes() {
     'path' => NULL,
     'width' => NULL,
     'height' => NULL,
+    'extension' => NULL,
+    'filesize' => NULL,
     'alt' => '',
     'title' => NULL,
+    'mimetype' => NULL,
     'attributes' => array(),
     'render' => '',
     'uri' => '',
- );
+  );
 }
