diff --git a/java/src/main/java/org/msgpack/util/codegen/Constants.java b/java/src/main/java/org/msgpack/util/codegen/Constants.java
index 7474bd31..19327398 100644
--- a/java/src/main/java/org/msgpack/util/codegen/Constants.java
+++ b/java/src/main/java/org/msgpack/util/codegen/Constants.java
@@ -68,58 +68,6 @@ public interface Constants {
 
 	String METHOD_NAME_UNPACK = "unpack";
 
-	String METHOD_NAME_UNPACKBOOLEAN = "unpackBoolean";
-
-	String METHOD_NAME_UNPACKBYTE = "unpackByte";
-
-	String METHOD_NAME_UNPACKDOUBLE = "unpackDouble";
-
-	String METHOD_NAME_UNPACKFLOAT = "unpackFloat";
-
-	String METHOD_NAME_UNPACKINT = "unpackInt";
-
-	String METHOD_NAME_UNPACKLONG = "unpackLong";
-
-	String METHOD_NAME_UNPACKSHORT = "unpackShort";
-
-	String METHOD_NAME_UNPACKSTRING = "unpackString";
-
-	String METHOD_NAME_UNPACKBIGINTEGER = "unpackBigInteger";
-
-	String METHOD_NAME_UNPACKOBJECT = "unpackObject";
-
-	String METHOD_NAME_UNPACKBYTEARRAY = "unpackByteArray";
-
-	String METHOD_NAME_UNPACKARRAY = "unpackArray";
-
-	String METHOD_NAME_UNPACKMAP = "unpackMap";
-
-	String METHOD_NAME_ASARRAY = "asArray";
-
-	String METHOD_NAME_ASBOOLEAN = "asBoolean";
-
-	String METHOD_NAME_ASBYTE = "asByte";
-
-	String METHOD_NAME_ASSHORT = "asShort";
-
-	String METHOD_NAME_ASINT = "asInt";
-
-	String METHOD_NAME_ASFLOAT = "asFloat";
-
-	String METHOD_NAME_ASLONG = "asLong";
-
-	String METHOD_NAME_ASDOUBLE = "asDouble";
-
-	String METHOD_NAME_ASSTRING = "asString";
-
-	String METHOD_NAME_ASBYTEARRAY = "asByteArray";
-
-	String METHOD_NAME_ASBIGINTEGER = "asBigInteger";
-
-	String METHOD_NAME_ASLIST = "asList";
-
-	String METHOD_NAME_ASMAP = "asMap";
-
 	String STATEMENT_PACKER_PACKERMETHODBODY_01 = "%s _$$_t = (%s)$2; ";
 
 	String STATEMENT_PACKER_PACKERMETHODBODY_02 = "$1.packArray(%d); ";
diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java
index 43db5c6c..f45764f4 100644
--- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java
+++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java
@@ -207,11 +207,11 @@ public class DynamicCodeGenBase implements Constants {
 		}
 	}
 
-	static interface TemplateAccessor {
+	public static interface TemplateAccessor {
 		void setTemplates(Template[] templates);
 	}
 
-	static class TemplateAccessorImpl implements TemplateAccessor {
+	protected static class TemplateAccessorImpl implements TemplateAccessor {
 		public Class<?> type;
 
 		public Template[] _$$_templates;
@@ -416,67 +416,6 @@ public class DynamicCodeGenBase implements Constants {
 		}
 	}
 
-	public String getUnpackMethodName(Class<?> c)
-			throws DynamicCodeGenException {
-		if (c.equals(boolean.class) || c.equals(Boolean.class)) {
-			return METHOD_NAME_UNPACKBOOLEAN;
-		} else if (c.equals(byte.class) || c.equals(Byte.class)) {
-			return METHOD_NAME_UNPACKBYTE;
-		} else if (c.equals(short.class) || c.equals(Short.class)) {
-			return METHOD_NAME_UNPACKSHORT;
-		} else if (c.equals(int.class) || c.equals(Integer.class)) {
-			return METHOD_NAME_UNPACKINT;
-		} else if (c.equals(float.class) || c.equals(Float.class)) {
-			return METHOD_NAME_UNPACKFLOAT;
-		} else if (c.equals(long.class) || c.equals(Long.class)) {
-			return METHOD_NAME_UNPACKLONG;
-		} else if (c.equals(double.class) || c.equals(Double.class)) {
-			return METHOD_NAME_UNPACKDOUBLE;
-		} else if (c.equals(String.class)) {
-			return METHOD_NAME_UNPACKSTRING;
-		} else if (c.equals(byte[].class)) {
-			return METHOD_NAME_UNPACKBYTEARRAY;
-		} else if (c.equals(BigInteger.class)) {
-			return METHOD_NAME_UNPACKBIGINTEGER;
-		} else if (List.class.isAssignableFrom(c)) {
-			return METHOD_NAME_UNPACK;
-		} else if (Map.class.isAssignableFrom(c)) {
-			return METHOD_NAME_UNPACK;
-		} else {
-			throw new DynamicCodeGenException("Type error: " + c.getName());
-		}
-	}
-
-	public String getAsMethodName(Class<?> c) {
-		if (c.equals(boolean.class) || c.equals(Boolean.class)) {
-			return METHOD_NAME_ASBOOLEAN;
-		} else if (c.equals(byte.class) || c.equals(Byte.class)) {
-			return METHOD_NAME_ASBYTE;
-		} else if (c.equals(short.class) || c.equals(Short.class)) {
-			return METHOD_NAME_ASSHORT;
-		} else if (c.equals(int.class) || c.equals(Integer.class)) {
-			return METHOD_NAME_ASINT;
-		} else if (c.equals(float.class) || c.equals(Float.class)) {
-			return METHOD_NAME_ASFLOAT;
-		} else if (c.equals(long.class) || c.equals(Long.class)) {
-			return METHOD_NAME_ASLONG;
-		} else if (c.equals(double.class) || c.equals(Double.class)) {
-			return METHOD_NAME_ASDOUBLE;
-		} else if (c.equals(String.class)) {
-			return METHOD_NAME_ASSTRING;
-		} else if (c.equals(byte[].class)) {
-			return METHOD_NAME_ASBYTEARRAY;
-		} else if (c.equals(BigInteger.class)) {
-			return METHOD_NAME_ASBIGINTEGER;
-		} else if (List.class.isAssignableFrom(c)) {
-			return METHOD_NAME_ASLIST;
-		} else if (Map.class.isAssignableFrom(c)) {
-			return METHOD_NAME_ASMAP;
-		} else {
-			throw new DynamicCodeGenException("Type error: " + c.getName());
-		}
-	}
-
 	public static MessagePacker toMessagePacker(Template tmpl) {
 		if (tmpl instanceof BigIntegerTemplate) {
 			return BigIntegerPacker.getInstance();
diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicPacker.java b/java/src/main/java/org/msgpack/util/codegen/DynamicPacker.java
index a483c02e..fe0095c1 100644
--- a/java/src/main/java/org/msgpack/util/codegen/DynamicPacker.java
+++ b/java/src/main/java/org/msgpack/util/codegen/DynamicPacker.java
@@ -37,8 +37,8 @@ public class DynamicPacker {
 			Constructor<?> cons = packerClass
 					.getDeclaredConstructor(new Class[] { Class.class });
 			Object obj = cons.newInstance(new Object[] { c });
-			((MessagePackerAccessor) obj).setMessagePackers(gen
-					.getMessagePackers(c));
+			MessagePacker[] packers = gen.getMessagePackers(c);
+			((MessagePackerAccessor) obj).setMessagePackers(packers);
 			return (MessagePacker) obj;
 		} catch (InstantiationException e) {
 			throw new DynamicCodeGenException(e.getMessage(), e);