diff --git a/src/Element/AddressField.php b/src/Element/AddressField.php
index 404a32358f8bac0a7cdb40c8d3b359103e88a198..133fc827478e25173c962b2ce0fdf0b73c9dce9c 100644
--- a/src/Element/AddressField.php
+++ b/src/Element/AddressField.php
@@ -121,7 +121,7 @@ class AddressField extends FormElement {
           '#default_value' => isset($value[$property]) ? $value[$property] : '',
           '#required' => isset($property_dict['required']) ? $property_dict['required'] : FALSE,
           '#access' => isset($property_dict['access']) ? $property_dict['access'] : TRUE,
-
+          '#disabled' => isset($property_dict['disabled']) ? $property_dict['disabled'] : FALSE,
           // '#size' => $definition['size'],
           // '#attributes' => [
           // 'class' => [$class],
@@ -148,18 +148,28 @@ class AddressField extends FormElement {
    * {@inheritdoc}
    */
   public static function valueCallback(&$element, $input, FormStateInterface $form_state) {
-    $r = parent::valueCallback($element, $input, $form_state);
+    $address = $element['#default_value'];
+    if (!$input) {
+      return $address;
+    }
 
-    $properties = AddressFieldType::getDefinition();
-    $format = AddressFieldType::getFormat();
+    $format = AddressFieldType::getFormat($element['#address_options']);
     foreach ($format as $line_index => $format_line) {
-      foreach ($properties as $property => $property_definition) {
-        if (isset($input["container{$line_index}"][$property])) {
-          $r[$property] = $input["container{$line_index}"][$property];
+      foreach ($format_line as $property_dict) {
+        $property = $property_dict['name'];
+        $definition = $properties[$property];
+
+        if ((!isset($definition['access']) || $definition['access']) &&
+          (!isset($definition['disabled']) || !$definition['disabled'])) {
+
+          if (isset($input["container{$line_index}"][$property])) {
+            $address[$property] = $input["container{$line_index}"][$property];
+          }
         }
       }
     }
-    return $r;
+
+    return $address;
   }
 
 }
diff --git a/src/Plugin/Field/FieldType/AddressFieldType.php b/src/Plugin/Field/FieldType/AddressFieldType.php
index 2f3be58818bf7b14ebc56dd745c80de806f76ff7..0dff04e7c7d6758ed6393b1ff02789c4b64738eb 100644
--- a/src/Plugin/Field/FieldType/AddressFieldType.php
+++ b/src/Plugin/Field/FieldType/AddressFieldType.php
@@ -24,7 +24,6 @@ class AddressFieldType extends FieldItemBase {
    * Get address format description.
    */
   public static function getFormat($options = NULL) {
-
     return [
       [
         [
@@ -32,6 +31,7 @@ class AddressFieldType extends FieldItemBase {
           'flex' => 12,
           'required' => (isset($options['organization']) && $options['organization']),
           'access' => (isset($options['organization']) && $options['organization']),
+          'disabled' => (isset($options['disable-name']) && $options['disable-name']),
         ],
       ],
       [
@@ -39,11 +39,13 @@ class AddressFieldType extends FieldItemBase {
           'name' => 'given_name',
           'flex' => 6,
           'required' => (!isset($options['organization']) || !$options['organization']),
+          'disabled' => (isset($options['disable-name']) && $options['disable-name']),
         ],
         [
           'name' => 'family_name',
           'flex' => 6,
           'required' => (!isset($options['organization']) || !$options['organization']),
+          'disabled' => (isset($options['disable-name']) && $options['disable-name']),
         ],
       ],
       [