diff --git a/libraries.install b/libraries.install
new file mode 100644
index 0000000..b285a31
--- /dev/null
+++ b/libraries.install
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Install, uninstall, and update functions for libraries.module.
+ */
+
+/**
+ * Implements hook_schema().
+ */
+function libraries_schema() {
+  $schema['cache_libraries'] = drupal_get_schema_unprocess('system', 'cache');
+  $schema['cache_libraries']['description'] = 'Cache table to store library information';
+  return $schema;
+}
diff --git a/libraries.module b/libraries.module
index 7bacfdc..62a5ee9 100644
--- a/libraries.module
+++ b/libraries.module
@@ -230,8 +230,9 @@ function libraries_info($name = NULL) {
  * @see libraries_info()
  */
 function libraries_detect($libraries) {
-  foreach ($libraries as &$library) {
+  foreach ($libraries as $name => &$library) {
     libraries_detect_library($library);
+    cache_set($name, $library, 'cache_libraries');
   }
   return $libraries;
 }
@@ -359,8 +360,15 @@ function libraries_load($name, $variant = NULL) {
   $loaded = &drupal_static(__FUNCTION__, array());
 
   if (!isset($loaded[$name])) {
-    $library = libraries_info($name);
-    libraries_detect_library($library);
+    $library = cache_get($name, 'cache_libraries');
+    if ($library) {
+      $library = $library->data;
+    }
+    else {
+      $library = libraries_info($name);
+      libraries_detect_library($library);
+      cache_set($name, $library, 'cache_libraries');
+    }
 
     // If a variant was specified, override the top-level properties with the
     // variant properties.
