diff --git a/src/Element/Tablefield.php b/src/Element/Tablefield.php
index e284a4c..3d4cda0 100644
--- a/src/Element/Tablefield.php
+++ b/src/Element/Tablefield.php
@@ -35,6 +35,7 @@ class Tablefield extends FormElement {
         array($class, 'processTablefield'),
       ),
       '#theme_wrappers' => array('form_element'),
+      '#addrow' => FALSE,
     );
   }
 
@@ -49,9 +50,11 @@ class Tablefield extends FormElement {
 
     // this is being set in rebuild and import ajax calls
     $storage = NestedArray::getValue($form_state->getStorage(), $element['#parents']);
+    //fetch addrow value
     if ($storage) {
       $element['#cols'] = $storage['tablefield']['rebuild']['cols'];
       $element['#rows'] = $storage['tablefield']['rebuild']['rows'];
+      $element['#add_row'] = $storage['tablefield']['addrow']['row_value'];
     }
 
     $element['#tree'] = TRUE;
@@ -67,10 +70,17 @@ class Tablefield extends FormElement {
     $element['tablefield']['table'] = array(
       '#type' => 'table',
     );
+    //assign value
+    $row_value =  isset($element['#add_row']) ? $element['#add_row'] : 0;
 
     $rows = isset($element['#rows']) ? $element['#rows'] : \Drupal::config('tablefield.settings')->get('rows');
     $cols = isset($element['#cols']) ? $element['#cols'] : \Drupal::config('tablefield.settings')->get('cols');
+//check condition
+    if($row_value!=0) {
+        $rows = $row_value;
+    }
 
+    
     for ($i = 0; $i < $rows; $i++) {
       for ($ii = 0; $ii < $cols; $ii++) {
         if (!empty($element['#locked_cells'][$i][$ii]) && !empty($element['#lock'])) {
@@ -95,6 +105,31 @@ class Tablefield extends FormElement {
         }
       }
     }
+    
+    //To change number of rows.
+    
+    if (!empty($element['#addrow'])) {
+        $element['tablefield']['addrow']['row_value'] = array(
+            '#title' => t('How many rows'),
+            '#type' => 'hidden',
+            '#default_value' => $rows,
+        );
+        $element['tablefield']['addrow']['addrow']  = array(
+            '#type' => 'submit',
+            '#value' => t('Add Row'),
+            '#name' => 'tablefield-addrow-'. $id,
+            '#attributes' => array(
+              'class' => array('tablefield-addrow'),
+            ),
+            '#submit' => array(array(get_called_class(), 'submitCallbackRebuild')),
+            '#ajax' => array(
+              'callback' => 'Drupal\tablefield\Element\Tablefield::ajaxCallbackRebuild',
+              'progress' => array('type' => 'throbber', 'message' => NULL),
+              'wrapper' => 'tablefield-'. $id .'-wrapper',
+              'effect' => 'fade',
+            ),
+        );
+    }
 
     // If no rebuild, we pass along the rows/cols as a value.
     // Otherwise, we will provide form elements to specify the size and ajax rebuild.
@@ -230,6 +265,13 @@ class Tablefield extends FormElement {
         NestedArray::setValue($form_state->getStorage(), $parents, $imported_tablefield['rebuild']);
       }
     }
+    //ajax call
+    else if (isset($triggering_element['#name']) && $triggering_element['#name'] == 'tablefield-addrow-'. $id) {
+        $parents[] = 'addrow';
+         //$rows = $value['table']['setrow'] + 1;
+       $value['addrow']['row_value'] =  $value['rebuild']['rows'] + 1;
+      NestedArray::setValue($form_state->getStorage(), $parents, $value['addrow']);
+    }
     $form_state->setRebuild();
   }
 
diff --git a/src/Plugin/Field/FieldWidget/TablefieldWidget.php b/src/Plugin/Field/FieldWidget/TablefieldWidget.php
index a974986..224438b 100644
--- a/src/Plugin/Field/FieldWidget/TablefieldWidget.php
+++ b/src/Plugin/Field/FieldWidget/TablefieldWidget.php
@@ -70,6 +70,7 @@ class TablefieldWidget extends WidgetBase {
       '#locked_cells' => !empty($field_default->value) ? $field_default->value : array(),
       '#rebuild' => \Drupal::currentUser()->hasPermission('rebuild tablefield'),
       '#import' => \Drupal::currentUser()->hasPermission('import tablefield'),
+      '#addrow' => \Drupal::currentUser()->hasPermission('addrow tablefield'), // add permission
     ) + $element;
 
     if ($is_field_settings_default_widget_form) {
diff --git a/tablefield.permissions.yml b/tablefield.permissions.yml
index 1090321..27652e6 100644
--- a/tablefield.permissions.yml
+++ b/tablefield.permissions.yml
@@ -8,4 +8,7 @@ import tablefield:
     title: 'Import into any tablefield'
 
 configure tablefield:
-  title: 'Allow changes in the global tablefield module configuration'
\ No newline at end of file
+  title: 'Allow changes in the global tablefield module configuration'
+  #define permission
+addrow tablefield:
+    title: 'To change row in tablefield'
\ No newline at end of file
