diff --git a/file_entity.admin.inc b/file_entity.admin.inc
index 2409e20..b962165 100644
--- a/file_entity.admin.inc
+++ b/file_entity.admin.inc
@@ -788,6 +788,20 @@ function file_entity_file_type_form_validate($form, &$form_state) {
   $submitted_mimetypes = array_filter(array_map('trim', explode("\n", $form_state['values']['mimetypes'])));
 
   $invalid_mimetypes = array_diff($submitted_mimetypes, $valid_mimetypes);
+  $valid_wildcards = array();
+  foreach ($invalid_mimetypes as $mimetype) {
+    $parts = explode('/', $mimetype);
+    if ($parts[1] == '*') {
+      foreach ($valid_mimetypes as $valid) {
+        if (file_entity_fnmatch($mimetype, $valid)) {
+          $valid_wildcards[] = $mimetype;
+          break;
+        }
+      }
+    }
+  }
+  $invalid_mimetypes = array_diff($invalid_mimetypes, $valid_wildcards);
+
   foreach ($invalid_mimetypes as $mimetype) {
     form_set_error('mimetypes', t('The mimetype %mimetype is not a valid mimetype.', array('%mimetype' => $mimetype)));
   }
diff --git a/file_entity.api.php b/file_entity.api.php
index eb1bf12..0dfe82d 100644
--- a/file_entity.api.php
+++ b/file_entity.api.php
@@ -41,9 +41,7 @@ function hook_file_default_types() {
       'label' => t('Image'),
       'description' => t("An <em>Image</em> is a two-dimensional picture that has a similar appearance to some subject, usually a physical object or a person."),
       'mimetypes' => array(
-        'image/jpeg',
-        'image/gif',
-        'image/png',
+        'image/*',
       ),
     ),
   );
diff --git a/file_entity.file.inc b/file_entity.file.inc
index ea853b6..b77e256 100644
--- a/file_entity.file.inc
+++ b/file_entity.file.inc
@@ -39,8 +39,10 @@ function file_entity_file_presave($file) {
 function file_entity_file_type($file) {
   $types = array();
   foreach (file_type_get_enabled_types() as $type) {
-    if (in_array($file->filemime, $type->mimetypes)) {
-      $types[] = $type->type;
+    foreach ($type->mimetypes as $mimetype) {
+      if (file_entity_fnmatch($mimetype, $file->filemime)) {
+        $types[] = $type->type;
+      }
     }
   }
 
diff --git a/file_entity.module b/file_entity.module
index 62cfb0d..703d7d8 100644
--- a/file_entity.module
+++ b/file_entity.module
@@ -1661,9 +1661,7 @@ function file_entity_file_default_types() {
     'label' => t('Image'),
     'description' => t('An <em>Image</em> file is a still visual.'),
     'mimetypes' => array(
-      'image/jpeg',
-      'image/gif',
-      'image/png',
+      'image/*',
     ),
     'streams' => array(
       'public',
@@ -1677,11 +1675,7 @@ function file_entity_file_default_types() {
     'label' => t('Video'),
     'description' => t('A <em>Video</em> file is a moving visual recording.'),
     'mimetypes' => array(
-      'video/quicktime',
-      'video/mp4',
-      'video/x-msvideo',
-      'video/ogg',
-      'video/x-flv',
+      'video/*',
     ),
     'streams' => array(
       'public',
@@ -1695,10 +1689,7 @@ function file_entity_file_default_types() {
     'label' => t('Audio'),
     'description' => t('An <em>Audio</em> file is a sound recording.'),
     'mimetypes' => array(
-      'audio/mpeg',
-      'audio/x-ms-wma',
-      'audio/x-wav',
-      'audio/ogg',
+      'audio/*',
     ),
     'streams' => array(
       'public',
@@ -1933,3 +1924,17 @@ function path_file_delete($file) {
   // Delete all aliases associated with this file.
   path_delete(array('source' => 'file/' . $file->fid));
 }
+
+/** 
+ * A wrapper function for the PHP function fnmatch().
+ * 
+ * We include this, because Windows servers do not implement fnmatch() until 
+ * PHP Version 5.3.
+ */
+function file_entity_fnmatch($pattern, $string) {
+  if (!function_exists('fnmatch')) {
+        return preg_match("#^".strtr(preg_quote($pattern, '#'), array('\*' => '.*', '\?' => '.'))."$#i", $string);
+  }
+  return fnmatch($pattern, $string);
+}
+    
\ No newline at end of file
