diff --git a/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java b/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
index 18e31d2..c473dbd 100644
--- a/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
+++ b/src/main/java/org/eclipse/yasson/internal/JsonbRiParser.java
@@ -23,10 +23,11 @@
 import javax.json.stream.JsonLocation;
 import javax.json.stream.JsonParser;
 import java.math.BigDecimal;
+import java.util.ArrayDeque;
 import java.util.Arrays;
+import java.util.Deque;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Stack;
 import java.util.stream.Stream;
 
 /**
@@ -109,7 +110,7 @@
 
     private final JsonParser jsonParser;
 
-    private final Stack<LevelContext> level = new Stack<>();
+    private final Deque<LevelContext> level = new ArrayDeque<>();
 
     /**
      * Creates a parser.
@@ -188,7 +189,7 @@
 
     @Override
     public void moveTo(JsonParser.Event required) {
-        if (!level.empty() && level.peek().getLastEvent() == required) {
+        if (!level.isEmpty() && level.peek().getLastEvent() == required) {
             return;
         }
 
@@ -211,7 +212,7 @@
     }
 
     private Event moveTo(Event... events) {
-        if (!level.empty() && contains(events, level.peek().getLastEvent())) {
+        if (!level.isEmpty() && contains(events, level.peek().getLastEvent())) {
             return level.peek().getLastEvent();
         }
 
diff --git a/src/main/java/org/eclipse/yasson/internal/MappingContext.java b/src/main/java/org/eclipse/yasson/internal/MappingContext.java
index 0b3cea1..2f3c098 100644
--- a/src/main/java/org/eclipse/yasson/internal/MappingContext.java
+++ b/src/main/java/org/eclipse/yasson/internal/MappingContext.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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.
@@ -12,14 +12,15 @@
  ******************************************************************************/
 package org.eclipse.yasson.internal;
 
-import org.eclipse.yasson.internal.serializer.ContainerSerializerProvider;
 import org.eclipse.yasson.internal.model.ClassModel;
 import org.eclipse.yasson.internal.model.JsonbAnnotatedElement;
 import org.eclipse.yasson.internal.model.customization.ClassCustomization;
+import org.eclipse.yasson.internal.serializer.ContainerSerializerProvider;
 
+import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.Iterator;
 import java.util.Objects;
-import java.util.Stack;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 
@@ -89,7 +90,7 @@
         if (classModel != null) {
             return classModel;
         }
-        final Stack<Class> newClassModels = new Stack<>();
+        final Deque<Class> newClassModels = new ArrayDeque<>();
         for (Class classToParse = clazz; classToParse != Object.class; classToParse = classToParse.getSuperclass()) {
             if (classToParse == null){
                 break;
@@ -102,7 +103,7 @@
         }
 
         ClassModel parentClassModel = null;
-        while (!newClassModels.empty()) {
+        while (!newClassModels.isEmpty()) {
             Class toParse = newClassModels.pop();
             parentClassModel = classes.computeIfAbsent(toParse, new ParseClassModelFunction(parentClassModel, classParser, jsonbContext));
         }
diff --git a/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java b/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java
index 84791e7..3532f19 100644
--- a/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java
+++ b/src/main/java/org/eclipse/yasson/internal/VariableTypeInheritanceSearch.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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.
@@ -20,7 +20,8 @@
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
 
 /**
  * Search for type variable in inheritance hierarchy and resolve if possible.
@@ -29,7 +30,7 @@
  */
 public class VariableTypeInheritanceSearch {
 
-    private final Stack<ParameterizedType> parameterizedSubclasses = new Stack<>();
+    private final Deque<ParameterizedType> parameterizedSubclasses = new ArrayDeque<>();
 
     /**
      * Searches the hierarchy of classes to resolve a type variable. If typevar resolved value is another typevar redirection (propagated from wrapping class),
diff --git a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java
index d32d42b..ba0871c 100644
--- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java
+++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonGeneratorToStructureAdapter.java
@@ -20,7 +20,8 @@
 import javax.json.stream.JsonGenerator;
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
 
 /**
  * Adapter for {@link JsonGenerator}, that builds a {@link JsonStructure} content tree instead of JSON text.
@@ -31,7 +32,7 @@
  */
 public class JsonGeneratorToStructureAdapter implements JsonGenerator {
 
-    private final Stack<JsonStructureBuilder> builders;
+    private final Deque<JsonStructureBuilder> builders;
 
     private JsonStructure root;
 
@@ -43,7 +44,7 @@
      * @param provider Cached json provider to create builders on.
      */
     public JsonGeneratorToStructureAdapter(JsonProvider provider) {
-        this.builders = new Stack<>();
+        this.builders = new ArrayDeque<>();
         this.provider = provider;
     }
 
@@ -131,7 +132,8 @@
         JsonStructureBuilder current = builders.peek();
         if (!(current instanceof JsonObjectBuilder)) {
             throw new JsonbException(Messages.getMessage(
-                    MessageKeys.INTERNAL_ERROR, "Can't write key [" + keyName + "] into " + current.getClass()));
+                    MessageKeys.INTERNAL_ERROR, "Can't write key [" + keyName + "] into " + current.getClass()
+            + "because "+current.getClass() + " is not an instance of "+ JsonObjectBuilder.class));
         }
         return (JsonObjectBuilder) current;
     }
diff --git a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java
index 50c4592..1041473 100644
--- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java
+++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java
@@ -19,7 +19,8 @@
 import javax.json.stream.JsonLocation;
 import javax.json.stream.JsonParser;
 import java.math.BigDecimal;
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
 
 /**
  * Adapter for {@link JsonParser}, that reads a {@link JsonStructure} content tree instead of JSON text.
@@ -30,7 +31,7 @@
  */
 public class JsonStructureToParserAdapter implements JsonParser {
 
-    private Stack<JsonStructureIterator> iterators = new Stack<>();
+    private Deque<JsonStructureIterator> iterators = new ArrayDeque<>();
 
     private final JsonStructure rootStructure;
 
