diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java
index 7eeacef..94b916f 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/BigDecimalTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -36,19 +36,11 @@
 
     @Override
     protected void serializeNonFormatted(BigDecimal obj, JsonGenerator generator, String key) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(key, obj);
-        } else {
-            generator.write(key, obj.toString());
-        }
+        generator.write(key, obj);
     }
 
     @Override
     protected void serializeNonFormatted(BigDecimal obj, JsonGenerator generator) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(obj);
-        } else {
-            generator.write(obj.toString());
-        }
+        generator.write(obj);
     }
 }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java
index 6b18aa7..3376854 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/BigIntegerTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -36,19 +36,11 @@
 
     @Override
     protected void serializeNonFormatted(BigInteger obj, JsonGenerator generator, String key) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(key, obj);
-        } else {
-            generator.write(key, obj.toString());
-        }
+        generator.write(key, obj);
     }
 
     @Override
     protected void serializeNonFormatted(BigInteger obj, JsonGenerator generator) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(obj);
-        } else {
-            generator.write(obj.toString());
-        }
+        generator.write(obj);
     }
 }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/BigNumberUtil.java b/src/main/java/org/eclipse/yasson/internal/serializer/BigNumberUtil.java
deleted file mode 100644
index 5cb0724..0000000
--- a/src/main/java/org/eclipse/yasson/internal/serializer/BigNumberUtil.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
- * which accompanies this distribution.
- * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- * David Kral
- ******************************************************************************/
-
-package org.eclipse.yasson.internal.serializer;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * Utility class for checking of IEEE-754 standard in big numbers
- *
- * @author David Kral
- */
-class BigNumberUtil {
-
-    // 53 means max bit value of number with sign bit included
-    private static final int MAX_BIT_SIZE = 53;
-
-    // Max value for Long. Similar to JavaScript Number.MAX_SAFE_INTEGER (2**53)-1
-    private static final long MAX_JS_SAFE_VALUE = 9007199254740991L;
-
-    // Min value for Long. Similar to JavaScript Number.MIN_SAFE_INTEGER -(2**53)+1
-    private static final long MIN_JS_SAFE_VALUE = -9007199254740991L;
-
-    // -1022 is the lowest range of the exponent
-    // more https://en.wikipedia.org/wiki/Exponent_bias
-    private static final int MIN_RANGE = -1022;
-
-    // 1023 is the highest range of the exponent
-    // more https://en.wikipedia.org/wiki/Exponent_bias
-    private static final int MAX_RANGE = 1023;
-
-    /**
-     * Checks whether the value of {@link BigDecimal} matches format IEEE-754
-     *
-     * @param value value which is going to be checked
-     * @return true if value matches format IEEE-754
-     */
-    static boolean isIEEE754(BigDecimal value) {
-        //scale of the number
-        int scale = value.scale();
-        //bit value of number without scale
-        int valBits = value.unscaledValue().abs().bitLength();
-        //bit value of scaled number
-        int intBitsScaled = value.toBigInteger().bitLength();
-        // Number whose bit length is than 53 or is not in range is considered as non IEEE 754-2008 binary64 compliant
-        return valBits <= MAX_BIT_SIZE && intBitsScaled <= MAX_BIT_SIZE && MIN_RANGE <= scale && scale <= MAX_RANGE;
-    }
-
-    /**
-     * Checks whether the value of {@link BigInteger} matches format IEEE-754
-     *
-     * @param value value which is going to be checked
-     * @return true if value matches format IEEE-754
-     */
-    static boolean isIEEE754(BigInteger value) {
-        // Number whose bit length is than 53 is considered as non IEEE 754-2008 binary64 compliant
-        return value.abs().bitLength() <= MAX_BIT_SIZE;
-    }
-
-    /**
-     * Checks whether the value of {@link Long} matches format IEEE-754
-     *
-     * @param value value which is going to be checked
-     * @return true if value matches format IEEE-754
-     */
-    static boolean isIEEE754(Long value) {
-        return value >= MIN_JS_SAFE_VALUE && value <= MAX_JS_SAFE_VALUE;
-    }
-
-
-
-}
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java
index 2d8fe91..fcdf822 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/LongTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -35,19 +35,11 @@
 
     @Override
     protected void serializeNonFormatted(Long obj, JsonGenerator generator, String key) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(key, obj);
-        } else {
-            generator.write(key, obj.toString());
-        }
+        generator.write(key, obj);
     }
 
     @Override
     protected void serializeNonFormatted(Long obj, JsonGenerator generator) {
-        if (BigNumberUtil.isIEEE754(obj)) {
-            generator.write(obj);
-        } else {
-            generator.write(obj.toString());
-        }
+        generator.write(obj);
     }
 }
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java
index 76166c0..32425d4 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/NumberTypeSerializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -38,10 +38,6 @@
     @Override
     protected void serialize(Number obj, JsonGenerator generator, Marshaller marshaller) {
         BigDecimal bigDecimalValue = new BigDecimal(String.valueOf(obj));
-        if (BigNumberUtil.isIEEE754(bigDecimalValue)) {
-            generator.write(bigDecimalValue);
-        } else {
-            generator.write(String.valueOf(obj));
-        }
+        generator.write(bigDecimalValue);
     }
 }
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
index 2841f3f..a2cbadc 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -50,7 +50,7 @@
     @Test
     public void testBigDecimalMarshalling() {
         String jsonString = jsonb.toJson(new BigDecimal("0.10000000000000001"));
-        Assert.assertEquals("\"0.10000000000000001\"", jsonString);
+        Assert.assertEquals("0.10000000000000001", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal("0.1000000000000001"));
         Assert.assertEquals("0.1000000000000001", jsonString);
@@ -58,7 +58,7 @@
         BigDecimal result = jsonb.fromJson("0.10000000000000001", BigDecimal.class);
         Assert.assertEquals(new BigDecimal("0.10000000000000001"), result);
 
-        result = jsonb.fromJson("\"0.100000000000000001\"", BigDecimal.class);
+        result = jsonb.fromJson("0.100000000000000001", BigDecimal.class);
         Assert.assertEquals(new BigDecimal("0.100000000000000001"), result);
     }
 
@@ -68,13 +68,13 @@
         Assert.assertEquals("9007199254740991", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal("9007199254740992"));
-        Assert.assertEquals("\"9007199254740992\"", jsonString);
+        Assert.assertEquals("9007199254740992", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal("9007199254740991.1"));
-        Assert.assertEquals("\"9007199254740991.1\"", jsonString);
+        Assert.assertEquals("9007199254740991.1", jsonString);
 
         jsonString = jsonb.toJson(new BigDecimal(new BigInteger("1"), -400));
-        Assert.assertEquals("\"" + new BigDecimal(new BigInteger("1"), -400) + "\"", jsonString);
+        Assert.assertEquals(new BigDecimal(new BigInteger("1"), -400).toString(), jsonString);
     }
 
     @Test
@@ -83,7 +83,7 @@
         Assert.assertEquals("9007199254740991", jsonString);
 
         jsonString = jsonb.toJson(new BigInteger("9007199254740992"));
-        Assert.assertEquals("\"9007199254740992\"", jsonString);
+        Assert.assertEquals("9007199254740992", jsonString);
     }
 
     @Test
@@ -91,12 +91,12 @@
         BigDecimalInNumber testValueQuoted = new BigDecimalInNumber() {{setBigDecValue(new BigDecimal("9007199254740992"));}};
         BigDecimalInNumber testValueUnQuoted = new BigDecimalInNumber() {{setBigDecValue(new BigDecimal("9007199254740991"));}};
         String jsonString = jsonb.toJson(testValueQuoted);
-        Assert.assertEquals("{\"bigDecValue\":\"9007199254740992\"}", jsonString);
+        Assert.assertEquals("{\"bigDecValue\":9007199254740992}", jsonString);
 
         jsonString = jsonb.toJson(testValueUnQuoted);
         Assert.assertEquals("{\"bigDecValue\":9007199254740991}", jsonString);
 
-        BigDecimalInNumber result = jsonb.fromJson("{\"bigDecValue\":\"9007199254740992\"}", BigDecimalInNumber.class);
+        BigDecimalInNumber result = jsonb.fromJson("{\"bigDecValue\":9007199254740992}", BigDecimalInNumber.class);
         Assert.assertEquals(testValueQuoted.getBigDecValue(), result.getBigDecValue());
 
         result = jsonb.fromJson("{\"bigDecValue\":9007199254740991}", BigDecimalInNumber.class);
@@ -109,19 +109,19 @@
         Assert.assertEquals("{\"value\":0.1000000000000001}", jsonString);
 
         jsonString = jsonb.toJson(new ScalarValueWrapper<>(new BigDecimal("0.10000000000000001")));
-        Assert.assertEquals("{\"value\":\"0.10000000000000001\"}", jsonString);
+        Assert.assertEquals("{\"value\":0.10000000000000001}", jsonString);
 
         ScalarValueWrapper<BigDecimal> result = jsonb.fromJson("{\"value\":0.1000000000000001}", new TestTypeToken<ScalarValueWrapper<BigDecimal>>(){}.getType());
         Assert.assertEquals(new BigDecimal("0.1000000000000001"), result.getValue());
 
-        result = jsonb.fromJson("{\"value\":\"0.10000000000000001\"}", new TestTypeToken<ScalarValueWrapper<BigDecimal>>(){}.getType());
+        result = jsonb.fromJson("{\"value\":0.10000000000000001}", new TestTypeToken<ScalarValueWrapper<BigDecimal>>(){}.getType());
         Assert.assertEquals(new BigDecimal("0.10000000000000001"), result.getValue());
     }
 
     @Test
     public void testBigDecimalCastedToNumber() {
         String jsonString = jsonb.toJson(new Object() { public Number number = new BigDecimal("0.10000000000000001"); });
-        Assert.assertEquals("{\"number\":\"0.10000000000000001\"}", jsonString);
+        Assert.assertEquals("{\"number\":0.10000000000000001}", jsonString);
 
         jsonString = jsonb.toJson(new Object() { public Number number = new BigDecimal("0.1000000000000001"); });
         Assert.assertEquals("{\"number\":0.1000000000000001}", jsonString);
@@ -140,7 +140,7 @@
         Assert.assertEquals(Long.valueOf("9007199254740991"), deserialized);
 
         json = jsonb.toJson(upperJsUnsafeValue);
-        Assert.assertEquals("\"9007199254740992\"", json);
+        Assert.assertEquals("9007199254740992", json);
         deserialized = jsonb.fromJson(json, Long.class);
         Assert.assertEquals(Long.valueOf("9007199254740992"), deserialized);
 
@@ -154,7 +154,7 @@
         Assert.assertEquals(Long.valueOf("-9007199254740991"), deserialized);
 
         json = jsonb.toJson(lowerJsUnsafeValue);
-        Assert.assertEquals("\"-9007199254740992\"", json);
+        Assert.assertEquals("-9007199254740992", json);
         deserialized = jsonb.fromJson(json, Long.class);
         Assert.assertEquals(Long.valueOf("-9007199254740992"), deserialized);
     }
