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());
     }
 }
