The second-class formulation of generics in Java 5.0 discards generic type information during compilation. As a result, Java 5.0 prohibits run-time type-dependent operations, generates unavoidable unchecked warnings (type errors) during compilation, and causes unexpected behavior during execution. The NextGen Generic Java compiler eliminates these pathologies by retaining parametric type information at runtime and customizing the code in generic classes and polymorphic methods where necessary to support (parametric) type-dependent operations. NextGen is a production compiler for the entire Java 5.0 language; it executes on standard JVMs and is backward compatible with existing libraries and other binaries. Benchmarks show that the first-class implementation of generic types in NextGen has essentially the same performance as Java 5.0 and significanlty outperforms alternative first-class implementation architectures. Categories and Subject Descriptors