diff --git a/jquery.module b/jquery.module
index a68c577..866fbdd 100644
--- a/jquery.module
+++ b/jquery.module
@@ -8,8 +8,7 @@
 function jquery_init() {
   return;
   $name = 'jquery';
-  $library = libraries_info($name);
-  libraries_detect_library($library);
+  $library = libraries_detect($name);
   dsm($library);
   #libraries_load($name, 'minified');
 }
@@ -21,8 +20,7 @@ function jquery_library_alter(&$libraries, $module) {
   if ($module == 'system') {
     // @todo Abstract to conditionally replace all jQuery libraries in core.
     $name = 'jquery';
-    $library = libraries_info($name);
-    libraries_detect_library($library);
+    $library = libraries_detect($name);
 
     if ($library['installed']) {
       $libraries[$name]['version'] = $library['version'];
@@ -82,9 +80,12 @@ function jquery_libraries_info() {
     'version arguments' => array(
       'file' => 'jquery.js',
       // 1.4.3+: jQuery JavaScript Library v1.4.3
-      'pattern' => '/v((?:\d+\.?){2,3})$/',
+      'pattern' => '@ v([0-9a-zA-Z\.-]+)$@',
       'lines' => 2,
     ),
+    'callbacks' => array(
+      'prepare' => array('jquery_libraries_prepare'),
+    ),
   );
   $libraries['jquery']['variants'] = array(
     'minified' => array(
@@ -104,16 +105,40 @@ function jquery_libraries_info() {
   return $libraries;
 }
 
+function jquery_libraries_prepare(&$library, $version, $variant) {
+  static $files;
+
+  // Figure out the actual library file name.
+  if (!isset($files)) {
+    $dir = DRUPAL_ROOT . '/' . $library['library path'];
+    $files = file_scan_directory($dir, '@^jquery.*\.js$@', array(
+      'key' => 'filename',
+      'recurse' => FALSE,
+    ));
+    foreach ($files as $filename => $fileinfo) {
+      if (preg_match('@^jquery(?:-(?<version>[\d\.]+))?\.(?:(?<variant>[^\.]+)\.)?js$@', $filename, $matches)) {
+        $matches += array('version' => '', 'variant' => '');
+        $t = array(
+          'min' => 'minified',
+          '' => 'source',
+        );
+        debug($matches);
+      }
+    }
+  }
+  // The first found file is used for version detection.
+  if (isset($library['version arguments'])) {
+    $library['version arguments']['file'] = key($files);
+//    dpm($library);
+  }
+
+//  dpm(func_get_args());
+}
+
 /**
  * Libraries version callback for jQuery library.
  */
 function jquery_libraries_get_version(&$library, &$options) {
-  // Figure out the actual library file name.
-  $dir = DRUPAL_ROOT . '/' . $library['library path'];
-  $files = file_scan_directory($dir, '@^jquery.*\.js$@', array(
-    'key' => 'filename',
-    'recurse' => FALSE,
-  ));
   if (!empty($files)) {
     // Change 'version arguments' accordingly.
     $options['file'] = key($files);
