diff --git a/src/main/java/org/eclipse/yasson/internal/deserializer/YassonParser.java b/src/main/java/org/eclipse/yasson/internal/deserializer/YassonParser.java
index c17f6ff..36bc251 100644
--- a/src/main/java/org/eclipse/yasson/internal/deserializer/YassonParser.java
+++ b/src/main/java/org/eclipse/yasson/internal/deserializer/YassonParser.java
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
- *
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation.
+ * 
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
  * http://www.eclipse.org/legal/epl-2.0,
@@ -87,6 +88,11 @@
     }
 
     @Override
+    public Event currentEvent() {
+        return context.getLastValueEvent();
+    }
+    
+    @Override
     public String getString() {
         return delegate.getString();
     }
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 dfa9d64..f44999b 100644
--- a/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java
+++ b/src/main/java/org/eclipse/yasson/internal/jsonstructure/JsonStructureToParserAdapter.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2019, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -79,6 +80,11 @@
     }
 
     @Override
+    public Event currentEvent() {
+        return iterators.peek().getValueEvent(getValue());
+    }
+    
+    @Override
     public String getString() {
         return iterators.peek().getString();
     }
@@ -104,6 +110,11 @@
     }
 
     @Override
+    public JsonValue getValue() {
+        return iterators.peek().getValue();
+    }
+
+    @Override
     public JsonObject getObject() {
         JsonStructureIterator current = iterators.peek();
         if (current instanceof JsonObjectIterator) {
@@ -115,6 +126,17 @@
         }
     }
 
+    @Override
+    public JsonArray getArray() {
+        JsonStructureIterator current = iterators.peek();
+        if (current instanceof JsonArrayIterator) {
+            iterators.pop();
+            return getValue().asJsonArray();
+        } else {
+            throw new JsonbException(Messages.getMessage(MessageKeys.INTERNAL_ERROR, "Outside of array context"));
+        }
+    }
+    
     private JsonNumber getJsonNumberValue() {
         JsonStructureIterator iterator = iterators.peek();
         JsonValue value = iterator.getValue();
@@ -123,7 +145,7 @@
         }
         return (JsonNumber) value;
     }
-
+    
     @Override
     public JsonLocation getLocation() {
         throw new JsonbException("Operation not supported");
diff --git a/src/test/java/org/eclipse/yasson/jsonstructure/Issue673.java b/src/test/java/org/eclipse/yasson/jsonstructure/Issue673.java
new file mode 100644
index 0000000..7aeca3a
--- /dev/null
+++ b/src/test/java/org/eclipse/yasson/jsonstructure/Issue673.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0,
+ * or the Eclipse Distribution License v. 1.0 which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
+ */
+
+package org.eclipse.yasson.jsonstructure;
+
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.json.bind.annotation.JsonbSubtype;
+import jakarta.json.bind.annotation.JsonbTypeDeserializer;
+import jakarta.json.bind.annotation.JsonbTypeInfo;
+import jakarta.json.bind.serializer.DeserializationContext;
+import jakarta.json.bind.serializer.JsonbDeserializer;
+import jakarta.json.stream.JsonParser;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.stream.Collectors;
+
+public class Issue673 {
+    
+    public static interface Referenceable {
+
+    }
+
+    public static class Reference implements Referenceable {
+
+        private String description;
+
+        public String getDescription() {
+            return description;
+        }
+
+        public void setDescription(String description) {
+            this.description = description;
+        }
+    }
+
+    public static class IRIReference implements Referenceable {
+
+        private String value;
+
+        public IRIReference() {}
+
+        public IRIReference(String value) {
+            this.value = value;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+    }
+
+    @JsonbTypeInfo(key = "type", value = {
+        @JsonbSubtype(alias = Location.TYPE, 
+                      type = Location.class)
+    })
+    public static interface LocationInterface {
+
+    }
+
+    public static class Location implements LocationInterface {
+
+        public final static String TYPE = "Location";
+
+        private String tags;
+        private Referenceable referenceable;
+
+        @JsonbTypeDeserializer(TagsDeserializer.class)
+        public String getTags() {
+            return tags;
+        }
+
+        public void setTags(String tags) {
+            this.tags = tags;
+        }
+        
+        @JsonbTypeDeserializer(ReferenceableDeserializer.class)
+        public Referenceable getReference() {
+            return referenceable;
+        }
+
+        public void setReference(Referenceable referenceable) {
+            this.referenceable = referenceable;
+        }
+    }
+
+    public static class TagsDeserializer implements JsonbDeserializer<String> {
+        @Override
+        public String deserialize(JsonParser jp, DeserializationContext dc, Type type) {
+            final JsonValue v = jp.getArray();
+            if (v instanceof JsonArray arr) {
+                return arr.stream()
+                        .filter(JsonString.class::isInstance)
+                        .map(JsonString.class::cast)
+                        .map(JsonString::getString)
+                        .collect(Collectors.joining(", "));
+            }
+            return null;
+        }
+
+    }
+    
+    public static class ReferenceableDeserializer implements JsonbDeserializer<Referenceable> {
+
+        @Override
+        public Referenceable deserialize(JsonParser jp, DeserializationContext dc, Type type) {
+            final JsonValue v = jp.getValue();
+            if (v instanceof JsonString str) {
+                return new IRIReference(str.getString());
+            }
+            if (v instanceof JsonObject obj) {
+                return dc.deserialize(Reference.class,
+                        Json.createParserFactory(Collections.EMPTY_MAP)
+                                .createParser(obj));
+            }
+            return null;
+        }
+    }
+
+}
diff --git a/src/test/java/org/eclipse/yasson/jsonstructure/JsonStructureToParserAdapterTest.java b/src/test/java/org/eclipse/yasson/jsonstructure/JsonStructureToParserAdapterTest.java
index f6d042a..d76984e 100644
--- a/src/test/java/org/eclipse/yasson/jsonstructure/JsonStructureToParserAdapterTest.java
+++ b/src/test/java/org/eclipse/yasson/jsonstructure/JsonStructureToParserAdapterTest.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -23,6 +24,7 @@
 import jakarta.json.JsonArrayBuilder;
 import jakarta.json.JsonObject;
 import jakarta.json.JsonObjectBuilder;
+import jakarta.json.bind.Jsonb;
 import jakarta.json.bind.JsonbBuilder;
 import jakarta.json.bind.JsonbConfig;
 import jakarta.json.spi.JsonProvider;
@@ -270,4 +272,54 @@
         assertEquals("String value 1", result.getInner().getInnerFirst());
         assertEquals("String value 2", result.getInner().getInnerSecond());
     }
+    
+    @Test
+    public void testGetValue() {
+        final String json = 
+        """
+        {
+            "type": "Location",
+            "reference": "dummy reference"
+        }
+        """;
+        
+        Jsonb jsonb = JsonbBuilder.create();
+        Issue673.LocationInterface result = jsonb.fromJson(json, Issue673.LocationInterface.class);
+	        
+        assertNotNull(result);
+        assertTrue(result instanceof Issue673.Location);
+        Issue673.Location location = (Issue673.Location) result;
+
+        Issue673.Referenceable refAble = location.getReference();
+        assertNotNull(refAble);
+        assertFalse(refAble instanceof Issue673.Reference);
+        assertTrue(refAble instanceof Issue673.IRIReference);
+        Issue673.IRIReference ref = (Issue673.IRIReference) refAble;
+
+        assertEquals("dummy reference", ref.getValue());
+    }
+    
+    @Test
+    public void testGetArray() {
+        final String json = 
+        """
+        {
+            "type": "Location",
+            "tags": ["test1", "test2"]
+        }
+        """;
+        
+        Jsonb jsonb = JsonbBuilder.create();
+        Issue673.LocationInterface result = jsonb.fromJson(json, Issue673.LocationInterface.class);
+        
+        assertNotNull(result);
+        assertTrue(result instanceof Issue673.Location);
+        Issue673.Location location = (Issue673.Location) result;
+        
+        String tags = location.getTags();
+        assertNotNull(tags);
+
+        assertEquals("test1, test2", tags);
+    }
+
 }
