diff --git a/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php b/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php
index 74e305209c..0d91d16070 100644
--- a/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php
+++ b/core/modules/content_moderation/src/Plugin/Field/FieldWidget/ModerationStateWidget.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\content_moderation\Plugin\Field\FieldWidget;
 
+use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
@@ -165,11 +166,37 @@ public static function updateStatus($entity_type_id, ContentEntityInterface $ent
    * Process callback to alter action buttons.
    */
   public static function processActions($element, FormStateInterface $form_state, array &$form) {
+    // Get the part of the form which contains the entity being moderated.Ø
+    $parents = $element['#array_parents'];
+
+    // All the child entity refences will have moderation states
+    if(in_array('inline_entity_form', $parents, TRUE)) {
+        $inline_form_keys = array_keys($parents, 'inline_entity_form', TRUE);
+        $form_entity_path = array_slice($parents, 0, $inline_form_keys[count($inline_form_keys) - 1] + 1);
+    } else {
+        $form_entity_path = [];
+    }
+    //$form_entity_path = in_array('inline_entity_form', $parents, TRUE) ? array_slice($parents, 0, array_search('inline_entity_form', $parents, TRUE) + 1) : [];
+
+    $form_entity = &NestedArray::getValue($form, $form_entity_path);
+
+    $possible_save_keys = [
+      'ief_add_save',
+      'ief_edit_save',
+      'submit',
+    ];
+    $save_button_key = FALSE;
+    foreach ($possible_save_keys as $possible_save_key) {
+      if (isset($form_entity['actions'][$possible_save_key])) {
+        $save_button_key = $possible_save_key;
+        break;
+      }
+    }
 
     // We'll steal most of the button configuration from the default submit
     // button. However, NodeForm also hides that button for admins (as it adds
     // its own, too), so we have to restore it.
-    $default_button = $form['actions']['submit'];
+    $default_button = $save_button_key ? $form_entity['actions'][$save_button_key] : [];
     $default_button['#access'] = TRUE;
 
     // Add a custom button for each transition we're allowing. The #dropbutton
@@ -189,19 +216,19 @@ public static function processActions($element, FormStateInterface $form_state,
         ? t('Save and @transition (this translation)', ['@transition' => $label])
         : t('Save and @transition', ['@transition' => $label]);
 
-      $form['actions']['moderation_state_' . $id] = $button + $default_button;
+      $form_entity['actions']['moderation_state_' . $id] = $button + $default_button;
     }
 
     // Hide the default buttons, including the specialty ones added by
     // NodeForm.
-    foreach (['publish', 'unpublish', 'submit'] as $key) {
-      $form['actions'][$key]['#access'] = FALSE;
-      unset($form['actions'][$key]['#dropbutton']);
+    foreach (['publish', 'unpublish', 'submit', 'ief_add_save', 'ief_edit_save'] as $key) {
+      $form_entity['actions'][$key]['#access'] = FALSE;
+      unset($form_entity['actions'][$key]['#dropbutton']);
     }
 
     // Setup a callback to translate the button selection back into field
     // widget, so that it will get saved properly.
-    $form['#entity_builders']['update_moderation_state'] = [get_called_class(), 'updateStatus'];
+    $form_entity['#entity_builders']['update_moderation_state'] = [get_called_class(), 'updateStatus'];
     return $element;
   }
 
