fix merge
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
index 24e16f8..e5f1b76 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
@@ -170,8 +170,6 @@
                 throw new YAMLException(e);
             } catch (IllegalAccessException e) {
                 throw new YAMLException(e);
-            } catch (ClassNotFoundException e) {
-                throw new YAMLException(e);
             }
         }
 
@@ -307,6 +305,10 @@
                 result = constructStandardJavaInstance(type, node);
             } else {
                 // there must be only 1 constructor with 1 argument
+                if (Modifier.isAbstract(type.getModifiers())) {
+                    // use the tag when the runtime class cannot be instantiated
+                    type = getClassForNode(node);
+                }
                 java.lang.reflect.Constructor[] javaConstructors = type.getConstructors();
                 boolean found = false;
                 java.lang.reflect.Constructor javaConstructor = null;
@@ -488,18 +490,23 @@
         }
     }
 
-    protected Class<?> getClassForNode(Node node) throws ClassNotFoundException {
-        Class<? extends Object> customTag = typeTags.get(node.getTag());
-        if (customTag == null) {
+    protected Class<?> getClassForNode(Node node) {
+        Class<? extends Object> classForTag = typeTags.get(node.getTag());
+        if (classForTag == null) {
             if (node.getTag().length() < Tags.PREFIX.length()) {
                 throw new YAMLException("Unknown tag: " + node.getTag());
             }
             String name = node.getTag().substring(Tags.PREFIX.length());
-            Class<?> cl = Class.forName(name);
+            Class<?> cl;
+            try {
+                cl = Class.forName(name);
+            } catch (ClassNotFoundException e) {
+                throw new YAMLException("Class not found: " + name);
+            }
             typeTags.put(node.getTag(), cl);
             return cl;
         } else {
-            return customTag;
+            return classForTag;
         }
     }
 }
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java b/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java
index 97da4f9..b152969 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java
@@ -92,12 +92,12 @@
         assertEquals(1, beanHolder.getBean().getIntVal());

     }

 

-    public void qtestNonBean() {

+    public void testNonBean() {

         String yaml = "--- !!org.yaml.snakeyaml.issues.issue9.BeanHolder\nbean : !!org.yaml.snakeyaml.issues.issue9.Bean1 123";

         Iterator<Object> docs = new Yaml().loadAll(yaml).iterator();

         assertTrue(docs.hasNext());

         BeanHolder beanHolder = (BeanHolder) docs.next();

         assertEquals("BEAN_1", beanHolder.getBean().getStrVal());

-        assertEquals(1, beanHolder.getBean().getIntVal());

+        assertEquals(123, beanHolder.getBean().getIntVal());

     }

 }