diff --git a/src/main/java/org/eclipse/yasson/internal/properties/MessageKeys.java b/src/main/java/org/eclipse/yasson/internal/properties/MessageKeys.java
index fdd3793..95fb57e 100644
--- a/src/main/java/org/eclipse/yasson/internal/properties/MessageKeys.java
+++ b/src/main/java/org/eclipse/yasson/internal/properties/MessageKeys.java
@@ -68,7 +68,6 @@
     INCOMPATIBLE_FACTORY_CREATOR_RETURN_TYPE("incompatibleFactoryCreatorReturnType"),
     MULTIPLE_JSONB_CREATORS("multipleJsonbCreators"),
     INTERNAL_ERROR("internalError"),
-    SERIALIZE_VALUE_ERROR("serializeValueError"),
     SERIALIZE_PROPERTY_ERROR("serializePropertyError"),
     DESERIALIZE_VALUE_ERROR("deserializeValueError"),
     PARSING_NUMBER("parsingNumber"),
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/AbstractValueTypeSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/AbstractValueTypeSerializer.java
index 721a1a6..ab81280 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/AbstractValueTypeSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/AbstractValueTypeSerializer.java
@@ -15,10 +15,7 @@
 
 import org.eclipse.yasson.internal.Marshaller;
 import org.eclipse.yasson.internal.model.customization.Customization;
-import org.eclipse.yasson.internal.properties.MessageKeys;
-import org.eclipse.yasson.internal.properties.Messages;
 
-import javax.json.bind.JsonbException;
 import javax.json.bind.serializer.JsonbSerializer;
 import javax.json.bind.serializer.SerializationContext;
 import javax.json.stream.JsonGenerator;
@@ -51,12 +48,7 @@
     @Override
     public void serialize(T obj, JsonGenerator generator, SerializationContext ctx) {
         Marshaller marshaller = (Marshaller) ctx;
-        try {
-        	serialize(obj, generator, marshaller);
-        } catch (Exception e) {
-    		throw new JsonbException(Messages.getMessage(MessageKeys.SERIALIZE_VALUE_ERROR, 
-    				obj, obj.getClass().getCanonicalName(), e.getMessage()));
-        }
+        serialize(obj, generator, marshaller);
     }
 
     protected abstract void serialize(T obj, JsonGenerator generator, Marshaller marshaller);
diff --git a/src/main/java/org/eclipse/yasson/internal/serializer/ObjectSerializer.java b/src/main/java/org/eclipse/yasson/internal/serializer/ObjectSerializer.java
index f791645..7ab0f6a 100644
--- a/src/main/java/org/eclipse/yasson/internal/serializer/ObjectSerializer.java
+++ b/src/main/java/org/eclipse/yasson/internal/serializer/ObjectSerializer.java
@@ -59,14 +59,15 @@
 
     @Override
     protected void serializeInternal(T object, JsonGenerator generator, SerializationContext ctx) {
-        final PropertyModel[] allProperties = ((Marshaller) ctx).getMappingContext().getOrCreateClassModel(object.getClass()).getSortedProperties();
+        final PropertyModel[] allProperties = ((Marshaller) ctx).getMappingContext()
+                .getOrCreateClassModel(object.getClass()).getSortedProperties();
         for (PropertyModel model : allProperties) {
-        	try {
-        		marshallProperty(object, generator, ctx, model);
-        	} catch (Exception e) {
-        		throw new JsonbException(Messages.getMessage(MessageKeys.SERIALIZE_PROPERTY_ERROR, 
-        				model.getWriteName(), object.getClass().getCanonicalName(), model.getValue(object)), e);
-        	}
+            try {
+                marshallProperty(object, generator, ctx, model);
+            } catch (Exception e) {
+                throw new JsonbException(Messages.getMessage(MessageKeys.SERIALIZE_PROPERTY_ERROR, model.getWriteName(),
+                        object.getClass().getCanonicalName()), e);
+            }
         }
     }
 
diff --git a/src/main/resources/yasson-messages.properties b/src/main/resources/yasson-messages.properties
index 55c2b78..b0efc2b 100644
--- a/src/main/resources/yasson-messages.properties
+++ b/src/main/resources/yasson-messages.properties
@@ -63,8 +63,7 @@
 incompatibleFactoryCreatorReturnType=Return type of creator {0} must be of type {1}.
 multipleJsonbCreators=More than one @JsonbCreator declared in class {0}.
 internalError=Internal error: {0}
-serializeValueError=Unable to serialize value ''{0}'' of type {1} because of: {2}
-serializePropertyError=Unable to serialize property ''{0}'' from {1} with value ''{2}''
+serializePropertyError=Unable to serialize property ''{0}'' from {1}
 deserializeValueError=Error deserialize JSON value into type: {0}.
 parsingNumber=Error parsing number {0} with format {1}.
 unknownBinaryDataStrategy=Unknown binary data strategy: {0}
diff --git a/src/test/java/org/eclipse/yasson/Assertions.java b/src/test/java/org/eclipse/yasson/Assertions.java
index c1b19e2..509ba75 100644
--- a/src/test/java/org/eclipse/yasson/Assertions.java
+++ b/src/test/java/org/eclipse/yasson/Assertions.java
@@ -46,9 +46,10 @@
 			operation.get();
 			fail("The operation should have failed with a " + expectedType.getCanonicalName() + " but it succeeded.");
 		} catch (Throwable t) {
-			String fullErrorMessage = t.getMessage();
-			for (Throwable current = t; current.getCause() != null && current.getCause() != current; current = current.getCause()) {
-				fullErrorMessage += current.getMessage();
+			String fullErrorMessage = "";
+			for (Throwable current = t; current != null && current.getCause() != current; current = current.getCause()) {
+			    fullErrorMessage += current.getClass().getCanonicalName() + ": ";
+				fullErrorMessage += current.getMessage() + "\n";
 			}
 			if (expectedType.isAssignableFrom(t.getClass())) {
 				if (!checkExceptionMessage.apply(fullErrorMessage)) {
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 8dfa547..16d5e5d 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/basic/NumberTest.java
@@ -225,30 +225,28 @@
     
     @Test
     public void testSerializeInvalidDouble() {
-    	shouldFail(() -> jsonb.toJson(Double.POSITIVE_INFINITY), 
-    			msg -> msg.contains("Unable to serialize value") && msg.contains("java.lang.Double"));
-    	
-    	NumberContainer obj = new NumberContainer();
-    	obj.doubleProp = Double.POSITIVE_INFINITY;
-    	shouldFail(() -> jsonb.toJson(obj),
-    			msg -> msg.contains("doubleProp") && msg.contains("NumberContainer"));
+        shouldFail(() -> jsonb.toJson(Double.POSITIVE_INFINITY));
+
+        NumberContainer obj = new NumberContainer();
+        obj.doubleProp = Double.POSITIVE_INFINITY;
+        shouldFail(() -> jsonb.toJson(obj), msg -> msg.contains("doubleProp") && msg.contains("NumberContainer"));
     }
     
     
     @Test
     public void testSerializeInvalidDoubleCollection() {
-    	NumberContainer obj = new NumberContainer();
-    	obj.collectionProp = Collections.singleton(Double.POSITIVE_INFINITY);
-    	shouldFail(() -> jsonb.toJson(obj),
-    			msg -> msg.contains("collectionProp") && msg.contains("NumberContainer") && msg.contains("Infinity"));
+        NumberContainer obj = new NumberContainer();
+        obj.collectionProp = Collections.singleton(Double.POSITIVE_INFINITY);
+        shouldFail(() -> jsonb.toJson(obj),
+                msg -> msg.contains("collectionProp") && msg.contains("NumberContainer"));
     }
-    
+
     @Test
     public void testSerializeInvalidDoubleMap() {
-    	NumberContainer obj = new NumberContainer();
-    	obj.mapProp = Collections.singletonMap("doubleKey", Double.POSITIVE_INFINITY);
-    	shouldFail(() -> jsonb.toJson(obj),
-    			msg -> msg.contains("mapProp") && msg.contains("NumberContainer") && msg.contains("Infinity"));
+        NumberContainer obj = new NumberContainer();
+        obj.mapProp = Collections.singletonMap("doubleKey", Double.POSITIVE_INFINITY);
+        shouldFail(() -> jsonb.toJson(obj),
+                msg -> msg.contains("mapProp") && msg.contains("NumberContainer"));
     }
 
 }
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java
index bf2a7b4..8bb67eb 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java
@@ -17,6 +17,7 @@
 import javax.json.bind.JsonbBuilder;
 import javax.json.bind.JsonbException;
 
+import org.eclipse.yasson.Assertions;
 import org.eclipse.yasson.defaultmapping.modifiers.model.ChildOfPackagePrivateParent;
 import org.eclipse.yasson.defaultmapping.modifiers.model.FieldModifiersClass;
 import org.junit.Before;
@@ -67,14 +68,9 @@
         NestedPackageChild child = new NestedPackageChild();
         child.id = 1;
         child.name = "SomeName";
-        try {
-            jsonb.toJson(child);
-            fail();
-        } catch (JsonbException ex) {
-            if (!(ex.getCause() instanceof IllegalAccessException)) {
-                fail();
-            }
-        }
+        Assertions.shouldFail(() -> jsonb.toJson(child),
+                msg -> msg.contains("Unable to serialize property 'id'") &&
+                msg.contains("java.lang.IllegalAccessException")); 
     }
 
     private class NestedPrivateParent {
@@ -90,14 +86,8 @@
         NestedPrivateChild child = new NestedPrivateChild();
         child.id = 1;
         child.name = "SomeName";
-        try {
-            jsonb.toJson(child);
-            fail();
-        } catch (JsonbException ex) {
-            if (!(ex.getCause() instanceof IllegalAccessException)) {
-                fail();
-            }
-        }
+        Assertions.shouldFail(() -> jsonb.toJson(child),
+                msg -> msg.contains("java.lang.IllegalAccessException"));
     }
 
 
@@ -114,14 +104,8 @@
         NestedStaticPackageChild child = new NestedStaticPackageChild();
         child.id = 1;
         child.name = "SomeName";
-        try {
-            jsonb.toJson(child);
-            fail();
-        } catch (JsonbException ex) {
-            if (!(ex.getCause() instanceof IllegalAccessException)) {
-                fail();
-            }
-        }
+        Assertions.shouldFail(() -> jsonb.toJson(child),
+                msg -> msg.contains("java.lang.IllegalAccessException"));
     }
 
     private static class NestedStaticPrivateParent {
@@ -137,14 +121,8 @@
         NestedStaticPrivateChild child = new NestedStaticPrivateChild();
         child.id = 1;
         child.name = "SomeName";
-        try {
-            jsonb.toJson(child);
-            fail();
-        } catch (JsonbException ex) {
-            if (!(ex.getCause() instanceof IllegalAccessException)) {
-                fail();
-            }
-        }
+        Assertions.shouldFail(() -> jsonb.toJson(child),
+                msg -> msg.contains("java.lang.IllegalAccessException"));
     }
 
 }
