diff --git a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
index c63c800..77cfcf5 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
@@ -324,6 +324,10 @@
 
     private Object createEmptyJavaBean(Node node) {
         try {
+            Class<? extends Object> type = node.getType();
+            if (Modifier.isAbstract(type.getModifiers())) {
+                node.setType(getClassForNode(node));
+            }
             /**
              * Using only default constructor. Everything else will be
              * initialized on 2nd step. If we do here some partial
@@ -336,6 +340,8 @@
             throw new YAMLException(e);
         } catch (IllegalAccessException e) {
             throw new YAMLException(e);
+        } catch (ClassNotFoundException e) {
+            throw new YAMLException(e);
         }
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/Shape.java b/src/test/java/org/yaml/snakeyaml/javabeans/Shape.java
new file mode 100644
index 0000000..30d3d54
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/Shape.java
@@ -0,0 +1,9 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.javabeans;
+
+public interface Shape {
+
+    public int process();
+}
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/Triangle.java b/src/test/java/org/yaml/snakeyaml/javabeans/Triangle.java
new file mode 100644
index 0000000..d5abf8c
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/Triangle.java
@@ -0,0 +1,20 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.javabeans;
+
+public class Triangle implements Shape {
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int process() {
+        return 7;
+    }
+}
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBean.java b/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBean.java
new file mode 100644
index 0000000..d51e0b8
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBean.java
@@ -0,0 +1,25 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.javabeans;
+
+public class TriangleBean {
+    private String name;
+    private Shape shape;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Shape getShape() {
+        return shape;
+    }
+
+    public void setShape(Shape shape) {
+        this.shape = shape;
+    }
+}
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java
new file mode 100644
index 0000000..bd1d7b1
--- /dev/null
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java
@@ -0,0 +1,60 @@
+/*
+ * See LICENSE file in distribution for copyright and licensing information.
+ */
+package org.yaml.snakeyaml.javabeans;
+
+import junit.framework.TestCase;
+
+import org.yaml.snakeyaml.JavaBeanDumper;
+import org.yaml.snakeyaml.JavaBeanLoader;
+
+public class TriangleBeanTest extends TestCase {
+
+    public void testGetTriangle() {
+        Triangle triangle = new Triangle();
+        triangle.setName("Triangle25");
+        TriangleBean bean = new TriangleBean();
+        bean.setShape(triangle);
+        bean.setName("Bean25");
+        JavaBeanDumper beanDumper = new JavaBeanDumper();
+        String output = beanDumper.dump(bean);
+        System.out.println(output);
+        assertEquals(
+                "name: Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle\n  name: Triangle25\n",
+                output);
+        JavaBeanLoader<TriangleBean> beanLoader = new JavaBeanLoader<TriangleBean>(
+                TriangleBean.class);
+        TriangleBean loadedBean = beanLoader.load(output);
+        assertNotNull(loadedBean);
+        assertEquals("Bean25", loadedBean.getName());
+        assertEquals(7, loadedBean.getShape().process());
+    }
+
+    public void testClassNotFound() {
+        String output = "name: Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle777\n  name: Triangle25\n";
+        JavaBeanLoader<TriangleBean> beanLoader = new JavaBeanLoader<TriangleBean>(
+                TriangleBean.class);
+        try {
+            beanLoader.load(output);
+            fail("Class not found expected.");
+        } catch (Exception e) {
+            assertEquals(
+                    "org.yaml.snakeyaml.error.YAMLException: java.lang.ClassNotFoundException: org.yaml.snakeyaml.javabeans.Triangle777",
+                    e.getMessage());
+        }
+    }
+
+    /**
+     * Runtime class is more important then the tag (which is ignored if the
+     * class is known)
+     */
+    public void testClassAndTag() {
+        String output = "name: !!whatever Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle\n  name: Triangle25\n";
+        JavaBeanLoader<TriangleBean> beanLoader = new JavaBeanLoader<TriangleBean>(
+                TriangleBean.class);
+        TriangleBean loadedBean = beanLoader.load(output);
+        assertNotNull(loadedBean);
+        assertEquals("Bean25", loadedBean.getName());
+        assertEquals(7, loadedBean.getShape().process());
+    }
+}
