diff --git a/core/NumberFormatter.php b/core/NumberFormatter.php
index 64fb04b49f32c924d2bd9fbc76474cf3a8456fc4..2b8656b83a3697c02a294a88aa12c650cf7f3990 100644
--- a/core/NumberFormatter.php
+++ b/core/NumberFormatter.php
@@ -7,13 +7,15 @@
  *
  */
 namespace Piwik;
+use Piwik\Container\StaticContainer;
+use Piwik\Translation\Translator;
 
 /**
  * Class NumberFormatter
  *
  * Used to format numbers according to current language
  */
-class NumberFormatter extends Singleton
+class NumberFormatter
 {
     /** @var string language specific patterns for numbers */
     protected $patternNumber;
@@ -51,18 +53,23 @@ class NumberFormatter extends Singleton
     /**
      * Loads all required data from Intl plugin
      *
+     * TODO: instead of going directly through Translator, there should be a specific class
+     * that gets needed characters (ie, NumberFormatSource). The default implementation
+     * can use the Translator. This will make it easier to unit test NumberFormatter,
+     * w/o needing the Piwik Environment.
+     *
      * @return NumberFormatter
      */
-    public function __construct()
+    public function __construct(Translator $translator)
     {
-        $this->patternNumber = Piwik::translate('Intl_NumberFormatNumber');
-        $this->patternCurrency = Piwik::translate('Intl_NumberFormatCurrency');
-        $this->patternPercent = Piwik::translate('Intl_NumberFormatPercent');
-        $this->symbolPlus = Piwik::translate('Intl_NumberSymbolPlus');
-        $this->symbolMinus = Piwik::translate('Intl_NumberSymbolMinus');
-        $this->symbolPercent = Piwik::translate('Intl_NumberSymbolPercent');
-        $this->symbolGroup = Piwik::translate('Intl_NumberSymbolGroup');
-        $this->symbolDecimal = Piwik::translate('Intl_NumberSymbolDecimal');
+        $this->patternNumber = $translator->translate('Intl_NumberFormatNumber');
+        $this->patternCurrency = $translator->translate('Intl_NumberFormatCurrency');
+        $this->patternPercent = $translator->translate('Intl_NumberFormatPercent');
+        $this->symbolPlus = $translator->translate('Intl_NumberSymbolPlus');
+        $this->symbolMinus = $translator->translate('Intl_NumberSymbolMinus');
+        $this->symbolPercent = $translator->translate('Intl_NumberSymbolPercent');
+        $this->symbolGroup = $translator->translate('Intl_NumberSymbolGroup');
+        $this->symbolDecimal = $translator->translate('Intl_NumberSymbolDecimal');
     }
 
     /**
@@ -306,4 +313,13 @@ class NumberFormatter extends Singleton
     {
         return $value < 0;
     }
+
+    /**
+     * @deprecated
+     * @return self
+     */
+    public static function getInstance()
+    {
+        return StaticContainer::get('Piwik\NumberFormatter');
+    }
 }
\ No newline at end of file
diff --git a/tests/PHPUnit/Integration/NumberFormatterTest.php b/tests/PHPUnit/Integration/NumberFormatterTest.php
index 981b289f2b29495dfc9ca54a1c8db586f3333f08..dc546ef9d87b6cd8670431c8ef0b35ebd91b5bf0 100644
--- a/tests/PHPUnit/Integration/NumberFormatterTest.php
+++ b/tests/PHPUnit/Integration/NumberFormatterTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\Integration;
 
 use Piwik\Container\StaticContainer;
 use Piwik\NumberFormatter;
-use Piwik\Translate;
+use Piwik\Translation\Translator;
 
 /**
  * @group Core
@@ -18,15 +18,48 @@ use Piwik\Translate;
  */
 class NumberFormatterTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var Translator
+     */
+    private $translator;
+
     public function setUp()
     {
-        Translate::loadAllTranslations();
+        \Piwik\Plugin\Manager::getInstance()->loadPluginTranslations();
+
+        $this->translator = StaticContainer::get('Piwik\Translation\Translator');
     }
 
     public function tearDown()
     {
-        StaticContainer::get('Piwik\NumberFormatter')->unsetInstance();
-        Translate::reset();
+        $this->translator->reset();
+    }
+
+    /**
+     * @dataProvider getFormatMethodTestData
+     */
+    public function test_format_CorrectlyFormatsValueAsNumberOrPercent(
+        $language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected)
+    {
+        $this->translator->setCurrentLanguage($language);
+        $numberFormatter = new NumberFormatter($this->translator);
+        $this->assertEquals($expected, $numberFormatter->format($value, $maximumFractionDigits,$minimumFractionDigits));
+    }
+
+    public function getFormatMethodTestData()
+    {
+        return array(
+            // number formatting
+            array('en', 5, 0, 0, '5'),
+            array('en', -5, 0, 3, '-5'),
+            array('en', 5.299, 0, 0, '5'),
+            array('en', 5.299, 3, 0, '5.299'),
+            array('en', sqrt(33), 2, 0, '5.74'),
+
+            // percent formatting
+            array('en', '5.299%', 0, 0, '5%'),
+            array('en', '5.299%', 3, 0, '5.299%'),
+        );
     }
 
     /**
@@ -34,9 +67,10 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase
      */
     public function testNumberFormatting($language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected)
     {
-        StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language);
-        $formatter = NumberFormatter::getInstance();
-        $this->assertEquals($expected, $formatter->formatNumber($value, $maximumFractionDigits, $minimumFractionDigits));
+        $this->translator->setCurrentLanguage($language);
+        $numberFormatter = new NumberFormatter($this->translator);
+
+        $this->assertEquals($expected, $numberFormatter->formatNumber($value, $maximumFractionDigits, $minimumFractionDigits));
     }
 
     public function getNumberFormattingTestData()
@@ -67,9 +101,9 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase
      */
     public function testPercentNumberFormatting($language, $value, $maximumFractionDigits, $minimumFractionDigits, $expected)
     {
-        StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language);
-        $formatter = NumberFormatter::getInstance();
-        $this->assertEquals($expected, $formatter->formatPercent($value, $maximumFractionDigits, $minimumFractionDigits));
+        $this->translator->setCurrentLanguage($language);
+        $numberFormatter = new NumberFormatter($this->translator);
+        $this->assertEquals($expected, $numberFormatter->formatPercent($value, $maximumFractionDigits, $minimumFractionDigits));
     }
 
     public function getPercentNumberFormattingTestData()
@@ -101,9 +135,9 @@ class NumberFormatterTest extends \PHPUnit_Framework_TestCase
      */
     public function testPercentEvolutionNumberFormatting($language, $value, $expected)
     {
-        StaticContainer::get('Piwik\Translation\Translator')->setCurrentLanguage($language);
-        $formatter = NumberFormatter::getInstance();
-        $this->assertEquals($expected, $formatter->formatPercentEvolution($value));
+        $this->translator->setCurrentLanguage($language);
+        $numberFormatter = new NumberFormatter($this->translator);
+        $this->assertEquals($expected, $numberFormatter->formatPercentEvolution($value));
     }
 
     public function getPercentNumberEvolutionFormattingTestData()