diff --git a/stormexpense/stormexpense.admin.inc b/stormexpense/stormexpense.admin.inc
index fd1bbaa..8248f82 100644
--- a/stormexpense/stormexpense.admin.inc
+++ b/stormexpense/stormexpense.admin.inc
@@ -137,6 +137,18 @@ function stormexpense_list() {
     $filterfields[] = 'Provider';
   }
 
+  if (isset($_SESSION['stormexpense_list_filter']['billable']) && $_SESSION['stormexpense_list_filter']['billable'] != '-') {
+    $where[] = 'sex.billable=%d';
+    $args[] = $_SESSION['stormexpense_list_filter']['billable'];
+    $filterfields[] = t('Billable');
+  }
+
+  if (isset($_SESSION['stormexpense_list_filter']['billed']) && $_SESSION['stormexpense_list_filter']['billed'] != '-') {
+    $where[] = 'sex.billed=%d';
+    $args[] = $_SESSION['stormexpense_list_filter']['billed'];
+    $filterfields[] = t('Billed');
+  }
+
   $itemsperpage = isset($_SESSION['stormexpense_list_filter']['itemsperpage']) ? $_SESSION['stormexpense_list_filter']['itemsperpage'] : variable_get('storm_default_items_per_page', 10);
 
   if (isset($_SESSION['stormexpense_list_filter']['user']) && $_SESSION['stormexpense_list_filter']['user'] != '') {
@@ -319,6 +331,25 @@ function stormexpense_list_filter(&$form_state, $filterdesc = 'Filter') {
     '#autocomplete_path' => 'storm/expenses/provider_autocomplete',
   );
 
+  $form['filter']['group3_1'] = array(
+    '#type' => 'markup',
+    '#theme' => 'storm_form_group',
+  );
+
+  $form['filter']['group3_1']['billable'] = array(
+    '#type' => 'select',
+    '#title' => 'Billable',
+    '#options' => array('-' => t('all'), '1' => t('billable'), '0' => t('not billable')),
+    '#default_value' => isset($_SESSION['stormexpense_list_filter']['billable']) ? $_SESSION['stormexpense_list_filter']['billable'] : '-',
+  );
+
+  $form['filter']['group3_1']['billed'] = array(
+    '#type' => 'select',
+    '#title' => 'Billed',
+    '#options' => array('-' => t('all'), '1' => t('billed'), '0' => t('not billed')),
+    '#default_value' => isset($_SESSION['stormexpense_list_filter']['billed']) ? $_SESSION['stormexpense_list_filter']['billed'] : '-',
+  );
+
   $form['filter']['group4'] = array(
     '#type' => 'markup',
     '#theme' => 'storm_form_group',
@@ -358,6 +389,8 @@ function stormexpense_list_filter_filter($form, &$form_state) {
   $_SESSION['stormexpense_list_filter']['user'] = $form_state['values']['user'];
   $_SESSION['stormexpense_list_filter']['title'] = $form_state['values']['title'];
   $_SESSION['stormexpense_list_filter']['provider_title'] = $form_state['values']['provider_title'];
+  $_SESSION['stormexpense_list_filter']['billable'] = $form_state['values']['billable'];
+  $_SESSION['stormexpense_list_filter']['billed'] = $form_state['values']['billed'];
 }
 
 function stormexpense_list_filter_reset($form, &$form_state) {
diff --git a/stormexpense/stormexpense.install b/stormexpense/stormexpense.install
index e5abde0..c32a6a8 100644
--- a/stormexpense/stormexpense.install
+++ b/stormexpense/stormexpense.install
@@ -70,6 +70,8 @@ function stormexpense_schema() {
       'tax2percent'         => array('type' => 'float'),
       'tax2'                => array('type' => 'float'),
       'total'               => array('type' => 'float'),
+      'billable'            => array('type' => 'int', 'default' => 0),
+      'billed'              => array('type' => 'int', 'default' => 0),
     ),
     'primary key' => array('vid'),
     'indexes'     => array(
@@ -162,3 +164,13 @@ function stormexpense_update_6202() {
   $ret = array();
   return $ret;
 }
+
+/**
+ * Added billable and billed fields to stormexpense table for issue 695976
+ */
+function stormexpense_update_6203() {
+  $ret = array();
+  db_add_field($ret, 'stormexpense', 'billable', array('type' => 'int', 'default' => 0));
+  db_add_field($ret, 'stormexpense', 'billed', array('type' => 'int', 'default' => 0));
+  return $ret;
+}
diff --git a/stormexpense/stormexpense.module b/stormexpense/stormexpense.module
index aee366f..0721208 100644
--- a/stormexpense/stormexpense.module
+++ b/stormexpense/stormexpense.module
@@ -178,6 +178,15 @@ function stormexpense_menu() {
     'file' => 'stormexpense.admin.inc',
   );
 
+  $items['admin/settings/storm/expense'] = array(
+    'title' => 'Storm expense',
+    'description' => 'Storm expense administration page',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('stormexpense_admin_settings'),
+    'access arguments' => array('Storm: access administration pages'),
+    'type' => MENU_LOCAL_TASK,
+  );
+
   return $items;
 }
 
@@ -332,6 +341,8 @@ function stormexpense_form(&$node) {
     $node->tax1percent = variable_get('storm_tax1_percent', 20);
     $node->tax2app = variable_get('storm_tax2_app', 0);
     $node->tax2percent = variable_get('storm_tax2_percent', 20);
+
+    $node->billable = variable_get('stormexpense_billable_default', FALSE);
   }
   else {
     $s_org = "SELECT n.nid, n.title FROM {stormorganization} so INNER JOIN {node} n
@@ -513,12 +524,32 @@ function stormexpense_form(&$node) {
     '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group4') : -17,
   );
 
+  $form['group5'] = array(
+    '#type' => 'markup',
+    '#theme' => 'storm_form_group',
+    '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'group5') : -16,
+  );
+
+  $form['group5']['billable'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Billable'),
+    '#default_value' => $node->billable,
+    '#weight' => 1,
+  );
+
+  $form['group5']['billed'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Billed'),
+    '#default_value' => isset($node->billed) ? $node->billed : 0,
+    '#weight' => 2,
+  );
+
   $form['title'] = array(
     '#type' => 'textfield',
     '#title' => check_plain($type->title_label),
     '#required' => TRUE,
     '#default_value' => $node->title,
-    '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'title') : -16,
+    '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'title') : -15,
   );
 
   if ($type->has_body) {
@@ -536,15 +567,15 @@ function stormexpense_insert($node) {
     (vid, nid, organization_nid, organization_title, project_nid, project_title,
     task_nid, task_title, task_stepno, ticket_nid, ticket_title,
     provider_nid, provider_title, expensedate, amount, tax1app, tax1percent,
-    tax1, subtotal, tax2app, tax2percent, tax2, total) VALUES
+    tax1, subtotal, tax2app, tax2percent, tax2, total, billable, billed) VALUES
     (%d, %d, %d, '%s', %d, '%s',
     %d, '%s', '%s', %d, '%s',
     %d, '%s', %d, %f, %d, %f,
-    %f, %f, %d, %f, %f, %f)",
+    %f, %f, %d, %f, %f, %f, %d, %d)",
     $node->vid, $node->nid, $node->organization_nid, $node->organization_title, $node->project_nid, (isset($node->project_title)) ? $node->project_title : NULL,
     (isset($node->task_nid)) ? $node->task_nid : NULL, (isset($node->task_title)) ? $node->task_title : NULL, (isset($node->task_stepno)) ? $node->task_stepno : NULL, $node->ticket_nid, (isset($node->ticket_title)) ? $node->ticket_title : NULL,
     (isset($node->provider_nid)) ? $node->provider_nid : NULL, $node->provider_title, $node->expensedate, $node->amount, $node->tax1app, $node->tax1percent,
-    $node->tax1, $node->subtotal, $node->tax2app, $node->tax2percent, $node->tax2, $node->total);
+    $node->tax1, $node->subtotal, $node->tax2app, $node->tax2percent, $node->tax2, $node->total, $node->billable, $node->billed);
 }
 
 function stormexpense_update($node) {
@@ -558,11 +589,11 @@ function stormexpense_update($node) {
       organization_nid=%d, organization_title='%s', project_nid=%d, project_title='%s',
       task_nid=%d, task_title='%s', task_stepno='%s', ticket_nid=%d, ticket_title='%s',
       provider_nid=%d, provider_title='%s', expensedate=%d, amount=%f, tax1app=%d, tax1percent=%f,
-      tax1=%f, subtotal=%f, tax2app=%d, tax2percent=%f, tax2=%f, total=%f WHERE vid = %d",
+      tax1=%f, subtotal=%f, tax2app=%d, tax2percent=%f, tax2=%f, total=%f, billable=%d, billed=%d WHERE vid = %d",
       $node->organization_nid, $node->organization_title, $node->project_nid, $node->project_title,
       $node->task_nid, $node->task_title, $node->task_stepno, $node->ticket_nid, $node->ticket_title,
       $node->provider_nid, $node->provider_title, $node->expensedate, $node->amount, $node->tax1app, $node->tax1percent,
-      $node->tax1, $node->subtotal, $node->tax2app, $node->tax2percent, $node->tax2, $node->total, $node->vid);
+      $node->tax1, $node->subtotal, $node->tax2app, $node->tax2percent, $node->tax2, $node->total, $node->billable, $node->billed, $node->vid);
   }
 }
 
@@ -631,6 +662,14 @@ function stormexpense_storminvoice_auto_add($node, $invoice_nid = NULL) {
     drupal_set_message(t('This function should only be called from within Storm Invoice'));
     return;
   }
+  elseif ($node->billed) {
+    drupal_set_message(t('This expense has already been billed!'));
+    return;
+  }
+  elseif (!$node->billable) {
+    drupal_set_message(t('This expense is marked unbillable!'));
+    return;
+  }
   else {
     global $user;
 
@@ -700,6 +739,10 @@ function stormexpense_storminvoice_auto_add($node, $invoice_nid = NULL) {
     // storm_taxation($new_invoice->items[$count]);
     storminvoice_update($new_invoice);
   }
+
+  // Mark task as billed.
+  db_query("UPDATE {stormexpense} SET billed=%d WHERE vid=%d", 1, $node->vid);
+
   return $invoice_nid;
 }
 
@@ -729,3 +772,18 @@ function stormexpense_storm_dashboard_links($type) {
   }
   return $links;
 }
+
+// ADMIN SETTINGS
+function stormexpense_admin_settings() {
+  $form = array();
+
+  $form['stormexpense_billable_default'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Default Value for billable field.'),
+    '#default_value' => variable_get('stormexpense_billable_default', FALSE),
+    '#description' => t('When checked, Storm will set the expense to billable by default'),
+    '#size' => 5,
+  );
+
+  return system_settings_form($form);
+}
diff --git a/stormexpense/stormexpense.theme.inc b/stormexpense/stormexpense.theme.inc
index e935840..1ec96dc 100644
--- a/stormexpense/stormexpense.theme.inc
+++ b/stormexpense/stormexpense.theme.inc
@@ -78,17 +78,11 @@ function theme_stormexpense_view($node, $teaser = FALSE, $page = FALSE) {
   );
   // Code to create invoice auto_add link
   if (module_exists('storminvoice') && user_access('Storm invoice: add')) {
-    $v = '';
-    $v .= '<strong>'. t('Invoice this item:') .'</strong>';
-    $v .= '<ul>';
-    $v .= '<li>'. l(t('Add to new invoice'), 'storm/invoice/auto_add/new/'. $node->nid) .'</li>';
-    $v .= '<li>'. l(t('Add to existing invoice'), 'storm/invoice/auto_add/existing/'. $node->nid) .'</li>';
-    $v .= '</ul>';
 
     $node->content['links']['auto_invoice'] = array(
       '#prefix' => '<dt id="storminvoices" class="stormcomponent">',
       '#suffix' => '</dt>',
-      '#value' => $v,
+      '#value' => theme('storminvoice_autoadd_links', $node->nid, $node->billable, $node->billed),
       '#weight' => $l_pos++,
     );
   }
diff --git a/stormexpense/stormexpense.views.inc b/stormexpense/stormexpense.views.inc
index 010b93a..896e961 100644
--- a/stormexpense/stormexpense.views.inc
+++ b/stormexpense/stormexpense.views.inc
@@ -235,6 +235,34 @@ function stormexpense_views_data() {
     ),
   );
 
+  $data['stormexpense']['billable'] = array(
+    'title' => t('Expense billable'),
+    'help' => 'Storm Expense Billable',
+    'field' => array(
+      'click sortable' => TRUE,
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+    ),
+  );
+
+  $data['stormexpense']['billed'] = array(
+    'title' => t('Expense billed'),
+    'help' => 'Storm Expense Billed',
+    'field' => array(
+      'click sortable' => TRUE,
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_numeric',
+    ),
+  );
+
   $data['stormexpense']['operation'] = array(
     'field' => array(
       'title' => t('Edit/Delete link'),
