diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5560ee8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,22 @@
+Overview
+--------
+This module provides a way to autosave data entered in any Drupal form without actually submitting the form, which helps if the user is writing an article or a comment and the browser crashed or the power went down, or even if the window was closed accidently.
+
+It works using the [jQuery Sisyphus plugin](http://sisyphus-js.herokuapp.com/), which is a lightweight jQuery plugin that uses Local Storage to save form fields every specific time span that is configurable from the module settings page.
+
+Installation Instructions
+-------------------------
+* Install the other modules that this one depends upon. Follow these contrib module installation instructions if you're new to this kind of thing: https://drupal.org/documentation/install/modules-themes/modules-7
+    * jQuery Update: https://drupal.org/project/jquery_update
+    * Libraries API: https://drupal.org/project/libraries
+* Download the Javascript libraries.
+    * First, make sure that the sites/all/libraries directory exists.
+    * Download the two JS libraries to the sites/all/libraries directory:
+        * Sisyphus: https://github.com/compujohnny/sisyphus/archive/master.zip
+        * jStorage: https://github.com/compujohnny/jStorage/archive/master.zip
+    * Extract both zip files.
+    * Rename both directories to remove -master. The directories should be called sisyphus and jStorage.
+* Enable the Save Form State module from the Modules list, at admin/modules
+* Configure jQuery Update to use version 1.7 or above. The configuration can be found at admin/config/development/jquery_update.
+* Configure the Save Form State module options at admin/config/content/form_save_state.
+* Navigate to the forms you choose in the previous step and enjoy the safety of your data.
diff --git a/form_save_state.info b/form_save_state.info
index 4a9c2d5..06e5f9d 100755
--- a/form_save_state.info
+++ b/form_save_state.info
@@ -4,5 +4,6 @@ package = Other
 configure = admin/config/content/form_save_state
 
 dependencies[] = jquery_update
+dependencies[] = libraries
 
 core = 7.x
diff --git a/form_save_state.install b/form_save_state.install
index 30c4411..fd236df 100644
--- a/form_save_state.install
+++ b/form_save_state.install
@@ -24,3 +24,13 @@ function form_save_state_update_7001() {
   variable_set('sisyphus_forms', $forms);
   variable_del('sisphus_forms');
 }
+
+/**
+ * Ensure that the Libraries module is enabled on sites that were using this
+ * module before Libraries was added as a dependency.
+ */
+function form_save_state_update_7002() {
+  if (!module_exists('libraries')) {
+    module_enable(array('libraries'));
+  }
+}
diff --git a/form_save_state.module b/form_save_state.module
index 0489da4..76d91a5 100755
--- a/form_save_state.module
+++ b/form_save_state.module
@@ -6,16 +6,6 @@
  */
 
 /**
- * Implements hook_init().
- */
-function form_save_state_init() {
-  drupal_add_js(drupal_get_path('module', 'form_save_state') . '/jquery.jnotify.min.js');
-  drupal_add_css(drupal_get_path('module', 'form_save_state') . '/jquery.jnotify.min.css');
-  drupal_add_js(drupal_get_path('module', 'form_save_state') . '/jstorage.js');
-  drupal_add_js(drupal_get_path('module', 'form_save_state') . '/sisyphus.js');
-}
-
-/**
  * Implements hook_menu().
  */
 function form_save_state_menu() {
@@ -39,17 +29,24 @@ function form_save_state_menu() {
  */
 function form_save_state_form_alter(&$form, &$form_state, $form_id) {
   $sisyphus_forms = variable_get('sisyphus_forms', array());
-  $form_save_state_time = variable_get('form_save_state_time', 15);
-  // add support for disabling notify messages
-  $form_save_state_notify = variable_get('form_save_state_notify', 1);
   if (in_array($form_id, $sisyphus_forms)) {
     $form_id = array_search($form_id, $sisyphus_forms);
     $form_id = str_replace('_', '-', $form_id);
-    drupal_add_js(array('form_save_state' => array('form_id' => $form_id)), 'setting');
-    drupal_add_js(array('form_save_state' => array('time' => $form_save_state_time)), 'setting');
-    // add support for disabling notify messages
-    drupal_add_js(array('form_save_state' => array('notify' => $form_save_state_notify)), array('type' => 'setting'));
-    drupal_add_js(drupal_get_path('module', 'form_save_state') . '/form_save_state.js');
+
+    $settings = array(
+      'form_id' => $form_id,
+      'time' => variable_get('form_save_state_time', 15),
+      'notify' => variable_get('form_save_state_notify', 1),
+    );
+    drupal_add_js(array('form_save_state' => $settings), 'setting');
+
+    if ($settings['notify']) {
+      drupal_add_js(drupal_get_path('module', 'form_save_state') . '/jquery.jnotify.min.js');
+      drupal_add_css(drupal_get_path('module', 'form_save_state') . '/jquery.jnotify.min.css');
+    }
+
+    // Load the Sisyphus library
+    $lib = libraries_load('sisyphus', 'minified');
   }
 }
 
@@ -151,3 +148,69 @@ function form_save_state_get_form_ids_form_submit($form, &$form_state) {
   // add support for disabling notify messages
   variable_set('form_save_state_notify', $form_state['values']['notify']);
 }
+
+
+/**
+ * Implements hook_libraries_info().
+ */
+function form_save_state_libraries_info() {
+  $libraries = array();
+
+  $libraries['jStorage'] = array(
+    'name' => 'jStorage',
+    'vendor url' => 'http://www.jstorage.info/',
+    'download url' => 'https://github.com/compujohnny/jStorage/archive/master.zip',
+    // JS file to include
+    'files' => array(
+      'js' => array('jstorage.js'),
+    ),
+    // Minified variant
+    'variants' => array(
+      'minified' => array(
+        'files' => array(
+          'js' => array('jstorage.min.js'),
+        ),
+      ),
+    ),
+    'version arguments' => array(),
+    'version callback' => 'form_save_state_library_version',
+  );
+
+  $libraries['sisyphus'] = array(
+    'name' => 'Sisyphus',
+    'vendor url' => 'http://sisyphus-js.herokuapp.com',
+    'download url' => 'https://github.com/compujohnny/sisyphus/archive/master.zip',
+    'dependencies' => array('jStorage'),
+    // JS file to include
+    'files' => array(
+      'js' => array('sisyphus.js'),
+    ),
+    // Minified variant
+    'variants' => array(
+      'minified' => array(
+        'files' => array(
+          'js' => array('sisyphus.min.js'),
+        ),
+      ),
+    ),
+    // Include this module's JS on top of Sisyphus
+    'integration files' => array(
+      'form_save_state' => array(
+        'js' => array('form_save_state.js'),
+      ),
+    ),
+    'version arguments' => array(),
+    'version callback' => 'form_save_state_library_version',
+  );
+
+  return $libraries;
+}
+
+
+/**
+ * Callback for Library version. Just return 1, since the Library needs a
+ * version to load properly.
+ */
+function form_save_state_library_version($library, $options) {
+  return '1';
+}
