diff --git a/commerce_invoice.admin.inc b/commerce_invoice.admin.inc
index 1b57fa2..f33977d 100644
--- a/commerce_invoice.admin.inc
+++ b/commerce_invoice.admin.inc
@@ -3,6 +3,7 @@
  * @file
  * Administrative form and page callbacks for the Commerce Invoice module.
  */
+use Drupal\commerce_invoice\Entity\Invoice;
 
 /**
  * Settings form for the Commerce Invoice module.
@@ -107,7 +108,7 @@ function commerce_invoice_number_pattern_form_submit(&$form, &$form_state) {
  *
  * @return array
  */
-function commerce_invoice_form($form, &$form_state, \Drupal\commerce_invoice\Entity\Invoice $invoice, $op = 'edit') {
+function commerce_invoice_form($form, &$form_state, Invoice $invoice, $op = 'edit') {
   $wrapper = $invoice->wrapper();
 
   if (!empty($invoice->order_id)) {
@@ -289,6 +290,7 @@ function commerce_invoice_form_submit(&$form, &$form_state) {
  */
 function commerce_invoice_create_from_order_form($form, &$form_state, $order_id) {
   drupal_set_title(t('Create invoice for the order @order_id', ['@order_id' => $order_id]));
+  $order = commerce_order_load($order_id);
   $form['order_id'] = [
     '#type' => 'value',
     '#value' => $order_id
@@ -309,6 +311,13 @@ function commerce_invoice_create_from_order_form($form, &$form_state, $order_id)
     '#description' => t('Cancel all other invoices for the order.'),
     '#default_value' => 1,
   ];
+  $form['invoice_status'] = [
+    '#type' => 'select',
+    '#title' => t('Invoice status'),
+    '#options' => commerce_invoice_statuses(),
+    '#description' => t('Choose the status of the new invoice.'),
+    '#default_value' => _commerce_invoice_suggest_invoice_status($order),
+  ];
   $form['actions'] = ['#type' => 'actions'];
   $form['actions']['submit'] = array(
     '#type' => 'submit',
@@ -325,10 +334,11 @@ function commerce_invoice_create_from_order_form_submit($form, &$form_state) {
   $order_id = $form_state['values']['order_id'];
   $number_pattern = $form_state['values']['number_pattern'];
   $cancel_existing = $form_state['values']['cancel_existing'];
+  $status = $form_state['values']['invoice_status'];
   $order = commerce_order_load($order_id);
   $number_pattern = commerce_invoice_number_pattern_load($number_pattern);
 
-  $invoice = commerce_invoice_create_from_order($order, $number_pattern, $cancel_existing);
+  $invoice = commerce_invoice_create_from_order($order, $number_pattern, $cancel_existing, $status);
 
   $link = l($invoice->getInvoiceNumber(), '/admin/commerce/invoices/' . $invoice->invoice_id);
   drupal_set_message(t('Invoice !invoice created', ['!invoice' => $link]));
diff --git a/commerce_invoice.module b/commerce_invoice.module
index 218fd15..b2b5ee2 100644
--- a/commerce_invoice.module
+++ b/commerce_invoice.module
@@ -228,17 +228,23 @@ function commerce_invoice_views_api() {
  *   An invoice number pattern.
  * @param bool                      $cancel_existing
  *   Cancel existing invoices for the order.
+ * @param string                    $status
+ *   Override the default invoice status
  *
  * @return Invoice
  *   A saved invoice entity.
  */
-function commerce_invoice_create_from_order($order, InvoiceNumberPattern $pattern = NULL, $cancel_existing = TRUE) {
+function commerce_invoice_create_from_order($order, InvoiceNumberPattern $pattern = NULL, $cancel_existing = TRUE, $status = NULL) {
   $invoice = commerce_invoice_object_prepare_from_order($order, $pattern);
 
   if ($cancel_existing) {
     $existing = commerce_invoice_load_for_order($order);
   }
 
+  if ($status) {
+    $invoice->invoice_status = $status;
+  }
+
   $invoice->save();
 
   if ($cancel_existing && !empty($existing)) {
@@ -497,4 +503,32 @@ function commerce_invoice_calculate_total(Invoice $invoice) {
   }
 
   $wrapper->commerce_invoice_total->data = $invoice_total['data'];
+}
+
+/**
+ * Suggests invoice status for a given order, considering previous invoice's
+ * status (given the previous invoice exists)
+ */
+function _commerce_invoice_suggest_invoice_status($order) {
+  /** @var Invoice $previous_invoice */
+  $previous_invoice = commerce_invoice_load_current($order);
+  if ($previous_invoice) {
+    $new_status = $previous_invoice->invoice_status;
+    // @todo: if previous invoice's status was STATUS_PAID but new invoice's total
+    //    will differ (i.e.  order total changed since last invoice was issued)
+    //    new status should be STATUS_PENDING.
+  }
+  else {
+    switch ($order->status) {
+      case 'completed':
+        $new_status = Invoice::STATUS_PAID;
+        break;
+      case 'canceled':
+        $new_status = Invoice::STATUS_CANCELED;
+        break;
+      default:
+        $new_status = Invoice::STATUS_PENDING;
+    }
+  }
+  return $new_status;
 }
\ No newline at end of file
