diff --git a/src/de/inetsoftware/classparser/ConstantInvokeDynamic.java b/src/de/inetsoftware/classparser/ConstantInvokeDynamic.java
new file mode 100644
index 0000000..d8bf465
--- /dev/null
+++ b/src/de/inetsoftware/classparser/ConstantInvokeDynamic.java
@@ -0,0 +1,63 @@
+/*
+   Copyright 2019 Volker Berlin (i-net software)
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+*/
+package de.inetsoftware.classparser;
+
+/**
+ * @author Volker Berlin
+ */
+public class ConstantInvokeDynamic implements Member {
+
+    private final ConstantNameAndType nameAndType;
+
+    /**
+     * Invoke dynamic info in the constant pool.
+     * https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.4.10
+     * 
+     * @param bootstrapMethodAttrIndex
+     *            a valid index into the bootstrap_methods array of the bootstrap method table
+     * @param nameAndType
+     *            the name and type
+     */
+    ConstantInvokeDynamic( int bootstrapMethodAttrIndex, ConstantNameAndType nameAndType ) {
+        this.nameAndType = nameAndType;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getName() {
+        return nameAndType.getName();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getClassName() {
+        return null;
+    }
+
+    /**
+     * Get the type of the method. For example "(Ljava.lang.String;)I"
+     */
+    @Override
+    public String getType() {
+        return nameAndType.getType();
+    }
+
+}
\ No newline at end of file
diff --git a/src/de/inetsoftware/classparser/ConstantPool.java b/src/de/inetsoftware/classparser/ConstantPool.java
index d4cfaec..41ad490 100644
--- a/src/de/inetsoftware/classparser/ConstantPool.java
+++ b/src/de/inetsoftware/classparser/ConstantPool.java
@@ -27,8 +27,7 @@ public class ConstantPool {
     private final Object[] constantPool;
 
     /**
-     * http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4
-     * http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#20080
+     * https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.4
      *
      * @param input
      *            the stream of the class
@@ -60,6 +59,7 @@ public class ConstantPool {
                     break;
                 case 7: //CONSTANT_Class
                 case 8: //CONSTANT_String
+                case 16: // CONSTANT_MethodType
                 case 19: // CONSTANT_Module
                 case 20: // CONSTANT_Package
                     pool[i] = new int[] { type, input.readUnsignedShort() };
@@ -68,8 +68,12 @@ public class ConstantPool {
                 case 10: //CONSTANT_Methodref
                 case 11: //CONSTANT_InterfaceMethodref
                 case 12: //CONSTANT_NameAndType
+                case 18: // CONSTANT_InvokeDynamic
                     pool[i] = new int[] { type, input.readUnsignedShort(), input.readUnsignedShort() };
                     break;
+                case 15: // CONSTANT_MethodHandle
+                    pool[i] = new int[] { type, input.readUnsignedByte(), input.readUnsignedShort() };
+                    break;
                 default:
                     throw new IOException( "Unknown constant pool type: " + type );
             }
@@ -85,7 +89,8 @@ public class ConstantPool {
                         case 7: //CONSTANT_Class
                             pool[i] = new ConstantClass( (String)pool[data[1]] );
                             break;
-                        case 8: //CONSTANT_String
+                        case 8: // CONSTANT_String
+                        case 16: // CONSTANT_MethodType
                         case 19: // CONSTANT_Module
                         case 20: // CONSTANT_Package
                             pool[i] = pool[data[1]];
@@ -114,6 +119,12 @@ public class ConstantPool {
                         case 12: //CONSTANT_NameAndType
                             pool[i] = new ConstantNameAndType( (String)pool[data[1]], (String)pool[data[2]] );
                             break;
+                        case 15: // CONSTANT_MethodHandle
+                            pool[i] = pool[data[2]];
+                            break;
+                        case 18: // CONSTANT_InvokeDynamic
+                            pool[i] = new ConstantInvokeDynamic( data[1], (ConstantNameAndType)pool[data[2]] );
+                            break;
                         default:
                             throw new IOException( "Unknown constant pool type: " + data[0] );
                     }