diff --git a/uuid_path/uuid_path.info b/uuid_path/uuid_path.info
index e69de29..6825e42 100644
--- a/uuid_path/uuid_path.info
+++ b/uuid_path/uuid_path.info
@@ -0,0 +1,7 @@
+name = UUID Path
+description = UUID handler for URL aliases.
+core = 7.x
+package = uuid
+
+dependencies[] = uuid
+dependencies[] = path
diff --git a/uuid_path/uuid_path.install b/uuid_path/uuid_path.install
index e69de29..02491ff 100644
--- a/uuid_path/uuid_path.install
+++ b/uuid_path/uuid_path.install
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the uuid_path module.
+ */
+
+// Include UUID schema helper functions.
+module_load_include('inc', 'uuid', 'uuid.schema');
+
+/**
+ * Implements hook_enable().
+ */
+function uuid_path_enable() {
+  uuid_path_uuid_sync();
+}
+
+/**
+ * Implements hook_schema_alter().
+ */
+function uuid_path_schema_alter(&$schema) {
+  uuid_schema_generate($schema, 'url_alias');
+}
+
+/**
+ * Implements hook_install().
+ */
+function uuid_path_install() {
+  $schema = array(
+    'url_alias' => array(),
+  );
+
+  uuid_path_schema_alter($schema);
+
+  uuid_add_field($schema, 'url_alias');
+}
+
+/**
+ * Implements hook_uninstall().
+ */
+function uuid_path_uninstall() {
+  $schema = array(
+    'url_alias' => array(),
+  );
+
+  uuid_path_schema_alter($schema);
+
+  uuid_drop_field($schema, 'url_alias');
+}
diff --git a/uuid_path/uuid_path.module b/uuid_path/uuid_path.module
index e69de29..477c832 100644
--- a/uuid_path/uuid_path.module
+++ b/uuid_path/uuid_path.module
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Add a UUID to a URL Alias.
+ *
+ * @param
+ *  $path The path array to add the UUID to. Should contain the pid and uuid.
+ *
+ * @return
+ *   1 if already set or the number of rows affected - should always be 1.
+ */
+function uuid_path_add_uuid($path) {
+  if (!empty($path['uuid'])) {
+    return 1;
+  }
+
+  return db_update('url_alias')
+    ->fields(array('uuid' => uuid_uuid()))
+    ->condition('pid', $path['pid'])
+    ->execute();
+}
+
+/**
+ * Implements hook_path_insert().
+ */
+function uuid_path_path_insert($path) {
+  uuid_path_add_uuid($path);
+}
+
+/**
+ * Implements hook_path_update().
+ */
+function uuid_path_path_update($path) {
+  uuid_path_add_uuid($path);
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function uuid_path_form_path_admin_form_alter(&$form, &$form_state, $form_id) {
+  // Preserve the existing UUID if we have one.
+  if (isset($form_state['build_info']['args'][0]['uuid'])) {
+    $form['uuid'] = array(
+      '#type' => 'value',
+      '#value' => $form_state['build_info']['args'][0]['uuid'],
+    );
+  }
+}
+
+/**
+ * Finds a path by its UUID.
+ */
+function uuid_path_find($uuid) {
+  module_load_include('inc', 'uuid');
+  return uuid_find($uuid, 'path', 'pid');
+}
+
+/**
+ * Ensures all paths have a UUID.
+ */
+function uuid_path_uuid_sync() {
+  module_load_include('inc', 'uuid');
+  uuid_sync('url_alias', 'pid');
+}
