diff --git content_security_policy.admin.inc content_security_policy.admin.inc
index 4a6da7b..68d08cb 100755
--- content_security_policy.admin.inc
+++ content_security_policy.admin.inc
@@ -19,7 +19,7 @@ function content_security_policy_overview_page($form, &$form_state) {
       $options[$policy->pid]['title'] = check_plain($policy->title);
       $options[$policy->pid]['mode'] = $policy->mode == CONTENT_SECURITY_POLICY_MODE_REPORT_ONLY ?t('Report only') : t('Full (enforce and report)');
       $options[$policy->pid]['operations'] = array(
-        'data' => l(t('edit policy'), 'admin/config/people/content-security-policy/' . $policy->pid . '/edit') . ' ' . l(t('delete policy'), 'admin/config/people/content-security-policy/' . $policy->pid . '/delete'),
+        'data' => l(t('edit policy'), 'admin/config/people/content-security-policy/' . $policy->name . '/edit') . ' ' . l(t('delete policy'), 'admin/config/people/content-security-policy/' . $policy->name . '/delete'),
       );
     }
   
@@ -61,6 +61,19 @@ function content_security_policy_add_form($form, &$form_state) {
     '#required' => TRUE,
   );
 
+  $form['name'] = array(
+    '#type' => 'machine_name',
+    '#title' => t('Policy name'),
+    '#maxlength' => 255,
+    '#description' => t('A unique name for the policy. It must only contain lowercase letters, numbers and hyphens.'),
+    '#machine_name' => array(
+      'exists' => 'content_security_policy_name_load',
+      'source' => array('title'),
+      'replace_pattern' => '[^a-z0-9-]+',
+      'replace' => '-',
+    ),
+  );
+
   $form['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
@@ -80,11 +93,12 @@ function content_security_policy_add_form($form, &$form_state) {
 function content_security_policy_add_form_submit($form, &$form_state) {
   $result = db_insert('content_security_policy')
     ->fields(array(
+      'name' => $form_state['values']['name'],
       'title' => $form_state['values']['title'],
       'description' => $form_state['values']['description'],
   ))->execute();
 
-  $form_state['redirect'] = 'admin/config/people/content-security-policy/' . $result . '/edit'; 
+  $form_state['redirect'] = 'admin/config/people/content-security-policy/' . $form_state['values']['name'] . '/edit'; 
 }
 
 function content_security_policy_edit_form($form, &$form_state, $policy) {
@@ -99,6 +113,20 @@ function content_security_policy_edit_form($form, &$form_state, $policy) {
     '#default_value' => $policy->title,
     '#required' => TRUE,
   );
+  $form['name'] = array(
+    '#type' => 'machine_name',
+    '#title' => t('Policy name'),
+    '#maxlength' => 255,
+    '#default_value' => $policy->name,
+    '#disabled' => TRUE,
+    '#description' => t('A unique name for the policy. It must only contain lowercase letters, numbers and hyphens.'),
+    '#machine_name' => array(
+      'exists' => 'content_security_policy_name_load',
+      'source' => array('title'),
+      'replace_pattern' => '[^a-z0-9-]+',
+      'replace' => '-',
+    ),
+  );
 
   $form['description'] = array(
     '#type' => 'textarea',
diff --git content_security_policy.install content_security_policy.install
index cf056f6..345459d 100755
--- content_security_policy.install
+++ content_security_policy.install
@@ -13,6 +13,12 @@ function content_security_policy_schema() {
           'unsigned' => TRUE,
           'not null' => TRUE,
         ),
+        'name' => array(
+          'description' => 'A unique machine name for this content security policy.',
+          'type' => 'varchar',
+          'length' => 255,
+          'not null' => TRUE,
+        ),
         'title' => array(
           'description' => 'The human-readable name of this policy.',
           'type' => 'varchar',
@@ -40,6 +46,9 @@ function content_security_policy_schema() {
         ),
       ),
       'primary key' => array('pid'),
+      'unique keys' => array(
+        'name' => array('name'),
+      ),
     ),
   );
 }
\ No newline at end of file
diff --git content_security_policy.module content_security_policy.module
index e2f7d55..d52997f 100755
--- content_security_policy.module
+++ content_security_policy.module
@@ -75,7 +75,7 @@ function content_security_policy_menu() {
     'type' => MENU_LOCAL_TASK,
     'weight' => 1, 
   );
-  $items['admin/config/people/content-security-policy/%content_security_policy/edit'] = array(
+  $items['admin/config/people/content-security-policy/%content_security_policy_name/edit'] = array(
     'title' => 'Edit policy',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('content_security_policy_edit_form', 4),
@@ -83,7 +83,7 @@ function content_security_policy_menu() {
     'access arguments' => array('administer content security policies'),
     'file' => 'content_security_policy.admin.inc',
   );
-  $items['admin/config/people/content-security-policy/%content_security_policy/delete'] = array(
+  $items['admin/config/people/content-security-policy/%content_security_policy_name/delete'] = array(
     'title' => 'Delete policy',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('content_security_policy_delete_form', 4),
@@ -239,7 +239,7 @@ function content_security_policy_save($policy_name, $policy) {
 }
 
 /**
- * Retrieves a policy.
+ * Retrieves a policy based on the policy's id.
  * 
  * param $pid
  *   The policy id for the policy to load.
@@ -256,6 +256,25 @@ function content_security_policy_load($pid) {
   return $result;
 }
 
+/**
+ * Retrieves a policy based on the policy's machine name.
+ * 
+ * param $name
+ *   The policy's machine name.
+ * 
+ * returns
+ *   A content security policy object representing the requested policy, or 
+ *   FALSE if the policy does not exist or could not be loaded. 
+ */
+function content_security_policy_name_load($name) {
+  $result = db_query('SELECT * FROM {content_security_policy} WHERE name = :name', array(':name' => $name), array('fetch' => PDO::FETCH_OBJ))->fetch();
+  if ($result) {
+    $result->data = unserialize($result->data);
+  }
+  return $result;
+}
+
+
 function _content_security_policy_to_string($policy) {
   $directives = array();
 
