diff --git a/machine_name.info b/machine_name.info
index d57e7cf..74a0543 100644
--- a/machine_name.info
+++ b/machine_name.info
@@ -2,3 +2,4 @@ name = Machine name
 description = Provides a machine name field.
 package = Fields
 core = 7.x
+configure = admin/config/content
diff --git a/machine_name.install b/machine_name.install
index ff57ed1..88feac6 100644
--- a/machine_name.install
+++ b/machine_name.install
@@ -6,6 +6,14 @@
  */
 
 /**
+ * Implements hook_install().
+ */
+function machine_name_install() {
+  // Disable changes on a machine field initially.
+  variable_set('machine_name_allow_changes', FALSE);
+}
+
+/**
  * Implements hook_field_schema().
  */
 function machine_name_field_schema($field) {
diff --git a/machine_name.module b/machine_name.module
index 2457e8a..aabacbf 100644
--- a/machine_name.module
+++ b/machine_name.module
@@ -7,6 +7,23 @@
  */
 
 /**
+ * Implements hook_menu().
+ */
+function machine_name_menu() {
+  $items['admin/config/content/machine_name'] = array(
+    'title' => 'Machine Name',
+    'description' => 'Adjust Machine Name settings.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('machine_name_admin_settings'),
+    'access arguments' => array('administer site configuration'),
+    'type' => MENU_NORMAL_ITEM,
+    'file' => 'machine_name.admin.inc',
+  );
+
+  return $items;
+}
+
+/**
  * Implements hook_field_info().
  */
 function machine_name_field_info() {
@@ -61,7 +78,7 @@ function machine_name_field_widget_form(&$form, &$form_state, $field, $instance,
 
   // Machine names cannot be edited if there is a value. The only exception is
   // when previewing a new entity.
-  $disabled = TRUE;
+  $disabled = (variable_get('machine_name_allow_changes') === FALSE ? TRUE : FALSE);
   if (!isset($items[$delta]) || machine_name_field_is_empty($items[$delta], $field)) {
     $disabled = FALSE;
   }
