diff --git a/src/Hook/CourseMembershipHooksBase.php b/src/Hook/CourseMembershipHooksBase.php
index 750ff10666768296eab74cdbb4441fadd83e3f45..790e01f7e32dd51c5e08abb184b5921a6d4e447e 100644
--- a/src/Hook/CourseMembershipHooksBase.php
+++ b/src/Hook/CourseMembershipHooksBase.php
@@ -42,17 +42,12 @@ abstract class CourseMembershipHooksBase {
       return;
     }
 
-    // Roles selected - don't do anything.
-    $roles = $form_state->getValue('group_roles');
-    if (\is_array($roles) && \count(\array_filter($roles)) > 0) {
-      return;
-    }
-
     $class_id = (string) $form_state->getValue('class');
     if ($class_id === '' || $class_id === '0') {
       return;
     }
 
+    $form_state->setValue('group_roles', []);
     $user_id = $form_state->getValue(['entity_id', '0', 'target_id']);
     $potential_member = $this->entityTypeManager->getStorage('user')->load($user_id);
     if ($course->isClassMember($potential_member)) {
@@ -89,6 +84,14 @@ abstract class CourseMembershipHooksBase {
       '#description' => $self_join ? $this->t('You will be added to the selected class.') : $this->t('Student will be added to the selected class.'),
       '#options' => $options,
     ];
+
+    if (\array_key_exists('group_roles', $form)) {
+      $form['group_roles']['#states'] = [
+        'visible' => [
+          'select[name=class]' => ['value' => '0'],
+        ],
+      ];
+    }
   }
 
   /**
diff --git a/src/Hook/LmsCourseMembershipHooks.php b/src/Hook/LmsCourseMembershipHooks.php
index 62e956de8856ac3dbbb09611cf2522095cc8cc83..2ed04f15806e79735b4a39b679fcac0afaeaf42d 100644
--- a/src/Hook/LmsCourseMembershipHooks.php
+++ b/src/Hook/LmsCourseMembershipHooks.php
@@ -55,10 +55,10 @@ final class LmsCourseMembershipHooks extends CourseMembershipHooksBase {
     if ($self_join) {
       $form['actions']['submit']['#value'] = $this->t('Join training');
     }
-    $form['#validate'][] = [
+    \array_unshift($form['#validate'], [
       $this,
       'membershipFormValidate',
-    ];
+    ]);
 
     $this->addClassSelector($form, $course, $self_join);