diff --git a/config/schema/regcode.schema.yml b/config/schema/regcode.schema.yml
index af0558d8e199a85f99603cb7d9d2407d0c2eecdc..cea6462c42fb510d0957036a5002e3e32e1535ed 100644
--- a/config/schema/regcode.schema.yml
+++ b/config/schema/regcode.schema.yml
@@ -2,6 +2,12 @@ regcode.settings:
   type: config_object
   label: Settings
   mapping:
+    regcode_field_title:
+      type: label
+      label: 'Field label'
+    regcode_field_description:
+      type: text
+      label: 'Field description'
     regcode_optional:
       type: boolean
       label: 'Make registration code optional'
@@ -11,9 +17,3 @@ regcode.settings:
     regcode_generate_case:
       type: boolean
       label: 'Convert generated codes to uppercase'
-    regcode_field_title:
-      type: label
-      label: 'Field label'
-    regcode_field_description:
-      type: text
-      label: 'Field description'
diff --git a/src/Form/RegcodeAdminCreateForm.php b/src/Form/RegcodeAdminCreateForm.php
index b3f8a18914d501d13f66327ab4423d4cb8c770ea..42fa182f9918eeceb082b50d970fe11e2be30d64 100644
--- a/src/Form/RegcodeAdminCreateForm.php
+++ b/src/Form/RegcodeAdminCreateForm.php
@@ -69,17 +69,19 @@ class RegcodeAdminCreateForm extends FormBase {
     ];
 
     $form['regcode_create']['regcode_create_maxuses'] = [
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => $this->t('Maximum uses'),
       '#description' => $this->t('How many times this code can be used to register (enter 0 for unlimited).'),
+      '#min' => 0,
       '#size' => 10,
       '#default_value' => 1,
       '#required' => TRUE,
     ];
 
     $form['regcode_create']['regcode_create_length'] = [
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => $this->t('Code size'),
+      '#min' => 1,
       '#size' => 10,
       '#default_value' => 12,
     ];
@@ -134,8 +136,9 @@ class RegcodeAdminCreateForm extends FormBase {
     ];
 
     $form['regcode_create_bulk']['regcode_create_number'] = [
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => $this->t('Number of codes to generate'),
+      '#min' => 1,
       '#size' => 10,
       '#default_value' => 1,
     ];
@@ -149,12 +152,20 @@ class RegcodeAdminCreateForm extends FormBase {
   }
 
   /**
-   * {@inheritdoc}
+   * An #element_validate callback to ensure a blank date validates.
    */
-  public function validateForm(array &$form, FormStateInterface $form_state) {
-    if (!is_numeric($form_state->getValue(['regcode_create_maxuses'])) || $form_state->getValue(['regcode_create_maxuses']) < 0) {
-      $form_state->setErrorByName('regcode_create_maxuses', $this->t('Invalid maxuses, specify a positive integer or enter "0" for unlimited'));
+  public function validateDate(array &$element, FormStateInterface $form_state) {
+    if (isset($element['#value']) && !empty($element['#value'])) {
+      $date  = strtotime($element['#value']);
+      $day   = date('d', $date);
+      $month = date('m', $date);
+      $year  = date('Y', $date);
+      if (!checkdate($month, $day, $year)) {
+        $form_state->setError($element, $this->t('The specified date is invalid.'));
+      }
     }
+
+    return $element;
   }
 
   /**
@@ -188,7 +199,7 @@ class RegcodeAdminCreateForm extends FormBase {
 
       // Generate a code.
       if (empty($code->code) || $form_state->getValue(['regcode_create_number']) > 1) {
-        $gen = $this->registrationCode->generate($form_state->getValue(['regcode_create_length']), $form_state->getValue(['regcode_create_format']), $form_state->getValue(['regcode_create_case']));
+        $gen = $this->registrationCode->generate((int) $form_state->getValue(['regcode_create_length']), $form_state->getValue(['regcode_create_format']), (bool) $form_state->getValue(['regcode_create_case']));
         $code->code .= $gen;
       }
 
@@ -206,21 +217,4 @@ class RegcodeAdminCreateForm extends FormBase {
     }
   }
 
-  /**
-   * Ensures a blank date validates.
-   */
-  public function validateDate(array &$element, FormStateInterface $form_state) {
-    if (isset($element['#value']) && !empty($element['#value'])) {
-      $date  = strtotime($element['#value']);
-      $day   = date('d', $date);
-      $month = date('m', $date);
-      $year  = date('Y', $date);
-      if (!checkdate($month, $day, $year)) {
-        $form_state->setError($element, $this->t('The specified date is invalid.'));
-      }
-    }
-
-    return $element;
-  }
-
 }