diff --git a/changelog.txt b/changelog.txt
index 6b6532c4595af1b0d63b7f7965c6f1d0e00d7526..401c33a4f55e7c52b6707f3ad932483f003c678b 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,5 +1,12 @@
 # Changelog
 
+## [2.0.4] - 2020-06-24
+### Added
+- new button form field
+- new input type number form field
+### Changed
+- fixed nonce template
+
 ## [2.0.3] - 2020-06-22
 ### Added
 - css class in JSON renderer
diff --git a/src/Field/ButtonField.php b/src/Field/ButtonField.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba31ead7ddd3f15f074f5d0d93d279fba3700459
--- /dev/null
+++ b/src/Field/ButtonField.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace DropshippingXmlVendor\WPDesk\Forms\Field;
+
+class ButtonField extends \DropshippingXmlVendor\WPDesk\Forms\Field\NoValueField
+{
+    public function get_template_name()
+    {
+        return 'button';
+    }
+    public function get_type()
+    {
+        return 'button';
+    }
+}
diff --git a/src/Field/InputNumberField.php b/src/Field/InputNumberField.php
new file mode 100644
index 0000000000000000000000000000000000000000..898cef6e7d4783215d5dfe6881c83138660b095d
--- /dev/null
+++ b/src/Field/InputNumberField.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace DropshippingXmlVendor\WPDesk\Forms\Field;
+
+use DropshippingXmlVendor\WPDesk\Forms\Sanitizer\TextFieldSanitizer;
+class InputNumberField extends \DropshippingXmlVendor\WPDesk\Forms\Field\BasicField
+{
+    public function __construct()
+    {
+        parent::__construct();
+        $this->set_default_value('');
+        $this->set_attribute('type', 'number');
+    }
+    public function get_sanitizer()
+    {
+        return new \DropshippingXmlVendor\WPDesk\Forms\Sanitizer\TextFieldSanitizer();
+    }
+    public function get_template_name()
+    {
+        return 'input-number';
+    }
+}
diff --git a/templates/button.php b/templates/button.php
new file mode 100644
index 0000000000000000000000000000000000000000..43c21190ad4326181dd29fd4a45f930642a7cc26
--- /dev/null
+++ b/templates/button.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @var \WPDesk\Forms\Field $field
+ * @var \WPDesk\View\Renderer\Renderer $renderer
+ * @var string $name_prefix
+ * @var string $value
+ *
+ * @var string $template_name Real field template.
+ *
+ */
+?>
+
+<button
+<?php if ($field->has_classes()): ?>
+	class="<?php echo \esc_attr($field->get_classes()); ?>"
+<?php endif; ?>
+
+<?php foreach ($field->get_attributes([]) as $key => $val): ?>
+	<?php echo $key.'="'.\esc_attr($val).'"'; ?>
+<?php endforeach; ?>
+
+	type="<?php echo \esc_attr($field->get_type()); ?>"
+	name="<?php echo \esc_attr($name_prefix).'['.\esc_attr($field->get_name()).']'?>"
+	id="<?php echo \esc_attr($field->get_id()); ?>"
+	value="<?php echo \esc_html($value); ?>"
+
+	<?php if ($field->is_required()): ?>required="required"<?php endif; ?>
+	<?php if ($field->is_disabled()): ?>disabled="disabled"<?php endif; ?>
+	<?php if ($field->is_readonly()): ?>readonly="readonly"<?php endif; ?>
+
+><?php echo \esc_html($field->get_label()); ?></button>
diff --git a/templates/input-number.php b/templates/input-number.php
new file mode 100644
index 0000000000000000000000000000000000000000..7dea70268a228dd4633706c03d931b613e93a9f1
--- /dev/null
+++ b/templates/input-number.php
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * @var \WPDesk\Forms\Field $field
+ * @var \WPDesk\View\Renderer\Renderer $renderer
+ * @var string $name_prefix
+ * @var string $value
+ *
+ * @var string $template_name Real field template.
+ *
+ */
+echo $renderer->render('input', ['field' => $field, 'renderer' => $renderer, 'name_prefix' => $name_prefix, 'value' => $value]);
diff --git a/templates/input.php b/templates/input.php
index bad044ee6c41ea0163d952a6adc247ef981c016b..b02e5eaccb625c0a3b0d0c1302e97e3eb8064da4 100644
--- a/templates/input.php
+++ b/templates/input.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * @var \WPDesk\Forms\Field $field
  * @var string $name_prefix
@@ -6,39 +7,42 @@
  */
 ?>
 
-<?php if ( ! in_array( $field->get_type(), [ 'text', 'hidden' ] ) ): ?>
-	<input type="hidden" name="<?php echo $name_prefix; ?>[<?php echo $field->get_name(); ?>]" value="no"/>
+<?php if (!\in_array($field->get_type(), ['number', 'text', 'hidden'])): ?>
+	<input type="hidden" name="<?php echo $name_prefix.'['.$field->get_name().']'; ?>" value="no"/>
 <?php endif; ?>
 
-<?php if ( $field->get_type() === 'checkbox' && $field->has_sublabel() ) : ?>
-<label>
-<?php endif; ?>
+<?php if ($field->get_type() === 'checkbox' && $field->has_sublabel()): ?><label><?php endif; ?>
 
 <input
-	type="<?php echo esc_attr( $field->get_type() ); ?>"
-	name="<?php echo esc_attr( $name_prefix ); ?>[<?php echo esc_attr( $field->get_name() ); ?>]"
-	id="<?php echo esc_attr( $field->get_id() ); ?>"
-
-	<?php if ( $field->has_classes() ): ?>class="<?php echo esc_attr( $field->get_classes() ); ?>"<?php endif; ?>
-
-	<?php if ( $field->get_type() === 'text' && $field->has_placeholder() ): ?>placeholder="<?php echo esc_html( $field->get_placeholder() ); ?>"<?php endif; ?>
-
-<?php foreach ( $field->get_attributes() as $key => $atr_val ): ?>
-<?php echo $key ?>="<?php echo esc_attr( $atr_val ); ?>"
-<?php endforeach; ?>
-
-<?php if ( $field->is_required() ): ?>required="required"<?php endif; ?>
-<?php if ( $field->is_disabled() ): ?>disabled="disabled"<?php endif; ?>
-<?php if ( $field->is_readonly() ): ?>readonly="readonly"<?php endif; ?>
-
-<?php if ( in_array( $field->get_type(), [ 'text', 'hidden' ] ) ): ?>
-	value="<?php echo esc_html( $value ); ?>"
-<?php else: ?>
-	value="yes"
-	<?php if ( $value === 'yes' ): ?>checked="checked"<?php endif; ?>
-<?php endif; ?>
+	type="<?php echo \esc_attr($field->get_type()); ?>"
+	name="<?php echo \esc_attr($name_prefix).'['.\esc_attr($field->get_name()).']'; ?>"
+	id="<?php echo \esc_attr($field->get_id()); ?>"
+
+	<?php if ($field->has_classes()): ?>
+		class="<?php echo \esc_attr($field->get_classes()); ?>"
+	<?php endif; ?>
+
+	<?php if ($field->get_type() === 'text' && $field->has_placeholder()):?>
+		placeholder="<?php echo \esc_html($field->get_placeholder());?>"
+	<?php endif; ?>
+
+	<?php foreach ($field->get_attributes() as $key => $atr_val):
+        echo $key.'="'.\esc_attr($atr_val).'"'; ?>
+	<?php endforeach; ?>
+
+	<?php if ($field->is_required()): ?>required="required"<?php endif; ?>
+	<?php if ($field->is_disabled()): ?>disabled="disabled"<?php endif; ?>
+	<?php if ($field->is_readonly()): ?>readonly="readonly"<?php endif; ?>
+	<?php if (\in_array($field->get_type(), ['number', 'text', 'hidden'])): ?>
+		value="<?php echo \esc_html($value); ?>"
+	<?php else: ?>
+		value="yes"
+		<?php if ($value === 'yes'): ?>
+			checked="checked"
+		<?php endif; ?>
+	<?php endif; ?>
 />
 
-<?php if ( $field->get_type() === 'checkbox' && $field->has_sublabel() ) : ?>
-	<?php echo esc_html( $field->get_sublabel() ); ?></label>
+<?php if ($field->get_type() === 'checkbox' && $field->has_sublabel()): ?>
+	<?php echo \esc_html($field->get_sublabel()); ?></label>
 <?php endif; ?>
diff --git a/templates/noonce.php b/templates/noonce.php
index 7bf977476ab93f3ff998a53483cd924d612abaa1..0cd58a561d5024e462e5c04cd9c471d7bc4794b7 100644
--- a/templates/noonce.php
+++ b/templates/noonce.php
@@ -1,8 +1,8 @@
 <?php
+
 /**
  * @var \WPDesk\Forms\Field $field
  * @var string $name_prefix
  * @var string $value
  */
-?>
-<?php wp_nonce_field( $field->get_meta_value( 'action' ), $name_prefix . $field->get_name() );
+\wp_nonce_field($field->get_meta_value('action'), $name_prefix .'['. $field->get_name().']');