diff --git a/README.txt b/README.txt
index c0bcac57..06aa9a20 100644
--- a/README.txt
+++ b/README.txt
@@ -20,15 +20,15 @@ Installation
 Start by downloading and installing the Libraries 2.x module.
 
 Next download and extract the imagesLoaded plugin, rename the extracted folder to
-"jquery.imagesloaded" and place it under "sites/all/libraries". The plugin should
-now be located at "sites/all/libraries/jquery.imagesloaded/jquery.imagesloaded.min.js".
+"imagesloaded" and place it under "sites/all/libraries". The plugin should
+now be located at "sites/all/libraries/imagesloaded/jquery.imagesloaded.min.js"
 
 Please note that the 3.x version can also be used, but it depends on jQuery 1.5
 which can only be obtained by installing the jQuery Update module.
 
 Now download and extract the imgAreaSelect plugin, rename extracted folder to
-"jquery.imgareaselect" and copy it into "sites/all/libraries". The plugin should
-now be located at "sites/all/libraries/jquery.imgareaselect/jquery.imgareaselect.dev.js".
+"imgareaselect" and copy it into "sites/all/libraries". The plugin should
+now be located at "sites/all/libraries/imgareaselect/jquery.imgareaselect.dev.js".
 
 When finished you can activate the module via the Modules page!
 
diff --git a/manualcrop.install b/manualcrop.install
index fb225440..56a9f625 100644
--- a/manualcrop.install
+++ b/manualcrop.install
@@ -28,7 +28,7 @@ function manualcrop_requirements($phase) {
         $requirements[$name] = array(
           'title' => $info['name'],
           'value' => $t('Not installed'),
-          'description' => $t('Download and copy the <a href="@link">@name</a> library to %path.', array(
+          'description' => $info['error message'] . '<br />' . $t('Download and copy the <a href="@link">@name</a> library to %path.', array(
             '@link' => $info['vendor url'],
             '@name' => $info['name'],
             '%path' => 'sites/all/libraries/' . $name,
diff --git a/manualcrop.make.example b/manualcrop.make.example
index 8a48f310..15b573b9 100644
--- a/manualcrop.make.example
+++ b/manualcrop.make.example
@@ -13,10 +13,10 @@ api = 2
 
 ; imagesLoaded.
 libraries[jquery.imagesloaded][download][type] = file
-libraries[jquery.imagesloaded][download][url] = https://github.com/desandro/imagesloaded/archive/v2.1.2.tar.gz
-libraries[jquery.imagesloaded][download][subtree] = imagesloaded-2.1.2
+libraries[jquery.imagesloaded][download][url] = "https://github.com/desandro/imagesloaded/archive/v2.1.2.tar.gz"
+libraries[jquery.imagesloaded][download][subtree] = "imagesloaded-2.1.2"
 
 ; imgAreaSelect.
 libraries[jquery.imgareaselect][download][type] = file
-libraries[jquery.imgareaselect][download][url] = https://github.com/odyniec/imgareaselect/archive/v0.9.11-rc.1.tar.gz
-libraries[jquery.imgareaselect][download][subtree] = imgareaselect-0.9.11-rc.1
+libraries[jquery.imgareaselect][download][url] = "https://github.com/odyniec/imgareaselect/archive/v0.9.11-rc.1.tar.gz"
+libraries[jquery.imgareaselect][download][subtree] = "imgareaselect-0.9.11-rc.1"
diff --git a/manualcrop.module b/manualcrop.module
index 73d624e3..8bd60e30 100644
--- a/manualcrop.module
+++ b/manualcrop.module
@@ -104,23 +104,50 @@ function manualcrop_libraries_info() {
 
   $libraries['jquery.imagesloaded'] = array(
     'name' => 'imagesLoaded',
-    'vendor url' => 'https://github.com/desandro/imagesloaded/tree/v2.1.1',
+    'vendor url' => 'http://imagesloaded.desandro.com/',
+    'version callback' => 'imagesloaded_get_version',
     'version arguments' => array(
-      'file' => 'jquery.imagesloaded.js',
-      'pattern' => '# v([0-9\.]+)#',
-      'lines' => 5,
+      'pattern' => '#imagesLoaded.*v([0-9\.]+)#',
+      'lines' => 3,
       'cols' => 40,
     ),
-    'files' => array(
-      'js' => array(
-        'jquery.imagesloaded.min.js',
+    'versions' => array(
+      '2.1.2' => array(
+        'files' => array(
+          'js' => array(
+            'jquery.imagesloaded.min.js',
+          ),
+        ),
+        'variants' => array(
+          'source' => array(
+            'files' => array(
+              'js' => array(
+                'jquery.imagesloaded.js',
+              ),
+            ),
+          ),
+        ),
       ),
-    ),
-    'variants' => array(
-      'source' => array(
+      '3.1.5' => array(
         'files' => array(
           'js' => array(
-            'jquery.imagesloaded.js',
+            'imagesloaded.pkgd.min.js',
+          ),
+        ),
+        'variants' => array(
+          'packaged' => array(
+            'files' => array(
+              'js' => array(
+                'imagesloaded.pkgd.js',
+              ),
+            ),
+          ),
+          'source' => array(
+            'files' => array(
+              'js' => array(
+                'imagesloaded.js',
+              ),
+            ),
           ),
         ),
       ),
@@ -129,19 +156,33 @@ function manualcrop_libraries_info() {
 
   $libraries['jquery.imgareaselect'] = array(
     'name' => 'imgAreaSelect',
-    'vendor url' => 'https://github.com/odyniec/imgareaselect/tree/v0.9.11-rc.1',
+    'vendor url' => 'http://odyniec.net/projects/imgareaselect',
     'version arguments' => array(
       'file' => 'imgareaselect.jquery.json',
       'pattern' => '#"version"[\t ]*:[\t ]*"([^"]+)"#',
       'lines' => 6,
       'cols' => 40,
     ),
-    'files' => array(
-      'js' => array(
-        'jquery.imgareaselect.dev.js',
+    'versions' => array(
+      '0.9.11-rc.1' => array(
+        'files' => array(
+          'js' => array(
+            'jquery.imgareaselect.dev.js',
+          ),
+          'css' => array(
+            'distfiles/css/imgareaselect-animated.css',
+          ),
+        ),
       ),
-      'css' => array(
-        'distfiles/css/imgareaselect-animated.css',
+      '1.0.0-rc.1' => array(
+        'files' => array(
+          'js' => array(
+            'jquery.imgareaselect.min.js',
+          ),
+          'css' => array(
+            'distfiles/css/imgareaselect-animated.css',
+          ),
+        ),
       ),
     ),
   );
@@ -149,6 +190,41 @@ function manualcrop_libraries_info() {
   return $libraries;
 }
 
+/**
+ * Custom function to get imagesLoaded library version.
+ */
+function imagesloaded_get_version($library, $options) {
+  // Provide defaults.
+  $options += array(
+    'pattern' => '',
+    'lines' => 20,
+    'cols' => 200,
+  );
+
+  // Get list of possible filenames.
+  $filenames = array(
+    'jquery.imagesloaded.js',
+    'imagesloaded.pkgd.min.js',
+    'imagesloaded.pkgd.js',
+    'imagesloaded.js',
+  );
+
+  foreach ($filenames as $filename) {
+    $file = DRUPAL_ROOT . '/' . $library['library path'] . '/' . $filename;
+    if (file_exists($file)) {
+      $file = fopen($file, 'r');
+      while ($options['lines'] && $line = fgets($file, $options['cols'])) {
+        if (preg_match($options['pattern'], $line, $version)) {
+          fclose($file);
+          return $version[1];
+        }
+        $options['lines']--;
+      }
+      fclose($file);
+    }
+  }
+}
+
 /**
  * Implements hook_file_type_delete().
  */


