diff --git a/app/components/modules/Transfer.jsx b/app/components/modules/Transfer.jsx
index 3436651816c09b8f37a289bc615d22befafea40a..3299d0dc73861ac3251e243fd51c0998a8ae60ae 100644
--- a/app/components/modules/Transfer.jsx
+++ b/app/components/modules/Transfer.jsx
@@ -9,6 +9,7 @@ import {transferTips} from 'app/utils/Tips'
 import {powerTip, powerTip2, powerTip3} from 'app/utils/Tips'
 import {browserTests} from 'shared/ecc/test/BrowserTests'
 import {validate_account_name} from 'app/utils/ChainValidation';
+import {countDecimals} from 'app/utils/ParsersAndFormatters'
 
 /** Warning .. This is used for Power UP too. */
 class TransferForm extends Component {
@@ -76,6 +77,7 @@ class TransferForm extends Component {
                     ! values.amount ? 'Required' :
                     ! /^[0-9]*\.?[0-9]*/.test(values.amount) ? 'Amount is in the form 99999.999' :
                     insufficientFunds(values.asset, values.amount) ? 'Insufficient funds' :
+                    countDecimals(values.amount) > 3 ? 'Use only 3 digits of precison' :
                     null,
                 asset:
                     props.toVesting ? null :
diff --git a/app/utils/ParsersAndFormatters.js b/app/utils/ParsersAndFormatters.js
index 099674afefeb659d4d8427671650161b84048c1e..3b43ba696b9634a02ccef491de2357a7ca9a0b75 100644
--- a/app/utils/ParsersAndFormatters.js
+++ b/app/utils/ParsersAndFormatters.js
@@ -55,3 +55,10 @@ export const repLog10 = rep2 => {
     out = parseInt(out)
     return out
 }
+
+export function countDecimals(amount) {
+    if(amount == null) return amount
+    amount = String(amount).match(/[\d\.]+/g).join('') // just dots and digits
+    const parts = amount.split('.')
+    return parts.length > 2 ? undefined : parts.length === 1 ? 0 : parts[1].length
+}
\ No newline at end of file
diff --git a/shared/serializer/src/number_utils.js b/shared/serializer/src/number_utils.js
index 64c1db8e4d5fd8e29645cc6a4745cf4fb0547a0a..4520389de382b46f3d3c149824c56b5e092ec47e 100644
--- a/shared/serializer/src/number_utils.js
+++ b/shared/serializer/src/number_utils.js
@@ -2,35 +2,35 @@ import assert from "assert"
 
 /**
     Convert 12.34 with a precision of 3 into 12340
-    
+
     @arg {number|string} number - Use strings for large numbers.  This may contain one decimal but no sign
     @arg {number} precision - number of implied decimal places (usually causes right zero padding)
     @return {string} -
 */
 export function toImpliedDecimal(number, precision) {
-    
+
     if(typeof number === "number") {
         assert(number <= 9007199254740991, "overflow")
         number = ""+number;
     } else
         if( number.toString )
             number = number.toString()
-    
+
     assert(typeof number === "string", "number should be an actual number or string: " + (typeof number))
     number = number.trim()
     assert(/^[0-9]*\.?[0-9]*$/.test(number), "Invalid decimal number " + number)
-    
+
     let [ whole = "", decimal = ""] = number.split(".")
-    
+
     let padding = precision - decimal.length
     assert(padding >= 0, "Too many decimal digits in " + number + " to create an implied decimal of " + precision)
-    
+
     for(let i = 0; i < padding; i++)
         decimal += "0"
-        
+
     while(whole.charAt(0) === "0")
         whole = whole.substring(1)
-    
+
     return whole + decimal
 }
 
@@ -41,13 +41,13 @@ export function fromImpliedDecimal(number, precision) {
     } else
         if( number.toString )
             number = number.toString()
-    
+
     while(number.length < precision + 1)// 0.123
         number = "0" + number
-    
+
     // 44000 => 44.000
     let dec_string = number.substring(number.length - precision)
     return number.substring(0, number.length - precision) +
         (dec_string ? "." + dec_string : "")
-        
-}
\ No newline at end of file
+
+}
diff --git a/shared/serializer/src/types.js b/shared/serializer/src/types.js
index 206e4990a91f2df55f60c0865e8fe1a2b4fa3194..f76bcea034138d6a222f4f00dfa655ed0fbfeef8 100644
--- a/shared/serializer/src/types.js
+++ b/shared/serializer/src/types.js
@@ -2,18 +2,15 @@
 
 // Low-level types that make up operations
 
-var ByteBuffer = require('bytebuffer');
-var Serializer = require('./serializer');
-var v = require('./validation');
-var ObjectId = require('./object_id')
-var fp = require('./fast_parser');
-var chain_types = require('./ChainTypes')
-var Long = ByteBuffer.Long
+const v = require('./validation');
+const ObjectId = require('./object_id')
+const fp = require('./fast_parser');
+const chain_types = require('./ChainTypes')
 
 import { PublicKey, Address, ecc_config } from "../../ecc"
-import { toImpliedDecimal, fromImpliedDecimal } from "./number_utils"
+import { fromImpliedDecimal } from "./number_utils"
 
-var Types = {}
+const Types = {}
 module.exports = Types
 
 const HEX_DUMP = process.env.npm_config__graphene_serializer_hex_dump