diff --git a/test/unit/util_test.js b/test/unit/util_test.js
index b091d5bc7..f003395b3 100644
--- a/test/unit/util_test.js
+++ b/test/unit/util_test.js
@@ -17,6 +17,21 @@ describe('util', function() {
     this.sinon.restore()
   })
 
+  describe('parseBalance', function() {
+    it('should render 0.01 eth correctly', function() {
+      const input = '0x2386F26FC10000'
+      const output = util.parseBalance(input)
+      assert.deepEqual(output, ['0', '01'])
+    })
+  })
+  describe('parseBalance', function() {
+    it('should render 0.01 eth correctly', function() {
+      const input = 'A6DA46CCA6858000'
+      const output = util.parseBalance(input)
+      assert.deepEqual(output, ['12', '023'])
+    })
+  })
+
   describe('addressSummary', function() {
     it('should add case-sensitive checksum', function() {
       var address = '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825'
@@ -111,20 +126,30 @@ describe('util', function() {
 
     it('should return eth as string followed by ETH', function() {
       var input = new ethUtil.BN(ethInWei, 10).toJSON()
-      var result = util.formatBalance(input)
+      var result = util.formatBalance(input, 4)
       assert.equal(result, '1.0000 ETH')
     })
 
     it('should return eth as string followed by ETH', function() {
       var input = new ethUtil.BN(ethInWei, 10).div(new ethUtil.BN('2', 10)).toJSON()
-      var result = util.formatBalance(input)
-      assert.equal(result, '0.5000 ETH')
+      var result = util.formatBalance(input, 3)
+      assert.equal(result, '0.500 ETH')
     })
 
-    it('should display four decimal points', function() {
+    it('should display specified decimal points', function() {
+      var input = "0x128dfa6a90b28000"
+      var result = util.formatBalance(input, 2)
+      assert.equal(result, '1.33 ETH')
+    })
+    it('should default to 3 decimal points', function() {
       var input = "0x128dfa6a90b28000"
       var result = util.formatBalance(input)
-      assert.equal(result, '1.3370 ETH')
+      assert.equal(result, '1.337 ETH')
+    })
+    it('should show 2 significant digits for tiny balances', function() {
+      var input = "0x1230fa6a90b28"
+      var result = util.formatBalance(input)
+      assert.equal(result, '0.00032 ETH')
     })
 
   })
diff --git a/ui/app/components/eth-balance.js b/ui/app/components/eth-balance.js
index 3f88ef2d4..76b75d4c8 100644
--- a/ui/app/components/eth-balance.js
+++ b/ui/app/components/eth-balance.js
@@ -2,6 +2,7 @@ const Component = require('react').Component
 const h = require('react-hyperscript')
 const inherits = require('util').inherits
 const parseBalance = require('../util').parseBalance
+const formatBalance = require('../util').formatBalance
 
 module.exports = EthBalanceComponent
 
@@ -12,11 +13,8 @@ function EthBalanceComponent() {
 
 EthBalanceComponent.prototype.render = function() {
   var state = this.props
-  var parsedAmount = parseBalance(state.value)
-  var beforeDecimal = parsedAmount[0]
-  var afterDecimal = parsedAmount[1]
-  var value = beforeDecimal+(afterDecimal ? '.'+afterDecimal : '')
   var style = state.style
+  var value = formatBalance(state.value)
 
   return (
 
@@ -28,12 +26,6 @@ EthBalanceComponent.prototype.render = function() {
           display: 'inline',
         },
       }, value),
-      h('.ether-balance-label', {
-        style: {
-          display: 'inline',
-          marginLeft: 6,
-        },
-      }, 'ETH'),
     ])
 
   )
diff --git a/ui/app/util.js b/ui/app/util.js
index 81a029350..91f85e43f 100644
--- a/ui/app/util.js
+++ b/ui/app/util.js
@@ -84,29 +84,41 @@ function weiToEth(bn) {
 }
 
 // Takes  hex, returns [beforeDecimal, afterDecimal]
-function parseBalance(balance, decimalsToKeep) {
-  if (decimalsToKeep === undefined) decimalsToKeep = 4
-  if (!balance || balance === '0x0') return ['0', '']
-  var wei = numericBalance(balance)
-  var padded = wei.toString(10)
-  var len = padded.length
-  var match = padded.match(/[^0]/)
-  var nonZeroIndex = match && match.index
-  var beforeDecimal = padded.substr(nonZeroIndex ? nonZeroIndex : 0, len - 18) || '0'
-  var afterDecimal = padded.substr(len - 18, decimalsToKeep)
+function parseBalance(balance) {
+  if (!balance || balance === '0x0') return ['0', '0']
+  var wei = numericBalance(balance).toString(10)
+  var eth = String(wei/valueTable['wei'])
+  var beforeDecimal = String(Math.floor(eth))
+  var afterDecimal
+  if(eth.indexOf('.') > -1){
+    afterDecimal = eth.slice(eth.indexOf('.') + 1)
+  }else{
+    afterDecimal = '0'
+  }
   return [beforeDecimal, afterDecimal]
 }
 
 // Takes wei hex, returns "None" or "${formattedAmount} ETH"
-function formatBalance(balance) {
+function formatBalance(balance, decimalsToKeep) {
   var parsed = parseBalance(balance)
   var beforeDecimal = parsed[0]
   var afterDecimal = parsed[1]
-  if (beforeDecimal === '0' && afterDecimal === '') return 'None'
-  var result = beforeDecimal
-  if (afterDecimal) result += '.'+afterDecimal
-  result += ' ETH'
-  return result
+  var formatted = "None"
+  if(decimalsToKeep === undefined){
+    if(beforeDecimal === '0'){
+      if(afterDecimal !== '0'){
+        var sigFigs = afterDecimal.match(/^0*(.{2})/) //default: grabs 2 most significant digits
+        if(sigFigs){afterDecimal = sigFigs[0]}
+        formatted = '0.' + afterDecimal + ' ETH'
+      }
+    }else{
+      formatted = beforeDecimal + "." + afterDecimal.slice(0,3) + ' ETH'
+    }
+  }else{
+    afterDecimal += Array(decimalsToKeep).join("0")
+    formatted = beforeDecimal + "." + afterDecimal.slice(0,decimalsToKeep) + ' ETH'
+  }
+  return formatted
 }
 
 function dataSize(data) {