If the class file does not contain any debugging information (if it was compiled with -g:none, or if it was stripped later), the normalization changes because BCEL replaces the source file name with <Unknown>. I think this is not desirable at all. javac code generation might change in corner cases depending on whether debugging information is generated or not (I haven't checked this), but this direct dependency on the debugging information is unnecessary.