diff --git a/handlers/views_handler_field_numeric.inc b/handlers/views_handler_field_numeric.inc
index d10d3d0..7e5aaaf 100644
--- a/handlers/views_handler_field_numeric.inc
+++ b/handlers/views_handler_field_numeric.inc
@@ -120,8 +120,8 @@ class views_handler_field_numeric extends views_handler_field {
       }
     }
 
-    // Check to see if hiding should happen before adding prefix and suffix.
-    if ($this->options['hide_empty'] && empty($value) && ($value !== 0 || $this->options['empty_zero'])) {
+    // Check to see if hiding or rewriting if empty should happen before adding prefix and suffix.
+    if (($this->options['empty'] || $this->options['hide_empty']) && empty($value) && ($value !== 0 || $this->options['empty_zero'])) {
       return '';
     }
 
diff --git a/tests/handlers/views_handler_field_numeric.test b/tests/handlers/views_handler_field_numeric.test
new file mode 100644
index 0000000..aba8b79
--- /dev/null
+++ b/tests/handlers/views_handler_field_numeric.test
@@ -0,0 +1,221 @@
+<?php
+
+/**
+ * @file
+ * Definition of ViewsHandlerFieldNumeric.
+ */
+
+/**
+ * Tests the numeric field handler
+ *
+ * @see views_handler_field_numeric
+ */
+class ViewsHandlerFieldNumericTest extends ViewsSqlTest {
+  public static function getInfo() {
+    return array(
+      'age' => 'Field',
+      'description' => 'Test the core views_handler_field_numeric handler.',
+      'group' => 'Views Handlers',
+    );
+  }
+
+  protected function setUp() {
+    parent::setUp();
+    $this->column_map = array(
+      'views_test_name' => 'name',
+      'views_test_age' => 'age',
+    );
+  }
+
+  function testEmpty() {
+    $this->_testHideIfEmpty();
+    $this->_testEmptyText();
+  }
+
+  /**
+   * Tests the hide if empty functionality.
+   *
+   * This test is required on top of ViewsHandlerFieldTest because
+   * views_handler_field_numerc does extra logic to determine if a field is
+   * empty. This tests alters the result to get easier and less coupled results.
+   */
+  function _testHideIfEmpty() {
+    $view = $this->getBasicView();
+    $view->init_display();
+    $this->executeView($view);
+
+    $column_map_reversed = array_flip($this->column_map);
+    $view->row_index = 0;
+    $random_name = $this->randomName();
+    $random_value = $this->randomName();
+
+    // Test when results are not rewritten and empty values are not hidden.
+    $view->field['age']->options['hide_alter_empty'] = FALSE;
+    $view->field['age']->options['hide_empty'] = FALSE;
+    $view->field['age']->options['empty_zero'] = FALSE;
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, '0', 'By default, 0 should not be treated as empty.');
+
+    // Test when results are not rewritten and non-zero empty values are hidden.
+    $view->field['age']->options['hide_alter_empty'] = TRUE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = FALSE;
+
+    // Test an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If hide_empty is checked, "" should be treated as empty.');
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, '0', 'If hide_empty is checked, but not empty_zero, 0 should not be treated as empty.');
+
+    // Test when results are not rewritten and all empty values are hidden.
+    $view->field['age']->options['hide_alter_empty'] = TRUE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = TRUE;
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If hide_empty and empty_zero are checked, 0 should be treated as empty.');
+
+    // Test when results are rewritten to a valid string and non-zero empty
+    // results are hidden.
+    $view->field['age']->options['hide_alter_empty'] = FALSE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = FALSE;
+    $view->field['age']->options['alter']['alter_text'] = TRUE;
+    $view->field['age']->options['alter']['text'] = $random_name;
+
+    // Test an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $random_name, 'If the rewritten string is not empty, "" should not be treated as empty.');
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $random_name, 'If the rewritten string is not empty, 0 should not be treated as empty.');
+
+    // Test when results are rewritten to an empty string and non-zero empty results are hidden.
+    $view->field['age']->options['hide_alter_empty'] = TRUE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = FALSE;
+    $view->field['age']->options['alter']['alter_text'] = TRUE;
+    $view->field['age']->options['alter']['text'] = "";
+
+    // Test an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If the rewritten string is empty, "" should be treated as empty.');
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, '0', 'If the rewritten string is empty, 0 should not be treated as empty.');
+
+    // Test when results are rewritten to zero as a string and non-zero empty
+    // results are hidden.
+    $view->field['age']->options['hide_alter_empty'] = FALSE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = FALSE;
+    $view->field['age']->options['alter']['alter_text'] = TRUE;
+    $view->field['age']->options['alter']['text'] = "0";
+
+    // Test an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "0", 'If the rewritten string is zero and empty_zero is not checked, "" rewritten as 0 should not be treated as empty.');
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "0", 'If the rewritten string is zero and empty_zero is not checked, 0 should not be treated as empty.');
+
+    // Test when results are rewritten to a valid string and non-zero empty
+    // results are hidden.
+    $view->field['age']->options['hide_alter_empty'] = TRUE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = FALSE;
+    $view->field['age']->options['alter']['alter_text'] = TRUE;
+    $view->field['age']->options['alter']['text'] = $random_value;
+
+    // Test an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If either the original or rewritten string is invalid, "" should be treated as empty.');
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $random_value, 'If the original and rewritten strings are valid, 0 should not be treated as empty.');
+
+    // Test when results are rewritten to zero as a string and all empty
+    // original values and results are hidden.
+    $view->field['age']->options['hide_alter_empty'] = TRUE;
+    $view->field['age']->options['hide_empty'] = TRUE;
+    $view->field['age']->options['empty_zero'] = TRUE;
+    $view->field['age']->options['alter']['alter_text'] = TRUE;
+    $view->field['age']->options['alter']['text'] = "0";
+
+    // Test an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If the rewritten string is zero, "" should be treated as empty.');
+
+    // Test zero as an integer.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If the rewritten string is zero, 0 should not be treated as empty.');
+  }
+
+  /**
+   * Tests the usage of the empty text.
+   */
+  function _testEmptyText() {
+    $view = $this->getBasicView();
+    $view->init_display();
+    $this->executeView($view);
+
+    $column_map_reversed = array_flip($this->column_map);
+    $view->row_index = 0;
+
+    // Generate some empty text.
+    $empty_text = $view->field['age']->options['empty'] = $this->randomName();
+
+    // Test rewriting an empty value.
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $empty_text, 'If a field is empty, the empty text should be used for the output.');
+
+    // Test rewriting a zero when 'empty_zero' is false.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "0", 'If a field is 0 and empty_zero is not checked, the empty text should not be used for the output.');
+
+    // Test rewriting a zero when 'empty_zero' is true.
+    $view->result[0]->{$column_map_reversed['age']} = 0;
+    $view->field['age']->options['empty_zero'] = TRUE;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $empty_text, 'If a field is 0 and empty_zero is checked, the empty text should be used for the output.');
+
+    // Test rewriting an empty value when another alter is in use.
+    $alter_text = $view->field['age']->options['alter']['text'] = $this->randomName();
+    $view->field['age']->options['alter']['alter_text'] = TRUE;
+    $view->field['age']->options['hide_alter_empty'] = FALSE;
+
+    $view->result[0]->{$column_map_reversed['age']} = "";
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $alter_text, 'If a field is empty, some rewrite text exists, but hide_alter_empty is not checked, render the rewrite text.');
+
+    // Test rewriting when another alter is set but hide_alter_empty is true.
+    $view->field['age']->options['hide_alter_empty'] = TRUE;
+    $render = $view->field['age']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $empty_text, 'If a field is empty, some rewrite text exists, and hide_alter_empty is checked, use the empty text.');
+  }
+}
