diff --git a/Tests/ErrorJavaTokenNotJoos.joos b/Tests/A1tests/ErrorJavaTokenNotJoos.joos
similarity index 100%
rename from Tests/ErrorJavaTokenNotJoos.joos
rename to Tests/A1tests/ErrorJavaTokenNotJoos.joos
diff --git a/Tests/J1_01.java b/Tests/A1tests/J1_01.java
similarity index 100%
rename from Tests/J1_01.java
rename to Tests/A1tests/J1_01.java
diff --git a/Tests/J1_1_AmbiguousName_AccessResultFromMethod.java b/Tests/A1tests/J1_1_AmbiguousName_AccessResultFromMethod.java
similarity index 100%
rename from Tests/J1_1_AmbiguousName_AccessResultFromMethod.java
rename to Tests/A1tests/J1_1_AmbiguousName_AccessResultFromMethod.java
diff --git a/Tests/J1_1_Cast_Complement.java b/Tests/A1tests/J1_1_Cast_Complement.java
similarity index 100%
rename from Tests/J1_1_Cast_Complement.java
rename to Tests/A1tests/J1_1_Cast_Complement.java
diff --git a/Tests/J1_1_Cast_MultipleCastOfSameValue_1.java b/Tests/A1tests/J1_1_Cast_MultipleCastOfSameValue_1.java
similarity index 100%
rename from Tests/J1_1_Cast_MultipleCastOfSameValue_1.java
rename to Tests/A1tests/J1_1_Cast_MultipleCastOfSameValue_1.java
diff --git a/Tests/J1_1_Cast_MultipleCastOfSameValue_2.java b/Tests/A1tests/J1_1_Cast_MultipleCastOfSameValue_2.java
similarity index 100%
rename from Tests/J1_1_Cast_MultipleCastOfSameValue_2.java
rename to Tests/A1tests/J1_1_Cast_MultipleCastOfSameValue_2.java
diff --git a/Tests/J1_1_Cast_MultipleCastOfSameValue_3.java b/Tests/A1tests/J1_1_Cast_MultipleCastOfSameValue_3.java
similarity index 100%
rename from Tests/J1_1_Cast_MultipleCastOfSameValue_3.java
rename to Tests/A1tests/J1_1_Cast_MultipleCastOfSameValue_3.java
diff --git a/Tests/J1_1_Cast_MultipleReferenceArray.java b/Tests/A1tests/J1_1_Cast_MultipleReferenceArray.java
similarity index 100%
rename from Tests/J1_1_Cast_MultipleReferenceArray.java
rename to Tests/A1tests/J1_1_Cast_MultipleReferenceArray.java
diff --git a/Tests/J1_1_Escapes_3DigitOctalAndDigit.java b/Tests/A1tests/J1_1_Escapes_3DigitOctalAndDigit.java
similarity index 100%
rename from Tests/J1_1_Escapes_3DigitOctalAndDigit.java
rename to Tests/A1tests/J1_1_Escapes_3DigitOctalAndDigit.java
diff --git a/Tests/J1_1_Instanceof_InLazyExp.java b/Tests/A1tests/J1_1_Instanceof_InLazyExp.java
similarity index 100%
rename from Tests/J1_1_Instanceof_InLazyExp.java
rename to Tests/A1tests/J1_1_Instanceof_InLazyExp.java
diff --git a/Tests/J1_1_Instanceof_OfAdditiveExpression.java b/Tests/A1tests/J1_1_Instanceof_OfAdditiveExpression.java
similarity index 100%
rename from Tests/J1_1_Instanceof_OfAdditiveExpression.java
rename to Tests/A1tests/J1_1_Instanceof_OfAdditiveExpression.java
diff --git a/Tests/J1_1_Instanceof_OfCastExpression.java b/Tests/A1tests/J1_1_Instanceof_OfCastExpression.java
similarity index 100%
rename from Tests/J1_1_Instanceof_OfCastExpression.java
rename to Tests/A1tests/J1_1_Instanceof_OfCastExpression.java
diff --git a/Tests/J1_1_IntRange_NegativeInt.java b/Tests/A1tests/J1_1_IntRange_NegativeInt.java
similarity index 100%
rename from Tests/J1_1_IntRange_NegativeInt.java
rename to Tests/A1tests/J1_1_IntRange_NegativeInt.java
diff --git a/Tests/J1_ArrayCreateAndIndex.java b/Tests/A1tests/J1_ArrayCreateAndIndex.java
similarity index 100%
rename from Tests/J1_ArrayCreateAndIndex.java
rename to Tests/A1tests/J1_ArrayCreateAndIndex.java
diff --git a/Tests/J1_BigInt.java b/Tests/A1tests/J1_BigInt.java
similarity index 100%
rename from Tests/J1_BigInt.java
rename to Tests/A1tests/J1_BigInt.java
diff --git a/Tests/J1_CharCast.java b/Tests/A1tests/J1_CharCast.java
similarity index 100%
rename from Tests/J1_CharCast.java
rename to Tests/A1tests/J1_CharCast.java
diff --git a/Tests/J1_CharCharInit1.java b/Tests/A1tests/J1_CharCharInit1.java
similarity index 100%
rename from Tests/J1_CharCharInit1.java
rename to Tests/A1tests/J1_CharCharInit1.java
diff --git a/Tests/J1_CharCharInit2.java b/Tests/A1tests/J1_CharCharInit2.java
similarity index 100%
rename from Tests/J1_CharCharInit2.java
rename to Tests/A1tests/J1_CharCharInit2.java
diff --git a/Tests/J1_EscapeEscape.java b/Tests/A1tests/J1_EscapeEscape.java
similarity index 100%
rename from Tests/J1_EscapeEscape.java
rename to Tests/A1tests/J1_EscapeEscape.java
diff --git a/Tests/J1_ForUpdate_ClassCreation.java b/Tests/A1tests/J1_ForUpdate_ClassCreation.java
similarity index 100%
rename from Tests/J1_ForUpdate_ClassCreation.java
rename to Tests/A1tests/J1_ForUpdate_ClassCreation.java
diff --git a/Tests/J1_IntArrayDecl1.java b/Tests/A1tests/J1_IntArrayDecl1.java
similarity index 100%
rename from Tests/J1_IntArrayDecl1.java
rename to Tests/A1tests/J1_IntArrayDecl1.java
diff --git a/Tests/J1_IntArrayDecl2.java b/Tests/A1tests/J1_IntArrayDecl2.java
similarity index 100%
rename from Tests/J1_IntArrayDecl2.java
rename to Tests/A1tests/J1_IntArrayDecl2.java
diff --git a/Tests/J1_IntCast.java b/Tests/A1tests/J1_IntCast.java
similarity index 100%
rename from Tests/J1_IntCast.java
rename to Tests/A1tests/J1_IntCast.java
diff --git a/Tests/J1_IntCharInit.java b/Tests/A1tests/J1_IntCharInit.java
similarity index 100%
rename from Tests/J1_IntCharInit.java
rename to Tests/A1tests/J1_IntCharInit.java
diff --git a/Tests/J1_IntInit.java b/Tests/A1tests/J1_IntInit.java
similarity index 100%
rename from Tests/J1_IntInit.java
rename to Tests/A1tests/J1_IntInit.java
diff --git a/Tests/J1_IntRange_MinNegativeInt.java b/Tests/A1tests/J1_IntRange_MinNegativeInt.java
similarity index 100%
rename from Tests/J1_IntRange_MinNegativeInt.java
rename to Tests/A1tests/J1_IntRange_MinNegativeInt.java
diff --git a/Tests/J1_IsThisACast.java b/Tests/A1tests/J1_IsThisACast.java
similarity index 100%
rename from Tests/J1_IsThisACast.java
rename to Tests/A1tests/J1_IsThisACast.java
diff --git a/Tests/J1_NamedTypeArray.java b/Tests/A1tests/J1_NamedTypeArray.java
similarity index 100%
rename from Tests/J1_NamedTypeArray.java
rename to Tests/A1tests/J1_NamedTypeArray.java
diff --git a/Tests/J1_NegativeByteCast.java b/Tests/A1tests/J1_NegativeByteCast.java
similarity index 100%
rename from Tests/J1_NegativeByteCast.java
rename to Tests/A1tests/J1_NegativeByteCast.java
diff --git a/Tests/J1_NegativeCharCast.java b/Tests/A1tests/J1_NegativeCharCast.java
similarity index 100%
rename from Tests/J1_NegativeCharCast.java
rename to Tests/A1tests/J1_NegativeCharCast.java
diff --git a/Tests/J1_NegativeIntCast1.java b/Tests/A1tests/J1_NegativeIntCast1.java
similarity index 100%
rename from Tests/J1_NegativeIntCast1.java
rename to Tests/A1tests/J1_NegativeIntCast1.java
diff --git a/Tests/J1_NegativeIntCast2.java b/Tests/A1tests/J1_NegativeIntCast2.java
similarity index 100%
rename from Tests/J1_NegativeIntCast2.java
rename to Tests/A1tests/J1_NegativeIntCast2.java
diff --git a/Tests/J1_NegativeOneByteByteCast.java b/Tests/A1tests/J1_NegativeOneByteByteCast.java
similarity index 100%
rename from Tests/J1_NegativeOneByteByteCast.java
rename to Tests/A1tests/J1_NegativeOneByteByteCast.java
diff --git a/Tests/J1_NegativeOneByteCharCast.java b/Tests/A1tests/J1_NegativeOneByteCharCast.java
similarity index 100%
rename from Tests/J1_NegativeOneByteCharCast.java
rename to Tests/A1tests/J1_NegativeOneByteCharCast.java
diff --git a/Tests/J1_NegativeOneByteIntCast.java b/Tests/A1tests/J1_NegativeOneByteIntCast.java
similarity index 100%
rename from Tests/J1_NegativeOneByteIntCast.java
rename to Tests/A1tests/J1_NegativeOneByteIntCast.java
diff --git a/Tests/J1_NegativeOneByteShortCast.java b/Tests/A1tests/J1_NegativeOneByteShortCast.java
similarity index 100%
rename from Tests/J1_NegativeOneByteShortCast.java
rename to Tests/A1tests/J1_NegativeOneByteShortCast.java
diff --git a/Tests/J1_NegativeShortCast.java b/Tests/A1tests/J1_NegativeShortCast.java
similarity index 100%
rename from Tests/J1_NegativeShortCast.java
rename to Tests/A1tests/J1_NegativeShortCast.java
diff --git a/Tests/J1_SimpleTypeArray.java b/Tests/A1tests/J1_SimpleTypeArray.java
similarity index 100%
rename from Tests/J1_SimpleTypeArray.java
rename to Tests/A1tests/J1_SimpleTypeArray.java
diff --git a/Tests/J1_SmallInt.java b/Tests/A1tests/J1_SmallInt.java
similarity index 100%
rename from Tests/J1_SmallInt.java
rename to Tests/A1tests/J1_SmallInt.java
diff --git a/Tests/J1_abstractclass.java b/Tests/A1tests/J1_abstractclass.java
similarity index 100%
rename from Tests/J1_abstractclass.java
rename to Tests/A1tests/J1_abstractclass.java
diff --git a/Tests/J1_abstractmethodwithoutbody.java b/Tests/A1tests/J1_abstractmethodwithoutbody.java
similarity index 100%
rename from Tests/J1_abstractmethodwithoutbody.java
rename to Tests/A1tests/J1_abstractmethodwithoutbody.java
diff --git a/Tests/J1_arbitrarylocaldeclaration.java b/Tests/A1tests/J1_arbitrarylocaldeclaration.java
similarity index 100%
rename from Tests/J1_arbitrarylocaldeclaration.java
rename to Tests/A1tests/J1_arbitrarylocaldeclaration.java
diff --git a/Tests/J1_arithmeticoperations.java b/Tests/A1tests/J1_arithmeticoperations.java
similarity index 100%
rename from Tests/J1_arithmeticoperations.java
rename to Tests/A1tests/J1_arithmeticoperations.java
diff --git a/Tests/J1_assignment.java b/Tests/A1tests/J1_assignment.java
similarity index 100%
rename from Tests/J1_assignment.java
rename to Tests/A1tests/J1_assignment.java
diff --git a/Tests/J1_assignmentExp.java b/Tests/A1tests/J1_assignmentExp.java
similarity index 100%
rename from Tests/J1_assignmentExp.java
rename to Tests/A1tests/J1_assignmentExp.java
diff --git a/Tests/J1_barminusfoo.java b/Tests/A1tests/J1_barminusfoo.java
similarity index 100%
rename from Tests/J1_barminusfoo.java
rename to Tests/A1tests/J1_barminusfoo.java
diff --git a/Tests/J1_char.java b/Tests/A1tests/J1_char.java
similarity index 100%
rename from Tests/J1_char.java
rename to Tests/A1tests/J1_char.java
diff --git a/Tests/J1_char_escape.java b/Tests/A1tests/J1_char_escape.java
similarity index 100%
rename from Tests/J1_char_escape.java
rename to Tests/A1tests/J1_char_escape.java
diff --git a/Tests/J1_char_escape2.java b/Tests/A1tests/J1_char_escape2.java
similarity index 100%
rename from Tests/J1_char_escape2.java
rename to Tests/A1tests/J1_char_escape2.java
diff --git a/Tests/J1_char_escape3.java b/Tests/A1tests/J1_char_escape3.java
similarity index 100%
rename from Tests/J1_char_escape3.java
rename to Tests/A1tests/J1_char_escape3.java
diff --git a/Tests/J1_charadd.java b/Tests/A1tests/J1_charadd.java
similarity index 100%
rename from Tests/J1_charadd.java
rename to Tests/A1tests/J1_charadd.java
diff --git a/Tests/J1_charliterals.java b/Tests/A1tests/J1_charliterals.java
similarity index 100%
rename from Tests/J1_charliterals.java
rename to Tests/A1tests/J1_charliterals.java
diff --git a/Tests/J1_classinstance.java b/Tests/A1tests/J1_classinstance.java
similarity index 100%
rename from Tests/J1_classinstance.java
rename to Tests/A1tests/J1_classinstance.java
diff --git a/Tests/J1_commentsInExp1.java b/Tests/A1tests/J1_commentsInExp1.java
similarity index 100%
rename from Tests/J1_commentsInExp1.java
rename to Tests/A1tests/J1_commentsInExp1.java
diff --git a/Tests/J1_commentsInExp2.java b/Tests/A1tests/J1_commentsInExp2.java
similarity index 100%
rename from Tests/J1_commentsInExp2.java
rename to Tests/A1tests/J1_commentsInExp2.java
diff --git a/Tests/J1_commentsInExp3.java b/Tests/A1tests/J1_commentsInExp3.java
similarity index 100%
rename from Tests/J1_commentsInExp3.java
rename to Tests/A1tests/J1_commentsInExp3.java
diff --git a/Tests/J1_commentsInExp4.java b/Tests/A1tests/J1_commentsInExp4.java
similarity index 100%
rename from Tests/J1_commentsInExp4.java
rename to Tests/A1tests/J1_commentsInExp4.java
diff --git a/Tests/J1_commentsInExp5.java b/Tests/A1tests/J1_commentsInExp5.java
similarity index 100%
rename from Tests/J1_commentsInExp5.java
rename to Tests/A1tests/J1_commentsInExp5.java
diff --git a/Tests/J1_commentsInExp6.java b/Tests/A1tests/J1_commentsInExp6.java
similarity index 100%
rename from Tests/J1_commentsInExp6.java
rename to Tests/A1tests/J1_commentsInExp6.java
diff --git a/Tests/J1_commentsInExp7.java b/Tests/A1tests/J1_commentsInExp7.java
similarity index 100%
rename from Tests/J1_commentsInExp7.java
rename to Tests/A1tests/J1_commentsInExp7.java
diff --git a/Tests/J1_commentsInExp8.java b/Tests/A1tests/J1_commentsInExp8.java
similarity index 100%
rename from Tests/J1_commentsInExp8.java
rename to Tests/A1tests/J1_commentsInExp8.java
diff --git a/Tests/J1_commentsInExp9.java b/Tests/A1tests/J1_commentsInExp9.java
similarity index 100%
rename from Tests/J1_commentsInExp9.java
rename to Tests/A1tests/J1_commentsInExp9.java
diff --git a/Tests/J1_comparisonoperations.java b/Tests/A1tests/J1_comparisonoperations.java
similarity index 100%
rename from Tests/J1_comparisonoperations.java
rename to Tests/A1tests/J1_comparisonoperations.java
diff --git a/Tests/J1_concat_in_binop.java b/Tests/A1tests/J1_concat_in_binop.java
similarity index 100%
rename from Tests/J1_concat_in_binop.java
rename to Tests/A1tests/J1_concat_in_binop.java
diff --git a/Tests/J1_constructorWithSameNameAsMethod.java b/Tests/A1tests/J1_constructorWithSameNameAsMethod.java
similarity index 100%
rename from Tests/J1_constructorWithSameNameAsMethod.java
rename to Tests/A1tests/J1_constructorWithSameNameAsMethod.java
diff --git a/Tests/J1_constructorbodycast.java b/Tests/A1tests/J1_constructorbodycast.java
similarity index 100%
rename from Tests/J1_constructorbodycast.java
rename to Tests/A1tests/J1_constructorbodycast.java
diff --git a/Tests/J1_constructorparameter.java b/Tests/A1tests/J1_constructorparameter.java
similarity index 100%
rename from Tests/J1_constructorparameter.java
rename to Tests/A1tests/J1_constructorparameter.java
diff --git a/Tests/J1_eagerbooleanoperations.java b/Tests/A1tests/J1_eagerbooleanoperations.java
similarity index 100%
rename from Tests/J1_eagerbooleanoperations.java
rename to Tests/A1tests/J1_eagerbooleanoperations.java
diff --git a/Tests/J1_evalMethodInvocationFromParExp.java b/Tests/A1tests/J1_evalMethodInvocationFromParExp.java
similarity index 100%
rename from Tests/J1_evalMethodInvocationFromParExp.java
rename to Tests/A1tests/J1_evalMethodInvocationFromParExp.java
diff --git a/Tests/J1_exp.java b/Tests/A1tests/J1_exp.java
similarity index 100%
rename from Tests/J1_exp.java
rename to Tests/A1tests/J1_exp.java
diff --git a/Tests/J1_extends.java b/Tests/A1tests/J1_extends.java
similarity index 100%
rename from Tests/J1_extends.java
rename to Tests/A1tests/J1_extends.java
diff --git a/Tests/J1_externalcall.java b/Tests/A1tests/J1_externalcall.java
similarity index 100%
rename from Tests/J1_externalcall.java
rename to Tests/A1tests/J1_externalcall.java
diff --git a/Tests/J1_finalclass.java b/Tests/A1tests/J1_finalclass.java
similarity index 100%
rename from Tests/J1_finalclass.java
rename to Tests/A1tests/J1_finalclass.java
diff --git a/Tests/J1_finalclass2.java b/Tests/A1tests/J1_finalclass2.java
similarity index 100%
rename from Tests/J1_finalclass2.java
rename to Tests/A1tests/J1_finalclass2.java
diff --git a/Tests/J1_forAllwaysInit.java b/Tests/A1tests/J1_forAllwaysInit.java
similarity index 100%
rename from Tests/J1_forAllwaysInit.java
rename to Tests/A1tests/J1_forAllwaysInit.java
diff --git a/Tests/J1_forAlwaysInitAsWhile.java b/Tests/A1tests/J1_forAlwaysInitAsWhile.java
similarity index 100%
rename from Tests/J1_forAlwaysInitAsWhile.java
rename to Tests/A1tests/J1_forAlwaysInitAsWhile.java
diff --git a/Tests/J1_forMethodInit.java b/Tests/A1tests/J1_forMethodInit.java
similarity index 100%
rename from Tests/J1_forMethodInit.java
rename to Tests/A1tests/J1_forMethodInit.java
diff --git a/Tests/J1_forMethodUpdate.java b/Tests/A1tests/J1_forMethodUpdate.java
similarity index 100%
rename from Tests/J1_forMethodUpdate.java
rename to Tests/A1tests/J1_forMethodUpdate.java
diff --git a/Tests/J1_forMethodUpdate2.java b/Tests/A1tests/J1_forMethodUpdate2.java
similarity index 100%
rename from Tests/J1_forMethodUpdate2.java
rename to Tests/A1tests/J1_forMethodUpdate2.java
diff --git a/Tests/J1_forWithoutExp.java b/Tests/A1tests/J1_forWithoutExp.java
similarity index 100%
rename from Tests/J1_forWithoutExp.java
rename to Tests/A1tests/J1_forWithoutExp.java
diff --git a/Tests/J1_forWithoutInit.java b/Tests/A1tests/J1_forWithoutInit.java
similarity index 100%
rename from Tests/J1_forWithoutInit.java
rename to Tests/A1tests/J1_forWithoutInit.java
diff --git a/Tests/J1_forWithoutUpdate.java b/Tests/A1tests/J1_forWithoutUpdate.java
similarity index 100%
rename from Tests/J1_forWithoutUpdate.java
rename to Tests/A1tests/J1_forWithoutUpdate.java
diff --git a/Tests/J1_for_no_short_if.java b/Tests/A1tests/J1_for_no_short_if.java
similarity index 100%
rename from Tests/J1_for_no_short_if.java
rename to Tests/A1tests/J1_for_no_short_if.java
diff --git a/Tests/J1_forbodycast.java b/Tests/A1tests/J1_forbodycast.java
similarity index 100%
rename from Tests/J1_forbodycast.java
rename to Tests/A1tests/J1_forbodycast.java
diff --git a/Tests/J1_forifstatements1.java b/Tests/A1tests/J1_forifstatements1.java
similarity index 100%
rename from Tests/J1_forifstatements1.java
rename to Tests/A1tests/J1_forifstatements1.java
diff --git a/Tests/J1_forifstatements2.java b/Tests/A1tests/J1_forifstatements2.java
similarity index 100%
rename from Tests/J1_forifstatements2.java
rename to Tests/A1tests/J1_forifstatements2.java
diff --git a/Tests/J1_forifstatements3.java b/Tests/A1tests/J1_forifstatements3.java
similarity index 100%
rename from Tests/J1_forifstatements3.java
rename to Tests/A1tests/J1_forifstatements3.java
diff --git a/Tests/J1_forinfor.java b/Tests/A1tests/J1_forinfor.java
similarity index 100%
rename from Tests/J1_forinfor.java
rename to Tests/A1tests/J1_forinfor.java
diff --git a/Tests/J1_forinitcast.java b/Tests/A1tests/J1_forinitcast.java
similarity index 100%
rename from Tests/J1_forinitcast.java
rename to Tests/A1tests/J1_forinitcast.java
diff --git a/Tests/J1_forupdatecast.java b/Tests/A1tests/J1_forupdatecast.java
similarity index 100%
rename from Tests/J1_forupdatecast.java
rename to Tests/A1tests/J1_forupdatecast.java
diff --git a/Tests/J1_hello_comment.java b/Tests/A1tests/J1_hello_comment.java
similarity index 100%
rename from Tests/J1_hello_comment.java
rename to Tests/A1tests/J1_hello_comment.java
diff --git a/Tests/J1_if.java b/Tests/A1tests/J1_if.java
similarity index 100%
rename from Tests/J1_if.java
rename to Tests/A1tests/J1_if.java
diff --git a/Tests/J1_ifThenElse.java b/Tests/A1tests/J1_ifThenElse.java
similarity index 100%
rename from Tests/J1_ifThenElse.java
rename to Tests/A1tests/J1_ifThenElse.java
diff --git a/Tests/J1_if_then.java b/Tests/A1tests/J1_if_then.java
similarity index 100%
rename from Tests/J1_if_then.java
rename to Tests/A1tests/J1_if_then.java
diff --git a/Tests/J1_if_then_for.java b/Tests/A1tests/J1_if_then_for.java
similarity index 100%
rename from Tests/J1_if_then_for.java
rename to Tests/A1tests/J1_if_then_for.java
diff --git a/Tests/J1_implements.java b/Tests/A1tests/J1_implements.java
similarity index 100%
rename from Tests/J1_implements.java
rename to Tests/A1tests/J1_implements.java
diff --git a/Tests/J1_integerFun.java b/Tests/A1tests/J1_integerFun.java
similarity index 100%
rename from Tests/J1_integerFun.java
rename to Tests/A1tests/J1_integerFun.java
diff --git a/Tests/J1_integerFun1.java b/Tests/A1tests/J1_integerFun1.java
similarity index 100%
rename from Tests/J1_integerFun1.java
rename to Tests/A1tests/J1_integerFun1.java
diff --git a/Tests/J1_integerFun3.java b/Tests/A1tests/J1_integerFun3.java
similarity index 100%
rename from Tests/J1_integerFun3.java
rename to Tests/A1tests/J1_integerFun3.java
diff --git a/Tests/J1_intliterals.java b/Tests/A1tests/J1_intliterals.java
similarity index 100%
rename from Tests/J1_intliterals.java
rename to Tests/A1tests/J1_intliterals.java
diff --git a/Tests/J1_intminusfoo.java b/Tests/A1tests/J1_intminusfoo.java
similarity index 100%
rename from Tests/J1_intminusfoo.java
rename to Tests/A1tests/J1_intminusfoo.java
diff --git a/Tests/J1_lazybooleanoperations.java b/Tests/A1tests/J1_lazybooleanoperations.java
similarity index 100%
rename from Tests/J1_lazybooleanoperations.java
rename to Tests/A1tests/J1_lazybooleanoperations.java
diff --git a/Tests/J1_maxint_comment.java b/Tests/A1tests/J1_maxint_comment.java
similarity index 100%
rename from Tests/J1_maxint_comment.java
rename to Tests/A1tests/J1_maxint_comment.java
diff --git a/Tests/J1_minuschar.java b/Tests/A1tests/J1_minuschar.java
similarity index 100%
rename from Tests/J1_minuschar.java
rename to Tests/A1tests/J1_minuschar.java
diff --git a/Tests/J1_minusminusminus.java b/Tests/A1tests/J1_minusminusminus.java
similarity index 100%
rename from Tests/J1_minusminusminus.java
rename to Tests/A1tests/J1_minusminusminus.java
diff --git a/Tests/J1_negativeintcast3.java b/Tests/A1tests/J1_negativeintcast3.java
similarity index 100%
rename from Tests/J1_negativeintcast3.java
rename to Tests/A1tests/J1_negativeintcast3.java
diff --git a/Tests/J1_newobject.java b/Tests/A1tests/J1_newobject.java
similarity index 100%
rename from Tests/J1_newobject.java
rename to Tests/A1tests/J1_newobject.java
diff --git a/Tests/J1_nonemptyconstructor.java b/Tests/A1tests/J1_nonemptyconstructor.java
similarity index 100%
rename from Tests/J1_nonemptyconstructor.java
rename to Tests/A1tests/J1_nonemptyconstructor.java
diff --git a/Tests/J1_nullinstanceof1.java b/Tests/A1tests/J1_nullinstanceof1.java
similarity index 100%
rename from Tests/J1_nullinstanceof1.java
rename to Tests/A1tests/J1_nullinstanceof1.java
diff --git a/Tests/J1_nullliteral.java b/Tests/A1tests/J1_nullliteral.java
similarity index 100%
rename from Tests/J1_nullliteral.java
rename to Tests/A1tests/J1_nullliteral.java
diff --git a/Tests/J1_octal_escape.java b/Tests/A1tests/J1_octal_escape.java
similarity index 100%
rename from Tests/J1_octal_escape.java
rename to Tests/A1tests/J1_octal_escape.java
diff --git a/Tests/J1_octal_escape2.java b/Tests/A1tests/J1_octal_escape2.java
similarity index 100%
rename from Tests/J1_octal_escape2.java
rename to Tests/A1tests/J1_octal_escape2.java
diff --git a/Tests/J1_octal_escape3.java b/Tests/A1tests/J1_octal_escape3.java
similarity index 100%
rename from Tests/J1_octal_escape3.java
rename to Tests/A1tests/J1_octal_escape3.java
diff --git a/Tests/J1_octal_escape4.java b/Tests/A1tests/J1_octal_escape4.java
similarity index 100%
rename from Tests/J1_octal_escape4.java
rename to Tests/A1tests/J1_octal_escape4.java
diff --git a/Tests/J1_octal_escape5.java b/Tests/A1tests/J1_octal_escape5.java
similarity index 100%
rename from Tests/J1_octal_escape5.java
rename to Tests/A1tests/J1_octal_escape5.java
diff --git a/Tests/J1_primitivecasts.java b/Tests/A1tests/J1_primitivecasts.java
similarity index 100%
rename from Tests/J1_primitivecasts.java
rename to Tests/A1tests/J1_primitivecasts.java
diff --git a/Tests/J1_protected.java b/Tests/A1tests/J1_protected.java
similarity index 100%
rename from Tests/J1_protected.java
rename to Tests/A1tests/J1_protected.java
diff --git a/Tests/J1_protectedfields.java b/Tests/A1tests/J1_protectedfields.java
similarity index 100%
rename from Tests/J1_protectedfields.java
rename to Tests/A1tests/J1_protectedfields.java
diff --git a/Tests/J1_publicclasses.java b/Tests/A1tests/J1_publicclasses.java
similarity index 100%
rename from Tests/J1_publicclasses.java
rename to Tests/A1tests/J1_publicclasses.java
diff --git a/Tests/J1_publicconstructors.java b/Tests/A1tests/J1_publicconstructors.java
similarity index 100%
rename from Tests/J1_publicconstructors.java
rename to Tests/A1tests/J1_publicconstructors.java
diff --git a/Tests/J1_publicfields.java b/Tests/A1tests/J1_publicfields.java
similarity index 100%
rename from Tests/J1_publicfields.java
rename to Tests/A1tests/J1_publicfields.java
diff --git a/Tests/J1_publicmethods.java b/Tests/A1tests/J1_publicmethods.java
similarity index 100%
rename from Tests/J1_publicmethods.java
rename to Tests/A1tests/J1_publicmethods.java
diff --git a/Tests/J1_staticmethoddeclaration.java b/Tests/A1tests/J1_staticmethoddeclaration.java
similarity index 100%
rename from Tests/J1_staticmethoddeclaration.java
rename to Tests/A1tests/J1_staticmethoddeclaration.java
diff --git a/Tests/J1_stringliteralinvoke.java b/Tests/A1tests/J1_stringliteralinvoke.java
similarity index 100%
rename from Tests/J1_stringliteralinvoke.java
rename to Tests/A1tests/J1_stringliteralinvoke.java
diff --git a/Tests/J1_stringliterals.java b/Tests/A1tests/J1_stringliterals.java
similarity index 100%
rename from Tests/J1_stringliterals.java
rename to Tests/A1tests/J1_stringliterals.java
diff --git a/Tests/J1_weird_chars.java b/Tests/A1tests/J1_weird_chars.java
similarity index 100%
rename from Tests/J1_weird_chars.java
rename to Tests/A1tests/J1_weird_chars.java
diff --git a/Tests/J1w_Interface.java b/Tests/A1tests/J1w_Interface.java
similarity index 100%
rename from Tests/J1w_Interface.java
rename to Tests/A1tests/J1w_Interface.java
diff --git a/Tests/J1w_RestrictedNative.java b/Tests/A1tests/J1w_RestrictedNative.java
similarity index 100%
rename from Tests/J1w_RestrictedNative.java
rename to Tests/A1tests/J1w_RestrictedNative.java
diff --git a/Tests/J1w_StaticField.java b/Tests/A1tests/J1w_StaticField.java
similarity index 100%
rename from Tests/J1w_StaticField.java
rename to Tests/A1tests/J1w_StaticField.java
diff --git a/Tests/J2_staticFieldDecl.java b/Tests/A1tests/J2_staticFieldDecl.java
similarity index 100%
rename from Tests/J2_staticFieldDecl.java
rename to Tests/A1tests/J2_staticFieldDecl.java
diff --git a/Tests/J2_staticfielddeclaration.java b/Tests/A1tests/J2_staticfielddeclaration.java
similarity index 100%
rename from Tests/J2_staticfielddeclaration.java
rename to Tests/A1tests/J2_staticfielddeclaration.java
diff --git a/Tests/Je_16_Circularity_1.java b/Tests/A1tests/Je_16_Circularity_1.java
similarity index 100%
rename from Tests/Je_16_Circularity_1.java
rename to Tests/A1tests/Je_16_Circularity_1.java
diff --git a/Tests/Je_16_Circularity_2.java b/Tests/A1tests/Je_16_Circularity_2.java
similarity index 100%
rename from Tests/Je_16_Circularity_2.java
rename to Tests/A1tests/Je_16_Circularity_2.java
diff --git a/Tests/Je_16_Circularity_3.java b/Tests/A1tests/Je_16_Circularity_3.java
similarity index 100%
rename from Tests/Je_16_Circularity_3.java
rename to Tests/A1tests/Je_16_Circularity_3.java
diff --git a/Tests/Je_16_Circularity_4_Rhoshaped.java b/Tests/A1tests/Je_16_Circularity_4_Rhoshaped.java
similarity index 100%
rename from Tests/Je_16_Circularity_4_Rhoshaped.java
rename to Tests/A1tests/Je_16_Circularity_4_Rhoshaped.java
diff --git a/Tests/Je_16_ClosestMatch_Array.java b/Tests/A1tests/Je_16_ClosestMatch_Array.java
similarity index 100%
rename from Tests/Je_16_ClosestMatch_Array.java
rename to Tests/A1tests/Je_16_ClosestMatch_Array.java
diff --git a/Tests/Je_16_ClosestMatch_Constructor_NoClosestMatch_This.java b/Tests/A1tests/Je_16_ClosestMatch_Constructor_NoClosestMatch_This.java
similarity index 100%
rename from Tests/Je_16_ClosestMatch_Constructor_NoClosestMatch_This.java
rename to Tests/A1tests/Je_16_ClosestMatch_Constructor_NoClosestMatch_This.java
diff --git a/Tests/Je_16_IncDec_Final_ArrayLengthDec.java b/Tests/A1tests/Je_16_IncDec_Final_ArrayLengthDec.java
similarity index 100%
rename from Tests/Je_16_IncDec_Final_ArrayLengthDec.java
rename to Tests/A1tests/Je_16_IncDec_Final_ArrayLengthDec.java
diff --git a/Tests/Je_16_IncDec_Final_ArrayLengthInc.java b/Tests/A1tests/Je_16_IncDec_Final_ArrayLengthInc.java
similarity index 100%
rename from Tests/Je_16_IncDec_Final_ArrayLengthInc.java
rename to Tests/A1tests/Je_16_IncDec_Final_ArrayLengthInc.java
diff --git a/Tests/Je_16_IncDec_Final_PostDec.java b/Tests/A1tests/Je_16_IncDec_Final_PostDec.java
similarity index 100%
rename from Tests/Je_16_IncDec_Final_PostDec.java
rename to Tests/A1tests/Je_16_IncDec_Final_PostDec.java
diff --git a/Tests/Je_16_IncDec_Final_PostInc.java b/Tests/A1tests/Je_16_IncDec_Final_PostInc.java
similarity index 100%
rename from Tests/Je_16_IncDec_Final_PostInc.java
rename to Tests/A1tests/Je_16_IncDec_Final_PostInc.java
diff --git a/Tests/Je_16_IncDec_Final_PreDec.java b/Tests/A1tests/Je_16_IncDec_Final_PreDec.java
similarity index 100%
rename from Tests/Je_16_IncDec_Final_PreDec.java
rename to Tests/A1tests/Je_16_IncDec_Final_PreDec.java
diff --git a/Tests/Je_16_IncDec_Final_PreInc.java b/Tests/A1tests/Je_16_IncDec_Final_PreInc.java
similarity index 100%
rename from Tests/Je_16_IncDec_Final_PreInc.java
rename to Tests/A1tests/Je_16_IncDec_Final_PreInc.java
diff --git a/Tests/Je_16_IncDec_StringPostDec.java b/Tests/A1tests/Je_16_IncDec_StringPostDec.java
similarity index 100%
rename from Tests/Je_16_IncDec_StringPostDec.java
rename to Tests/A1tests/Je_16_IncDec_StringPostDec.java
diff --git a/Tests/Je_16_IncDec_StringPostInc.java b/Tests/A1tests/Je_16_IncDec_StringPostInc.java
similarity index 100%
rename from Tests/Je_16_IncDec_StringPostInc.java
rename to Tests/A1tests/Je_16_IncDec_StringPostInc.java
diff --git a/Tests/Je_16_IncDec_StringPreDec.java b/Tests/A1tests/Je_16_IncDec_StringPreDec.java
similarity index 100%
rename from Tests/Je_16_IncDec_StringPreDec.java
rename to Tests/A1tests/Je_16_IncDec_StringPreDec.java
diff --git a/Tests/Je_16_IncDec_StringPreInc.java b/Tests/A1tests/Je_16_IncDec_StringPreInc.java
similarity index 100%
rename from Tests/Je_16_IncDec_StringPreInc.java
rename to Tests/A1tests/Je_16_IncDec_StringPreInc.java
diff --git a/Tests/Je_16_MultiArrayCreation_Assign_1.java b/Tests/A1tests/Je_16_MultiArrayCreation_Assign_1.java
similarity index 100%
rename from Tests/Je_16_MultiArrayCreation_Assign_1.java
rename to Tests/A1tests/Je_16_MultiArrayCreation_Assign_1.java
diff --git a/Tests/Je_16_MultiArrayCreation_Null.java b/Tests/A1tests/Je_16_MultiArrayCreation_Null.java
similarity index 100%
rename from Tests/Je_16_MultiArrayCreation_Null.java
rename to Tests/A1tests/Je_16_MultiArrayCreation_Null.java
diff --git a/Tests/Je_16_StaticThis_ArgumentToSuper.java b/Tests/A1tests/Je_16_StaticThis_ArgumentToSuper.java
similarity index 100%
rename from Tests/Je_16_StaticThis_ArgumentToSuper.java
rename to Tests/A1tests/Je_16_StaticThis_ArgumentToSuper.java
diff --git a/Tests/Je_16_StaticThis_ArgumentToThis.java b/Tests/A1tests/Je_16_StaticThis_ArgumentToThis.java
similarity index 100%
rename from Tests/Je_16_StaticThis_ArgumentToThis.java
rename to Tests/A1tests/Je_16_StaticThis_ArgumentToThis.java
diff --git a/Tests/Je_16_SuperThis_InvalidSuperParameter.java b/Tests/A1tests/Je_16_SuperThis_InvalidSuperParameter.java
similarity index 100%
rename from Tests/Je_16_SuperThis_InvalidSuperParameter.java
rename to Tests/A1tests/Je_16_SuperThis_InvalidSuperParameter.java
diff --git a/Tests/Je_16_SuperThis_InvalidThisParameter.java b/Tests/A1tests/Je_16_SuperThis_InvalidThisParameter.java
similarity index 100%
rename from Tests/Je_16_SuperThis_InvalidThisParameter.java
rename to Tests/A1tests/Je_16_SuperThis_InvalidThisParameter.java
diff --git a/Tests/Je_16_Throw_NoThrows.java b/Tests/A1tests/Je_16_Throw_NoThrows.java
similarity index 100%
rename from Tests/Je_16_Throw_NoThrows.java
rename to Tests/A1tests/Je_16_Throw_NoThrows.java
diff --git a/Tests/Je_16_Throw_NotSubclass.java b/Tests/A1tests/Je_16_Throw_NotSubclass.java
similarity index 100%
rename from Tests/Je_16_Throw_NotSubclass.java
rename to Tests/A1tests/Je_16_Throw_NotSubclass.java
diff --git a/Tests/Je_16_Throw_SimpleType.java b/Tests/A1tests/Je_16_Throw_SimpleType.java
similarity index 100%
rename from Tests/Je_16_Throw_SimpleType.java
rename to Tests/A1tests/Je_16_Throw_SimpleType.java
diff --git a/Tests/Je_16_Throw_ThrowsNotSuperclass.java b/Tests/A1tests/Je_16_Throw_ThrowsNotSuperclass.java
similarity index 100%
rename from Tests/Je_16_Throw_ThrowsNotSuperclass.java
rename to Tests/A1tests/Je_16_Throw_ThrowsNotSuperclass.java
diff --git a/Tests/Je_16_Throws_This.java b/Tests/A1tests/Je_16_Throws_This.java
similarity index 100%
rename from Tests/Je_16_Throws_This.java
rename to Tests/A1tests/Je_16_Throws_This.java
diff --git a/Tests/Je_17_Unreachable_AfterThrow.java b/Tests/A1tests/Je_17_Unreachable_AfterThrow.java
similarity index 100%
rename from Tests/Je_17_Unreachable_AfterThrow.java
rename to Tests/A1tests/Je_17_Unreachable_AfterThrow.java
diff --git a/Tests/Je_17_Unreachable_AfterThrowInConditional.java b/Tests/A1tests/Je_17_Unreachable_AfterThrowInConditional.java
similarity index 100%
rename from Tests/Je_17_Unreachable_AfterThrowInConditional.java
rename to Tests/A1tests/Je_17_Unreachable_AfterThrowInConditional.java
diff --git a/Tests/Je_1_AbstractClass_AbstractConstructor.java b/Tests/A1tests/Je_1_AbstractClass_AbstractConstructor.java
similarity index 100%
rename from Tests/Je_1_AbstractClass_AbstractConstructor.java
rename to Tests/A1tests/Je_1_AbstractClass_AbstractConstructor.java
diff --git a/Tests/Je_1_AbstractClass_Final.java b/Tests/A1tests/Je_1_AbstractClass_Final.java
similarity index 100%
rename from Tests/Je_1_AbstractClass_Final.java
rename to Tests/A1tests/Je_1_AbstractClass_Final.java
diff --git a/Tests/Je_1_AbstractMethodCannotBeFinal.java b/Tests/A1tests/Je_1_AbstractMethodCannotBeFinal.java
similarity index 100%
rename from Tests/Je_1_AbstractMethodCannotBeFinal.java
rename to Tests/A1tests/Je_1_AbstractMethodCannotBeFinal.java
diff --git a/Tests/Je_1_AbstractMethod_Body.java b/Tests/A1tests/Je_1_AbstractMethod_Body.java
similarity index 100%
rename from Tests/Je_1_AbstractMethod_Body.java
rename to Tests/A1tests/Je_1_AbstractMethod_Body.java
diff --git a/Tests/Je_1_AbstractMethod_EmptyBody.java b/Tests/A1tests/Je_1_AbstractMethod_EmptyBody.java
similarity index 100%
rename from Tests/Je_1_AbstractMethod_EmptyBody.java
rename to Tests/A1tests/Je_1_AbstractMethod_EmptyBody.java
diff --git a/Tests/Je_1_AbstractMethod_Final.java b/Tests/A1tests/Je_1_AbstractMethod_Final.java
similarity index 100%
rename from Tests/Je_1_AbstractMethod_Final.java
rename to Tests/A1tests/Je_1_AbstractMethod_Final.java
diff --git a/Tests/Je_1_AbstractMethod_Static.java b/Tests/A1tests/Je_1_AbstractMethod_Static.java
similarity index 100%
rename from Tests/Je_1_AbstractMethod_Static.java
rename to Tests/A1tests/Je_1_AbstractMethod_Static.java
diff --git a/Tests/Je_1_Access_PrivateLocal.java b/Tests/A1tests/Je_1_Access_PrivateLocal.java
similarity index 100%
rename from Tests/Je_1_Access_PrivateLocal.java
rename to Tests/A1tests/Je_1_Access_PrivateLocal.java
diff --git a/Tests/Je_1_Access_ProtectedLocal.java b/Tests/A1tests/Je_1_Access_ProtectedLocal.java
similarity index 100%
rename from Tests/Je_1_Access_ProtectedLocal.java
rename to Tests/A1tests/Je_1_Access_ProtectedLocal.java
diff --git a/Tests/Je_1_Access_PublicLocal.java b/Tests/A1tests/Je_1_Access_PublicLocal.java
similarity index 100%
rename from Tests/Je_1_Access_PublicLocal.java
rename to Tests/A1tests/Je_1_Access_PublicLocal.java
diff --git a/Tests/Je_1_Array_Data.java b/Tests/A1tests/Je_1_Array_Data.java
similarity index 100%
rename from Tests/Je_1_Array_Data.java
rename to Tests/A1tests/Je_1_Array_Data.java
diff --git a/Tests/Je_1_Array_Data_Empty.java b/Tests/A1tests/Je_1_Array_Data_Empty.java
similarity index 100%
rename from Tests/Je_1_Array_Data_Empty.java
rename to Tests/A1tests/Je_1_Array_Data_Empty.java
diff --git a/Tests/Je_1_Array_OnVariableNameInDecl.java b/Tests/A1tests/Je_1_Array_OnVariableNameInDecl.java
similarity index 100%
rename from Tests/Je_1_Array_OnVariableNameInDecl.java
rename to Tests/A1tests/Je_1_Array_OnVariableNameInDecl.java
diff --git a/Tests/Je_1_CastToArrayLvalue.java b/Tests/A1tests/Je_1_CastToArrayLvalue.java
similarity index 100%
rename from Tests/Je_1_CastToArrayLvalue.java
rename to Tests/A1tests/Je_1_CastToArrayLvalue.java
diff --git a/Tests/Je_1_Cast_DoubleParenthese.java b/Tests/A1tests/Je_1_Cast_DoubleParenthese.java
similarity index 100%
rename from Tests/Je_1_Cast_DoubleParenthese.java
rename to Tests/A1tests/Je_1_Cast_DoubleParenthese.java
diff --git a/Tests/Je_1_Cast_Expression.java b/Tests/A1tests/Je_1_Cast_Expression.java
similarity index 100%
rename from Tests/Je_1_Cast_Expression.java
rename to Tests/A1tests/Je_1_Cast_Expression.java
diff --git a/Tests/Je_1_Cast_LeftHandSideOfAssignment_1.java b/Tests/A1tests/Je_1_Cast_LeftHandSideOfAssignment_1.java
similarity index 100%
rename from Tests/Je_1_Cast_LeftHandSideOfAssignment_1.java
rename to Tests/A1tests/Je_1_Cast_LeftHandSideOfAssignment_1.java
diff --git a/Tests/Je_1_Cast_LeftHandSideOfAssignment_2.java b/Tests/A1tests/Je_1_Cast_LeftHandSideOfAssignment_2.java
similarity index 100%
rename from Tests/Je_1_Cast_LeftHandSideOfAssignment_2.java
rename to Tests/A1tests/Je_1_Cast_LeftHandSideOfAssignment_2.java
diff --git a/Tests/Je_1_Cast_NoParenthesis.java b/Tests/A1tests/Je_1_Cast_NoParenthesis.java
similarity index 100%
rename from Tests/Je_1_Cast_NoParenthesis.java
rename to Tests/A1tests/Je_1_Cast_NoParenthesis.java
diff --git a/Tests/Je_1_Cast_NonstaticField.java b/Tests/A1tests/Je_1_Cast_NonstaticField.java
similarity index 100%
rename from Tests/Je_1_Cast_NonstaticField.java
rename to Tests/A1tests/Je_1_Cast_NonstaticField.java
diff --git a/Tests/Je_1_Cast_ToMethodInvoke.java b/Tests/A1tests/Je_1_Cast_ToMethodInvoke.java
similarity index 100%
rename from Tests/Je_1_Cast_ToMethodInvoke.java
rename to Tests/A1tests/Je_1_Cast_ToMethodInvoke.java
diff --git a/Tests/Je_1_ClassDeclaration_WrongFileName.java b/Tests/A1tests/Je_1_ClassDeclaration_WrongFileName.java
similarity index 100%
rename from Tests/Je_1_ClassDeclaration_WrongFileName.java
rename to Tests/A1tests/Je_1_ClassDeclaration_WrongFileName.java
diff --git a/Tests/Je_1_ClassDeclaration_WrongFileName_Dot.foo.java b/Tests/A1tests/Je_1_ClassDeclaration_WrongFileName_Dot.foo.java
similarity index 100%
rename from Tests/Je_1_ClassDeclaration_WrongFileName_Dot.foo.java
rename to Tests/A1tests/Je_1_ClassDeclaration_WrongFileName_Dot.foo.java
diff --git a/Tests/Je_1_ClassDeclaration_WrongFileName_Suffix.java b/Tests/A1tests/Je_1_ClassDeclaration_WrongFileName_Suffix.java
similarity index 100%
rename from Tests/Je_1_ClassDeclaration_WrongFileName_Suffix.java
rename to Tests/A1tests/Je_1_ClassDeclaration_WrongFileName_Suffix.java
diff --git a/Tests/Je_1_ClassInstantiation_InstantiateSimpleType.java b/Tests/A1tests/Je_1_ClassInstantiation_InstantiateSimpleType.java
similarity index 100%
rename from Tests/Je_1_ClassInstantiation_InstantiateSimpleType.java
rename to Tests/A1tests/Je_1_ClassInstantiation_InstantiateSimpleType.java
diff --git a/Tests/Je_1_ClassInstantiation_InstantiateSimpleValue.java b/Tests/A1tests/Je_1_ClassInstantiation_InstantiateSimpleValue.java
similarity index 100%
rename from Tests/Je_1_ClassInstantiation_InstantiateSimpleValue.java
rename to Tests/A1tests/Je_1_ClassInstantiation_InstantiateSimpleValue.java
diff --git a/Tests/Je_1_Declarations_MultipleVars.java b/Tests/A1tests/Je_1_Declarations_MultipleVars.java
similarity index 100%
rename from Tests/Je_1_Declarations_MultipleVars.java
rename to Tests/A1tests/Je_1_Declarations_MultipleVars.java
diff --git a/Tests/Je_1_Declarations_MultipleVars_Fields.java b/Tests/A1tests/Je_1_Declarations_MultipleVars_Fields.java
similarity index 100%
rename from Tests/Je_1_Declarations_MultipleVars_Fields.java
rename to Tests/A1tests/Je_1_Declarations_MultipleVars_Fields.java
diff --git a/Tests/Je_1_Escapes_1DigitOctal_1.java b/Tests/A1tests/Je_1_Escapes_1DigitOctal_1.java
similarity index 100%
rename from Tests/Je_1_Escapes_1DigitOctal_1.java
rename to Tests/A1tests/Je_1_Escapes_1DigitOctal_1.java
diff --git a/Tests/Je_1_Escapes_1DigitOctal_2.java b/Tests/A1tests/Je_1_Escapes_1DigitOctal_2.java
similarity index 100%
rename from Tests/Je_1_Escapes_1DigitOctal_2.java
rename to Tests/A1tests/Je_1_Escapes_1DigitOctal_2.java
diff --git a/Tests/Je_1_Escapes_1DigitOctal_3.java b/Tests/A1tests/Je_1_Escapes_1DigitOctal_3.java
similarity index 100%
rename from Tests/Je_1_Escapes_1DigitOctal_3.java
rename to Tests/A1tests/Je_1_Escapes_1DigitOctal_3.java
diff --git a/Tests/Je_1_Escapes_1DigitOctal_4.java b/Tests/A1tests/Je_1_Escapes_1DigitOctal_4.java
similarity index 100%
rename from Tests/Je_1_Escapes_1DigitOctal_4.java
rename to Tests/A1tests/Je_1_Escapes_1DigitOctal_4.java
diff --git a/Tests/Je_1_Escapes_2DigitOctal_1.java b/Tests/A1tests/Je_1_Escapes_2DigitOctal_1.java
similarity index 100%
rename from Tests/Je_1_Escapes_2DigitOctal_1.java
rename to Tests/A1tests/Je_1_Escapes_2DigitOctal_1.java
diff --git a/Tests/Je_1_Escapes_2DigitOctal_2.java b/Tests/A1tests/Je_1_Escapes_2DigitOctal_2.java
similarity index 100%
rename from Tests/Je_1_Escapes_2DigitOctal_2.java
rename to Tests/A1tests/Je_1_Escapes_2DigitOctal_2.java
diff --git a/Tests/Je_1_Escapes_2DigitOctal_3.java b/Tests/A1tests/Je_1_Escapes_2DigitOctal_3.java
similarity index 100%
rename from Tests/Je_1_Escapes_2DigitOctal_3.java
rename to Tests/A1tests/Je_1_Escapes_2DigitOctal_3.java
diff --git a/Tests/Je_1_Escapes_3DigitOctal_1.java b/Tests/A1tests/Je_1_Escapes_3DigitOctal_1.java
similarity index 100%
rename from Tests/Je_1_Escapes_3DigitOctal_1.java
rename to Tests/A1tests/Je_1_Escapes_3DigitOctal_1.java
diff --git a/Tests/Je_1_Escapes_3DigitOctal_2.java b/Tests/A1tests/Je_1_Escapes_3DigitOctal_2.java
similarity index 100%
rename from Tests/Je_1_Escapes_3DigitOctal_2.java
rename to Tests/A1tests/Je_1_Escapes_3DigitOctal_2.java
diff --git a/Tests/Je_1_Escapes_3DigitOctal_3.java b/Tests/A1tests/Je_1_Escapes_3DigitOctal_3.java
similarity index 100%
rename from Tests/Je_1_Escapes_3DigitOctal_3.java
rename to Tests/A1tests/Je_1_Escapes_3DigitOctal_3.java
diff --git a/Tests/Je_1_Escapes_NonExistingEscape.java b/Tests/A1tests/Je_1_Escapes_NonExistingEscape.java
similarity index 100%
rename from Tests/Je_1_Escapes_NonExistingEscape.java
rename to Tests/A1tests/Je_1_Escapes_NonExistingEscape.java
diff --git a/Tests/Je_1_Extends_NamedTypeArray.java b/Tests/A1tests/Je_1_Extends_NamedTypeArray.java
similarity index 100%
rename from Tests/Je_1_Extends_NamedTypeArray.java
rename to Tests/A1tests/Je_1_Extends_NamedTypeArray.java
diff --git a/Tests/Je_1_Extends_SimpleType.java b/Tests/A1tests/Je_1_Extends_SimpleType.java
similarity index 100%
rename from Tests/Je_1_Extends_SimpleType.java
rename to Tests/A1tests/Je_1_Extends_SimpleType.java
diff --git a/Tests/Je_1_Extends_SimpleTypeArray.java b/Tests/A1tests/Je_1_Extends_SimpleTypeArray.java
similarity index 100%
rename from Tests/Je_1_Extends_SimpleTypeArray.java
rename to Tests/A1tests/Je_1_Extends_SimpleTypeArray.java
diff --git a/Tests/Je_1_Extends_Value.java b/Tests/A1tests/Je_1_Extends_Value.java
similarity index 100%
rename from Tests/Je_1_Extends_Value.java
rename to Tests/A1tests/Je_1_Extends_Value.java
diff --git a/Tests/Je_1_FinalField_NoInitializer.java b/Tests/A1tests/Je_1_FinalField_NoInitializer.java
similarity index 100%
rename from Tests/Je_1_FinalField_NoInitializer.java
rename to Tests/A1tests/Je_1_FinalField_NoInitializer.java
diff --git a/Tests/Je_1_For_DeclarationInUpdate.java b/Tests/A1tests/Je_1_For_DeclarationInUpdate.java
similarity index 100%
rename from Tests/Je_1_For_DeclarationInUpdate.java
rename to Tests/A1tests/Je_1_For_DeclarationInUpdate.java
diff --git a/Tests/Je_1_For_MultipleDeclarationsInInit.java b/Tests/A1tests/Je_1_For_MultipleDeclarationsInInit.java
similarity index 100%
rename from Tests/Je_1_For_MultipleDeclarationsInInit.java
rename to Tests/A1tests/Je_1_For_MultipleDeclarationsInInit.java
diff --git a/Tests/Je_1_For_MultipleUpdates.java b/Tests/A1tests/Je_1_For_MultipleUpdates.java
similarity index 100%
rename from Tests/Je_1_For_MultipleUpdates.java
rename to Tests/A1tests/Je_1_For_MultipleUpdates.java
diff --git a/Tests/Je_1_For_NotAStatementInUpdate.java b/Tests/A1tests/Je_1_For_NotAStatementInUpdate.java
similarity index 100%
rename from Tests/Je_1_For_NotAStatementInUpdate.java
rename to Tests/A1tests/Je_1_For_NotAStatementInUpdate.java
diff --git a/Tests/Je_1_For_PrimaryExpInInit.java b/Tests/A1tests/Je_1_For_PrimaryExpInInit.java
similarity index 100%
rename from Tests/Je_1_For_PrimaryExpInInit.java
rename to Tests/A1tests/Je_1_For_PrimaryExpInInit.java
diff --git a/Tests/Je_1_For_PrimaryExpInUpdate.java b/Tests/A1tests/Je_1_For_PrimaryExpInUpdate.java
similarity index 100%
rename from Tests/Je_1_For_PrimaryExpInUpdate.java
rename to Tests/A1tests/Je_1_For_PrimaryExpInUpdate.java
diff --git a/Tests/Je_1_For_StatementInInit.java b/Tests/A1tests/Je_1_For_StatementInInit.java
similarity index 100%
rename from Tests/Je_1_For_StatementInInit.java
rename to Tests/A1tests/Je_1_For_StatementInInit.java
diff --git a/Tests/Je_1_Formals_Final.java b/Tests/A1tests/Je_1_Formals_Final.java
similarity index 100%
rename from Tests/Je_1_Formals_Final.java
rename to Tests/A1tests/Je_1_Formals_Final.java
diff --git a/Tests/Je_1_Formals_Initializer_Constructor.java b/Tests/A1tests/Je_1_Formals_Initializer_Constructor.java
similarity index 100%
rename from Tests/Je_1_Formals_Initializer_Constructor.java
rename to Tests/A1tests/Je_1_Formals_Initializer_Constructor.java
diff --git a/Tests/Je_1_Formals_Initializer_Method.java b/Tests/A1tests/Je_1_Formals_Initializer_Method.java
similarity index 100%
rename from Tests/Je_1_Formals_Initializer_Method.java
rename to Tests/A1tests/Je_1_Formals_Initializer_Method.java
diff --git a/Tests/Je_1_Identifiers_Goto.java b/Tests/A1tests/Je_1_Identifiers_Goto.java
similarity index 100%
rename from Tests/Je_1_Identifiers_Goto.java
rename to Tests/A1tests/Je_1_Identifiers_Goto.java
diff --git a/Tests/Je_1_Identifiers_Private.java b/Tests/A1tests/Je_1_Identifiers_Private.java
similarity index 100%
rename from Tests/Je_1_Identifiers_Private.java
rename to Tests/A1tests/Je_1_Identifiers_Private.java
diff --git a/Tests/Je_1_Implements_NamedTypeArray.java b/Tests/A1tests/Je_1_Implements_NamedTypeArray.java
similarity index 100%
rename from Tests/Je_1_Implements_NamedTypeArray.java
rename to Tests/A1tests/Je_1_Implements_NamedTypeArray.java
diff --git a/Tests/Je_1_Implements_SimpleType.java b/Tests/A1tests/Je_1_Implements_SimpleType.java
similarity index 100%
rename from Tests/Je_1_Implements_SimpleType.java
rename to Tests/A1tests/Je_1_Implements_SimpleType.java
diff --git a/Tests/Je_1_Implements_SimpleTypeArray.java b/Tests/A1tests/Je_1_Implements_SimpleTypeArray.java
similarity index 100%
rename from Tests/Je_1_Implements_SimpleTypeArray.java
rename to Tests/A1tests/Je_1_Implements_SimpleTypeArray.java
diff --git a/Tests/Je_1_Implements_Value.java b/Tests/A1tests/Je_1_Implements_Value.java
similarity index 100%
rename from Tests/Je_1_Implements_Value.java
rename to Tests/A1tests/Je_1_Implements_Value.java
diff --git a/Tests/Je_1_IncDec_IncDecNotLvalue.java b/Tests/A1tests/Je_1_IncDec_IncDecNotLvalue.java
similarity index 100%
rename from Tests/Je_1_IncDec_IncDecNotLvalue.java
rename to Tests/A1tests/Je_1_IncDec_IncDecNotLvalue.java
diff --git a/Tests/Je_1_IncDec_Parenthesized.java b/Tests/A1tests/Je_1_IncDec_Parenthesized.java
similarity index 100%
rename from Tests/Je_1_IncDec_Parenthesized.java
rename to Tests/A1tests/Je_1_IncDec_Parenthesized.java
diff --git a/Tests/Je_1_InstanceInitializers.java b/Tests/A1tests/Je_1_InstanceInitializers.java
similarity index 100%
rename from Tests/Je_1_InstanceInitializers.java
rename to Tests/A1tests/Je_1_InstanceInitializers.java
diff --git a/Tests/Je_1_InstanceOf_Null.java b/Tests/A1tests/Je_1_InstanceOf_Null.java
similarity index 100%
rename from Tests/Je_1_InstanceOf_Null.java
rename to Tests/A1tests/Je_1_InstanceOf_Null.java
diff --git a/Tests/Je_1_InstanceOf_Primitive.java b/Tests/A1tests/Je_1_InstanceOf_Primitive.java
similarity index 100%
rename from Tests/Je_1_InstanceOf_Primitive.java
rename to Tests/A1tests/Je_1_InstanceOf_Primitive.java
diff --git a/Tests/Je_1_InstanceOf_Void.java b/Tests/A1tests/Je_1_InstanceOf_Void.java
similarity index 100%
rename from Tests/Je_1_InstanceOf_Void.java
rename to Tests/A1tests/Je_1_InstanceOf_Void.java
diff --git a/Tests/Je_1_IntRange_MinusTooBigInt.java b/Tests/A1tests/Je_1_IntRange_MinusTooBigInt.java
similarity index 100%
rename from Tests/Je_1_IntRange_MinusTooBigInt.java
rename to Tests/A1tests/Je_1_IntRange_MinusTooBigInt.java
diff --git a/Tests/Je_1_IntRange_PlusTooBigInt.java b/Tests/A1tests/Je_1_IntRange_PlusTooBigInt.java
similarity index 100%
rename from Tests/Je_1_IntRange_PlusTooBigInt.java
rename to Tests/A1tests/Je_1_IntRange_PlusTooBigInt.java
diff --git a/Tests/Je_1_IntRange_TooBigInt.java b/Tests/A1tests/Je_1_IntRange_TooBigInt.java
similarity index 100%
rename from Tests/Je_1_IntRange_TooBigInt.java
rename to Tests/A1tests/Je_1_IntRange_TooBigInt.java
diff --git a/Tests/Je_1_IntRange_TooBigIntNegated.java b/Tests/A1tests/Je_1_IntRange_TooBigIntNegated.java
similarity index 100%
rename from Tests/Je_1_IntRange_TooBigIntNegated.java
rename to Tests/A1tests/Je_1_IntRange_TooBigIntNegated.java
diff --git a/Tests/Je_1_IntRange_TooBigInt_InInitializer.java b/Tests/A1tests/Je_1_IntRange_TooBigInt_InInitializer.java
similarity index 100%
rename from Tests/Je_1_IntRange_TooBigInt_InInitializer.java
rename to Tests/A1tests/Je_1_IntRange_TooBigInt_InInitializer.java
diff --git a/Tests/Je_1_Interface_ConstructorAbstract.java b/Tests/A1tests/Je_1_Interface_ConstructorAbstract.java
similarity index 100%
rename from Tests/Je_1_Interface_ConstructorAbstract.java
rename to Tests/A1tests/Je_1_Interface_ConstructorAbstract.java
diff --git a/Tests/Je_1_Interface_ConstructorBody.java b/Tests/A1tests/Je_1_Interface_ConstructorBody.java
similarity index 100%
rename from Tests/Je_1_Interface_ConstructorBody.java
rename to Tests/A1tests/Je_1_Interface_ConstructorBody.java
diff --git a/Tests/Je_1_Interface_Field.java b/Tests/A1tests/Je_1_Interface_Field.java
similarity index 100%
rename from Tests/Je_1_Interface_Field.java
rename to Tests/A1tests/Je_1_Interface_Field.java
diff --git a/Tests/Je_1_Interface_FinalMethod.java b/Tests/A1tests/Je_1_Interface_FinalMethod.java
similarity index 100%
rename from Tests/Je_1_Interface_FinalMethod.java
rename to Tests/A1tests/Je_1_Interface_FinalMethod.java
diff --git a/Tests/Je_1_Interface_MethodBody.java b/Tests/A1tests/Je_1_Interface_MethodBody.java
similarity index 100%
rename from Tests/Je_1_Interface_MethodBody.java
rename to Tests/A1tests/Je_1_Interface_MethodBody.java
diff --git a/Tests/Je_1_Interface_NoBody.java b/Tests/A1tests/Je_1_Interface_NoBody.java
similarity index 100%
rename from Tests/Je_1_Interface_NoBody.java
rename to Tests/A1tests/Je_1_Interface_NoBody.java
diff --git a/Tests/Je_1_Interface_StaticMethod.java b/Tests/A1tests/Je_1_Interface_StaticMethod.java
similarity index 100%
rename from Tests/Je_1_Interface_StaticMethod.java
rename to Tests/A1tests/Je_1_Interface_StaticMethod.java
diff --git a/Tests/Je_1_Interface_WrongFileName.java b/Tests/A1tests/Je_1_Interface_WrongFileName.java
similarity index 100%
rename from Tests/Je_1_Interface_WrongFileName.java
rename to Tests/A1tests/Je_1_Interface_WrongFileName.java
diff --git a/Tests/Je_1_JoosTypes_Double.java b/Tests/A1tests/Je_1_JoosTypes_Double.java
similarity index 100%
rename from Tests/Je_1_JoosTypes_Double.java
rename to Tests/A1tests/Je_1_JoosTypes_Double.java
diff --git a/Tests/Je_1_JoosTypes_Float.java b/Tests/A1tests/Je_1_JoosTypes_Float.java
similarity index 100%
rename from Tests/Je_1_JoosTypes_Float.java
rename to Tests/A1tests/Je_1_JoosTypes_Float.java
diff --git a/Tests/Je_1_JoosTypes_Long.java b/Tests/A1tests/Je_1_JoosTypes_Long.java
similarity index 100%
rename from Tests/Je_1_JoosTypes_Long.java
rename to Tests/A1tests/Je_1_JoosTypes_Long.java
diff --git a/Tests/Je_1_LabeledStatements.java b/Tests/A1tests/Je_1_LabeledStatements.java
similarity index 100%
rename from Tests/Je_1_LabeledStatements.java
rename to Tests/A1tests/Je_1_LabeledStatements.java
diff --git a/Tests/Je_1_Literals_Class.java b/Tests/A1tests/Je_1_Literals_Class.java
similarity index 100%
rename from Tests/Je_1_Literals_Class.java
rename to Tests/A1tests/Je_1_Literals_Class.java
diff --git a/Tests/Je_1_Literals_Exponential.java b/Tests/A1tests/Je_1_Literals_Exponential.java
similarity index 100%
rename from Tests/Je_1_Literals_Exponential.java
rename to Tests/A1tests/Je_1_Literals_Exponential.java
diff --git a/Tests/Je_1_Literals_Float.java b/Tests/A1tests/Je_1_Literals_Float.java
similarity index 100%
rename from Tests/Je_1_Literals_Float.java
rename to Tests/A1tests/Je_1_Literals_Float.java
diff --git a/Tests/Je_1_Literals_Hex.java b/Tests/A1tests/Je_1_Literals_Hex.java
similarity index 100%
rename from Tests/Je_1_Literals_Hex.java
rename to Tests/A1tests/Je_1_Literals_Hex.java
diff --git a/Tests/Je_1_Literals_Long.java b/Tests/A1tests/Je_1_Literals_Long.java
similarity index 100%
rename from Tests/Je_1_Literals_Long.java
rename to Tests/A1tests/Je_1_Literals_Long.java
diff --git a/Tests/Je_1_Literals_Octal.java b/Tests/A1tests/Je_1_Literals_Octal.java
similarity index 100%
rename from Tests/Je_1_Literals_Octal.java
rename to Tests/A1tests/Je_1_Literals_Octal.java
diff --git a/Tests/Je_1_Locals_Final.java b/Tests/A1tests/Je_1_Locals_Final.java
similarity index 100%
rename from Tests/Je_1_Locals_Final.java
rename to Tests/A1tests/Je_1_Locals_Final.java
diff --git a/Tests/Je_1_Methods_MissingAccessModifier.java b/Tests/A1tests/Je_1_Methods_MissingAccessModifier.java
similarity index 100%
rename from Tests/Je_1_Methods_MissingAccessModifier.java
rename to Tests/A1tests/Je_1_Methods_MissingAccessModifier.java
diff --git a/Tests/Je_1_Methods_NonAbstractNoBody.java b/Tests/A1tests/Je_1_Methods_NonAbstractNoBody.java
similarity index 100%
rename from Tests/Je_1_Methods_NonAbstractNoBody.java
rename to Tests/A1tests/Je_1_Methods_NonAbstractNoBody.java
diff --git a/Tests/Je_1_Methods_StaticFinal.java b/Tests/A1tests/Je_1_Methods_StaticFinal.java
similarity index 100%
rename from Tests/Je_1_Methods_StaticFinal.java
rename to Tests/A1tests/Je_1_Methods_StaticFinal.java
diff --git a/Tests/Je_1_MultiArrayCreation_Assign_2.java b/Tests/A1tests/Je_1_MultiArrayCreation_Assign_2.java
similarity index 100%
rename from Tests/Je_1_MultiArrayCreation_Assign_2.java
rename to Tests/A1tests/Je_1_MultiArrayCreation_Assign_2.java
diff --git a/Tests/Je_1_MultiArrayCreation_MissingDimension_1.java b/Tests/A1tests/Je_1_MultiArrayCreation_MissingDimension_1.java
similarity index 100%
rename from Tests/Je_1_MultiArrayCreation_MissingDimension_1.java
rename to Tests/A1tests/Je_1_MultiArrayCreation_MissingDimension_1.java
diff --git a/Tests/Je_1_MultiArrayCreation_MissingDimension_2.java b/Tests/A1tests/Je_1_MultiArrayCreation_MissingDimension_2.java
similarity index 100%
rename from Tests/Je_1_MultiArrayCreation_MissingDimension_2.java
rename to Tests/A1tests/Je_1_MultiArrayCreation_MissingDimension_2.java
diff --git a/Tests/Je_1_MultiArrayCreation_MissingDimension_4.java b/Tests/A1tests/Je_1_MultiArrayCreation_MissingDimension_4.java
similarity index 100%
rename from Tests/Je_1_MultiArrayCreation_MissingDimension_4.java
rename to Tests/A1tests/Je_1_MultiArrayCreation_MissingDimension_4.java
diff --git a/Tests/Je_1_MultiArrayCreation_NoType.java b/Tests/A1tests/Je_1_MultiArrayCreation_NoType.java
similarity index 100%
rename from Tests/Je_1_MultiArrayCreation_NoType.java
rename to Tests/A1tests/Je_1_MultiArrayCreation_NoType.java
diff --git a/Tests/Je_1_MultiArrayTypes_Dimensions.java b/Tests/A1tests/Je_1_MultiArrayTypes_Dimensions.java
similarity index 100%
rename from Tests/Je_1_MultiArrayTypes_Dimensions.java
rename to Tests/A1tests/Je_1_MultiArrayTypes_Dimensions.java
diff --git a/Tests/Je_1_NegIntTooLow.java b/Tests/A1tests/Je_1_NegIntTooLow.java
similarity index 100%
rename from Tests/Je_1_NegIntTooLow.java
rename to Tests/A1tests/Je_1_NegIntTooLow.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseAnd.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseAnd.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseAnd.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseAnd.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseOr.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseOr.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseOr.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseOr.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseXOR.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseXOR.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseXOR.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_BitwiseXOR.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_Divide.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Divide.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_Divide.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Divide.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_Minus.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Minus.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_Minus.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Minus.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_Multiply.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Multiply.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_Multiply.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Multiply.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_Plus.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Plus.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_Plus.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Plus.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_Remainder.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Remainder.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_Remainder.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_Remainder.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_ShiftLeft.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_ShiftLeft.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_ShiftLeft.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_ShiftLeft.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_SignShiftRight.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_SignShiftRight.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_SignShiftRight.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_SignShiftRight.java
diff --git a/Tests/Je_1_NonJoosConstructs_AssignmentOperations_ZeroShiftRight.java b/Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_ZeroShiftRight.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_AssignmentOperations_ZeroShiftRight.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_AssignmentOperations_ZeroShiftRight.java
diff --git a/Tests/Je_1_NonJoosConstructs_BitShift_Left.java b/Tests/A1tests/Je_1_NonJoosConstructs_BitShift_Left.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_BitShift_Left.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_BitShift_Left.java
diff --git a/Tests/Je_1_NonJoosConstructs_BitShift_SignRight.java b/Tests/A1tests/Je_1_NonJoosConstructs_BitShift_SignRight.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_BitShift_SignRight.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_BitShift_SignRight.java
diff --git a/Tests/Je_1_NonJoosConstructs_BitShift_ZeroRight.java b/Tests/A1tests/Je_1_NonJoosConstructs_BitShift_ZeroRight.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_BitShift_ZeroRight.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_BitShift_ZeroRight.java
diff --git a/Tests/Je_1_NonJoosConstructs_Bitwise_Negation.java b/Tests/A1tests/Je_1_NonJoosConstructs_Bitwise_Negation.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Bitwise_Negation.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Bitwise_Negation.java
diff --git a/Tests/Je_1_NonJoosConstructs_Break.java b/Tests/A1tests/Je_1_NonJoosConstructs_Break.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Break.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Break.java
diff --git a/Tests/Je_1_NonJoosConstructs_Choice.java b/Tests/A1tests/Je_1_NonJoosConstructs_Choice.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Choice.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Choice.java
diff --git a/Tests/Je_1_NonJoosConstructs_Continue.java b/Tests/A1tests/Je_1_NonJoosConstructs_Continue.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Continue.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Continue.java
diff --git a/Tests/Je_1_NonJoosConstructs_DoWhile.java b/Tests/A1tests/Je_1_NonJoosConstructs_DoWhile.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_DoWhile.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_DoWhile.java
diff --git a/Tests/Je_1_NonJoosConstructs_ExpressionSequence.java b/Tests/A1tests/Je_1_NonJoosConstructs_ExpressionSequence.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_ExpressionSequence.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_ExpressionSequence.java
diff --git a/Tests/Je_1_NonJoosConstructs_MultipleTypesPrFile.java b/Tests/A1tests/Je_1_NonJoosConstructs_MultipleTypesPrFile.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_MultipleTypesPrFile.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_MultipleTypesPrFile.java
diff --git a/Tests/Je_1_NonJoosConstructs_NestedTypes.java b/Tests/A1tests/Je_1_NonJoosConstructs_NestedTypes.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_NestedTypes.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_NestedTypes.java
diff --git a/Tests/Je_1_NonJoosConstructs_PrivateFields.java b/Tests/A1tests/Je_1_NonJoosConstructs_PrivateFields.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_PrivateFields.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_PrivateFields.java
diff --git a/Tests/Je_1_NonJoosConstructs_PrivateMethods.java b/Tests/A1tests/Je_1_NonJoosConstructs_PrivateMethods.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_PrivateMethods.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_PrivateMethods.java
diff --git a/Tests/Je_1_NonJoosConstructs_StaticInitializers.java b/Tests/A1tests/Je_1_NonJoosConstructs_StaticInitializers.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_StaticInitializers.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_StaticInitializers.java
diff --git a/Tests/Je_1_NonJoosConstructs_Strictftp.java b/Tests/A1tests/Je_1_NonJoosConstructs_Strictftp.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Strictftp.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Strictftp.java
diff --git a/Tests/Je_1_NonJoosConstructs_SuperMethodCall.java b/Tests/A1tests/Je_1_NonJoosConstructs_SuperMethodCall.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_SuperMethodCall.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_SuperMethodCall.java
diff --git a/Tests/Je_1_NonJoosConstructs_Switch.java b/Tests/A1tests/Je_1_NonJoosConstructs_Switch.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Switch.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Switch.java
diff --git a/Tests/Je_1_NonJoosConstructs_Synchronized.java b/Tests/A1tests/Je_1_NonJoosConstructs_Synchronized.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Synchronized.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Synchronized.java
diff --git a/Tests/Je_1_NonJoosConstructs_SynchronizedStatement.java b/Tests/A1tests/Je_1_NonJoosConstructs_SynchronizedStatement.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_SynchronizedStatement.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_SynchronizedStatement.java
diff --git a/Tests/Je_1_NonJoosConstructs_Transient.java b/Tests/A1tests/Je_1_NonJoosConstructs_Transient.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Transient.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Transient.java
diff --git a/Tests/Je_1_NonJoosConstructs_UnaryPlus.java b/Tests/A1tests/Je_1_NonJoosConstructs_UnaryPlus.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_UnaryPlus.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_UnaryPlus.java
diff --git a/Tests/Je_1_NonJoosConstructs_Unicode.java b/Tests/A1tests/Je_1_NonJoosConstructs_Unicode.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Unicode.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Unicode.java
diff --git a/Tests/Je_1_NonJoosConstructs_Volatile.java b/Tests/A1tests/Je_1_NonJoosConstructs_Volatile.java
similarity index 100%
rename from Tests/Je_1_NonJoosConstructs_Volatile.java
rename to Tests/A1tests/Je_1_NonJoosConstructs_Volatile.java
diff --git a/Tests/Je_1_PackagePrivate_Class.java b/Tests/A1tests/Je_1_PackagePrivate_Class.java
similarity index 100%
rename from Tests/Je_1_PackagePrivate_Class.java
rename to Tests/A1tests/Je_1_PackagePrivate_Class.java
diff --git a/Tests/Je_1_PackagePrivate_Field.java b/Tests/A1tests/Je_1_PackagePrivate_Field.java
similarity index 100%
rename from Tests/Je_1_PackagePrivate_Field.java
rename to Tests/A1tests/Je_1_PackagePrivate_Field.java
diff --git a/Tests/Je_1_PackagePrivate_Method.java b/Tests/A1tests/Je_1_PackagePrivate_Method.java
similarity index 100%
rename from Tests/Je_1_PackagePrivate_Method.java
rename to Tests/A1tests/Je_1_PackagePrivate_Method.java
diff --git a/Tests/Je_1_SuperThis_SuperAfterBlock.java b/Tests/A1tests/Je_1_SuperThis_SuperAfterBlock.java
similarity index 100%
rename from Tests/Je_1_SuperThis_SuperAfterBlock.java
rename to Tests/A1tests/Je_1_SuperThis_SuperAfterBlock.java
diff --git a/Tests/Je_1_SuperThis_SuperAfterStatement.java b/Tests/A1tests/Je_1_SuperThis_SuperAfterStatement.java
similarity index 100%
rename from Tests/Je_1_SuperThis_SuperAfterStatement.java
rename to Tests/A1tests/Je_1_SuperThis_SuperAfterStatement.java
diff --git a/Tests/Je_1_SuperThis_SuperInBlock.java b/Tests/A1tests/Je_1_SuperThis_SuperInBlock.java
similarity index 100%
rename from Tests/Je_1_SuperThis_SuperInBlock.java
rename to Tests/A1tests/Je_1_SuperThis_SuperInBlock.java
diff --git a/Tests/Je_1_SuperThis_SuperInMethod.java b/Tests/A1tests/Je_1_SuperThis_SuperInMethod.java
similarity index 100%
rename from Tests/Je_1_SuperThis_SuperInMethod.java
rename to Tests/A1tests/Je_1_SuperThis_SuperInMethod.java
diff --git a/Tests/Je_1_SuperThis_SuperThis.java b/Tests/A1tests/Je_1_SuperThis_SuperThis.java
similarity index 100%
rename from Tests/Je_1_SuperThis_SuperThis.java
rename to Tests/A1tests/Je_1_SuperThis_SuperThis.java
diff --git a/Tests/Je_1_SuperThis_ThisAfterStatement.java b/Tests/A1tests/Je_1_SuperThis_ThisAfterStatement.java
similarity index 100%
rename from Tests/Je_1_SuperThis_ThisAfterStatement.java
rename to Tests/A1tests/Je_1_SuperThis_ThisAfterStatement.java
diff --git a/Tests/Je_1_SuperThis_ThisInMethod.java b/Tests/A1tests/Je_1_SuperThis_ThisInMethod.java
similarity index 100%
rename from Tests/Je_1_SuperThis_ThisInMethod.java
rename to Tests/A1tests/Je_1_SuperThis_ThisInMethod.java
diff --git a/Tests/Je_1_SuperThis_TwoSuperCalls.java b/Tests/A1tests/Je_1_SuperThis_TwoSuperCalls.java
similarity index 100%
rename from Tests/Je_1_SuperThis_TwoSuperCalls.java
rename to Tests/A1tests/Je_1_SuperThis_TwoSuperCalls.java
diff --git a/Tests/Je_1_Throw_NotExpression.java b/Tests/A1tests/Je_1_Throw_NotExpression.java
similarity index 100%
rename from Tests/Je_1_Throw_NotExpression.java
rename to Tests/A1tests/Je_1_Throw_NotExpression.java
diff --git a/Tests/Je_1_Throws_Array.java b/Tests/A1tests/Je_1_Throws_Array.java
similarity index 100%
rename from Tests/Je_1_Throws_Array.java
rename to Tests/A1tests/Je_1_Throws_Array.java
diff --git a/Tests/Je_1_Throws_SimpleType.java b/Tests/A1tests/Je_1_Throws_SimpleType.java
similarity index 100%
rename from Tests/Je_1_Throws_SimpleType.java
rename to Tests/A1tests/Je_1_Throws_SimpleType.java
diff --git a/Tests/Je_1_Throws_Void.java b/Tests/A1tests/Je_1_Throws_Void.java
similarity index 100%
rename from Tests/Je_1_Throws_Void.java
rename to Tests/A1tests/Je_1_Throws_Void.java
diff --git a/Tests/Je_1_VoidType_ArrayCreation.java b/Tests/A1tests/Je_1_VoidType_ArrayCreation.java
similarity index 100%
rename from Tests/Je_1_VoidType_ArrayCreation.java
rename to Tests/A1tests/Je_1_VoidType_ArrayCreation.java
diff --git a/Tests/Je_1_VoidType_ArrayDeclaration.java b/Tests/A1tests/Je_1_VoidType_ArrayDeclaration.java
similarity index 100%
rename from Tests/Je_1_VoidType_ArrayDeclaration.java
rename to Tests/A1tests/Je_1_VoidType_ArrayDeclaration.java
diff --git a/Tests/Je_1_VoidType_Cast.java b/Tests/A1tests/Je_1_VoidType_Cast.java
similarity index 100%
rename from Tests/Je_1_VoidType_Cast.java
rename to Tests/A1tests/Je_1_VoidType_Cast.java
diff --git a/Tests/Je_1_VoidType_Field.java b/Tests/A1tests/Je_1_VoidType_Field.java
similarity index 100%
rename from Tests/Je_1_VoidType_Field.java
rename to Tests/A1tests/Je_1_VoidType_Field.java
diff --git a/Tests/Je_1_VoidType_Formals.java b/Tests/A1tests/Je_1_VoidType_Formals.java
similarity index 100%
rename from Tests/Je_1_VoidType_Formals.java
rename to Tests/A1tests/Je_1_VoidType_Formals.java
diff --git a/Tests/Je_1_VoidType_Local.java b/Tests/A1tests/Je_1_VoidType_Local.java
similarity index 100%
rename from Tests/Je_1_VoidType_Local.java
rename to Tests/A1tests/Je_1_VoidType_Local.java
diff --git a/Tests/Je_1_VoidType_VoidMethod.java b/Tests/A1tests/Je_1_VoidType_VoidMethod.java
similarity index 100%
rename from Tests/Je_1_VoidType_VoidMethod.java
rename to Tests/A1tests/Je_1_VoidType_VoidMethod.java
diff --git a/Tests/Je_6_Assignable_Instanceof_SimpleTypeOfSimpleType.java b/Tests/A1tests/Je_6_Assignable_Instanceof_SimpleTypeOfSimpleType.java
similarity index 100%
rename from Tests/Je_6_Assignable_Instanceof_SimpleTypeOfSimpleType.java
rename to Tests/A1tests/Je_6_Assignable_Instanceof_SimpleTypeOfSimpleType.java
diff --git a/Tests/Je_6_InstanceOf_Primitive_1.java b/Tests/A1tests/Je_6_InstanceOf_Primitive_1.java
similarity index 100%
rename from Tests/Je_6_InstanceOf_Primitive_1.java
rename to Tests/A1tests/Je_6_InstanceOf_Primitive_1.java
diff --git a/Tests/Je_6_InstanceOf_Primitive_2.java b/Tests/A1tests/Je_6_InstanceOf_Primitive_2.java
similarity index 100%
rename from Tests/Je_6_InstanceOf_Primitive_2.java
rename to Tests/A1tests/Je_6_InstanceOf_Primitive_2.java
diff --git a/Tests/Je_Native.java b/Tests/A1tests/Je_Native.java
similarity index 100%
rename from Tests/Je_Native.java
rename to Tests/A1tests/Je_Native.java
diff --git a/Tests/Je_Throws.java b/Tests/A1tests/Je_Throws.java
similarity index 100%
rename from Tests/Je_Throws.java
rename to Tests/A1tests/Je_Throws.java
diff --git a/Tests/add2num.joos b/Tests/A1tests/add2num.joos
similarity index 100%
rename from Tests/add2num.joos
rename to Tests/A1tests/add2num.joos
diff --git a/Tests/comments.joos b/Tests/A1tests/comments.joos
similarity index 100%
rename from Tests/comments.joos
rename to Tests/A1tests/comments.joos
diff --git a/Tests/compoundName.joos b/Tests/A1tests/compoundName.joos
similarity index 100%
rename from Tests/compoundName.joos
rename to Tests/A1tests/compoundName.joos
diff --git a/Tests/empty.joos b/Tests/A1tests/empty.joos
similarity index 100%
rename from Tests/empty.joos
rename to Tests/A1tests/empty.joos
diff --git a/Tests/errorComments.joos b/Tests/A1tests/errorComments.joos
similarity index 100%
rename from Tests/errorComments.joos
rename to Tests/A1tests/errorComments.joos
diff --git a/Tests/errorNumber.joos b/Tests/A1tests/errorNumber.joos
similarity index 100%
rename from Tests/errorNumber.joos
rename to Tests/A1tests/errorNumber.joos
diff --git a/Tests/errorOperatorsInJavaNotJoos.joos b/Tests/A1tests/errorOperatorsInJavaNotJoos.joos
similarity index 100%
rename from Tests/errorOperatorsInJavaNotJoos.joos
rename to Tests/A1tests/errorOperatorsInJavaNotJoos.joos
diff --git a/Tests/interface.joos b/Tests/A1tests/interface.joos
similarity index 100%
rename from Tests/interface.joos
rename to Tests/A1tests/interface.joos
diff --git a/Tests/literals.joos b/Tests/A1tests/literals.joos
similarity index 100%
rename from Tests/literals.joos
rename to Tests/A1tests/literals.joos
diff --git a/Tests/notASCII.joos b/Tests/A1tests/notASCII.joos
similarity index 100%
rename from Tests/notASCII.joos
rename to Tests/A1tests/notASCII.joos
diff --git a/Tests/test.joos b/Tests/A1tests/test.joos
similarity index 100%
rename from Tests/test.joos
rename to Tests/A1tests/test.joos
diff --git a/Tests/test2.joos b/Tests/A1tests/test2.joos
similarity index 100%
rename from Tests/test2.joos
rename to Tests/A1tests/test2.joos
diff --git a/Tests/unusedOperators.joos b/Tests/A1tests/unusedOperators.joos
similarity index 100%
rename from Tests/unusedOperators.joos
rename to Tests/A1tests/unusedOperators.joos
diff --git a/Tests/wrongCompoundName.joos b/Tests/A1tests/wrongCompoundName.joos
similarity index 100%
rename from Tests/wrongCompoundName.joos
rename to Tests/A1tests/wrongCompoundName.joos
diff --git a/Tests/A2/J1_1_Cast_NamedTypeAsVariable.java b/Tests/A2/J1_1_Cast_NamedTypeAsVariable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3aec1e3c59dcb5fa5ad4792ab53ba29bfc0d6e59
--- /dev/null
+++ b/Tests/A2/J1_1_Cast_NamedTypeAsVariable.java
@@ -0,0 +1,16 @@
+// ENVIRONMENTS
+/**
+ * Environment:
+ * - Variable java.lang.Object not declared
+ */
+public class J1_1_Cast_NamedTypeAsVariable {
+
+    public J1_1_Cast_NamedTypeAsVariable() {}
+
+    public static int test() {
+	int Object = 165;
+	int x = (Object)-42;
+	return x;
+    }
+
+}
diff --git a/Tests/A2/J1_2_Fields_Case.java b/Tests/A2/J1_2_Fields_Case.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e342ae5713a369b134050032a15c0d8417d0992
--- /dev/null
+++ b/Tests/A2/J1_2_Fields_Case.java
@@ -0,0 +1,18 @@
+// ENVIRONMENTS
+/**
+ * - Environments
+ * Check that no two fields in the same class have the same name.
+ */
+public class J1_2_Fields_Case {
+
+    public Object foo;
+
+    public Object Foo;
+
+    public J1_2_Fields_Case () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_2_Locals_Overlapping_AfterBlock.java b/Tests/A2/J1_2_Locals_Overlapping_AfterBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..94a77ae7f9f6a168bc5e59d6b2ce95a2bc8ec963
--- /dev/null
+++ b/Tests/A2/J1_2_Locals_Overlapping_AfterBlock.java
@@ -0,0 +1,13 @@
+//ENVIRONMENTS
+
+public class J1_2_Locals_Overlapping_AfterBlock {
+	public J1_2_Locals_Overlapping_AfterBlock() {}
+	
+	public static int test() {
+		{
+			int a = 0;
+		}
+		int a = 123;
+		return a;
+	}
+}
diff --git a/Tests/A2/J1_3_ImportOnDemand_DefaultImportInPresenceOfOtherImport/Main.java b/Tests/A2/J1_3_ImportOnDemand_DefaultImportInPresenceOfOtherImport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fba3a6a25d330752668ddacb6a100f8e9d303cf
--- /dev/null
+++ b/Tests/A2/J1_3_ImportOnDemand_DefaultImportInPresenceOfOtherImport/Main.java
@@ -0,0 +1,17 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - All classes implicitly import java.lang.*, even in the presence
+ * of other import-on-demand declarations.  
+ */
+import java.lang.ref.*;
+
+public class Main{
+    
+    public Main(){}
+
+    public static int test(){
+	return new Integer(123).intValue();
+    }
+
+}
diff --git a/Tests/A2/J1_3_ImportOnDemand_DefaultImportInPresenceOfOtherImport/java/lang/ref/Foo.java b/Tests/A2/J1_3_ImportOnDemand_DefaultImportInPresenceOfOtherImport/java/lang/ref/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..278d32b6cb7b073693b32d206fb3091ba24eb22c
--- /dev/null
+++ b/Tests/A2/J1_3_ImportOnDemand_DefaultImportInPresenceOfOtherImport/java/lang/ref/Foo.java
@@ -0,0 +1,5 @@
+package java.lang.ref;
+public class Foo {
+    public Foo() {
+    }
+}
diff --git a/Tests/A2/J1_3_ImportOnDemand_ProgramDefinedPackage/Main.java b/Tests/A2/J1_3_ImportOnDemand_ProgramDefinedPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd8c8c204ae35981671cd46df22e80a2dd49bf44
--- /dev/null
+++ b/Tests/A2/J1_3_ImportOnDemand_ProgramDefinedPackage/Main.java
@@ -0,0 +1,14 @@
+// TYPE_LINKING
+/* TypeLinking:
+ * Check that all import-on-demand declarations refer to existing packages.
+ */
+
+import test.*;
+
+public class Main{
+     public Main(){}
+
+     public static int test(){
+	 return A.test();
+     }
+}
diff --git a/Tests/A2/J1_3_ImportOnDemand_ProgramDefinedPackage/test/A.java b/Tests/A2/J1_3_ImportOnDemand_ProgramDefinedPackage/test/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..a95a553753926fc14484d6afd3d14e938e0d0aff
--- /dev/null
+++ b/Tests/A2/J1_3_ImportOnDemand_ProgramDefinedPackage/test/A.java
@@ -0,0 +1,9 @@
+package test;
+
+public class A{
+     public A(){}
+     
+     public static int test() {
+     	return 123;
+     }
+}
diff --git a/Tests/A2/J1_3_InfixResolvesToType/Main.java b/Tests/A2/J1_3_InfixResolvesToType/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..456862aa3ecb8949185b95fc686585390b7286f8
--- /dev/null
+++ b/Tests/A2/J1_3_InfixResolvesToType/Main.java
@@ -0,0 +1,13 @@
+// TYPE_LINKING
+/* TypeLinking:
+ * Check that no prefixes (consisting of whole identifiers) of fully qualified 
+ * types themselves resolve to types. 
+ */
+public class Main {
+  public Main() {}
+
+  public static int test() {
+    foo.String.bar.foo s = new foo.String.bar.foo();
+    return 123;
+  }
+} 
diff --git a/Tests/A2/J1_3_InfixResolvesToType/foo/String/bar/foo.java b/Tests/A2/J1_3_InfixResolvesToType/foo/String/bar/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e9301d1a1412ff48d4823fed3ac296b80fe9b74
--- /dev/null
+++ b/Tests/A2/J1_3_InfixResolvesToType/foo/String/bar/foo.java
@@ -0,0 +1,5 @@
+package foo.String.bar;
+
+public class foo {
+  public foo() {}
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/List.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b6c12a6dcaf4964c5330f7f7c9f715043fff591
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/List.java
@@ -0,0 +1,7 @@
+public class List {
+	public List() {}
+	
+	public int method() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/Main.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b58f38c0cb5ba3bbb412c132da6fbd86d1b924d
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/Main.java
@@ -0,0 +1,17 @@
+//TYPE_LINKING
+
+/**
+ * Same package precedes on-demand import in type-linking =>
+ * On-demand imports are not ambiguous.
+ */
+import java.util.*;
+import java.awt.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		List list = new List();
+		return list.method();
+	}
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/java/awt/List.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/java/awt/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e253f6d15713cd32c9679d1d1e016d03a941c0d
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_Default/java/awt/List.java
@@ -0,0 +1,5 @@
+package java.awt;
+public class List {
+    public List() {
+    }
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/Main.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..b311c0d5959d02a815cd12b9116fcff1d969f43a
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/Main.java
@@ -0,0 +1,16 @@
+//TYPE_LINKING
+
+/**
+ * Same package precedes on-demand import in type-linking =>
+ * On-demand imports are not ambiguous.
+ */
+import foo.Foo;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		Foo foo = new Foo();
+		return foo.method();
+	}
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/foo/Foo.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/foo/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6dad5f3f14626d370162afcfc4a601648e8b4af
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/foo/Foo.java
@@ -0,0 +1,13 @@
+package foo;
+
+import java.util.*;
+import java.awt.*;
+
+public class Foo {
+	public Foo() {}
+	
+	public int method() {
+		List list = new List();
+		return list.method();
+	}
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/foo/List.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/foo/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..ecc00e17bbfc783890ae7bb404d07dcb5a80f972
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/foo/List.java
@@ -0,0 +1,9 @@
+package foo;
+
+public class List {
+	public List() {}
+	
+	public int method() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/java/awt/List.java b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/java/awt/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e253f6d15713cd32c9679d1d1e016d03a941c0d
--- /dev/null
+++ b/Tests/A2/J1_3_OnDemandImport_NonAmbiguous_SamePackage/java/awt/List.java
@@ -0,0 +1,5 @@
+package java.awt;
+public class List {
+    public List() {
+    }
+}
diff --git a/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/Main.java b/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..1befe4b8425c76cdcd33a2830955e10da51b942b
--- /dev/null
+++ b/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/Main.java
@@ -0,0 +1,19 @@
+//TYPE_LINKING
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ */
+import javax.swing.tree.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		TreeNode node = null;
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/javax/swing/tree/TreeNode.java b/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/javax/swing/tree/TreeNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dbb09423d9f3f67e926e13787b61077e474c5d0
--- /dev/null
+++ b/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/javax/swing/tree/TreeNode.java
@@ -0,0 +1,5 @@
+package javax.swing.tree;
+public class TreeNode {
+    public TreeNode() {
+    }
+}
diff --git a/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/javax/swing/treejava.java b/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/javax/swing/treejava.java
new file mode 100644
index 0000000000000000000000000000000000000000..73b393d364722ef3081211b83fe00a598a780fc6
--- /dev/null
+++ b/Tests/A2/J1_3_PackageClashWithType_Linked_Mutated/javax/swing/treejava.java
@@ -0,0 +1,5 @@
+package javax.swing;
+
+public class treejava {
+	public treejava() {}
+}
diff --git a/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/A.java b/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..e021885818faabada084be1a9acc23af788f8dc9
--- /dev/null
+++ b/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/A.java
@@ -0,0 +1,10 @@
+package test;
+
+public class A{
+
+    public A(){}
+
+    public static int foo(){
+	return test.B.foo();
+    }
+}
diff --git a/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/B.java b/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dd7e2a5735a0a758ca8e046ef682d4d9140e726
--- /dev/null
+++ b/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/B.java
@@ -0,0 +1,10 @@
+package test;
+
+public class B{
+
+    public B(){}
+
+    public static int foo(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/Main.java b/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..de92a41b8bfc39e3e2a627688af2831b9fa78c10
--- /dev/null
+++ b/Tests/A2/J1_3_PackageDecl_MultipleFilesInSamePackage/Main.java
@@ -0,0 +1,15 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - This testcase tests whether it is allowed to declare two
+ * different classes in the same package.
+ **/
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return test.A.foo();
+    }
+
+}
diff --git a/Tests/A2/J1_3_PackageDecl_SamePackageAndClassName/A/A.java b/Tests/A2/J1_3_PackageDecl_SamePackageAndClassName/A/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb5cf002b52a293b1d7385b7c1b97ae4c457af88
--- /dev/null
+++ b/Tests/A2/J1_3_PackageDecl_SamePackageAndClassName/A/A.java
@@ -0,0 +1,7 @@
+package A;
+
+public class A{
+
+    public A(){}
+
+}
diff --git a/Tests/A2/J1_3_PackageDecl_SamePackageAndClassName/Main.java b/Tests/A2/J1_3_PackageDecl_SamePackageAndClassName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..41ca2774523f1145d4d6a04efb9703246c6b0cc5
--- /dev/null
+++ b/Tests/A2/J1_3_PackageDecl_SamePackageAndClassName/Main.java
@@ -0,0 +1,14 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - Tests whether it is allowed to declare a class with the same name
+ * as its package.
+ */
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_3_PackageExists_AsPrefix_External/Main.java b/Tests/A2/J1_3_PackageExists_AsPrefix_External/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d3ac6dfe87c81330747c1a5e3641a707c59aac7
--- /dev/null
+++ b/Tests/A2/J1_3_PackageExists_AsPrefix_External/Main.java
@@ -0,0 +1,13 @@
+//TYPE_LINKING
+/**
+ * The package java exists because of for instance java.lang.Object.
+ */
+import java.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_PackageExists_AsPrefix_Internal/Main.java b/Tests/A2/J1_3_PackageExists_AsPrefix_Internal/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..93b0d631354fd95748db57f92d2018c52bae2722
--- /dev/null
+++ b/Tests/A2/J1_3_PackageExists_AsPrefix_Internal/Main.java
@@ -0,0 +1,13 @@
+//TYPE_LINKING
+/**
+ * The package foo exists because of the class foo.bar.Baz.
+ */
+import foo.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_PackageExists_AsPrefix_Internal/foo/bar/Baz.java b/Tests/A2/J1_3_PackageExists_AsPrefix_Internal/foo/bar/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..98299613ee0079167686a0979dc2c354c385ce9e
--- /dev/null
+++ b/Tests/A2/J1_3_PackageExists_AsPrefix_Internal/foo/bar/Baz.java
@@ -0,0 +1,5 @@
+package foo.bar;
+
+public class Baz {
+	public Baz() {}
+}
diff --git a/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Main.java b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..4eb178bf35424177bf4872833695fb1e8c5675c1
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Main.java
@@ -0,0 +1,21 @@
+// TYPE_LINKING
+/**
+ * TypeLinking
+ * - Tests whether a simple typename is linked to the correct type in
+ * the same package, in the case where other packages are also defined
+ * within the program.
+ * Specifically, the type name Bar in Test.Foo should link to Test.Bar.
+ */
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return Test.Foo.test();
+    }
+
+    public static void main(String[] args){
+	System.out.println(Main.test());
+    }
+    
+}
diff --git a/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test/Bar.java b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..a64ae1c3aa978a3650b4f215eeef5029cf2266e6
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test/Bar.java
@@ -0,0 +1,11 @@
+package Test;
+
+public class Bar{
+
+    public Bar(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test/Foo.java b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe87a54ef9f8a68964dc369f571538414180cf43
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test/Foo.java
@@ -0,0 +1,11 @@
+package Test;
+
+public class Foo{
+
+    public Foo(){}
+
+    public static int test(){
+	return Bar.test();
+    }
+
+}
diff --git a/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test2/Zoo.java b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test2/Zoo.java
new file mode 100644
index 0000000000000000000000000000000000000000..034ef40b5bd2ac6098f9c0831b8dcd650988ea8f
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_LinkToCorrectPackage/Test2/Zoo.java
@@ -0,0 +1,11 @@
+package Test2;
+
+public class Zoo{
+    
+    public Zoo(){}
+
+    public static int test(){
+	return 0;
+    }
+
+}
diff --git a/Tests/A2/J1_3_Resolve_PackagePrefixMatchClassName/Main.java b/Tests/A2/J1_3_Resolve_PackagePrefixMatchClassName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..83ace47e785e60bfde073dfbcc085ffb2de0d0bf
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_PackagePrefixMatchClassName/Main.java
@@ -0,0 +1,10 @@
+// TYPE_LINKING
+/* TypeLinking:
+ */
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_3_Resolve_PackagePrefixMatchClassName/Main/B/A.java b/Tests/A2/J1_3_Resolve_PackagePrefixMatchClassName/Main/B/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6c0a310470f91fbbbf5d08a346793543463a431
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_PackagePrefixMatchClassName/Main/B/A.java
@@ -0,0 +1,11 @@
+/* TypeLinking:
+ */
+package Main.B;
+
+public class A {
+    public A() {}
+    
+    public static Main.B.A getInstance() {
+	return new Main.B.A();
+    }
+}
diff --git a/Tests/A2/J1_3_Resolve_SamePackage_External/Main.java b/Tests/A2/J1_3_Resolve_SamePackage_External/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..baf7440280ad256f2a2da218810976b4de44de32
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_SamePackage_External/Main.java
@@ -0,0 +1,9 @@
+//TYPE_LINKING
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_Resolve_SamePackage_External/javax/swing/Foo.java b/Tests/A2/J1_3_Resolve_SamePackage_External/javax/swing/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea682973fe256b61a6ba729bcc946cbc030e5661
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_SamePackage_External/javax/swing/Foo.java
@@ -0,0 +1,7 @@
+package javax.swing;
+
+public class Foo {
+	public JComponent component;
+	
+	public Foo() {}
+}
diff --git a/Tests/A2/J1_3_Resolve_SamePackage_External/javax/swing/JComponent.java b/Tests/A2/J1_3_Resolve_SamePackage_External/javax/swing/JComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..be97ac1c8822a543ce780334bfd9e07b6f851914
--- /dev/null
+++ b/Tests/A2/J1_3_Resolve_SamePackage_External/javax/swing/JComponent.java
@@ -0,0 +1,6 @@
+package javax.swing;
+public class JComponent {
+    protected Object accessibleContext;
+    public JComponent() {
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/Main.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..4eabf9c5919b429962fde32cb5c35779e736c279
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/Main.java
@@ -0,0 +1,12 @@
+// TYPE_LINKING
+
+import java.util.List;
+import foo.List.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/foo/List/Bar.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/foo/List/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d65db1e231ad1d8dd8eaa7be5d275ddeff94f
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/foo/List/Bar.java
@@ -0,0 +1,5 @@
+package foo.List;
+
+public class Bar {
+	public Bar() {}
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/java/util/Collection.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/java/util/List.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithOnDemand/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/List/A.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/List/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..b865a6df718582de237cb0459b575cd0a8e6d6ed
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/List/A.java
@@ -0,0 +1,13 @@
+/**
+ * TypeLinking:
+ * - Tests whether it is allowed to use a package name that clashes
+ * with the identifier of a singletype import.
+ */
+package List;
+
+import java.util.List;
+
+public class A{
+
+    public A(){}
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/Main.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e031c5e4268bc3605b1e1790cc1e68c10fadab31
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/Main.java
@@ -0,0 +1,17 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - Tests whether it is allowed to use a package name that clashes
+ * with the identifier of a singletype import.
+ */ 
+ 
+public class Main{
+
+    public Main() {}
+
+    public static int test() {
+    	List.A j = new List.A();
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/java/util/Collection.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/java/util/List.java b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ClashWithPackageName/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ImportProgramClass/Main.java b/Tests/A2/J1_3_SingleTypeImport_ImportProgramClass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..264737c616f730c8070b1484d25241359e771dca
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ImportProgramClass/Main.java
@@ -0,0 +1,16 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - This testcase tests whether it is allowed to declare two
+ * different classes in the same package.
+ **/
+import test.A;
+
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return A.foo();
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ImportProgramClass/test/A.java b/Tests/A2/J1_3_SingleTypeImport_ImportProgramClass/test/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..62d14b9c98881fd2aa01313f6a4dbdbd32fe10f4
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ImportProgramClass/test/A.java
@@ -0,0 +1,10 @@
+package test;
+
+public class A{
+
+    public A(){}
+
+    public static int foo(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ImportSelf/Main.java b/Tests/A2/J1_3_SingleTypeImport_ImportSelf/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ea4c93e9b946b60b33b660dc62dae0f5f83b404
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ImportSelf/Main.java
@@ -0,0 +1,15 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - The name of a class must not clash with the name of a singletype
+ * import, but a class may import itself.
+ */
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return Test.Foo.test();
+    }
+
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_ImportSelf/Test/Foo.java b/Tests/A2/J1_3_SingleTypeImport_ImportSelf/Test/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c578c404db124284736f0fcc036c852f8c7ddfd
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_ImportSelf/Test/Foo.java
@@ -0,0 +1,12 @@
+package Test;
+
+import Test.Foo;
+
+public class Foo{
+
+    public Foo(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/Main.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..52f4dad94c9a07dca856cf81a97d2370486b1034
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/Main.java
@@ -0,0 +1,21 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - Testing whether multiple single-type imports from the same package
+ * is taken into account.
+ */
+
+import java.util.List;
+import java.util.LinkedList;
+import java.util.ArrayList;
+import java.util.Set;
+import java.util.HashSet;
+
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	Set s = new HashSet();
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/ArrayList.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/Collection.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/HashSet.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/HashSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..bfbd6ed73aa680ea7dfaa1f9b0883b43c0563554
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/HashSet.java
@@ -0,0 +1,8 @@
+package java.util;
+public class HashSet implements Set {
+    public HashSet() {
+    }
+    public boolean addAll(Collection c) {
+        return false;
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/LinkedList.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f6328da16aee2b4618529a3132356a7cc34d3
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/LinkedList.java
@@ -0,0 +1,32 @@
+package java.util;
+public class LinkedList implements List {
+    protected boolean empty = true;
+    protected Object cur = null;
+    protected LinkedList next = null;
+    public LinkedList() {
+    }
+    public int size() {
+        if(empty) return 0;
+        else if(next == null) return 1;
+        else return 1+next.size();
+    }
+    public boolean add(Object o) {
+        if(empty) {
+            cur = o;
+            empty = false;
+        } else {
+            if(next == null) {
+                next = new LinkedList();
+            }
+            next.add(o);
+        }
+        return true;
+    }
+    public Object clone() {
+        LinkedList ret = new LinkedList();
+        if(next != null) ret.next = (LinkedList) next.clone();
+        ret.cur = cur;
+        ret.empty = empty;
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/List.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/Set.java b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/Set.java
new file mode 100644
index 0000000000000000000000000000000000000000..f106e7533984b05c9cb43b0fc6af5ed8ce8f7438
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleFromSamePackage/java/util/Set.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface Set extends Collection {
+    public boolean addAll(Collection c);
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleImportsOfSameType/Main.java b/Tests/A2/J1_3_SingleTypeImport_MultipleImportsOfSameType/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..720466a52a95f144bfc47718589f6c2c6da0e760
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleImportsOfSameType/Main.java
@@ -0,0 +1,18 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - Singletype imports may clash, if the names refer to the same type.
+ */
+
+import java.io.File;
+import java.io.File;
+
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_MultipleImportsOfSameType/java/io/File.java b/Tests/A2/J1_3_SingleTypeImport_MultipleImportsOfSameType/java/io/File.java
new file mode 100644
index 0000000000000000000000000000000000000000..2896897f9669271624feef8be1f3f45257bce096
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_MultipleImportsOfSameType/java/io/File.java
@@ -0,0 +1,5 @@
+package java.io;
+public class File {
+    public File() {
+    }
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_NoClash/Main.java b/Tests/A2/J1_3_SingleTypeImport_NoClash/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e4e46427b2215eb73e648fe55350743394f30b8
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_NoClash/Main.java
@@ -0,0 +1,12 @@
+// TYPE_LINKING
+
+import a.bc;
+import ab.c;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return bc.test()+c.test();
+	}
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_NoClash/a/bc.java b/Tests/A2/J1_3_SingleTypeImport_NoClash/a/bc.java
new file mode 100644
index 0000000000000000000000000000000000000000..90ad9552577fed66c2891819f0e3e088c04b04b1
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_NoClash/a/bc.java
@@ -0,0 +1,9 @@
+package a;
+
+public class bc {
+	public bc() {}
+	
+	public static int test() {
+		return 83;
+	}
+}
diff --git a/Tests/A2/J1_3_SingleTypeImport_NoClash/ab/c.java b/Tests/A2/J1_3_SingleTypeImport_NoClash/ab/c.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f93dfae56f9c816006851f1684fa100ba50e6d5
--- /dev/null
+++ b/Tests/A2/J1_3_SingleTypeImport_NoClash/ab/c.java
@@ -0,0 +1,9 @@
+package ab;
+
+public class c {
+	public c() {}
+	
+	public static int test() {
+		return 40;
+	}
+}
diff --git a/Tests/A2/J1_4_AbstractMethod_InheritAbstractFromObject/A.java b/Tests/A2/J1_4_AbstractMethod_InheritAbstractFromObject/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5fbf0aac74e5da93715c56b55c96ba6c2b54a53
--- /dev/null
+++ b/Tests/A2/J1_4_AbstractMethod_InheritAbstractFromObject/A.java
@@ -0,0 +1,6 @@
+public abstract class A{
+
+    public A(){}
+
+    public abstract String toString();
+}
diff --git a/Tests/A2/J1_4_AbstractMethod_InheritAbstractFromObject/Main.java b/Tests/A2/J1_4_AbstractMethod_InheritAbstractFromObject/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..0cad1e6938eff3320a8d22fe1feb02a886a9dc68
--- /dev/null
+++ b/Tests/A2/J1_4_AbstractMethod_InheritAbstractFromObject/Main.java
@@ -0,0 +1,10 @@
+// HIERARCHY
+public abstract class Main extends A implements Cloneable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_4_AbstractMethod_InheritedFromInterface/Main.java b/Tests/A2/J1_4_AbstractMethod_InheritedFromInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..10daaba77b87e7c007f1cf1d85d8eb32579a460f
--- /dev/null
+++ b/Tests/A2/J1_4_AbstractMethod_InheritedFromInterface/Main.java
@@ -0,0 +1,23 @@
+// HIERARCHY
+/**
+ * Hierarchy check:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1). (method equals(Object) inherited from superclass)
+ */
+import java.util.Comparator;
+
+public class Main implements Comparator{
+
+    public Main(){
+    }
+
+    public int compare(Object o1, Object o2){
+	return o1.hashCode() - o2.hashCode() + 123;
+    }
+
+    public static int test(){
+	Main object = new Main();
+	return object.compare((Object)object, (Object)object);
+    }
+
+}
diff --git a/Tests/A2/J1_4_AbstractMethod_InheritedFromInterface/java/util/Comparator.java b/Tests/A2/J1_4_AbstractMethod_InheritedFromInterface/java/util/Comparator.java
new file mode 100644
index 0000000000000000000000000000000000000000..775e87208f6b105ba0228f16b187c88967c137fe
--- /dev/null
+++ b/Tests/A2/J1_4_AbstractMethod_InheritedFromInterface/java/util/Comparator.java
@@ -0,0 +1,5 @@
+package java.util;
+
+public interface Comparator {
+    public int compare(Object o1, Object o2);
+}
diff --git a/Tests/A2/J1_4_ClassExtendsClass_SameName/Main.java b/Tests/A2/J1_4_ClassExtendsClass_SameName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..b009408c94d5eb7f5499ef6fd2bfc86f3e711375
--- /dev/null
+++ b/Tests/A2/J1_4_ClassExtendsClass_SameName/Main.java
@@ -0,0 +1,9 @@
+// HIERARCHY
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		foo.LinkedList l = new foo.LinkedList();
+		return l.size();
+	}
+}
diff --git a/Tests/A2/J1_4_ClassExtendsClass_SameName/foo/LinkedList.java b/Tests/A2/J1_4_ClassExtendsClass_SameName/foo/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3cdb9300e303c0befaaeecf55e8d9a228224e76
--- /dev/null
+++ b/Tests/A2/J1_4_ClassExtendsClass_SameName/foo/LinkedList.java
@@ -0,0 +1,9 @@
+package foo;
+
+public  class LinkedList extends java.util.LinkedList {
+	public LinkedList() {}
+	
+	public int size() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/Collection.java b/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/LinkedList.java b/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f6328da16aee2b4618529a3132356a7cc34d3
--- /dev/null
+++ b/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/LinkedList.java
@@ -0,0 +1,32 @@
+package java.util;
+public class LinkedList implements List {
+    protected boolean empty = true;
+    protected Object cur = null;
+    protected LinkedList next = null;
+    public LinkedList() {
+    }
+    public int size() {
+        if(empty) return 0;
+        else if(next == null) return 1;
+        else return 1+next.size();
+    }
+    public boolean add(Object o) {
+        if(empty) {
+            cur = o;
+            empty = false;
+        } else {
+            if(next == null) {
+                next = new LinkedList();
+            }
+            next.add(o);
+        }
+        return true;
+    }
+    public Object clone() {
+        LinkedList ret = new LinkedList();
+        if(next != null) ret.next = (LinkedList) next.clone();
+        ret.cur = cur;
+        ret.empty = empty;
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/List.java b/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_4_ClassExtendsClass_SameName/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Bar.java b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7af0a20816d2899d6b9a1abe3492d6dbbab76b6
--- /dev/null
+++ b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Bar.java
@@ -0,0 +1,5 @@
+import java.util.*;
+
+public abstract class Bar extends Foo implements List {
+	public Bar() {}
+}
diff --git a/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Foo.java b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb90fe80ced0f60704e96ebf39f7f7500d1db682
--- /dev/null
+++ b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Foo.java
@@ -0,0 +1,5 @@
+import java.util.*;
+
+public abstract class Foo implements List {
+	public Foo() {}
+}
diff --git a/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Main.java b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..d679623306ca85251ebb19986f32bdf2bb328315
--- /dev/null
+++ b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/Main.java
@@ -0,0 +1,11 @@
+// HIERARCHY
+
+import java.util.*;
+
+public abstract class Main extends Bar implements Collection,List {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/java/util/Collection.java b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/java/util/List.java b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_4_ClassImplementsInterface_MultipleTimes/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_4_Constructor_DuplicateArrayTypes.java b/Tests/A2/J1_4_Constructor_DuplicateArrayTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbf7c6efc1fd475a3ebc0740811e0c32c05b07b4
--- /dev/null
+++ b/Tests/A2/J1_4_Constructor_DuplicateArrayTypes.java
@@ -0,0 +1,15 @@
+// HIERARCHY
+/**
+ * Hierarchy:
+ * - A class must not declare two constructors with the same parameter
+ * types (8.8.2, simple constraint 5).
+ */
+public class J1_4_Constructor_DuplicateArrayTypes {
+    public J1_4_Constructor_DuplicateArrayTypes(Object[] a) {}
+    public J1_4_Constructor_DuplicateArrayTypes(int[] a) {}
+    public J1_4_Constructor_DuplicateArrayTypes() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_4_Constructor_MatchAsSets.java b/Tests/A2/J1_4_Constructor_MatchAsSets.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc15471300c4738cc1d00744de2f2fd8e264b3bc
--- /dev/null
+++ b/Tests/A2/J1_4_Constructor_MatchAsSets.java
@@ -0,0 +1,14 @@
+// HIERARCHY
+/* Hierarchy:
+ *  A class must not declare two constructors with the same parameter types
+ */
+public class J1_4_Constructor_MatchAsSets {
+    
+    public J1_4_Constructor_MatchAsSets() {}
+    public J1_4_Constructor_MatchAsSets(String a, Object b) {}
+    public J1_4_Constructor_MatchAsSets(Object b, String a) {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName.java b/Tests/A2/J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName.java
new file mode 100644
index 0000000000000000000000000000000000000000..8de359d46b50dcd52f01b7e77c9d28df4c37d6b8
--- /dev/null
+++ b/Tests/A2/J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName.java
@@ -0,0 +1,21 @@
+// HIERARCHY
+/**
+ * Hierarchy:
+ * - A class may not declare two methods with the same signature, but
+ * it may declare a method with the same name and parameter types as a
+ * constructor.
+ */
+public class J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName{
+
+    public J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName(){}
+    public J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName(int a){}
+
+    public int J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName(int a){
+	return a;
+    }
+
+    public static int test(){
+	return new J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName(0).J1_4_DuplicateMethodDeclare_MethodNameEqualsConstructorName(123);
+    }
+}
+
diff --git a/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/Foo.java b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..71444c5117ea68597a0918ad582929cdb25e69b2
--- /dev/null
+++ b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/Foo.java
@@ -0,0 +1,3 @@
+public class Foo implements org.omg.CORBA.ARG_IN {
+	public Foo() {}
+}
diff --git a/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/Main.java b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c98ac6e3d8edb88e92ad8a25873a0cf43b38558
--- /dev/null
+++ b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/Main.java
@@ -0,0 +1,14 @@
+//HIERARCHY
+
+/**
+ * Both Main and Foo implement org.omg.CORBA.ARG_IN and thus inherited
+ * the same .value field.
+ */
+public class Main extends Foo implements org.omg.CORBA.ARG_IN {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
+	
diff --git a/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/org/omg/CORBA/ARG_IN.java b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/org/omg/CORBA/ARG_IN.java
new file mode 100644
index 0000000000000000000000000000000000000000..62ea53b5702eef94c9690f65e9880b1ca2fb0c70
--- /dev/null
+++ b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/org/omg/CORBA/ARG_IN.java
@@ -0,0 +1,4 @@
+package org.omg.CORBA;
+
+public interface ARG_IN {
+}
diff --git a/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/org/omg/CORBA/portable/OutputStream.java b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/org/omg/CORBA/portable/OutputStream.java
new file mode 100644
index 0000000000000000000000000000000000000000..4df6cafd9b334eff01a75189a01c1a3fa90fadd2
--- /dev/null
+++ b/Tests/A2/J1_4_InheritedFields_SameField_TwoWays/org/omg/CORBA/portable/OutputStream.java
@@ -0,0 +1,5 @@
+package org.omg.CORBA.portable;
+public class OutputStream {
+    public OutputStream() {
+    }
+}
diff --git a/Tests/A2/J1_4_InterfaceMethod_FromObject/Main.java b/Tests/A2/J1_4_InterfaceMethod_FromObject/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b7d362d7c1805f36112107bf9409fb7beeadfdd
--- /dev/null
+++ b/Tests/A2/J1_4_InterfaceMethod_FromObject/Main.java
@@ -0,0 +1,22 @@
+// HIERARCHY
+/* Hierarchy:
+ * JLS 9.2:
+ * If an interface has no direct superinterfaces, then the interface implicitly
+ * declares a public abstract member method m with signature s, return type r, 
+ * and throws clause t corresponding to each public instance method m with 
+ * signature s, return type r, and throws clause t declared in Object, 
+ * unless a method with the same signature, same return type, and a compatible 
+ * throws clause is explicitly declared by the interface. 
+ */
+
+public class Main {
+	public Main() {}
+	
+	public String method(java.io.Serializable o) {
+		return o.toString();
+	}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_MethodDeclare_DuplicateArrayTypes.java b/Tests/A2/J1_4_MethodDeclare_DuplicateArrayTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..27fd6de2cf37a5930b94d52619494c218828f6c7
--- /dev/null
+++ b/Tests/A2/J1_4_MethodDeclare_DuplicateArrayTypes.java
@@ -0,0 +1,16 @@
+// HIERARCHY
+/**
+ * Hierarchy:
+ * - A class or interface must not declare two methods with the same
+ * name and parameter types (8.4, 9.4, well-formedness constraint 2).
+ */
+public class J1_4_MethodDeclare_DuplicateArrayTypes {
+    public J1_4_MethodDeclare_DuplicateArrayTypes() {}
+    
+    public void method(Object[] a) {}
+    public void method(int[] a) {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_4_Override_FinalOverrideNonFinal.java b/Tests/A2/J1_4_Override_FinalOverrideNonFinal.java
new file mode 100644
index 0000000000000000000000000000000000000000..d6bfed94150bddbbc7ca0fc1480263e6af75688f
--- /dev/null
+++ b/Tests/A2/J1_4_Override_FinalOverrideNonFinal.java
@@ -0,0 +1,18 @@
+// HIERARCHY
+/* Hierarchy:
+ * A method must not override a final method 
+ * (8.4.3.3, well-formedness constraint 9).
+ * 
+ * This is the opposite case.
+ */
+public class J1_4_Override_FinalOverrideNonFinal {
+	public J1_4_Override_FinalOverrideNonFinal() {}
+	
+	public final String toString() {
+		return "J1_4_Override_FinalOverrideNonFinal";
+	}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_Override_PublicOverridesProtected.java b/Tests/A2/J1_4_Override_PublicOverridesProtected.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb9e15f57b4ef1a8f88f480c2549552453a92750
--- /dev/null
+++ b/Tests/A2/J1_4_Override_PublicOverridesProtected.java
@@ -0,0 +1,18 @@
+// HIERARCHY
+/* Hierarchy:
+ * A protected method must not override a public method
+ * (8.4.6.3, well-formedness constraint 7).
+ * 
+ * This is the opposite case.
+ */
+public class J1_4_Override_PublicOverridesProtected {
+	public J1_4_Override_PublicOverridesProtected() {}
+	
+	public Object clone() {
+		return null;
+	}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_Loaded/Main.java b/Tests/A2/J1_4_PackageClashWithType_Loaded/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbe9f6dc1ae94ccdd3f32c5f33ba592d381cccfe
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_Loaded/Main.java
@@ -0,0 +1,24 @@
+//TYPE_LINKING
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The declared class javax.swing.tree does not clash with the package
+ * of the same name because javax.swing.tree is not refered, nor does
+ * is clash because javax.swing.tree is implicitly loaded by the use
+ * of JTree.
+ */
+import javax.swing.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		JTree tree = new JTree();		
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_Loaded/javax/swing/JTree.java b/Tests/A2/J1_4_PackageClashWithType_Loaded/javax/swing/JTree.java
new file mode 100644
index 0000000000000000000000000000000000000000..f666d840df83c0ffca7ec7dc72589fbab45c40dc
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_Loaded/javax/swing/JTree.java
@@ -0,0 +1,5 @@
+package javax.swing;
+public class JTree {
+    public JTree() {
+    }
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_Loaded/javax/swing/tree.java b/Tests/A2/J1_4_PackageClashWithType_Loaded/javax/swing/tree.java
new file mode 100644
index 0000000000000000000000000000000000000000..d22d405395aaf86dbe3d7140fa6acd6de3ac262a
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_Loaded/javax/swing/tree.java
@@ -0,0 +1,5 @@
+package javax.swing;
+
+public class tree {
+	public tree() {}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_NotLoaded/Main.java b/Tests/A2/J1_4_PackageClashWithType_NotLoaded/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..30096151a6683220fc91b7d630e07476ffc68454
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_NotLoaded/Main.java
@@ -0,0 +1,19 @@
+//TYPE_LINKING
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The declared class javax.swing.tree does not clash with the package
+ * of the same name because javax.swing.tree is not refered.
+ */
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_NotLoaded/javax/swing/tree.java b/Tests/A2/J1_4_PackageClashWithType_NotLoaded/javax/swing/tree.java
new file mode 100644
index 0000000000000000000000000000000000000000..d22d405395aaf86dbe3d7140fa6acd6de3ac262a
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_NotLoaded/javax/swing/tree.java
@@ -0,0 +1,5 @@
+package javax.swing;
+
+public class tree {
+	public tree() {}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/Main.java b/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..930c3807dee2ef86c75e317d473858dc80efb790
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/Main.java
@@ -0,0 +1,21 @@
+//TYPE_LINKING
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The prefix 'foo' of the single-type import declaration foo.bar does
+ * not clash with class foo because it is class foo is in the default package.
+ */
+import foo.bar;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return bar.method();
+	}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/foo.java b/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..85116170b00e4383c59d7821361a6f6052735674
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/foo.java
@@ -0,0 +1,4 @@
+public class foo {
+	public foo() {
+	}
+}
diff --git a/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/foo/bar.java b/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/foo/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..f866758828f20d01a606812b63d1375f61e2128f
--- /dev/null
+++ b/Tests/A2/J1_4_PackageClashWithType_SingleTypeImport_DefaultPackage/foo/bar.java
@@ -0,0 +1,10 @@
+package foo;
+
+public class bar {
+	public bar() {
+	}
+	
+	public static int method() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/Main.java b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb34cabb705cab671f76018d0d649675dcdc98fe
--- /dev/null
+++ b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/Main.java
@@ -0,0 +1,23 @@
+//TYPE_LINKING
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The prefix 'foo' of the class foo.bar does not clash with class foo
+ * because it is class foo is in the default package.
+ */
+import bar.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		foo f = new foo();
+		bar b = new bar();
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/bar/bar.java b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/bar/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..2708c11f5934c48b878fe5dba6938d9dd6da8547
--- /dev/null
+++ b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/bar/bar.java
@@ -0,0 +1,9 @@
+package bar;
+
+import foo.*;
+
+public class bar {
+	public bar() {
+		baz f = new baz();
+	}
+}
diff --git a/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/foo.java b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..85116170b00e4383c59d7821361a6f6052735674
--- /dev/null
+++ b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/foo.java
@@ -0,0 +1,4 @@
+public class foo {
+	public foo() {
+	}
+}
diff --git a/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/foo/baz.java b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/foo/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..6fe1f134568beff1b45e4075e77b83e7e8f9c5ee
--- /dev/null
+++ b/Tests/A2/J1_4_PackageNameIsClassName_DefaultPackage/foo/baz.java
@@ -0,0 +1,6 @@
+package foo;
+
+public class baz {
+	public baz() {
+	}
+}
diff --git a/Tests/A2/J1_4_Resolve_NotDefaultPackage/Main.java b/Tests/A2/J1_4_Resolve_NotDefaultPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..baf7440280ad256f2a2da218810976b4de44de32
--- /dev/null
+++ b/Tests/A2/J1_4_Resolve_NotDefaultPackage/Main.java
@@ -0,0 +1,9 @@
+//TYPE_LINKING
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_4_Resolve_NotDefaultPackage/foo.java b/Tests/A2/J1_4_Resolve_NotDefaultPackage/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..236dd1b51b0b286d643db814937a8839572cf784
--- /dev/null
+++ b/Tests/A2/J1_4_Resolve_NotDefaultPackage/foo.java
@@ -0,0 +1,3 @@
+public class foo {
+	public foo() {}
+}
diff --git a/Tests/A2/J1_4_Resolve_NotDefaultPackage/foo/bar.java b/Tests/A2/J1_4_Resolve_NotDefaultPackage/foo/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d72ebcae15420ab1106fa5374a7a517b1f833d2
--- /dev/null
+++ b/Tests/A2/J1_4_Resolve_NotDefaultPackage/foo/bar.java
@@ -0,0 +1,7 @@
+package foo;
+
+public class bar {
+	public foo.bar fb = null;
+	
+	public bar() {}
+}
diff --git a/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/Main.java b/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6166c8b3dc04b96498beb5c58eb3df2a2daa703a
--- /dev/null
+++ b/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/Main.java
@@ -0,0 +1,20 @@
+// TYPE_LINKING
+/**
+ * TypeLinking:
+ * - Tests whether singletype imports indeed have higher priority than
+ * on-demand imports.
+ */
+import Test.OutputStream;
+import java.io.*;
+import org.omg.CORBA.portable.*;
+
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	OutputStream o = new OutputStream();
+	return o.write(123).length();
+    }
+
+}
diff --git a/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/Test/OutputStream.java b/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/Test/OutputStream.java
new file mode 100644
index 0000000000000000000000000000000000000000..39d78c516091ddf95be71e2090753222e5c242e8
--- /dev/null
+++ b/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/Test/OutputStream.java
@@ -0,0 +1,19 @@
+package Test;
+
+public class OutputStream{
+
+    public OutputStream(){}
+
+    public String write(int a){
+	String result = "";
+	while (a >= 41){
+	    result = result + "All fun and no play makes Jack a dull boy";
+	    a = a - 41;
+	}
+	while (a > 0){
+	    result = result + ".";
+	    a = a - 1;
+	}
+	return result;
+    }
+}
diff --git a/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/org/omg/CORBA/portable/OutputStream.java b/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/org/omg/CORBA/portable/OutputStream.java
new file mode 100644
index 0000000000000000000000000000000000000000..fbc9382a6264b3bf7ec5c31e26d9c455ae055560
--- /dev/null
+++ b/Tests/A2/J1_4_SingleTypeImport_OnDemandsClash/org/omg/CORBA/portable/OutputStream.java
@@ -0,0 +1,19 @@
+package org.omg.CORBA.portable;
+
+public class OutputStream{
+
+    public OutputStream(){}
+
+    public String write(int a){
+	String result = "";
+	while (a >= 41){
+	    result = result + "All fun and no play makes Jack a dull boy";
+	    a = a - 41;
+	}
+	while (a > 0){
+	    result = result + ".";
+	    a = a - 1;
+	}
+	return result;
+    }
+}
diff --git a/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/A.java b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..606702b0cc02994bb3d5f3cb1b9155a27db5b4ea
--- /dev/null
+++ b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/A.java
@@ -0,0 +1,11 @@
+package A;
+
+public class A {
+    protected A() {}
+    
+    protected void instanceMethod() {}
+    
+    protected static void staticMethod() {}
+    
+    protected int instanceField;
+}
diff --git a/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/B.java b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..005b31acdf24a4618b9998911e45041b6b4e55e4
--- /dev/null
+++ b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/B.java
@@ -0,0 +1,7 @@
+package B;
+
+public class B extends A.A {
+    protected B() {}
+    
+    protected B(int x) {}
+}
diff --git a/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/C.java b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/C.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a6197fb09909241ebf2a238ee12e5a2a566347b
--- /dev/null
+++ b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/C.java
@@ -0,0 +1,21 @@
+/* TypeChecking:
+ * 
+ * Test for Protected Access
+ * 
+ * B.B extends A.A
+ * C.C extends B.B
+ * D.D extends C.C
+ */
+
+package C;
+
+public class C extends B.B {
+    public C() {}
+
+    /* static method access through this class
+     * => OK, since C is a subclass of the declaring class A.A (6.6.2.1)
+     */ 
+    public void staticMethodAccessFromThisClass() {
+	C.staticMethod();
+    }
+}
diff --git a/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/D.java b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/D.java
new file mode 100644
index 0000000000000000000000000000000000000000..9da2965d03a6f3c22f328161c2567b7af214c643
--- /dev/null
+++ b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/D.java
@@ -0,0 +1,5 @@
+package D;
+
+public class D extends C.C {
+    protected D() {}
+}
diff --git a/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/Main.java b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..61f9a63ebe35aad02612ec8e66aeabb003188ca8
--- /dev/null
+++ b/Tests/A2/J1_6_ProtectedAccess_StaticMethod_This/Main.java
@@ -0,0 +1,18 @@
+// HIERARCHY,TYPE_CHECKING
+/* TypeChecking:
+ * 
+ * Test for Protected Access
+ * 
+ * B.B extends A.A
+ * C.C extends B.B
+ * D.D extends C.C
+ * 
+ * see C.java
+ */
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_InterfaceObject/Main.java b/Tests/A2/J1_InterfaceObject/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4fcab268f842580bddf4e8aee0067b7d60183c1
--- /dev/null
+++ b/Tests/A2/J1_InterfaceObject/Main.java
@@ -0,0 +1,11 @@
+// HIERARCHY,TYPE_CHECKING
+import java.util.*;
+
+public class Main {
+    public Main() {}
+
+    public static int test() {
+	Object x = (List)new LinkedList();
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_InterfaceObject/java/util/Collection.java b/Tests/A2/J1_InterfaceObject/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_InterfaceObject/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_InterfaceObject/java/util/LinkedList.java b/Tests/A2/J1_InterfaceObject/java/util/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f6328da16aee2b4618529a3132356a7cc34d3
--- /dev/null
+++ b/Tests/A2/J1_InterfaceObject/java/util/LinkedList.java
@@ -0,0 +1,32 @@
+package java.util;
+public class LinkedList implements List {
+    protected boolean empty = true;
+    protected Object cur = null;
+    protected LinkedList next = null;
+    public LinkedList() {
+    }
+    public int size() {
+        if(empty) return 0;
+        else if(next == null) return 1;
+        else return 1+next.size();
+    }
+    public boolean add(Object o) {
+        if(empty) {
+            cur = o;
+            empty = false;
+        } else {
+            if(next == null) {
+                next = new LinkedList();
+            }
+            next.add(o);
+        }
+        return true;
+    }
+    public Object clone() {
+        LinkedList ret = new LinkedList();
+        if(next != null) ret.next = (LinkedList) next.clone();
+        ret.cur = cur;
+        ret.empty = empty;
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_InterfaceObject/java/util/List.java b/Tests/A2/J1_InterfaceObject/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_InterfaceObject/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_SubType1/A.java b/Tests/A2/J1_SubType1/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..8561b088530ce3365df3efce5f1d95d091815bf7
--- /dev/null
+++ b/Tests/A2/J1_SubType1/A.java
@@ -0,0 +1,13 @@
+public class A {
+    
+    protected int t = 41;
+
+    public A() { 
+	t = t + 1;
+    }
+
+    public int testA(){
+	return t + 80;
+    }
+
+}
diff --git a/Tests/A2/J1_SubType1/Main.java b/Tests/A2/J1_SubType1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ab0302254099828513756f9aa346035b09380e4
--- /dev/null
+++ b/Tests/A2/J1_SubType1/Main.java
@@ -0,0 +1,25 @@
+// HIERARCHY
+/* Hierarchy:
+ * A {
+ *	int testA()
+ * }
+ * Main extends A {
+ *	int testA()
+ * }
+ */
+public class Main extends A {
+
+    public Main(){}
+
+    public static int test() {
+	
+	A a = new Main();
+
+	return a.testA();
+	
+    }
+
+    public int testA(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_SubType2/A.java b/Tests/A2/J1_SubType2/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..acd7b3496608f059ad8cc30d91b989420c03dafb
--- /dev/null
+++ b/Tests/A2/J1_SubType2/A.java
@@ -0,0 +1,14 @@
+public class A {
+    
+    protected int t = 41;
+
+    public A() { 
+	t = t + 1;
+    }
+
+    public int testA(){
+	return t + 80;
+    }
+
+}
+
diff --git a/Tests/A2/J1_SubType2/Main.java b/Tests/A2/J1_SubType2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5a984d13f92e2a21bfa3a7b93283a1ca62404c0
--- /dev/null
+++ b/Tests/A2/J1_SubType2/Main.java
@@ -0,0 +1,26 @@
+// HIERARCHY
+/* Hierarchy:
+ * A {
+ *	int testA()
+ * }
+ * Main extends A {
+ *	int testA()
+ * }
+ */
+public class Main extends A {
+
+    public Main(){}
+
+    public static int test() {
+	
+	A a = null;
+	a = new Main();
+
+	return a.testA();
+	
+    }
+
+    public int testA(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_abstract/A.java b/Tests/A2/J1_abstract/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab9b10578e67cb4c5ec23e0f8327e63f723498fa
--- /dev/null
+++ b/Tests/A2/J1_abstract/A.java
@@ -0,0 +1,5 @@
+public abstract class A {
+    public A() {}
+    public abstract int m();
+}
+
diff --git a/Tests/A2/J1_abstract/B.java b/Tests/A2/J1_abstract/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..eee687f018bb8f258d8d3ca6b7cc54da53eaf1d1
--- /dev/null
+++ b/Tests/A2/J1_abstract/B.java
@@ -0,0 +1,7 @@
+public class B extends A {
+    public B() {}
+    public int m() {
+	return 123;
+    }
+}
+
diff --git a/Tests/A2/J1_abstract/Main.java b/Tests/A2/J1_abstract/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e53ef526b81c0e904f2dbb88616eb1c18062b19b
--- /dev/null
+++ b/Tests/A2/J1_abstract/Main.java
@@ -0,0 +1,12 @@
+// HIERARCHY
+/*
+ * The abstract class A declares the abstract method m()
+ * B extends A and implements A
+ */
+public class Main {
+    public Main() {}
+    public static int test() {
+	A a = new B();
+	return a.m();
+    }
+}
diff --git a/Tests/A2/J1_access_override2.java b/Tests/A2/J1_access_override2.java
new file mode 100644
index 0000000000000000000000000000000000000000..68dc671f50d75f9dbe0bf30d106d696c42602044
--- /dev/null
+++ b/Tests/A2/J1_access_override2.java
@@ -0,0 +1,13 @@
+// HIERARCHY
+public class J1_access_override2 {
+
+    public J1_access_override2 () {}
+
+    public Object clone() { return new J1_access_override2(); }
+
+    public static int test() {
+	Object o = new J1_access_override2().clone();
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_arbitrarylocaldeclaration.java b/Tests/A2/J1_arbitrarylocaldeclaration.java
new file mode 100644
index 0000000000000000000000000000000000000000..efbd8895bea27fb976208effcafbfd61e827b476
--- /dev/null
+++ b/Tests/A2/J1_arbitrarylocaldeclaration.java
@@ -0,0 +1,13 @@
+// PARSER_WEEDER,ENVIRONMENTS
+public class J1_arbitrarylocaldeclaration {
+    public static int test() {
+	return new J1_arbitrarylocaldeclaration().m();
+    }
+    public J1_arbitrarylocaldeclaration() {}
+    public int m() {
+	int x = 35;
+	x = x+1;
+	int y = x+87;
+	return y;
+    }
+}
diff --git a/Tests/A2/J1_assign_Object_to_Object.java b/Tests/A2/J1_assign_Object_to_Object.java
new file mode 100644
index 0000000000000000000000000000000000000000..6052324fab8edaa4766a9f90f06f2683fe19c74d
--- /dev/null
+++ b/Tests/A2/J1_assign_Object_to_Object.java
@@ -0,0 +1,14 @@
+// HIERARCHY,TYPE_CHECKING
+public class J1_assign_Object_to_Object {
+
+    public J1_assign_Object_to_Object(){}
+
+    public static int test(){
+	Object o1 = new Object();
+	Object o2 = new Object();
+	o2 = o1;
+	return 123;
+
+    }
+
+}
diff --git a/Tests/A2/J1_cast_to_same_type.java b/Tests/A2/J1_cast_to_same_type.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ebb68f25ed246da347fc2559e4ab2588e1c947f
--- /dev/null
+++ b/Tests/A2/J1_cast_to_same_type.java
@@ -0,0 +1,13 @@
+// HIERARCHY,TYPE_CHECKING
+public class J1_cast_to_same_type{
+
+    public J1_cast_to_same_type(){}
+
+    public static int test(){
+
+	String s = "123";
+
+	return Integer.parseInt((String)s);
+    }
+
+}
diff --git a/Tests/A2/J1_classextendsobject1.java b/Tests/A2/J1_classextendsobject1.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7e5c91c3427547bb1096091376bfcf1363e7554
--- /dev/null
+++ b/Tests/A2/J1_classextendsobject1.java
@@ -0,0 +1,10 @@
+// TYPE_LINKING,HIERARCHY
+public class J1_classextendsobject1 extends Object {
+
+    public J1_classextendsobject1() {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_classextendsobject2.java b/Tests/A2/J1_classextendsobject2.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf8409a62a2d1f922f960acd8d499edc78bda29a
--- /dev/null
+++ b/Tests/A2/J1_classextendsobject2.java
@@ -0,0 +1,10 @@
+// TYPE_LINKING,HIERARCHY
+public class J1_classextendsobject2 extends java.lang.Object {
+
+    public J1_classextendsobject2() {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_classimplementsserializable1/Main.java b/Tests/A2/J1_classimplementsserializable1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a47a5027a4c690ffd745dd2648cb71f4dcb69be3
--- /dev/null
+++ b/Tests/A2/J1_classimplementsserializable1/Main.java
@@ -0,0 +1,11 @@
+// TYPE_LINKING,HIERARCHY
+import java.io.Serializable;
+public class Main implements Serializable {
+
+    public Main() {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_classimplementsserializable2/Main.java b/Tests/A2/J1_classimplementsserializable2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..8edb193672bfbc4b3280331c5cf6965302d51086
--- /dev/null
+++ b/Tests/A2/J1_classimplementsserializable2/Main.java
@@ -0,0 +1,10 @@
+// TYPE_LINKING,HIERARCHY
+public class Main implements java.io.Serializable {
+
+    public Main() {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_classimport/Main.java b/Tests/A2/J1_classimport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..11ea63ed38576ff24c00eefc81a557b53a02aad7
--- /dev/null
+++ b/Tests/A2/J1_classimport/Main.java
@@ -0,0 +1,15 @@
+// TYPE_LINKING
+import java.util.Vector;
+
+public class Main {
+
+    public Main() {}
+    
+    protected Vector c;
+    
+    public static int test() {
+	return 123;
+    } 
+
+}
+
diff --git a/Tests/A2/J1_classimport/java/util/Vector.java b/Tests/A2/J1_classimport/java/util/Vector.java
new file mode 100644
index 0000000000000000000000000000000000000000..73c160dde58afe4b0878af14e5c1cc17e7a83e12
--- /dev/null
+++ b/Tests/A2/J1_classimport/java/util/Vector.java
@@ -0,0 +1,5 @@
+package java.util;
+public class Vector {
+    public Vector() {
+    }
+}
diff --git a/Tests/A2/J1_constructorWithSameNameAsMethod.java b/Tests/A2/J1_constructorWithSameNameAsMethod.java
new file mode 100644
index 0000000000000000000000000000000000000000..074eee44d5c5cc26102b46cfeaa27b49cfff64ec
--- /dev/null
+++ b/Tests/A2/J1_constructorWithSameNameAsMethod.java
@@ -0,0 +1,14 @@
+// PARSER_WEEDER,HIERARCHY
+public class J1_constructorWithSameNameAsMethod {
+
+    public J1_constructorWithSameNameAsMethod () {}
+
+    public int J1_constructorWithSameNameAsMethod () {
+        return 123;
+    }
+
+    public static int test() {
+        return new J1_constructorWithSameNameAsMethod().J1_constructorWithSameNameAsMethod();
+    }
+
+}
diff --git a/Tests/A2/J1_fields/Bar.java b/Tests/A2/J1_fields/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..52d3a796145527a6d20278954a4cc390467d1cae
--- /dev/null
+++ b/Tests/A2/J1_fields/Bar.java
@@ -0,0 +1,7 @@
+public class Bar {
+
+    public Bar () {}
+
+    public int j = 123;
+
+}
diff --git a/Tests/A2/J1_fields/Main.java b/Tests/A2/J1_fields/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c9316f278d2b15aad8472a8ac24003b804b847f
--- /dev/null
+++ b/Tests/A2/J1_fields/Main.java
@@ -0,0 +1,17 @@
+// HIERARCHY
+/*
+ * Bar declares the public field 'j'.
+ */
+public class Main {
+    public Main() {}
+
+   public static void main(String[] args) {
+       //	System.out.println(test());
+    }
+
+    public static int test() {
+	Bar b = new Bar();
+	int i = b.j;
+	return i;
+    }
+}
diff --git a/Tests/A2/J1_final_method_override1/Main.java b/Tests/A2/J1_final_method_override1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3bfd223beabeb23a222ac98bf654d6614d37772
--- /dev/null
+++ b/Tests/A2/J1_final_method_override1/Main.java
@@ -0,0 +1,20 @@
+// HIERARCHY
+/* A final method may not be overridden or hidden,
+ * but another method with the same name may be 
+ * defined. */
+
+public class Main extends foo{
+
+    public Main(){}
+
+    public int bar(String s){
+	return 123;
+    }
+
+    public static int test(){
+
+	Main m = new Main();
+	return m.bar("Hello World!");
+    }
+
+}
diff --git a/Tests/A2/J1_final_method_override1/foo.java b/Tests/A2/J1_final_method_override1/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c214c6e40ee571435ddf1cf8d04a0261bc16549
--- /dev/null
+++ b/Tests/A2/J1_final_method_override1/foo.java
@@ -0,0 +1,9 @@
+public class foo{
+
+    public foo(){}
+
+    public final int bar(int f){
+	return f+1;
+    }
+
+}
diff --git a/Tests/A2/J1_formal_with_same_name_as_field.java b/Tests/A2/J1_formal_with_same_name_as_field.java
new file mode 100644
index 0000000000000000000000000000000000000000..237ee7688f7789ee682acec804bdcfd9afc050ac
--- /dev/null
+++ b/Tests/A2/J1_formal_with_same_name_as_field.java
@@ -0,0 +1,21 @@
+// ENVIRONMENTS,DISAMBIGUATION
+public class J1_formal_with_same_name_as_field{
+
+    protected String s = "Hello World!";
+
+    public J1_formal_with_same_name_as_field(){}
+
+    public J1_formal_with_same_name_as_field(String s){}
+
+    public int testerMethod(String s){
+
+	    return 123;
+    }
+
+    public static int test(){
+
+	J1_formal_with_same_name_as_field j = new J1_formal_with_same_name_as_field("Hello Wrold!");
+	return j.testerMethod("Hello World!");
+    }
+
+}
diff --git a/Tests/A2/J1_formalindex.java b/Tests/A2/J1_formalindex.java
new file mode 100644
index 0000000000000000000000000000000000000000..6349c8efd1a18ac4ad041f48224eec062cb26b60
--- /dev/null
+++ b/Tests/A2/J1_formalindex.java
@@ -0,0 +1,22 @@
+// ENVIRONMENTS,DISAMBIGUATION
+public class J1_formalindex {
+
+    protected int field;
+
+    public J1_formalindex() {
+    }
+
+    public J1_formalindex(int a, int b, int c, int d, int e) {
+	this.field = foo(a,b,c,d,e);
+    }
+
+    protected int foo(int a, int b, int c, int d, int e) {
+	int local = a * c;
+	return local+e;
+    }
+
+    public static int test() {
+        return new J1_formalindex(11,42,2,88,101).field;
+    }
+
+}
diff --git a/Tests/A2/J1_hierachyCheck14/Main.java b/Tests/A2/J1_hierachyCheck14/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d195353e4d51b6933a71d2046c164f5b0a310a0
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck14/Main.java
@@ -0,0 +1,16 @@
+// HIERARCHY
+/*
+A type must not inherit two fields with the same name 
+(extra Joos restriction) - but may hide...
+*/
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	foo f = new foo();
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_hierachyCheck14/bar.java b/Tests/A2/J1_hierachyCheck14/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f59acbb3d91afd695471677a0d1703b599a24e0
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck14/bar.java
@@ -0,0 +1,7 @@
+public class bar extends Object {
+
+    public String x;
+
+    public bar() {}
+
+}
diff --git a/Tests/A2/J1_hierachyCheck14/foo.java b/Tests/A2/J1_hierachyCheck14/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..716062acdf204eebc4e64e3b42edfff1ec5b4493
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck14/foo.java
@@ -0,0 +1,7 @@
+public class foo extends bar {
+
+    public int x;
+
+    public foo() {}
+
+}
diff --git a/Tests/A2/J1_hierachyCheck28/Main.java b/Tests/A2/J1_hierachyCheck28/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d6dc2436502d01f60f21e639546cdcacf26d913
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck28/Main.java
@@ -0,0 +1,14 @@
+// HIERARCHY
+import java.util.*;
+
+// abstract classes are allowed not to implement any methods from an interface
+
+public abstract class Main implements Set{
+
+    public Main () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_hierachyCheck28/java/util/Collection.java b/Tests/A2/J1_hierachyCheck28/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck28/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_hierachyCheck28/java/util/Set.java b/Tests/A2/J1_hierachyCheck28/java/util/Set.java
new file mode 100644
index 0000000000000000000000000000000000000000..f106e7533984b05c9cb43b0fc6af5ed8ce8f7438
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck28/java/util/Set.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface Set extends Collection {
+    public boolean addAll(Collection c);
+}
diff --git a/Tests/A2/J1_hierachyCheck29/Main.java b/Tests/A2/J1_hierachyCheck29/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a4c453f531df2af87af9233b4afcaa8af99724e
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck29/Main.java
@@ -0,0 +1,18 @@
+// HIERARCHY
+import java.util.*;
+
+// abstract classes are allowed to implement only some methods from an interface
+
+public abstract class Main implements Set{
+
+    public Main () {}
+
+    public static int test() {
+        return 123;
+    }
+
+    public void clear() {
+	int i = 8;
+    }
+
+}
diff --git a/Tests/A2/J1_hierachyCheck29/java/util/Collection.java b/Tests/A2/J1_hierachyCheck29/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck29/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_hierachyCheck29/java/util/Set.java b/Tests/A2/J1_hierachyCheck29/java/util/Set.java
new file mode 100644
index 0000000000000000000000000000000000000000..f106e7533984b05c9cb43b0fc6af5ed8ce8f7438
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck29/java/util/Set.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface Set extends Collection {
+    public boolean addAll(Collection c);
+}
diff --git a/Tests/A2/J1_hierachyCheck31/Main.java b/Tests/A2/J1_hierachyCheck31/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..c50dc45822c491a530f88ef05114bffe3d95c79c
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck31/Main.java
@@ -0,0 +1,16 @@
+// HIERARCHY
+/*
+A type must not inherit two different fields with the same name, but
+may hide fields in odd ways.
+*/
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	foo f = new foo();
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_hierachyCheck31/bar.java b/Tests/A2/J1_hierachyCheck31/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..81134d9fe14946b61085c485c797a62b80b5cdd0
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck31/bar.java
@@ -0,0 +1,7 @@
+public class bar extends boz {
+
+    public char x;
+
+    public bar() {}
+
+}
diff --git a/Tests/A2/J1_hierachyCheck31/boz.java b/Tests/A2/J1_hierachyCheck31/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..3eeb031f7f7ef80a3b34ef5b2edb3ffc6da4e178
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck31/boz.java
@@ -0,0 +1,7 @@
+public class boz {
+
+    public String x;
+
+    public boz () {}
+
+}
diff --git a/Tests/A2/J1_hierachyCheck31/foo.java b/Tests/A2/J1_hierachyCheck31/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..716062acdf204eebc4e64e3b42edfff1ec5b4493
--- /dev/null
+++ b/Tests/A2/J1_hierachyCheck31/foo.java
@@ -0,0 +1,7 @@
+public class foo extends bar {
+
+    public int x;
+
+    public foo() {}
+
+}
diff --git a/Tests/A2/J1_implicitsuper/Bar.java b/Tests/A2/J1_implicitsuper/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..20501935934a2e6746c2e131c33a8d7f83fedc71
--- /dev/null
+++ b/Tests/A2/J1_implicitsuper/Bar.java
@@ -0,0 +1,7 @@
+public class Bar {
+	protected int field;
+
+	public Bar() {
+		field=123;
+	}
+}
diff --git a/Tests/A2/J1_implicitsuper/Foo.java b/Tests/A2/J1_implicitsuper/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..3add76ab999833e3638211c78542a52914fdce17
--- /dev/null
+++ b/Tests/A2/J1_implicitsuper/Foo.java
@@ -0,0 +1,6 @@
+public class Foo extends Bar {
+	public Foo() {}
+	public int foo() {
+		return field;
+	}
+}
diff --git a/Tests/A2/J1_implicitsuper/Main.java b/Tests/A2/J1_implicitsuper/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..19a386f2e1ac3624a0ab7c9453c55b494dcb8034
--- /dev/null
+++ b/Tests/A2/J1_implicitsuper/Main.java
@@ -0,0 +1,13 @@
+// HIERARCHY
+/* 
+ * Foo extends Bar, Bar declares the int field 'field',
+ * which is inherited by Foo.
+ */
+public class Main {
+	public Main() { }
+	public static int test() {
+		Foo foo = new Foo();
+		return foo.field;
+	}
+}
+ 
diff --git a/Tests/A2/J1_importName10.java b/Tests/A2/J1_importName10.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7ed1b1b60869cd2498f1a0112515d109a84e84f
--- /dev/null
+++ b/Tests/A2/J1_importName10.java
@@ -0,0 +1,14 @@
+// TYPE_LINKING
+import java.io.*;
+import java.io.*;
+
+public class J1_importName10 {
+
+    public J1_importName10 () {}
+
+    public static int test() {
+	PrintStream p = java.lang.System.out;
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_importName11.java b/Tests/A2/J1_importName11.java
new file mode 100644
index 0000000000000000000000000000000000000000..636a3960571a8eff7f09f2e671ad4b4906182a54
--- /dev/null
+++ b/Tests/A2/J1_importName11.java
@@ -0,0 +1,13 @@
+// TYPE_LINKING
+import java.lang.*;
+
+public class J1_importName11 {
+
+    public J1_importName11 () {}
+
+    public static int test() {
+	java.io.PrintStream o = System.out;
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_importName9.java b/Tests/A2/J1_importName9.java
new file mode 100644
index 0000000000000000000000000000000000000000..f997920db68ff0e2be446d613c07fb42785b54af
--- /dev/null
+++ b/Tests/A2/J1_importName9.java
@@ -0,0 +1,17 @@
+// TYPE_LINKING
+import java.lang.*;
+import java.lang.*;
+import java.lang.*;
+import java.io.*;
+import java.io.*;
+
+public class J1_importName9 {
+
+    public J1_importName9 () {}
+
+    public static int test() {
+	PrintStream p = java.lang.System.out;
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_importNameLookup1/Main.java b/Tests/A2/J1_importNameLookup1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..58be545351d2785496d9a738d577d42ccb1a7c7b
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup1/Main.java
@@ -0,0 +1,25 @@
+// TYPE_LINKING
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 2 vs. 4
+import baz.foo;
+import bar.*;
+
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new foo().x;
+    }
+
+    public static void main(String[] args) {
+	System.out.println(""+Main.test());
+    }
+}
diff --git a/Tests/A2/J1_importNameLookup1/bar/foo.java b/Tests/A2/J1_importNameLookup1/bar/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..227655fe3fcc561dad5ab9d6ac87347534a3b1cd
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup1/bar/foo.java
@@ -0,0 +1,12 @@
+package bar;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 7;	
+    }
+
+}
+
diff --git a/Tests/A2/J1_importNameLookup1/baz/foo.java b/Tests/A2/J1_importNameLookup1/baz/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..51e9bba20a1bfc152695557195598ff23f9d182c
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup1/baz/foo.java
@@ -0,0 +1,11 @@
+package baz;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 123;	
+    }
+}
+
diff --git a/Tests/A2/J1_importNameLookup2/Main.java b/Tests/A2/J1_importNameLookup2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..85374db2c7a9e722f7361443055612889903811d
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup2/Main.java
@@ -0,0 +1,25 @@
+// TYPE_LINKING
+
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 2 vs. 3
+import bar.foo;
+
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new foo().x;
+    }
+
+    public static void main(String[] args) {
+	System.out.println(""+Main.test());
+    }
+}
diff --git a/Tests/A2/J1_importNameLookup2/bar/foo.java b/Tests/A2/J1_importNameLookup2/bar/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..27b5790726fddea88c1e97df35ddeae5e89707be
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup2/bar/foo.java
@@ -0,0 +1,12 @@
+package bar;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 123;	
+    }
+
+}
+
diff --git a/Tests/A2/J1_importNameLookup2/foo.java b/Tests/A2/J1_importNameLookup2/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..a21a2f8dfeb7e2cc799cc29e2dc67c19f35e9529
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup2/foo.java
@@ -0,0 +1,9 @@
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 7;	
+    }
+}
+
diff --git a/Tests/A2/J1_importNameLookup3/Main.java b/Tests/A2/J1_importNameLookup3/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..de2139901fc249d9da34fc1120e50d86a8857c0c
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup3/Main.java
@@ -0,0 +1,23 @@
+// TYPE_LINKING
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 1 vs. 4
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new foo().getX();
+    }
+
+    public static void main(String[] args) {
+	System.out.println(""+Main.test());
+    }
+
+}
diff --git a/Tests/A2/J1_importNameLookup3/bar/foo.java b/Tests/A2/J1_importNameLookup3/bar/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..227655fe3fcc561dad5ab9d6ac87347534a3b1cd
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup3/bar/foo.java
@@ -0,0 +1,12 @@
+package bar;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 7;	
+    }
+
+}
+
diff --git a/Tests/A2/J1_importNameLookup3/foo.java b/Tests/A2/J1_importNameLookup3/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..9480c178ee1ed6cfb490ace777597fde3bc56fc9
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup3/foo.java
@@ -0,0 +1,16 @@
+import bar.*;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 123;	
+    }
+
+    public int getX() {
+	foo f = new foo();
+	return f.x;
+    }
+}
+
diff --git a/Tests/A2/J1_importNameLookup4/Main.java b/Tests/A2/J1_importNameLookup4/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..07ddbe01966a7d15c8ef4a4384987a041a995129
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup4/Main.java
@@ -0,0 +1,25 @@
+// TYPE_LINKING
+
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 2 vs. 4
+import bar.*;
+
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new foo().x;
+    }
+
+    public static void main(String[] args) {
+	System.out.println(""+Main.test());
+    }
+}
diff --git a/Tests/A2/J1_importNameLookup4/bar/foo.java b/Tests/A2/J1_importNameLookup4/bar/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..227655fe3fcc561dad5ab9d6ac87347534a3b1cd
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup4/bar/foo.java
@@ -0,0 +1,12 @@
+package bar;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 7;	
+    }
+
+}
+
diff --git a/Tests/A2/J1_importNameLookup4/foo.java b/Tests/A2/J1_importNameLookup4/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec0e506b8f057e986cea3cbe5416828a3e6720bd
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup4/foo.java
@@ -0,0 +1,9 @@
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 123;	
+    }
+}
+
diff --git a/Tests/A2/J1_importNameLookup5/Main.java b/Tests/A2/J1_importNameLookup5/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ab83bc6e3bf8f3d66a390d7b927bd50a534a36b
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup5/Main.java
@@ -0,0 +1,25 @@
+// TYPE_LINKING
+
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 2 vs. 5
+import bar.System;
+
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new System().x;
+    }
+
+    public static void main(String[] args) {
+	// System.out.println(""+Main.test());
+    }
+}
diff --git a/Tests/A2/J1_importNameLookup5/bar/System.java b/Tests/A2/J1_importNameLookup5/bar/System.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0d16fd57b8435237a2539427a8d6202455e2fc7
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup5/bar/System.java
@@ -0,0 +1,12 @@
+package bar;
+
+public class System {
+    
+    public int x;
+
+    public System() {
+	x = 123;	
+    }
+
+}
+
diff --git a/Tests/A2/J1_importNameLookup6/Main.java b/Tests/A2/J1_importNameLookup6/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..2225c196f24a406a86e28e588b1e814a75b147c4
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup6/Main.java
@@ -0,0 +1,24 @@
+// TYPE_LINKING
+import bar.*;
+
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 3 vs. 4
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new foo().x;
+    }
+
+    public static void main(String[] args) {
+	System.out.println(""+Main.test());
+    }
+}
diff --git a/Tests/A2/J1_importNameLookup6/bar/foo.java b/Tests/A2/J1_importNameLookup6/bar/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..227655fe3fcc561dad5ab9d6ac87347534a3b1cd
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup6/bar/foo.java
@@ -0,0 +1,12 @@
+package bar;
+
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 7;	
+    }
+
+}
+
diff --git a/Tests/A2/J1_importNameLookup6/foo.java b/Tests/A2/J1_importNameLookup6/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec0e506b8f057e986cea3cbe5416828a3e6720bd
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup6/foo.java
@@ -0,0 +1,9 @@
+public class foo {
+    
+    public int x;
+
+    public foo() {
+	x = 123;	
+    }
+}
+
diff --git a/Tests/A2/J1_importNameLookup7/Main.java b/Tests/A2/J1_importNameLookup7/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..0aebdb56a9caa3930361c9b417fa7b936499f182
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup7/Main.java
@@ -0,0 +1,22 @@
+// TYPE_LINKING
+/*
+Unqualified names are handled by these rules: 
+1. try the enclosing class or interface 
+2. try any single-type-import (A.B.C.D) 
+3. try the same package 
+4. try any import-on-demand package (A.B.C.*) including java.lang.* 
+*/
+
+// This testcase is supposed to test 3 vs. 4 - java.lang.*
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new System().x;
+    }
+
+    public static void main(String[] args) {
+	//	System.out.println(""+Main.test());
+    }
+}
diff --git a/Tests/A2/J1_importNameLookup7/System.java b/Tests/A2/J1_importNameLookup7/System.java
new file mode 100644
index 0000000000000000000000000000000000000000..862c1a1de3709b7d1e7cde058a2b3c6056a98e9d
--- /dev/null
+++ b/Tests/A2/J1_importNameLookup7/System.java
@@ -0,0 +1,9 @@
+public class System {
+    
+    public int x;
+
+    public System() {
+	x = 123;	
+    }
+}
+
diff --git a/Tests/A2/J1_inherited_hashcode.java b/Tests/A2/J1_inherited_hashcode.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd12a4111532a27c01ab1f1f05da17502960343e
--- /dev/null
+++ b/Tests/A2/J1_inherited_hashcode.java
@@ -0,0 +1,10 @@
+// HIERARCHY
+public class J1_inherited_hashcode {
+    public J1_inherited_hashcode() {}
+    public static int test() {
+	return 123 + new J1_inherited_hashcode().foo();
+    }
+    public int foo() {
+	return hashCode() - this.hashCode();
+    }
+}
diff --git a/Tests/A2/J1_instance_method_hide1/Main.java b/Tests/A2/J1_instance_method_hide1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..76f5f9503d158d068a1a10c16e33c87979138a37
--- /dev/null
+++ b/Tests/A2/J1_instance_method_hide1/Main.java
@@ -0,0 +1,18 @@
+// HIERARCHY
+/* A static method must not hide an instance method,
+ * but a new method with the same name may be defined. */
+
+public class Main extends foo{
+
+    public Main(){}
+
+    public static int bar(String s){
+	return 123;
+    }
+
+    public static int test(){
+
+	return Main.bar("Hello World!");
+    }
+
+}
diff --git a/Tests/A2/J1_instance_method_hide1/foo.java b/Tests/A2/J1_instance_method_hide1/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ffd9a27211091215b47f952f4d024f72110f8eb
--- /dev/null
+++ b/Tests/A2/J1_instance_method_hide1/foo.java
@@ -0,0 +1,9 @@
+public class foo{
+
+    public foo(){}
+
+    public int bar(int f){
+	return f+1;
+    }
+
+}
diff --git a/Tests/A2/J1_interfaceassignable/Main.java b/Tests/A2/J1_interfaceassignable/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2b8fad9d1bf3c57b3536886efedba6b081d759c
--- /dev/null
+++ b/Tests/A2/J1_interfaceassignable/Main.java
@@ -0,0 +1,11 @@
+// HIERARCHY,TYPE_CHECKING
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	java.lang.Object o = (java.util.List)new java.util.LinkedList();
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_interfaceassignable/java/util/Collection.java b/Tests/A2/J1_interfaceassignable/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_interfaceassignable/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_interfaceassignable/java/util/LinkedList.java b/Tests/A2/J1_interfaceassignable/java/util/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f6328da16aee2b4618529a3132356a7cc34d3
--- /dev/null
+++ b/Tests/A2/J1_interfaceassignable/java/util/LinkedList.java
@@ -0,0 +1,32 @@
+package java.util;
+public class LinkedList implements List {
+    protected boolean empty = true;
+    protected Object cur = null;
+    protected LinkedList next = null;
+    public LinkedList() {
+    }
+    public int size() {
+        if(empty) return 0;
+        else if(next == null) return 1;
+        else return 1+next.size();
+    }
+    public boolean add(Object o) {
+        if(empty) {
+            cur = o;
+            empty = false;
+        } else {
+            if(next == null) {
+                next = new LinkedList();
+            }
+            next.add(o);
+        }
+        return true;
+    }
+    public Object clone() {
+        LinkedList ret = new LinkedList();
+        if(next != null) ret.next = (LinkedList) next.clone();
+        ret.cur = cur;
+        ret.empty = empty;
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_interfaceassignable/java/util/List.java b/Tests/A2/J1_interfaceassignable/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_interfaceassignable/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_local_duplicate.java b/Tests/A2/J1_local_duplicate.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4ccc1a7ce746c5bbf072bec25ad016b572520ea
--- /dev/null
+++ b/Tests/A2/J1_local_duplicate.java
@@ -0,0 +1,11 @@
+// ENVIRONMENTS
+public class J1_local_duplicate {
+    public J1_local_duplicate() {}
+    protected int r = 456;
+    public static int test() {
+	{{
+	    int r = 123;
+	    return r;
+	}}
+    }
+}
diff --git a/Tests/A2/J1_localvariablescope.java b/Tests/A2/J1_localvariablescope.java
new file mode 100644
index 0000000000000000000000000000000000000000..072aa2ef07a3812bc999a5efd27ec64505b60038
--- /dev/null
+++ b/Tests/A2/J1_localvariablescope.java
@@ -0,0 +1,40 @@
+// ENVIRONMENTS
+public class J1_localvariablescope {
+
+    public Object o;
+
+    public J1_localvariablescope () {
+	{
+	    { Object o = new Object(); }
+	    { 
+		{ Object o = new Object(); }
+		{ Object o = new Object(); }
+	    }
+	    { Object o = new Object(); }
+	    Object o = new Object();
+	}
+	Object o = new Object();
+    }
+    
+    public static Object m() {
+	{
+	    { Object o = new Object(); }
+	    { 
+		{ Object o = new Object(); }
+		{ Object o = new Object(); }
+	    }
+	    { Object o = new Object(); }
+	    Object o = new Object();
+	}
+	Object o = new Object();
+	return o;
+    }
+
+    public static int test() {
+	Object o = null;
+	o = new J1_localvariablescope();
+	o = J1_localvariablescope.m();
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_name/J1_name/J1_name.java b/Tests/A2/J1_name/J1_name/J1_name.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f733ba0e97df12d2767976d425b5e059ea7155d
--- /dev/null
+++ b/Tests/A2/J1_name/J1_name/J1_name.java
@@ -0,0 +1,18 @@
+package J1_name;
+
+import J1_name.*;
+
+public class J1_name {
+    public int J1_name;
+
+    public J1_name() {}
+
+    public int test() {
+	J1_name = 7;
+	this.J1_name = 9;
+        (new J1_name()).J1_name = 42;
+	new J1_name().J1_name = 2;
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_name/Main.java b/Tests/A2/J1_name/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0e553490f0c4903018d6b57a0b3c2cf8d972ac8
--- /dev/null
+++ b/Tests/A2/J1_name/Main.java
@@ -0,0 +1,13 @@
+// TYPE_LINKING
+import J1_name.*;
+
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	J1_name j = new J1_name();
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_noduplicatefield.java b/Tests/A2/J1_noduplicatefield.java
new file mode 100644
index 0000000000000000000000000000000000000000..d69cc983e59c52f5ae12bcd58f98ec9b77c89393
--- /dev/null
+++ b/Tests/A2/J1_noduplicatefield.java
@@ -0,0 +1,9 @@
+// ENVIRONMENTS
+public class J1_noduplicatefield {
+	public int foo;
+	public int bar;
+	public int FOO;
+
+	public J1_noduplicatefield() { }
+	public static int test() { return 123; }
+}
diff --git a/Tests/A2/J1_on_demand_imports_clash/Main.java b/Tests/A2/J1_on_demand_imports_clash/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e26c7f6ff8346c247b6a73323c21d04b53cea5da
--- /dev/null
+++ b/Tests/A2/J1_on_demand_imports_clash/Main.java
@@ -0,0 +1,19 @@
+// TYPE_LINKING
+/* Check that all simple type names resolve uniquely, 
+ * i.e. not to types from more than one import-on-demand 
+ * declaration. 
+ * OK, but what if we don't use it? */
+
+import foo.*;
+import bar.*;
+
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_on_demand_imports_clash/bar/Baz.java b/Tests/A2/J1_on_demand_imports_clash/bar/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..6212a73f8f4421d114ddec69f2735f1e66d140db
--- /dev/null
+++ b/Tests/A2/J1_on_demand_imports_clash/bar/Baz.java
@@ -0,0 +1,11 @@
+package bar;
+
+public class Baz{
+
+    public Baz(){}
+
+    public int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_on_demand_imports_clash/foo/Baz.java b/Tests/A2/J1_on_demand_imports_clash/foo/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..53aa9433b93bed56ac2d3517f3d890b9f038211d
--- /dev/null
+++ b/Tests/A2/J1_on_demand_imports_clash/foo/Baz.java
@@ -0,0 +1,11 @@
+package foo;
+
+public class Baz{
+
+    public Baz(){}
+
+    public int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_package/Main.java b/Tests/A2/J1_package/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3b520290df6fd5d5532f593dfcd3f0073a3f602
--- /dev/null
+++ b/Tests/A2/J1_package/Main.java
@@ -0,0 +1,11 @@
+// TYPE_LINKING
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	dovs.joos.features.J1_package obj = new dovs.joos.features.J1_package();
+	return obj.test(); 
+    }
+
+}
diff --git a/Tests/A2/J1_package/dovs/joos/features/J1_package.java b/Tests/A2/J1_package/dovs/joos/features/J1_package.java
new file mode 100644
index 0000000000000000000000000000000000000000..14cfd2324403e7ed4a5aa27bf7020b9d019a4f6a
--- /dev/null
+++ b/Tests/A2/J1_package/dovs/joos/features/J1_package.java
@@ -0,0 +1,12 @@
+package dovs.joos.features;
+
+public class J1_package {
+
+    public J1_package() {}
+
+    public int test() {
+	return 123;
+    }
+
+}
+
diff --git a/Tests/A2/J1_packageimport/Main.java b/Tests/A2/J1_packageimport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f5642b691dacaa61a463ddacbc83cc457436a9a
--- /dev/null
+++ b/Tests/A2/J1_packageimport/Main.java
@@ -0,0 +1,15 @@
+// TYPE_LINKING
+import java.util.*;
+
+public class Main {
+
+    public Main() {}
+
+    protected Vector c;
+    
+    public static int test() {
+	return 123;
+    }
+
+}
+
diff --git a/Tests/A2/J1_packageimport/java/util/Vector.java b/Tests/A2/J1_packageimport/java/util/Vector.java
new file mode 100644
index 0000000000000000000000000000000000000000..73c160dde58afe4b0878af14e5c1cc17e7a83e12
--- /dev/null
+++ b/Tests/A2/J1_packageimport/java/util/Vector.java
@@ -0,0 +1,5 @@
+package java.util;
+public class Vector {
+    public Vector() {
+    }
+}
diff --git a/Tests/A2/J1_public_method_protected_override1/Main.java b/Tests/A2/J1_public_method_protected_override1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..91aa08fb77f585b2a3237914fe652268c82eb0d5
--- /dev/null
+++ b/Tests/A2/J1_public_method_protected_override1/Main.java
@@ -0,0 +1,19 @@
+// HIERARCHY
+/* A protected method must not override a public method,
+ * but a new method with the same name may be defined. */
+
+public class Main extends foo{
+
+    public Main(){}
+
+    protected int bar(String s){
+	return 123;
+    }
+
+    public static int test(){
+
+	Main m = new Main();
+	return m.bar("Hello World!");
+    }
+
+}
diff --git a/Tests/A2/J1_public_method_protected_override1/foo.java b/Tests/A2/J1_public_method_protected_override1/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ffd9a27211091215b47f952f4d024f72110f8eb
--- /dev/null
+++ b/Tests/A2/J1_public_method_protected_override1/foo.java
@@ -0,0 +1,9 @@
+public class foo{
+
+    public foo(){}
+
+    public int bar(int f){
+	return f+1;
+    }
+
+}
diff --git a/Tests/A2/J1_resolvetype2/Main.java b/Tests/A2/J1_resolvetype2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a7e5bd090113ef75e17075b3f696c750b6ba915f
--- /dev/null
+++ b/Tests/A2/J1_resolvetype2/Main.java
@@ -0,0 +1,8 @@
+// TYPE_LINKING
+public class Main {
+	public Main() { }
+	public static int test() {
+		java.util.List l = null;
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_resolvetype2/java/util/Collection.java b/Tests/A2/J1_resolvetype2/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_resolvetype2/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_resolvetype2/java/util/List.java b/Tests/A2/J1_resolvetype2/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_resolvetype2/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_resolvetype3/Foo.java b/Tests/A2/J1_resolvetype3/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..a97539820f93d44d8f9efcba627bf7d2eea4f7c9
--- /dev/null
+++ b/Tests/A2/J1_resolvetype3/Foo.java
@@ -0,0 +1,3 @@
+public class Foo {
+	public Foo() { }
+}
diff --git a/Tests/A2/J1_resolvetype3/Main.java b/Tests/A2/J1_resolvetype3/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8c839c09fc7f379cfdcbf55ee699c32f9c3e12a
--- /dev/null
+++ b/Tests/A2/J1_resolvetype3/Main.java
@@ -0,0 +1,8 @@
+// TYPE_LINKING
+public class Main {
+	public Main() { }
+	public static int test() {
+		Foo foo = new Foo();
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_resolvetype4/Main.java b/Tests/A2/J1_resolvetype4/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc20367aee4a4913eaf619b0af485b1bd9bdd81a
--- /dev/null
+++ b/Tests/A2/J1_resolvetype4/Main.java
@@ -0,0 +1,10 @@
+// TYPE_LINKING
+import pack.*;
+
+public class Main {
+	public Main() { }
+	public static int test() {
+		Foo foo = new Foo();
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_resolvetype4/pack/Foo.java b/Tests/A2/J1_resolvetype4/pack/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..c45ac0d1771724f1b95fabacec83a62a8aa08fd9
--- /dev/null
+++ b/Tests/A2/J1_resolvetype4/pack/Foo.java
@@ -0,0 +1,5 @@
+package pack;
+
+public class Foo {
+	public Foo() { }
+}
diff --git a/Tests/A2/J1_resolvetype6/Main.java b/Tests/A2/J1_resolvetype6/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a47683afca534989d39b1a9c5c52881af806c46b
--- /dev/null
+++ b/Tests/A2/J1_resolvetype6/Main.java
@@ -0,0 +1,11 @@
+// TYPE_LINKING
+import java.util.*;
+import java.sql.*;
+
+public class Main {
+	public Main() { }
+	public static int test() {
+		java.util.Date d = new java.util.Date();
+		return 123;
+	}
+}
diff --git a/Tests/A2/J1_resolvetype6/java/sql/Date.java b/Tests/A2/J1_resolvetype6/java/sql/Date.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8db49919eb7b8214cdcf9586f203be53b5b0c7f
--- /dev/null
+++ b/Tests/A2/J1_resolvetype6/java/sql/Date.java
@@ -0,0 +1,5 @@
+package java.sql;
+public class Date {
+    public Date() {
+    }
+}
diff --git a/Tests/A2/J1_resolvetype6/java/util/Date.java b/Tests/A2/J1_resolvetype6/java/util/Date.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b90d9590cac189520df0bbe9066b35c848fa4d1
--- /dev/null
+++ b/Tests/A2/J1_resolvetype6/java/util/Date.java
@@ -0,0 +1,5 @@
+package java.util;
+public class Date {
+    public Date() {
+    }
+}
diff --git a/Tests/A2/J1_samePackage/Main.java b/Tests/A2/J1_samePackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a604df6faa549948924c68cebda9594a6da137c8
--- /dev/null
+++ b/Tests/A2/J1_samePackage/Main.java
@@ -0,0 +1,9 @@
+// TYPE_LINKING
+public class Main {
+	public Main() {
+	}
+
+	public static int test() {
+		return new foo.Bar().baz.a;
+	}
+}
diff --git a/Tests/A2/J1_samePackage/foo/Bar.java b/Tests/A2/J1_samePackage/foo/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c72fb27f8761bb8c225fddf63074ac3be5fef43
--- /dev/null
+++ b/Tests/A2/J1_samePackage/foo/Bar.java
@@ -0,0 +1,9 @@
+package foo;
+
+public class Bar {
+	public Baz baz;
+	
+	public Bar() {
+		baz = new Baz(123);
+	}
+}
diff --git a/Tests/A2/J1_samePackage/foo/Baz.java b/Tests/A2/J1_samePackage/foo/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c4cdfac532e0c5ad78dc683f6028fc1abbc0170
--- /dev/null
+++ b/Tests/A2/J1_samePackage/foo/Baz.java
@@ -0,0 +1,12 @@
+package foo;
+
+public class Baz {
+	public int a;
+	
+	public Baz() {
+        }
+
+	public Baz(int a) {
+		this.a = a;
+	}
+}
diff --git a/Tests/A2/J1_singleTypeImport/Main.java b/Tests/A2/J1_singleTypeImport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..bae3e5f84a0f9270f83c66f903cab9a990460cb4
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImport/Main.java
@@ -0,0 +1,16 @@
+// TYPE_LINKING
+import java.util.List;
+import java.util.LinkedList;
+import java.awt.*;
+
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	List ls = new LinkedList();
+	java.awt.List als = null;
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_singleTypeImport/java/awt/List.java b/Tests/A2/J1_singleTypeImport/java/awt/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e253f6d15713cd32c9679d1d1e016d03a941c0d
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImport/java/awt/List.java
@@ -0,0 +1,5 @@
+package java.awt;
+public class List {
+    public List() {
+    }
+}
diff --git a/Tests/A2/J1_singleTypeImport/java/util/Collection.java b/Tests/A2/J1_singleTypeImport/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImport/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_singleTypeImport/java/util/LinkedList.java b/Tests/A2/J1_singleTypeImport/java/util/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f6328da16aee2b4618529a3132356a7cc34d3
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImport/java/util/LinkedList.java
@@ -0,0 +1,32 @@
+package java.util;
+public class LinkedList implements List {
+    protected boolean empty = true;
+    protected Object cur = null;
+    protected LinkedList next = null;
+    public LinkedList() {
+    }
+    public int size() {
+        if(empty) return 0;
+        else if(next == null) return 1;
+        else return 1+next.size();
+    }
+    public boolean add(Object o) {
+        if(empty) {
+            cur = o;
+            empty = false;
+        } else {
+            if(next == null) {
+                next = new LinkedList();
+            }
+            next.add(o);
+        }
+        return true;
+    }
+    public Object clone() {
+        LinkedList ret = new LinkedList();
+        if(next != null) ret.next = (LinkedList) next.clone();
+        ret.cur = cur;
+        ret.empty = empty;
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_singleTypeImport/java/util/List.java b/Tests/A2/J1_singleTypeImport/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImport/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/Main.java b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..40a46131e83a9ed6b7eb230c85439bfb168f1f58
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/Main.java
@@ -0,0 +1,15 @@
+// TYPE_LINKING
+import java.util.List;
+import java.util.List;
+import java.util.LinkedList;
+
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	List ls = new LinkedList();
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/Collection.java b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/LinkedList.java b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/LinkedList.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f6328da16aee2b4618529a3132356a7cc34d3
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/LinkedList.java
@@ -0,0 +1,32 @@
+package java.util;
+public class LinkedList implements List {
+    protected boolean empty = true;
+    protected Object cur = null;
+    protected LinkedList next = null;
+    public LinkedList() {
+    }
+    public int size() {
+        if(empty) return 0;
+        else if(next == null) return 1;
+        else return 1+next.size();
+    }
+    public boolean add(Object o) {
+        if(empty) {
+            cur = o;
+            empty = false;
+        } else {
+            if(next == null) {
+                next = new LinkedList();
+            }
+            next.add(o);
+        }
+        return true;
+    }
+    public Object clone() {
+        LinkedList ret = new LinkedList();
+        if(next != null) ret.next = (LinkedList) next.clone();
+        ret.cur = cur;
+        ret.empty = empty;
+        return ret;
+    }
+}
diff --git a/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/List.java b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/J1_singleTypeImportSameTypeMultipleTimes/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/J1_static_method_override1/Main.java b/Tests/A2/J1_static_method_override1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..074fd9007e6b160dac709be6494c969bd8a5cea8
--- /dev/null
+++ b/Tests/A2/J1_static_method_override1/Main.java
@@ -0,0 +1,19 @@
+// HIERARCHY
+/* An instance method must not override a static method, 
+ * but a new method with the same name may be defined. */
+
+public class Main extends foo{
+
+    public Main(){}
+
+    public int bar(String s){
+	return 123;
+    }
+
+    public static int test(){
+
+	Main m = new Main();
+	return m.bar("Hello World!");
+    }
+
+}
diff --git a/Tests/A2/J1_static_method_override1/foo.java b/Tests/A2/J1_static_method_override1/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce48e08714c38eb390a6e499289514e8fff074a0
--- /dev/null
+++ b/Tests/A2/J1_static_method_override1/foo.java
@@ -0,0 +1,9 @@
+public class foo{
+
+    public foo(){}
+
+    public static int bar(int f){
+	return f+1;
+    }
+
+}
diff --git a/Tests/A2/J1_supermethod_override1/CompA.java b/Tests/A2/J1_supermethod_override1/CompA.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a4db5212d2bc58e9992ab7ac95d5f549661a020
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override1/CompA.java
@@ -0,0 +1,6 @@
+public class CompA {
+    public CompA() {}
+    public int compareTo(Object o) {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override1/CompB.java b/Tests/A2/J1_supermethod_override1/CompB.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac090fedc4e5b1a7ce456e57892a483828381a07
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override1/CompB.java
@@ -0,0 +1,3 @@
+public class CompB extends CompA implements Comparable {
+    public CompB() {}
+}
diff --git a/Tests/A2/J1_supermethod_override1/Main.java b/Tests/A2/J1_supermethod_override1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..bba30c3b85459bcccbb2e5945cd603661bd6406b
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override1/Main.java
@@ -0,0 +1,16 @@
+// HIERARCHY
+/* Hierarchy:
+ * class CompA {
+ *	int compareTo(Object)
+ * }
+ * class CompB extends CompA implements Comparable {
+ *	int compareTo(Object)
+ * }
+ */
+ public class Main {
+    public Main() {}
+    public static int test() {
+	CompA x = new CompB();
+	return x.compareTo((Object)null);
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override1/java/lang/Comparable.java b/Tests/A2/J1_supermethod_override1/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override1/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_supermethod_override2/CompA.java b/Tests/A2/J1_supermethod_override2/CompA.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a4db5212d2bc58e9992ab7ac95d5f549661a020
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override2/CompA.java
@@ -0,0 +1,6 @@
+public class CompA {
+    public CompA() {}
+    public int compareTo(Object o) {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override2/CompB.java b/Tests/A2/J1_supermethod_override2/CompB.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac090fedc4e5b1a7ce456e57892a483828381a07
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override2/CompB.java
@@ -0,0 +1,3 @@
+public class CompB extends CompA implements Comparable {
+    public CompB() {}
+}
diff --git a/Tests/A2/J1_supermethod_override2/Main.java b/Tests/A2/J1_supermethod_override2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..112854eea1a41b4a0bf1750b8fbc4ddd34830c94
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override2/Main.java
@@ -0,0 +1,16 @@
+// HIERARCHY
+/* Hierarchy:
+ * class CompA {
+ *	int compareTo(Object)
+ * }
+ * class CompB extends CompA implements Comparable {
+ *	int compareTo(Object)
+ * }
+ */
+public class Main {
+    public Main() {}
+    public static int test() {
+	CompB x = new CompB();
+	return x.compareTo((Object)null);
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override2/java/lang/Comparable.java b/Tests/A2/J1_supermethod_override2/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override2/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_supermethod_override3/CompA.java b/Tests/A2/J1_supermethod_override3/CompA.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a4db5212d2bc58e9992ab7ac95d5f549661a020
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override3/CompA.java
@@ -0,0 +1,6 @@
+public class CompA {
+    public CompA() {}
+    public int compareTo(Object o) {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override3/CompB.java b/Tests/A2/J1_supermethod_override3/CompB.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac090fedc4e5b1a7ce456e57892a483828381a07
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override3/CompB.java
@@ -0,0 +1,3 @@
+public class CompB extends CompA implements Comparable {
+    public CompB() {}
+}
diff --git a/Tests/A2/J1_supermethod_override3/Main.java b/Tests/A2/J1_supermethod_override3/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3d729d191e526dd78b60871ef022b536328aef1
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override3/Main.java
@@ -0,0 +1,17 @@
+// HIERARCHY
+/* Hierarchy:
+ * class CompA {
+ * }
+ * abstract class CompB extends CompA implements Comparable {
+ * }
+ * class CompC extends CompB {
+ *  int compareTo(Object)
+ * }
+ */
+public class Main {
+    public Main() {}
+    public static int test() {
+	Comparable x = new CompB();
+	return x.compareTo((Object)null);
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override3/java/lang/Comparable.java b/Tests/A2/J1_supermethod_override3/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override3/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_supermethod_override4/CompA.java b/Tests/A2/J1_supermethod_override4/CompA.java
new file mode 100644
index 0000000000000000000000000000000000000000..db044848e866c4cf17ad50cf46b78fa658280b24
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override4/CompA.java
@@ -0,0 +1,3 @@
+public class CompA {
+    public CompA() {}
+}
diff --git a/Tests/A2/J1_supermethod_override4/CompB.java b/Tests/A2/J1_supermethod_override4/CompB.java
new file mode 100644
index 0000000000000000000000000000000000000000..f89b5199ba3373f4b34853bc9693b869e27fbe2e
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override4/CompB.java
@@ -0,0 +1,3 @@
+public abstract class CompB extends CompA implements Comparable {
+    public CompB() {}
+}
diff --git a/Tests/A2/J1_supermethod_override4/CompC.java b/Tests/A2/J1_supermethod_override4/CompC.java
new file mode 100644
index 0000000000000000000000000000000000000000..2269fb2b98bbba47aef440f4fa9fc23a856c6410
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override4/CompC.java
@@ -0,0 +1,6 @@
+public class CompC extends CompB {
+    public CompC() {}
+    public int compareTo(Object o) {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override4/Main.java b/Tests/A2/J1_supermethod_override4/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ab95640878066aaa7bb9ae9d62f240ce4d26f17
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override4/Main.java
@@ -0,0 +1,17 @@
+// HIERARCHY
+/* Hierarchy:
+ * class CompA {
+ * }
+ * abstract class CompB extends CompA implements Comparable {
+ * }
+ * class CompC extends CompB {
+ *  int compareTo(Object)
+ * }
+ */
+public class Main {
+    public Main() {}
+    public static int test() {
+	CompB x = new CompC();
+	return x.compareTo((Object)null);
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override4/java/lang/Comparable.java b/Tests/A2/J1_supermethod_override4/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override4/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_supermethod_override5/CompA.java b/Tests/A2/J1_supermethod_override5/CompA.java
new file mode 100644
index 0000000000000000000000000000000000000000..db044848e866c4cf17ad50cf46b78fa658280b24
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override5/CompA.java
@@ -0,0 +1,3 @@
+public class CompA {
+    public CompA() {}
+}
diff --git a/Tests/A2/J1_supermethod_override5/CompB.java b/Tests/A2/J1_supermethod_override5/CompB.java
new file mode 100644
index 0000000000000000000000000000000000000000..46b6c18baec5de8addaa3588db13bf47408a3963
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override5/CompB.java
@@ -0,0 +1,5 @@
+public abstract class CompB extends CompA implements Comparable {
+    public CompB() {}
+
+    public abstract int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_supermethod_override5/CompC.java b/Tests/A2/J1_supermethod_override5/CompC.java
new file mode 100644
index 0000000000000000000000000000000000000000..2269fb2b98bbba47aef440f4fa9fc23a856c6410
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override5/CompC.java
@@ -0,0 +1,6 @@
+public class CompC extends CompB {
+    public CompC() {}
+    public int compareTo(Object o) {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override5/Main.java b/Tests/A2/J1_supermethod_override5/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ab95640878066aaa7bb9ae9d62f240ce4d26f17
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override5/Main.java
@@ -0,0 +1,17 @@
+// HIERARCHY
+/* Hierarchy:
+ * class CompA {
+ * }
+ * abstract class CompB extends CompA implements Comparable {
+ * }
+ * class CompC extends CompB {
+ *  int compareTo(Object)
+ * }
+ */
+public class Main {
+    public Main() {}
+    public static int test() {
+	CompB x = new CompC();
+	return x.compareTo((Object)null);
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override5/java/lang/Comparable.java b/Tests/A2/J1_supermethod_override5/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override5/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_supermethod_override6/CompA.java b/Tests/A2/J1_supermethod_override6/CompA.java
new file mode 100644
index 0000000000000000000000000000000000000000..db044848e866c4cf17ad50cf46b78fa658280b24
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override6/CompA.java
@@ -0,0 +1,3 @@
+public class CompA {
+    public CompA() {}
+}
diff --git a/Tests/A2/J1_supermethod_override6/CompB.java b/Tests/A2/J1_supermethod_override6/CompB.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a88d9ed4a7b2a3bdaeaaf366c1ffbe48aee01dd
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override6/CompB.java
@@ -0,0 +1,7 @@
+public abstract class CompB extends CompA implements Comparable {
+    public CompB() {}
+
+    public int compareTo(Object o) {
+	return 7;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override6/CompC.java b/Tests/A2/J1_supermethod_override6/CompC.java
new file mode 100644
index 0000000000000000000000000000000000000000..2269fb2b98bbba47aef440f4fa9fc23a856c6410
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override6/CompC.java
@@ -0,0 +1,6 @@
+public class CompC extends CompB {
+    public CompC() {}
+    public int compareTo(Object o) {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override6/Main.java b/Tests/A2/J1_supermethod_override6/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..10fdd1589b5f055c431a70cac7328711bc939644
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override6/Main.java
@@ -0,0 +1,18 @@
+// HIERARCHY
+/* Hierarchy:
+ * class CompA {
+ * }
+ * abstract class CompB extends CompA implements Comparable {
+ 	int compareTo(Object)
+ * }
+ * class CompC extends CompB {
+ *  int compareTo(Object)
+ * }
+ */
+public class Main {
+    public Main() {}
+    public static int test() {
+	CompB x = new CompC();
+	return x.compareTo((Object)null);
+    }
+}
diff --git a/Tests/A2/J1_supermethod_override6/java/lang/Comparable.java b/Tests/A2/J1_supermethod_override6/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/J1_supermethod_override6/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/J1_typecheck_assignment/A.java b/Tests/A2/J1_typecheck_assignment/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..576ea14be79a4c972d9325d6ddd6008de435ae52
--- /dev/null
+++ b/Tests/A2/J1_typecheck_assignment/A.java
@@ -0,0 +1,11 @@
+public class A {
+
+    public int f = 123;
+
+    public A() {}
+
+    public A (int f) {
+	this.f = f;
+    }
+
+}
diff --git a/Tests/A2/J1_typecheck_assignment/B.java b/Tests/A2/J1_typecheck_assignment/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f8aaa6cba0dcc708a49aec7fca392351b66b124
--- /dev/null
+++ b/Tests/A2/J1_typecheck_assignment/B.java
@@ -0,0 +1,12 @@
+public class B extends A {
+    
+    public int f;
+
+    public B () {
+    }
+
+    public B (int f) {
+	this.f = f;
+    }
+
+}
diff --git a/Tests/A2/J1_typecheck_assignment/Main.java b/Tests/A2/J1_typecheck_assignment/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ca52ff7c19d52c6d014b7ebd21c63facad8b5c2
--- /dev/null
+++ b/Tests/A2/J1_typecheck_assignment/Main.java
@@ -0,0 +1,22 @@
+// HIERARCHY,TYPE_CHECKING
+/* TypeChecking: (only works with Java 1.3)
+ * 
+ * class A {
+ *  int f
+ * }
+ *
+ * class B extends A {
+ *  int f
+ * }
+ */
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	A a = new A(42);
+	B b = new B(42);
+        return (a=b).f;
+    }
+
+}
diff --git a/Tests/A2/J2_3_SingleTypeImport_ImportSelf_Interface/Main.java b/Tests/A2/J2_3_SingleTypeImport_ImportSelf_Interface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..0653d4b65497cc77d802631ef7da9e3b27578888
--- /dev/null
+++ b/Tests/A2/J2_3_SingleTypeImport_ImportSelf_Interface/Main.java
@@ -0,0 +1,16 @@
+//TYPE_LINKING
+//JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+/**
+ * TypeLinking:
+ * - The name of a class must not clash with the name of a singletype
+ * import, but a class may import itself.
+ */
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+		return 123;
+    }
+
+}
diff --git a/Tests/A2/J2_3_SingleTypeImport_ImportSelf_Interface/Test/Foo.java b/Tests/A2/J2_3_SingleTypeImport_ImportSelf_Interface/Test/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b808a12d1b08c030533d8b03b981fa9f33fe6f5
--- /dev/null
+++ b/Tests/A2/J2_3_SingleTypeImport_ImportSelf_Interface/Test/Foo.java
@@ -0,0 +1,6 @@
+package Test;
+
+import Test.Foo;
+
+public interface Foo{
+}
diff --git a/Tests/A2/J2_4_ImplementsInterface_TwiceByName/Main.java b/Tests/A2/J2_4_ImplementsInterface_TwiceByName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd1e2e795ef1fb4cb9885e48c1a1fc97aa29cf7e
--- /dev/null
+++ b/Tests/A2/J2_4_ImplementsInterface_TwiceByName/Main.java
@@ -0,0 +1,14 @@
+// HIERARCHY
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+/* Hierarchy:
+ * An interface must not be mentioned more than once in the same implements 
+ * clause of a class (8.1.4, simple constraint 3).
+ */
+
+public class Main implements Cloneable, foo.Cloneable {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J2_4_ImplementsInterface_TwiceByName/foo/Cloneable.java b/Tests/A2/J2_4_ImplementsInterface_TwiceByName/foo/Cloneable.java
new file mode 100644
index 0000000000000000000000000000000000000000..05344dcc6e43a50ca624b297b37330a311d578b8
--- /dev/null
+++ b/Tests/A2/J2_4_ImplementsInterface_TwiceByName/foo/Cloneable.java
@@ -0,0 +1,4 @@
+package foo;
+
+public interface Cloneable {
+}
diff --git a/Tests/A2/J2_4_InterfaceExtends_MultipleWays/A.java b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..c20abeb17acd61388307b2f5e79c0f952a6f9045
--- /dev/null
+++ b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/A.java
@@ -0,0 +1,2 @@
+public interface A {
+}
diff --git a/Tests/A2/J2_4_InterfaceExtends_MultipleWays/B.java b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..b002e680da94dbb1115bc591f21c04f7301f6af0
--- /dev/null
+++ b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/B.java
@@ -0,0 +1,2 @@
+public interface B extends A {
+}
diff --git a/Tests/A2/J2_4_InterfaceExtends_MultipleWays/C.java b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/C.java
new file mode 100644
index 0000000000000000000000000000000000000000..82fa1ee5eb90d1d31d240e3c4488ab3ad6e0d584
--- /dev/null
+++ b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/C.java
@@ -0,0 +1,2 @@
+public interface C extends A {
+}
diff --git a/Tests/A2/J2_4_InterfaceExtends_MultipleWays/D.java b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/D.java
new file mode 100644
index 0000000000000000000000000000000000000000..53dd2fd7914ad3a63bd8130b46506f813289bf85
--- /dev/null
+++ b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/D.java
@@ -0,0 +1,2 @@
+public interface D extends B, C, A {
+}
diff --git a/Tests/A2/J2_4_InterfaceExtends_MultipleWays/Main.java b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad6bcd4c222ad4e44c5a3afbcd8c45d536861d41
--- /dev/null
+++ b/Tests/A2/J2_4_InterfaceExtends_MultipleWays/Main.java
@@ -0,0 +1,20 @@
+// HIERARCHY
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+/* Hierarchy:
+ * Joos 2: An interface must not be mentioned more than once in the same extends
+ *  clause of an interface (missing from the JLS but enforced by javac).
+ *  
+ * Main implements D
+ * D implements B, C, A
+ * C implements A
+ * B implements A
+ */
+
+public class Main implements D {
+    
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/J2_Ifaceimplicitabstract/Foo.java b/Tests/A2/J2_Ifaceimplicitabstract/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f27250b6e000361b8755b24ab67b258d42b8afdc
--- /dev/null
+++ b/Tests/A2/J2_Ifaceimplicitabstract/Foo.java
@@ -0,0 +1,3 @@
+public abstract class Foo implements Iface {
+	public Foo() {}
+}
diff --git a/Tests/A2/J2_Ifaceimplicitabstract/Iface.java b/Tests/A2/J2_Ifaceimplicitabstract/Iface.java
new file mode 100644
index 0000000000000000000000000000000000000000..391f0dae819ba80228c099f45b875f093ca9c705
--- /dev/null
+++ b/Tests/A2/J2_Ifaceimplicitabstract/Iface.java
@@ -0,0 +1,3 @@
+public interface Iface {
+	public void  foo();
+}
diff --git a/Tests/A2/J2_Ifaceimplicitabstract/Main.java b/Tests/A2/J2_Ifaceimplicitabstract/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1ad41470a0bb090bea14fad7a5edf4d7b53718a
--- /dev/null
+++ b/Tests/A2/J2_Ifaceimplicitabstract/Main.java
@@ -0,0 +1,9 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY
+public class Main extends Foo {
+	public Main() { }
+	public void foo() {}
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J2_Interface1/J2_Interface1.java b/Tests/A2/J2_Interface1/J2_Interface1.java
new file mode 100644
index 0000000000000000000000000000000000000000..7df0bc886411cd72648b8858049824dacd13396c
--- /dev/null
+++ b/Tests/A2/J2_Interface1/J2_Interface1.java
@@ -0,0 +1,8 @@
+
+public interface J2_Interface1 {
+	public abstract int test1();
+	
+	public abstract int test1(int kj);
+	
+	public int test2();
+}
diff --git a/Tests/A2/J2_Interface1/Main.java b/Tests/A2/J2_Interface1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..99fd802bd3a969ba74afba1f49f969d252d06d5e
--- /dev/null
+++ b/Tests/A2/J2_Interface1/Main.java
@@ -0,0 +1,12 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main {
+	
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+
+}
diff --git a/Tests/A2/J2_Interface10/Foo.java b/Tests/A2/J2_Interface10/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2bd4ec0a41b8b945f815ebce750d8833c543378f
--- /dev/null
+++ b/Tests/A2/J2_Interface10/Foo.java
@@ -0,0 +1,6 @@
+
+public interface Foo {
+	
+	public int test2();
+
+}
diff --git a/Tests/A2/J2_Interface10/Main.java b/Tests/A2/J2_Interface10/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb21d4620ddb4d30cf2d86b92480ae21a2eb1c2d
--- /dev/null
+++ b/Tests/A2/J2_Interface10/Main.java
@@ -0,0 +1,16 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main implements Foo {
+
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+	
+	public int test2() {
+		return 0;
+	}
+
+}
diff --git a/Tests/A2/J2_Interface11/Bar.java b/Tests/A2/J2_Interface11/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f7eaab7870bddf88a7e42e5d0b34b985065a4e1
--- /dev/null
+++ b/Tests/A2/J2_Interface11/Bar.java
@@ -0,0 +1,6 @@
+
+public interface Bar {
+	
+	public int baz(String i, String j);
+		
+}
diff --git a/Tests/A2/J2_Interface11/Baz.java b/Tests/A2/J2_Interface11/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..51d18caf7b827eaf449b6ab0b0b00a16b555fd75
--- /dev/null
+++ b/Tests/A2/J2_Interface11/Baz.java
@@ -0,0 +1,7 @@
+
+public interface Baz {
+	
+	public int baz(Object o);
+	
+	
+}
diff --git a/Tests/A2/J2_Interface11/Foo.java b/Tests/A2/J2_Interface11/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..71184b49c0b5bf7075ede32b961f4eee8daf52f2
--- /dev/null
+++ b/Tests/A2/J2_Interface11/Foo.java
@@ -0,0 +1,6 @@
+
+public interface Foo {
+	
+	public int baz(String i);
+	
+}
diff --git a/Tests/A2/J2_Interface11/Main.java b/Tests/A2/J2_Interface11/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a31c13a52cfeba27c98ce53a57ff5eb7343406b3
--- /dev/null
+++ b/Tests/A2/J2_Interface11/Main.java
@@ -0,0 +1,23 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main implements Foo, Bar, Baz {
+
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+	
+	public int baz(String i) {
+		return 123;
+	}
+
+	public int baz(Object o) {
+		return 123;
+	}
+	
+	public int baz(String i, String j) {
+		return 123;
+	}
+}
diff --git a/Tests/A2/J2_Interface2/J2_Interface2.java b/Tests/A2/J2_Interface2/J2_Interface2.java
new file mode 100644
index 0000000000000000000000000000000000000000..9fa05569b054e543a8b1a7bfd8ba673d3cfbb069
--- /dev/null
+++ b/Tests/A2/J2_Interface2/J2_Interface2.java
@@ -0,0 +1,8 @@
+
+public interface J2_Interface2 {
+	public abstract int test1();
+	
+	public int test1(int kj);
+	
+	public int test2();
+}
diff --git a/Tests/A2/J2_Interface2/Main.java b/Tests/A2/J2_Interface2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..99fd802bd3a969ba74afba1f49f969d252d06d5e
--- /dev/null
+++ b/Tests/A2/J2_Interface2/Main.java
@@ -0,0 +1,12 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main {
+	
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+
+}
diff --git a/Tests/A2/J2_Interface3/J2_Interface3.java b/Tests/A2/J2_Interface3/J2_Interface3.java
new file mode 100644
index 0000000000000000000000000000000000000000..4ce47392b7826d6b9e854b7053ccfd7207a4cb36
--- /dev/null
+++ b/Tests/A2/J2_Interface3/J2_Interface3.java
@@ -0,0 +1,8 @@
+
+public interface J2_Interface3 {
+	public int test1();
+	
+	public int test1(int kj);
+	
+	public int test2();
+}
diff --git a/Tests/A2/J2_Interface3/Main.java b/Tests/A2/J2_Interface3/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..99fd802bd3a969ba74afba1f49f969d252d06d5e
--- /dev/null
+++ b/Tests/A2/J2_Interface3/Main.java
@@ -0,0 +1,12 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main {
+	
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+
+}
diff --git a/Tests/A2/J2_Interface6/Bar.java b/Tests/A2/J2_Interface6/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a891664db6760eace6ebadb91d0e6256f465be
--- /dev/null
+++ b/Tests/A2/J2_Interface6/Bar.java
@@ -0,0 +1,6 @@
+
+public interface Bar {
+	
+	public int baz();
+	
+}
diff --git a/Tests/A2/J2_Interface6/Foo.java b/Tests/A2/J2_Interface6/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a9e500429341570fe99e6ae38fc491234041fc2
--- /dev/null
+++ b/Tests/A2/J2_Interface6/Foo.java
@@ -0,0 +1,9 @@
+
+public interface Foo {
+	
+	public int baz();
+	
+	public String axa();
+
+	public abstract int hawk();
+}
diff --git a/Tests/A2/J2_Interface6/Main.java b/Tests/A2/J2_Interface6/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..13ba78b55c1f0a8e27466a706ad698840ddde287
--- /dev/null
+++ b/Tests/A2/J2_Interface6/Main.java
@@ -0,0 +1,27 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main implements Foo, Bar {
+
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+
+	public String axa() {
+		
+		return null;
+	}
+
+	public int baz() {
+		
+		return 0;
+	}
+
+	public int hawk() {
+		
+		return 0;
+	}
+	
+}
diff --git a/Tests/A2/J2_Interface7/Bar.java b/Tests/A2/J2_Interface7/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..03a891664db6760eace6ebadb91d0e6256f465be
--- /dev/null
+++ b/Tests/A2/J2_Interface7/Bar.java
@@ -0,0 +1,6 @@
+
+public interface Bar {
+	
+	public int baz();
+	
+}
diff --git a/Tests/A2/J2_Interface7/Baz.java b/Tests/A2/J2_Interface7/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..542b3c9699e819e86f0621b4f2e56a45919e987a
--- /dev/null
+++ b/Tests/A2/J2_Interface7/Baz.java
@@ -0,0 +1,6 @@
+
+public interface Baz {
+	
+	public int baz();
+	
+}
diff --git a/Tests/A2/J2_Interface7/Foo.java b/Tests/A2/J2_Interface7/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a9e500429341570fe99e6ae38fc491234041fc2
--- /dev/null
+++ b/Tests/A2/J2_Interface7/Foo.java
@@ -0,0 +1,9 @@
+
+public interface Foo {
+	
+	public int baz();
+	
+	public String axa();
+
+	public abstract int hawk();
+}
diff --git a/Tests/A2/J2_Interface7/Main.java b/Tests/A2/J2_Interface7/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fdeb03d27bba12a2bf55bf0b856fea6ba838ab5
--- /dev/null
+++ b/Tests/A2/J2_Interface7/Main.java
@@ -0,0 +1,27 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main implements Foo, Bar, Baz {
+
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+
+	public String axa() {
+		
+		return null;
+	}
+
+	public int baz() {
+		
+		return 0;
+	}
+
+	public int hawk() {
+		
+		return 0;
+	}
+	
+}
diff --git a/Tests/A2/J2_Interface8/Bar.java b/Tests/A2/J2_Interface8/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..792d7848d4cfbab8702623421776171772365612
--- /dev/null
+++ b/Tests/A2/J2_Interface8/Bar.java
@@ -0,0 +1,8 @@
+
+public interface Bar {
+	
+	public int baz();
+	
+	public String axa();
+	
+}
diff --git a/Tests/A2/J2_Interface8/Baz.java b/Tests/A2/J2_Interface8/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d9949a6ff1dadccf97e8b55250804eb1b16f89b
--- /dev/null
+++ b/Tests/A2/J2_Interface8/Baz.java
@@ -0,0 +1,8 @@
+
+public interface Baz {
+	
+	public int baz();
+	
+	public String axa();
+	
+}
diff --git a/Tests/A2/J2_Interface8/Foo.java b/Tests/A2/J2_Interface8/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a9e500429341570fe99e6ae38fc491234041fc2
--- /dev/null
+++ b/Tests/A2/J2_Interface8/Foo.java
@@ -0,0 +1,9 @@
+
+public interface Foo {
+	
+	public int baz();
+	
+	public String axa();
+
+	public abstract int hawk();
+}
diff --git a/Tests/A2/J2_Interface8/Main.java b/Tests/A2/J2_Interface8/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fdeb03d27bba12a2bf55bf0b856fea6ba838ab5
--- /dev/null
+++ b/Tests/A2/J2_Interface8/Main.java
@@ -0,0 +1,27 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main implements Foo, Bar, Baz {
+
+	public Main(){}
+	
+	public static int test() {
+		return 123;
+	}
+
+	public String axa() {
+		
+		return null;
+	}
+
+	public int baz() {
+		
+		return 0;
+	}
+
+	public int hawk() {
+		
+		return 0;
+	}
+	
+}
diff --git a/Tests/A2/J2_Interface9/Bar.java b/Tests/A2/J2_Interface9/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..fe66eaaf0f1a9cbbc5a3b70d2bd3664fc04cf7bd
--- /dev/null
+++ b/Tests/A2/J2_Interface9/Bar.java
@@ -0,0 +1,6 @@
+
+public interface Bar extends Foo {
+	
+	public String bar();
+
+}
diff --git a/Tests/A2/J2_Interface9/Foo.java b/Tests/A2/J2_Interface9/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..b0a1b4c269d081f6411f42092d826209f491a876
--- /dev/null
+++ b/Tests/A2/J2_Interface9/Foo.java
@@ -0,0 +1,6 @@
+
+public interface Foo {
+	
+	public int foo();
+
+}
diff --git a/Tests/A2/J2_Interface9/Main.java b/Tests/A2/J2_Interface9/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..61086388c8005f2e252cd8a3b7f3afcbee103572
--- /dev/null
+++ b/Tests/A2/J2_Interface9/Main.java
@@ -0,0 +1,20 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main implements Bar {
+
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+	
+	public String bar() {
+		return null;
+	}
+
+	public int foo() {
+		return 0;
+	}
+
+}
diff --git a/Tests/A2/J2_hierachyCheck22/Main.java b/Tests/A2/J2_hierachyCheck22/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6eac27f80b2449512f3331b07d4d20cd1c097adc
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck22/Main.java
@@ -0,0 +1,20 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY
+/*
+       boz - f, g
+      /   \
+    bar   baz
+      \   /
+       foo
+*/
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	foo f = new foo();
+	return f.f();
+    }
+
+}
diff --git a/Tests/A2/J2_hierachyCheck22/bar.java b/Tests/A2/J2_hierachyCheck22/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..579384d03c35bd8d5d0a1e5bd5ba5db5a3484d04
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck22/bar.java
@@ -0,0 +1,3 @@
+public interface bar extends boz {
+
+}
diff --git a/Tests/A2/J2_hierachyCheck22/baz.java b/Tests/A2/J2_hierachyCheck22/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5a3ed38c67d43768a0896dd242e503ee35e94dc
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck22/baz.java
@@ -0,0 +1,3 @@
+public interface baz extends boz{
+
+}
diff --git a/Tests/A2/J2_hierachyCheck22/boz.java b/Tests/A2/J2_hierachyCheck22/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..5bfd3d1345326e27032deca7716af2a3748e6ce8
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck22/boz.java
@@ -0,0 +1,6 @@
+public interface boz {
+
+    public int f();
+
+    public int g();
+}
diff --git a/Tests/A2/J2_hierachyCheck22/foo.java b/Tests/A2/J2_hierachyCheck22/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e0532ad48761118ebb0e87704df770340c35311
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck22/foo.java
@@ -0,0 +1,13 @@
+public class foo implements bar, baz {
+
+    public int g() {
+	return 9;
+    }
+
+    public int f() {
+	return 123;
+    }
+
+    public foo() {}
+
+}
diff --git a/Tests/A2/J2_hierachyCheck23/Main.java b/Tests/A2/J2_hierachyCheck23/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..f47c27d9011006b68fee7b63743208c5c353de67
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck23/Main.java
@@ -0,0 +1,21 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY
+/*
+       boz interface
+      /   \
+    bar   baz
+     f     g
+      \   /
+       foo
+*/
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	foo f = new foo();
+	return f.f();
+    }
+
+}
diff --git a/Tests/A2/J2_hierachyCheck23/bar.java b/Tests/A2/J2_hierachyCheck23/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef3e470542929184b714ef30fef553c1cf8396eb
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck23/bar.java
@@ -0,0 +1,4 @@
+public interface bar extends boz {
+
+    public int f();
+}
diff --git a/Tests/A2/J2_hierachyCheck23/baz.java b/Tests/A2/J2_hierachyCheck23/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b42ed1d8959c0e403d0eec5024be3f760a83f47
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck23/baz.java
@@ -0,0 +1,5 @@
+public interface baz extends boz{
+
+    public int g();
+
+}
diff --git a/Tests/A2/J2_hierachyCheck23/boz.java b/Tests/A2/J2_hierachyCheck23/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4d266734d25aebe8f81df5caf85c6cbbb37713a
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck23/boz.java
@@ -0,0 +1,3 @@
+public interface boz {
+
+}
diff --git a/Tests/A2/J2_hierachyCheck23/foo.java b/Tests/A2/J2_hierachyCheck23/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2808fa5ec6aa2a1650993b319d04d35863253697
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck23/foo.java
@@ -0,0 +1,13 @@
+public class foo implements bar, baz {
+
+    public int f() {
+	return 123;
+    }
+
+    public int g() {
+	return 9;
+    }
+
+    public foo() {}
+
+}
diff --git a/Tests/A2/J2_hierachyCheck24/Main.java b/Tests/A2/J2_hierachyCheck24/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d54f3bc21129efad6ad1451cc02b1d27a136138
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck24/Main.java
@@ -0,0 +1,23 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY
+/*
+       boz
+    interface
+      /   \
+    bar   baz
+abstract interface
+     f     g
+      \   /
+       foo
+*/
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	foo f = new foo();
+	return f.f();
+    }
+
+}
diff --git a/Tests/A2/J2_hierachyCheck24/bar.java b/Tests/A2/J2_hierachyCheck24/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..579384d03c35bd8d5d0a1e5bd5ba5db5a3484d04
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck24/bar.java
@@ -0,0 +1,3 @@
+public interface bar extends boz {
+
+}
diff --git a/Tests/A2/J2_hierachyCheck24/baz.java b/Tests/A2/J2_hierachyCheck24/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..d5a3ed38c67d43768a0896dd242e503ee35e94dc
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck24/baz.java
@@ -0,0 +1,3 @@
+public interface baz extends boz{
+
+}
diff --git a/Tests/A2/J2_hierachyCheck24/boz.java b/Tests/A2/J2_hierachyCheck24/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ab5f315a63b510fb4bcda17d387ffd5746a0849
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck24/boz.java
@@ -0,0 +1,7 @@
+public interface boz {
+
+    public int f();
+
+    public int g();
+
+}
diff --git a/Tests/A2/J2_hierachyCheck24/foo.java b/Tests/A2/J2_hierachyCheck24/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e0532ad48761118ebb0e87704df770340c35311
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck24/foo.java
@@ -0,0 +1,13 @@
+public class foo implements bar, baz {
+
+    public int g() {
+	return 9;
+    }
+
+    public int f() {
+	return 123;
+    }
+
+    public foo() {}
+
+}
diff --git a/Tests/A2/J2_hierachyCheck25/Main.java b/Tests/A2/J2_hierachyCheck25/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d54f3bc21129efad6ad1451cc02b1d27a136138
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck25/Main.java
@@ -0,0 +1,23 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY
+/*
+       boz
+    interface
+      /   \
+    bar   baz
+abstract interface
+     f     g
+      \   /
+       foo
+*/
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+	foo f = new foo();
+	return f.f();
+    }
+
+}
diff --git a/Tests/A2/J2_hierachyCheck25/bar.java b/Tests/A2/J2_hierachyCheck25/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..25062162acfc66ddb26e20f922ee32972f318d97
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck25/bar.java
@@ -0,0 +1,6 @@
+public abstract class bar implements boz {
+	public bar() {}
+
+    public abstract int f();
+
+}
diff --git a/Tests/A2/J2_hierachyCheck25/baz.java b/Tests/A2/J2_hierachyCheck25/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b42ed1d8959c0e403d0eec5024be3f760a83f47
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck25/baz.java
@@ -0,0 +1,5 @@
+public interface baz extends boz{
+
+    public int g();
+
+}
diff --git a/Tests/A2/J2_hierachyCheck25/boz.java b/Tests/A2/J2_hierachyCheck25/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4d266734d25aebe8f81df5caf85c6cbbb37713a
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck25/boz.java
@@ -0,0 +1,3 @@
+public interface boz {
+
+}
diff --git a/Tests/A2/J2_hierachyCheck25/foo.java b/Tests/A2/J2_hierachyCheck25/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6065469c4b8f9d12eebae98a83a19866afe3865c
--- /dev/null
+++ b/Tests/A2/J2_hierachyCheck25/foo.java
@@ -0,0 +1,13 @@
+public class foo extends bar implements baz {
+
+    public int f() {
+	return 123;
+    }
+
+    public int g() {
+	return 9;
+    }
+
+    public foo() {}
+
+}
diff --git a/Tests/A2/J2_interface_omitted_abstract/Interface.java b/Tests/A2/J2_interface_omitted_abstract/Interface.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d78fb72d1adf7959d22ce5f65aedbb58c652bef
--- /dev/null
+++ b/Tests/A2/J2_interface_omitted_abstract/Interface.java
@@ -0,0 +1,3 @@
+public interface Interface {
+    public /*abstract*/ void foo();
+}
diff --git a/Tests/A2/J2_interface_omitted_abstract/Main.java b/Tests/A2/J2_interface_omitted_abstract/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e4907af3c738557ae1e06cdb6911c38c712864a
--- /dev/null
+++ b/Tests/A2/J2_interface_omitted_abstract/Main.java
@@ -0,0 +1,8 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+// JOOS2: HIERARCHY
+
+public class Main {
+    public Main() {}
+    public Main(Interface obj) {obj.foo();}
+    public static int test() {return 123;}
+}
diff --git a/Tests/A2/Je_12_Fields_StaticNonStatic.java b/Tests/A2/Je_12_Fields_StaticNonStatic.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2162592a90069066c0960461aed9e014f614570
--- /dev/null
+++ b/Tests/A2/Je_12_Fields_StaticNonStatic.java
@@ -0,0 +1,22 @@
+// JOOS1: PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_STATIC_FIELD_DECLARATION
+// JOOS2: ENVIRONMENTS,DUPLICATE_FIELD
+// JAVAC:UNKNOWN
+/**
+ * Parser/weeder: 
+ *- (Joos 1) No static field declarations allowed
+ * Environments: 
+ * - (Joos 2) Check that no two fields in the same class
+ * have the same name.
+ */
+public class Je_12_Fields_StaticNonStatic {
+
+    public int a = 2;
+    public static int a = 2;
+    
+    public Je_12_Fields_StaticNonStatic() {
+    }
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_13_Interface_SingleImport_ClashWithClass/List.java b/Tests/A2/Je_13_Interface_SingleImport_ClashWithClass/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..719970e5bb00bbc68904b261d3995e03f0fcc371
--- /dev/null
+++ b/Tests/A2/Je_13_Interface_SingleImport_ClashWithClass/List.java
@@ -0,0 +1,4 @@
+import java.util.List;
+
+public interface List {
+}
diff --git a/Tests/A2/Je_13_Interface_SingleImport_ClashWithClass/Main.java b/Tests/A2/Je_13_Interface_SingleImport_ClashWithClass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..323cecebddf98d741be456ae6bc2a3f9251f8e89
--- /dev/null
+++ b/Tests/A2/Je_13_Interface_SingleImport_ClashWithClass/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:TYPE_LINKING,SINGLE_TYPE_IMPORT_CLASH_WITH_CLASS
+// JAVAC:UNKNOWN
+/**
+ * Parser/weeder:
+ * - (Joos 1) No interfaces allowed
+ * Hierarchy check:
+ * - (Joos 2) Check that no single-type-import declarations clash with
+ * the class (Joos 2: or interface) defined in the same file.  
+ */
+public abstract class Main implements List {
+
+    public Main() { }
+
+    public static int test() { 
+	return 123; 
+    }
+
+}
diff --git a/Tests/A2/Je_14_Interface_DeclaresToString_DifferentReturnType/Interface.java b/Tests/A2/Je_14_Interface_DeclaresToString_DifferentReturnType/Interface.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb48dfec84b96a47c4d0e857f875cbbdcd3e82cd
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_DeclaresToString_DifferentReturnType/Interface.java
@@ -0,0 +1,19 @@
+/* Hierarchy:
+ * -----------------------------------------------------------------------------
+ * JLS 9.2: If an interface has no direct superinterfaces, then the interface 
+ * implicitly declares a public abstract member method m with signature s, 
+ * return type r, and throws clause t corresponding to each public instance 
+ * method m with signature s, return type r, and throws clause t declared in 
+ * Object, unless a method with the same signature, same return type, 
+ * and a compatible throws clause is explicitly declared by the interface.
+ * 
+ * It follows that it is a compile-time error if the interface declares a method
+ * with the same signature and different return type or incompatible throws
+ * clause.
+ * -----------------------------------------------------------------------------
+ * String toString() is public on Object, so the void return type is a
+ * compile-time error
+ */
+public interface Interface {
+    public void toString();
+}
diff --git a/Tests/A2/Je_14_Interface_DeclaresToString_DifferentReturnType/Main.java b/Tests/A2/Je_14_Interface_DeclaresToString_DifferentReturnType/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a7d78ca7b2e095a1b410d87cbf78ddc91476d14
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_DeclaresToString_DifferentReturnType/Main.java
@@ -0,0 +1,28 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+/* Hierarchy:
+ * -----------------------------------------------------------------------------
+ * JLS 9.2: If an interface has no direct superinterfaces, then the interface 
+ * implicitly declares a public abstract member method m with signature s, 
+ * return type r, and throws clause t corresponding to each public instance 
+ * method m with signature s, return type r, and throws clause t declared in 
+ * Object, unless a method with the same signature, same return type, 
+ * and a compatible throws clause is explicitly declared by the interface.
+ * 
+ * It follows that it is a compile-time error if the interface declares a method
+ * with the same signature and different return type or incompatible throws
+ * clause.
+ * -----------------------------------------------------------------------------
+ * see Interface.java
+ * 
+ * String toString() is public on Object, so the void return type is a
+ * compile-time error
+ */
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_14_Interface_DeclaresToString_ThrowsConflict/Interface.java b/Tests/A2/Je_14_Interface_DeclaresToString_ThrowsConflict/Interface.java
new file mode 100644
index 0000000000000000000000000000000000000000..5fb4841b5106b70701893f0e77f3531c73c43d14
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_DeclaresToString_ThrowsConflict/Interface.java
@@ -0,0 +1,19 @@
+/* Hierarchy:
+ * -----------------------------------------------------------------------------
+ * JLS 9.2: If an interface has no direct superinterfaces, then the interface 
+ * implicitly declares a public abstract member method m with signature s, 
+ * return type r, and throws clause t corresponding to each public instance 
+ * method m with signature s, return type r, and throws clause t declared in 
+ * Object, unless a method with the same signature, same return type, 
+ * and a compatible throws clause is explicitly declared by the interface.
+ * 
+ * It follows that it is a compile-time error if the interface declares a method
+ * with the same signature and different return type or incompatible throws
+ * clause.
+ * -----------------------------------------------------------------------------
+ * String toString() is public on Object (with no throws-clause), so the
+ * incompatible type is a compile-time error
+ */
+public interface Interface {
+    public Object toString();
+}
diff --git a/Tests/A2/Je_14_Interface_DeclaresToString_ThrowsConflict/Main.java b/Tests/A2/Je_14_Interface_DeclaresToString_ThrowsConflict/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..75b87222d69674d55d3aca0777a0f45d0980a24e
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_DeclaresToString_ThrowsConflict/Main.java
@@ -0,0 +1,28 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:HIERARCHY,ILLEGAL_THROWS_IN_REPLACE
+// JAVAC:UNKNOWN
+/* Hierarchy:
+ * -----------------------------------------------------------------------------
+ * JLS 9.2: If an interface has no direct superinterfaces, then the interface 
+ * implicitly declares a public abstract member method m with signature s, 
+ * return type r, and throws clause t corresponding to each public instance 
+ * method m with signature s, return type r, and throws clause t declared in 
+ * Object, unless a method with the same signature, same return type, 
+ * and a compatible throws clause is explicitly declared by the interface.
+ * 
+ * It follows that it is a compile-time error if the interface declares a method
+ * with the same signature and different return type or incompatible throws
+ * clause.
+ * -----------------------------------------------------------------------------
+ * see Interface.java
+ * 
+ * String toString() is public on Object (with no throws-clause), so the
+ * incompatible type is a compile-time error
+ */
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_14_Interface_DuplicateMethodDeclare.java b/Tests/A2/Je_14_Interface_DuplicateMethodDeclare.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f4bf6b5c1726dfa2c7c351a67e9a1b64a38feab
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_DuplicateMethodDeclare.java
@@ -0,0 +1,18 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY,DUPLICATE_METHOD
+// JAVAC:UNKNOWN
+/**
+ * Parser/weeder:
+ * - (Joos 1) No interfaces allowed
+ * Hierarchy check:
+ * - (Joos 2) A class or interface must not declare two methods with
+ * the same name and parameter types (8.4, 9.4, well-formedness
+ * constraint 2).
+ */
+public interface Je_14_Interface_DuplicateMethodDeclare {
+    
+    public void foo();
+    
+    public void foo();
+
+}
diff --git a/Tests/A2/Je_14_Interface_ImplicitPublicMethod_ProtectedOverride/Foo.java b/Tests/A2/Je_14_Interface_ImplicitPublicMethod_ProtectedOverride/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea4c81314482f7649afd3d76d604f85b81bc3388
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_ImplicitPublicMethod_ProtectedOverride/Foo.java
@@ -0,0 +1,5 @@
+public interface Foo {
+
+    public void bleh();
+
+}
diff --git a/Tests/A2/Je_14_Interface_ImplicitPublicMethod_ProtectedOverride/Main.java b/Tests/A2/Je_14_Interface_ImplicitPublicMethod_ProtectedOverride/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..41b310833cada4a265f50a93f9ebe9267bfce4dd
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_ImplicitPublicMethod_ProtectedOverride/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+/**
+ * Parser/weeder:
+ * - (Joos 1) No interfaces allowed
+ * Hierarchy check:
+ * - (Joos 2) A protected method must not override a public method
+ * (8.4.6.3). (Interface methods are implicitly public).
+ */
+public abstract class Main implements Foo{
+    
+    public Main() { }
+    
+    public static int test() { 
+	return 123; 
+    }
+
+    protected abstract void bleh();
+}
diff --git a/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Bar.java b/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..59266af4942b4c11e14393ec9d25089166e30c57
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Bar.java
@@ -0,0 +1,2 @@
+public interface Bar extends Foo{
+}
diff --git a/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Foo.java b/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..670d47aa554977b11fd63c40d6a1b8be2fadd306
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Foo.java
@@ -0,0 +1,2 @@
+public interface Foo extends Bar {
+}
diff --git a/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Main.java b/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..85ab97bd519d0b44fa08f03bb80059eb7abc1b71
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_SelfDependency_CyclicExtend/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+/**
+ * Parser/weeder:
+ * - (Joos 1) No interfaces allowed
+ * Hierarchy check:
+ * - (Joos 2) A class or interface must not depend on itself 
+ * (8.1.3, 9.1.2)
+ */
+public class Main{
+    public Main() {
+    }
+	
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_14_Interface_SelfDependency_ExtendsItself.java b/Tests/A2/Je_14_Interface_SelfDependency_ExtendsItself.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ce12ea1b7124365226ff79eb319288f3d3415d4
--- /dev/null
+++ b/Tests/A2/Je_14_Interface_SelfDependency_ExtendsItself.java
@@ -0,0 +1,13 @@
+// JOOS1: PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2: HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+/**
+ * Parser/weeder:
+ * - (Joos 1) No interfaces allowed
+ * Hierarchy:
+ * - (Joos 2) A class or interface must not depend on itself (8.1.3,
+ * 9.1.2, well-formedness constraint 1).
+ */
+public interface Je_14_Interface_SelfDependency_ExtendsItself extends Je_14_Interface_SelfDependency_ExtendsItself {
+
+}
diff --git a/Tests/A2/Je_2_ConstructorParameter_Duplicate.java b/Tests/A2/Je_2_ConstructorParameter_Duplicate.java
new file mode 100644
index 0000000000000000000000000000000000000000..554ff9ed7d409a95e277e92d90cefadd4649e886
--- /dev/null
+++ b/Tests/A2/Je_2_ConstructorParameter_Duplicate.java
@@ -0,0 +1,18 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_ConstructorParameter_Duplicate {
+
+    public Je_2_ConstructorParameter_Duplicate (String f, int f) {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_ConstructorParameter_Overlapping.java b/Tests/A2/Je_2_ConstructorParameter_Overlapping.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba42872d68d7d67ef6dae4af8c18f67275f2fa46
--- /dev/null
+++ b/Tests/A2/Je_2_ConstructorParameter_Overlapping.java
@@ -0,0 +1,22 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_ConstructorParameter_Overlapping {
+
+    public Je_2_ConstructorParameter_Overlapping (Object o) {
+	{
+	    Object o = new Object(); 
+	}
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_DuplicateType/Bar.java b/Tests/A2/Je_2_DuplicateType/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..02e894734d77525e7fcaed41e2f299a964f72b98
--- /dev/null
+++ b/Tests/A2/Je_2_DuplicateType/Bar.java
@@ -0,0 +1,5 @@
+package foo;
+
+public class Bar {
+	public Bar() {}
+}
diff --git a/Tests/A2/Je_2_DuplicateType/Main.java b/Tests/A2/Je_2_DuplicateType/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..498a35123c04724b1caf4c0cd370dd92cd6f93d8
--- /dev/null
+++ b/Tests/A2/Je_2_DuplicateType/Main.java
@@ -0,0 +1,14 @@
+//JOOS1: ENVIRONMENTS,DUPLICATE_TYPE
+//JOOS2: ENVIRONMENTS,DUPLICATE_TYPE
+//JAVAC: UNKNOWN
+
+/**
+ * The type foo.Bar is declared twice.
+ */
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_2_DuplicateType/foo/Bar.java b/Tests/A2/Je_2_DuplicateType/foo/Bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..02e894734d77525e7fcaed41e2f299a964f72b98
--- /dev/null
+++ b/Tests/A2/Je_2_DuplicateType/foo/Bar.java
@@ -0,0 +1,5 @@
+package foo;
+
+public class Bar {
+	public Bar() {}
+}
diff --git a/Tests/A2/Je_2_Fields_DifferentAccess.java b/Tests/A2/Je_2_Fields_DifferentAccess.java
new file mode 100644
index 0000000000000000000000000000000000000000..2670e5599b4ff6c7606f8fdfe9a6ca502b80871f
--- /dev/null
+++ b/Tests/A2/Je_2_Fields_DifferentAccess.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_FIELD
+// JOOS2:ENVIRONMENTS,DUPLICATE_FIELD
+// JAVAC:UNKNOWN
+// 
+/**
+ * - Environments
+ * Check that no two fields in the same class have the same name.
+ */
+public class Je_2_Fields_DifferentAccess {
+
+    public Object o;
+
+    public Je_2_Fields_DifferentAccess () {}
+
+    public static int test() {
+        return 123;
+    }
+
+    protected Object o;
+
+}
diff --git a/Tests/A2/Je_2_Fields_DifferentTypes.java b/Tests/A2/Je_2_Fields_DifferentTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..827bee302f2f5a67ff7485421b3c339939eb6a16
--- /dev/null
+++ b/Tests/A2/Je_2_Fields_DifferentTypes.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_FIELD
+// JOOS2:ENVIRONMENTS,DUPLICATE_FIELD
+// JAVAC:UNKNOWN
+// 
+/**
+ * - Environments
+ * Check that no two fields in the same class have the same name.
+ */
+public class Je_2_Fields_DifferentTypes {
+
+    public Object foo;
+
+    public String foo;
+
+    public Je_2_Fields_DifferentTypes () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Fields_MultipleFields.java b/Tests/A2/Je_2_Fields_MultipleFields.java
new file mode 100644
index 0000000000000000000000000000000000000000..82e91f68dff31bdb2e03923dc88ca8a69770821f
--- /dev/null
+++ b/Tests/A2/Je_2_Fields_MultipleFields.java
@@ -0,0 +1,24 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_FIELD
+// JOOS2:ENVIRONMENTS,DUPLICATE_FIELD
+// JAVAC:UNKNOWN
+// 
+/**
+ * - Environments
+ * Check that no two fields in the same class have the same name.
+ */
+public class Je_2_Fields_MultipleFields {
+
+    public int foo;
+
+    public int bar;
+
+    public int baz;
+
+    public int foo;
+
+    public Je_2_Fields_MultipleFields() { }
+
+    public static int test() { 
+	return 123; 
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_DeeplyNested.java b/Tests/A2/Je_2_Locals_Overlapping_DeeplyNested.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e452fc8ac93309799367e7e985ba53e0aee4137
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_DeeplyNested.java
@@ -0,0 +1,23 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_DeeplyNested {
+	public Je_2_Locals_Overlapping_DeeplyNested() {}
+	
+	public static int test() {
+		int a = 123;
+		boolean b = true;
+		boolean c = true;
+		boolean d = true;
+		boolean e = true;
+		boolean f = true;
+  		if (b) if (c) if (d) if (e) if (f) { int a = 43; return a+80; }
+		return a;
+	}
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_ForInitializer.java b/Tests/A2/Je_2_Locals_Overlapping_ForInitializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..0106d7f8f45457ba21b0de7605b92bc869850aee
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_ForInitializer.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_ForInitializer {
+
+    public Je_2_Locals_Overlapping_ForInitializer() {}
+
+    public static int test() {
+	int r = 0;
+	for (int r = 0; r < 42; r = r + 1) {
+	    r = r + 1;
+	}
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_InConditionalElse.java b/Tests/A2/Je_2_Locals_Overlapping_InConditionalElse.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf849065719f7cb99ee296b133b33d96478722d1
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_InConditionalElse.java
@@ -0,0 +1,24 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_InConditionalElse {
+
+    public Je_2_Locals_Overlapping_InConditionalElse() {}
+
+    public static int test() {
+	int r = 0;
+	if (r >= 1) {	
+	    r = 4;
+	}
+	else {
+	    int r = 1;
+	}
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_InConditionalThen.java b/Tests/A2/Je_2_Locals_Overlapping_InConditionalThen.java
new file mode 100644
index 0000000000000000000000000000000000000000..19a1b7a983364577fe506d29691e20ea331af899
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_InConditionalThen.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_InConditionalThen {
+
+    public Je_2_Locals_Overlapping_InConditionalThen() {}
+
+    public static int test() {
+	int r = 0;
+	if (r >= 1) {	
+	    int r = 1;
+	}
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_InsideDoubleBlock.java b/Tests/A2/Je_2_Locals_Overlapping_InsideDoubleBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..e24ec8e0f7b2a4ae756d3cd37ef269818fc9a4e0
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_InsideDoubleBlock.java
@@ -0,0 +1,23 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_InsideDoubleBlock {
+
+    public Je_2_Locals_Overlapping_InsideDoubleBlock() {}
+
+    public static int test() {
+	int r = 0;
+	{
+	    {
+		int r = 123;
+		return r;
+	    }
+	}
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_InsideLoop.java b/Tests/A2/Je_2_Locals_Overlapping_InsideLoop.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e8d70d65bebe9b0d51e5a2a7fc187ecf10a6368
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_InsideLoop.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_InsideLoop {
+
+    public Je_2_Locals_Overlapping_InsideLoop() {}
+
+    public static int test() {
+	int r = 0;
+	while (r > 0){
+	    int r = 1;
+	}
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_InsideNewBlock.java b/Tests/A2/Je_2_Locals_Overlapping_InsideNewBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb51beda7880b29b2da2fafc3c4c4f0b11a35896
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_InsideNewBlock.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_InsideNewBlock {
+
+    public Je_2_Locals_Overlapping_InsideNewBlock() {}
+
+    public static int test() {
+	int r = 0;
+	{	
+	    int r = 1;
+	}
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_SameLevel.java b/Tests/A2/Je_2_Locals_Overlapping_SameLevel.java
new file mode 100644
index 0000000000000000000000000000000000000000..c77153b6801bfa9f1d0b17f8f747d7d05e6c9a88
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_SameLevel.java
@@ -0,0 +1,19 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Locals_Overlapping_SameLevel {
+
+    public Je_2_Locals_Overlapping_SameLevel() {}
+
+    public static int test() {
+	int r = 0;
+	int r = 1;
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_2_Locals_Overlapping_SameLine.java b/Tests/A2/Je_2_Locals_Overlapping_SameLine.java
new file mode 100644
index 0000000000000000000000000000000000000000..fad7d769d6ab8690ccb49323525aae55c2a866e1
--- /dev/null
+++ b/Tests/A2/Je_2_Locals_Overlapping_SameLine.java
@@ -0,0 +1,20 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Two different locals with the same name may not have overlapping
+ * scopes.
+ */
+public class Je_2_Locals_Overlapping_SameLine{
+
+    public Je_2_Locals_Overlapping_SameLine(){}
+
+    public static int test(){
+	int a = 42;
+	int b = 12; {int b = 123; a = a + b;} 
+	return a - b - 30 ;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Parameter_AbstractDeclaredTwice.java b/Tests/A2/Je_2_Parameter_AbstractDeclaredTwice.java
new file mode 100644
index 0000000000000000000000000000000000000000..81dee9b828491f6ce809fd76b042b32147f580c4
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_AbstractDeclaredTwice.java
@@ -0,0 +1,12 @@
+//JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+//JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+//JAVAC:UNKNOWN
+public abstract class Je_2_Parameter_AbstractDeclaredTwice {
+	public Je_2_Parameter_AbstractDeclaredTwice() {}
+
+	public abstract void foo(Object x, java.lang.Object x);
+
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_2_Parameter_OverlappingWithLocal.java b/Tests/A2/Je_2_Parameter_OverlappingWithLocal.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c803f2c2baa00ec441f0bb4ee12e049028c0457
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_OverlappingWithLocal.java
@@ -0,0 +1,22 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Parameter_OverlappingWithLocal {
+
+    public Je_2_Parameter_OverlappingWithLocal() {}
+
+    public void m(Object o) {
+	Object o = new Object(); 
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Parameter_OverlappingWithLocalInConditional.java b/Tests/A2/Je_2_Parameter_OverlappingWithLocalInConditional.java
new file mode 100644
index 0000000000000000000000000000000000000000..8452c6a7f78da20c9a02329752729bbdf851a17a
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_OverlappingWithLocalInConditional.java
@@ -0,0 +1,24 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Parameter_OverlappingWithLocalInConditional {
+
+    public Je_2_Parameter_OverlappingWithLocalInConditional() {}
+
+    public void m(Object o) {
+	if (o.equals(o)){
+	    Object o = new Object(); 
+	}
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Parameter_OverlappingWithLocalInLoop.java b/Tests/A2/Je_2_Parameter_OverlappingWithLocalInLoop.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdd8d6df2cc38becfb1fa90519fd31883e386843
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_OverlappingWithLocalInLoop.java
@@ -0,0 +1,24 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Parameter_OverlappingWithLocalInLoop {
+
+    public Je_2_Parameter_OverlappingWithLocalInLoop() {}
+
+    public void m(Object o) {
+	while (o.equals(o)){
+	    Object o = new Object(); 
+	}
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Parameter_OverlappingWithLocalInsideNewBlock.java b/Tests/A2/Je_2_Parameter_OverlappingWithLocalInsideNewBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..871becbec3e09655c5f66102a17ee813cb60a314
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_OverlappingWithLocalInsideNewBlock.java
@@ -0,0 +1,24 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Parameter_OverlappingWithLocalInsideNewBlock {
+
+    public Je_2_Parameter_OverlappingWithLocalInsideNewBlock() {}
+
+    public void m(Object o) {
+	{
+	    Object o = new Object(); 
+	}
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Parameter_OverlappingWithLocalNotFirst.java b/Tests/A2/Je_2_Parameter_OverlappingWithLocalNotFirst.java
new file mode 100644
index 0000000000000000000000000000000000000000..21a6573cfa27f571a01051849d8fb69fccc15372
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_OverlappingWithLocalNotFirst.java
@@ -0,0 +1,23 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Parameter_OverlappingWithLocalNotFirst {
+
+    public Je_2_Parameter_OverlappingWithLocalNotFirst() {}
+
+    public void m(Object o) {
+	int p = 0;
+	Object o = new Object(); 
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_2_Parameter_OverlappingWithParameter.java b/Tests/A2/Je_2_Parameter_OverlappingWithParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..b871e101082dd2cddac30f486fe1f353f465f830
--- /dev/null
+++ b/Tests/A2/Je_2_Parameter_OverlappingWithParameter.java
@@ -0,0 +1,21 @@
+// JOOS1:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JOOS2:ENVIRONMENTS,DUPLICATE_VARIABLE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Environments:
+ * - Check that no two local variables with overlapping scope have the
+ * same name.
+ */
+public class Je_2_Parameter_OverlappingWithParameter {
+
+    public Je_2_Parameter_OverlappingWithParameter() {}
+
+    public void m(Object o, int p, String o) {
+    }
+    
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClashWithImplicitImport/Integer.java b/Tests/A2/Je_3_ImportOnDemand_ClashWithImplicitImport/Integer.java
new file mode 100644
index 0000000000000000000000000000000000000000..457e82417fa5dd3edc37ae3805353864b3899ff9
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClashWithImplicitImport/Integer.java
@@ -0,0 +1,17 @@
+package bar;
+
+public class Integer {
+    
+    public int x;
+
+    public Integer(int y) {
+	x = 123;	
+    }
+    
+    public int intValue() {
+	return x;
+    }
+
+}
+
+
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClashWithImplicitImport/Main.java b/Tests/A2/Je_3_ImportOnDemand_ClashWithImplicitImport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a1a05ef0a3ca7e230ebc29dff3663260cc5944a
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClashWithImplicitImport/Main.java
@@ -0,0 +1,26 @@
+// JOOS1:TYPE_LINKING,AMBIGUOUS_CLASS_NAME
+// JOOS2:TYPE_LINKING,AMBIGUOUS_CLASS_NAME
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Unqualified names are handled by these rules: 
+ *   1. try the enclosing class or interface 
+ *   2. try any single-type-import (A.B.C.D) 
+ *   3. try the same package 
+ *   4. try any import-on-demand package (A.B.C.*), including java.lang.* 
+ *
+ * This testcase tests item 4.
+ */
+import bar.*;
+
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return new Integer(123).intValue();
+    }
+
+}
+
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/Main.java b/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9febab44a9dc8bd01c5a1d0cb6d02f8e0789d423
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:TYPE_LINKING,AMBIGUOUS_CLASS_NAME
+// JOOS2:TYPE_LINKING,AMBIGUOUS_CLASS_NAME
+// JAVAC:UNKNOWN
+// 
+/**
+ * TypeLinking
+ * - Class Date can be found in both package java.util and package 
+ * java.sql.
+ */
+import java.util.*;
+import java.sql.*;
+
+public class Main {
+
+    public Main() { }
+
+    public static int test() {
+	Date d = new Date();
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/java/sql/Date.java b/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/java/sql/Date.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8db49919eb7b8214cdcf9586f203be53b5b0c7f
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/java/sql/Date.java
@@ -0,0 +1,5 @@
+package java.sql;
+public class Date {
+    public Date() {
+    }
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/java/util/Date.java b/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/java/util/Date.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b90d9590cac189520df0bbe9066b35c848fa4d1
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClassInMultiplePackages/java/util/Date.java
@@ -0,0 +1,5 @@
+package java.util;
+public class Date {
+    public Date() {
+    }
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClassNameAsPackage/A.java b/Tests/A2/Je_3_ImportOnDemand_ClassNameAsPackage/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..f68b7ce4d6004894e632f823e50043322feb30b4
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClassNameAsPackage/A.java
@@ -0,0 +1,11 @@
+/* TypeLinking:
+ * Check that all import-on-demand declarations refer to existing packages.
+ * 
+ * Main is not a package
+ */
+
+import Main.*;
+
+public class A {
+    public A() {}
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_ClassNameAsPackage/Main.java b/Tests/A2/Je_3_ImportOnDemand_ClassNameAsPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb7fa9d5223fd93199a199de0c74ca69afaf7866
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_ClassNameAsPackage/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE
+// JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE
+// JAVAC:UNKNOWN
+// 
+/* TypeLinking:
+ * Check that all import-on-demand declarations refer to existing packages.
+ * 
+ * Main is not a package (see A.java)
+ */
+
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_NonExisting.java b/Tests/A2/Je_3_ImportOnDemand_NonExisting.java
new file mode 100644
index 0000000000000000000000000000000000000000..6f07c42b675acaad84485ef7a7c477c0b918568b
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_NonExisting.java
@@ -0,0 +1,20 @@
+// JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE
+// JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Type linking:
+ * - Check that all import-on-demand declarations refer to existing
+ * packages.
+ */
+import java.Util.*;
+
+public class Je_3_ImportOnDemand_NonExisting {
+
+    public Je_3_ImportOnDemand_NonExisting () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_NonExistingPackage_FromPreviousTestcase.java b/Tests/A2/Je_3_ImportOnDemand_NonExistingPackage_FromPreviousTestcase.java
new file mode 100644
index 0000000000000000000000000000000000000000..de72f2c3ba8ca35f2a48abce612d5ee6e05beb61
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_NonExistingPackage_FromPreviousTestcase.java
@@ -0,0 +1,13 @@
+//JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE
+//JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE
+//JAVAC:UNKNOWN
+
+import Test.*;
+
+public class Je_3_ImportOnDemand_NonExistingPackage_FromPreviousTestcase {
+	public Je_3_ImportOnDemand_NonExistingPackage_FromPreviousTestcase() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_PackagePrefixExists/Main.java b/Tests/A2/Je_3_ImportOnDemand_PackagePrefixExists/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..04dc998d287cba8211e57180102c17fddaf5e371
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_PackagePrefixExists/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE
+// JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE
+// JAVAC:UNKNOWN
+// 
+/* TypeLinking:
+ * Check that all import-on-demand declarations refer to existing packages.
+ * 
+ * java.util.foo does not exist, but java.util does.
+ */
+
+import java.util.foo.*;
+
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_ImportOnDemand_PackagePrefixExists/java/util/Date.java b/Tests/A2/Je_3_ImportOnDemand_PackagePrefixExists/java/util/Date.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b90d9590cac189520df0bbe9066b35c848fa4d1
--- /dev/null
+++ b/Tests/A2/Je_3_ImportOnDemand_PackagePrefixExists/java/util/Date.java
@@ -0,0 +1,5 @@
+package java.util;
+public class Date {
+    public Date() {
+    }
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_Explicit/Main.java b/Tests/A2/Je_3_PackageClashWithType_Explicit/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff29ba9adba216a88a254e41f4c08584ffe57b01
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_Explicit/Main.java
@@ -0,0 +1,23 @@
+//TYPE_LINKING
+//JOOS1:PREFIX_RESOLVES_TO_TYPE
+//JOOS2:PREFIX_RESOLVES_TO_TYPE
+//JAVAC:UNKNOWN
+
+
+/**
+ * TypeLinking:
+ * Check that no prefixes (consisting of whole identifiers) of
+ * fully qualified types themselves resolve to types.
+ *
+ * The prefix 'javax.swing.tree' of the fully qualified type
+ * javax.swing.tree.TreeNode is itself a type.
+ */
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		javax.swing.tree.TreeNode node = null;
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_Explicit/javax/swing/tree.java b/Tests/A2/Je_3_PackageClashWithType_Explicit/javax/swing/tree.java
new file mode 100644
index 0000000000000000000000000000000000000000..d22d405395aaf86dbe3d7140fa6acd6de3ac262a
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_Explicit/javax/swing/tree.java
@@ -0,0 +1,5 @@
+package javax.swing;
+
+public class tree {
+	public tree() {}
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_Explicit/javax/swing/tree/TreeNode.java b/Tests/A2/Je_3_PackageClashWithType_Explicit/javax/swing/tree/TreeNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dbb09423d9f3f67e926e13787b61077e474c5d0
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_Explicit/javax/swing/tree/TreeNode.java
@@ -0,0 +1,5 @@
+package javax.swing.tree;
+public class TreeNode {
+    public TreeNode() {
+    }
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_Linked/Main.java b/Tests/A2/Je_3_PackageClashWithType_Linked/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a319c6b1580cae3000eeaf93078e01028207b4a2
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_Linked/Main.java
@@ -0,0 +1,26 @@
+//TYPE_LINKING
+//JOOS1:PACKAGE_CLASH_WITH_TYPE
+//JOOS2:PACKAGE_CLASH_WITH_TYPE
+//JAVAC:UNKNOWN
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The declared class javax.swing.tree clashes with the package
+ * of the same name because the import on-demand declaration of 
+ * javax.swing.tree is used for resolving TreeNode.
+ */
+import javax.swing.tree.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		TreeNode node = null;
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_Linked/javax/swing/tree.java b/Tests/A2/Je_3_PackageClashWithType_Linked/javax/swing/tree.java
new file mode 100644
index 0000000000000000000000000000000000000000..d22d405395aaf86dbe3d7140fa6acd6de3ac262a
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_Linked/javax/swing/tree.java
@@ -0,0 +1,5 @@
+package javax.swing;
+
+public class tree {
+	public tree() {}
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_SingleTypeImport/Main.java b/Tests/A2/Je_3_PackageClashWithType_SingleTypeImport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ebaaac025793f4e8c942e865cf3ee0641936a2f
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_SingleTypeImport/Main.java
@@ -0,0 +1,26 @@
+//TYPE_LINKING
+//JOOS1:PACKAGE_CLASH_WITH_TYPE
+//JOOS2:PACKAGE_CLASH_WITH_TYPE
+//JAVAC:UNKNOWN
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The declared class javax.swing.tree clashes with the package
+ * of the same name because of the single-type import declaration of 
+ * javax.swing.tree.TreeNode.
+ */
+	
+import javax.swing.tree.TreeNode;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageClashWithType_SingleTypeImport/javax/swing/tree.java b/Tests/A2/Je_3_PackageClashWithType_SingleTypeImport/javax/swing/tree.java
new file mode 100644
index 0000000000000000000000000000000000000000..d22d405395aaf86dbe3d7140fa6acd6de3ac262a
--- /dev/null
+++ b/Tests/A2/Je_3_PackageClashWithType_SingleTypeImport/javax/swing/tree.java
@@ -0,0 +1,5 @@
+package javax.swing;
+
+public class tree {
+	public tree() {}
+}
diff --git a/Tests/A2/Je_3_PackageExists_AlmostPrefix_External/Main.java b/Tests/A2/Je_3_PackageExists_AlmostPrefix_External/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7ab0a534766519c81c9b193a0ba74d0ca6750a5
--- /dev/null
+++ b/Tests/A2/Je_3_PackageExists_AlmostPrefix_External/Main.java
@@ -0,0 +1,15 @@
+//JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE
+//JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE
+//JAVAC:UNKNOWN
+/**
+ * The package jav does not exist though it's a prefix of the package java from for instance java.lang.Object.
+ */
+import jav.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageExists_AlmostPrefix_Internal/Main.java b/Tests/A2/Je_3_PackageExists_AlmostPrefix_Internal/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..25b1c321e8f3822c23a75389691a510348bbda6a
--- /dev/null
+++ b/Tests/A2/Je_3_PackageExists_AlmostPrefix_Internal/Main.java
@@ -0,0 +1,15 @@
+//JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE
+//JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE
+//JAVAC:UNKNOWN
+/**
+ * The package fo does not exist though it's a prefix of the package foo.bar from class foo.bar.Baz.
+ */
+import fo.*;
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageExists_AlmostPrefix_Internal/foo/bar/Baz.java b/Tests/A2/Je_3_PackageExists_AlmostPrefix_Internal/foo/bar/Baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..98299613ee0079167686a0979dc2c354c385ce9e
--- /dev/null
+++ b/Tests/A2/Je_3_PackageExists_AlmostPrefix_Internal/foo/bar/Baz.java
@@ -0,0 +1,5 @@
+package foo.bar;
+
+public class Baz {
+	public Baz() {}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName/Main.java b/Tests/A2/Je_3_PackageNameIsClassName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..374084486a4e1f2f3920affd235a1f4786dcd53e
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName/Main.java
@@ -0,0 +1,23 @@
+//TYPE_LINKING
+//JOOS1:PACKAGE_CLASH_WITH_TYPE
+//JOOS2:PACKAGE_CLASH_WITH_TYPE
+//JAVAC:UNKNOWN
+
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The package foo.bar of the declared class foo.bar.baz clashes with
+ * the type name of the declared class foo.bar. 
+ */
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName/foo/bar.java b/Tests/A2/Je_3_PackageNameIsClassName/foo/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e01f62f7cd0bc71a82ae06cf24aea29521baac5
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName/foo/bar.java
@@ -0,0 +1,5 @@
+package foo;
+
+public class bar {
+	public bar() {}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName/foo/bar/baz.java b/Tests/A2/Je_3_PackageNameIsClassName/foo/bar/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..5bbbd083e814786905c880fd18f7968fc8654fac
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName/foo/bar/baz.java
@@ -0,0 +1,5 @@
+package foo.bar;
+
+public class baz {
+	public baz() {}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_External/Main.java b/Tests/A2/Je_3_PackageNameIsClassName_External/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..98730aaea1dc1b98f18716b370ce863c80c793cf
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_External/Main.java
@@ -0,0 +1,24 @@
+//TYPE_LINKING
+//JOOS1:PACKAGE_CLASH_WITH_TYPE
+//JOOS2:PACKAGE_CLASH_WITH_TYPE
+//JAVAC:UNKNOWN
+
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The package java.util.ArrayList of the declared
+ * class java.util.ArrayList.foo clashes with
+ * the type name of the class java.util.ArrayList found on the classpath. 
+ */
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/ArrayList.java b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/ArrayList/foo.java b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/ArrayList/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..7770d5a56fa74804c2b8441c91695213549dea1f
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/ArrayList/foo.java
@@ -0,0 +1,5 @@
+package java.util.ArrayList;
+
+public class foo {
+	public foo() {}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/Collection.java b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/List.java b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_External/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/Main.java b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..576d618852f9784234e244c6418dfe281edb9b96
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/Main.java
@@ -0,0 +1,24 @@
+//TYPE_LINKING
+//JOOS1:PACKAGE_CLASH_WITH_TYPE
+//JOOS2:PACKAGE_CLASH_WITH_TYPE
+//JAVAC:UNKNOWN
+
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The package java.util.ArrayList of the declared
+ * class java.util.ArrayList.foo.bar clashes with
+ * the type name of the class java.util.ArrayList found on the classpath. 
+ */
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/ArrayList.java b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/ArrayList/foo/bar.java b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/ArrayList/foo/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..12b2a8f3b521e7dbdb5cf2e73e28eea9182b18a1
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/ArrayList/foo/bar.java
@@ -0,0 +1,5 @@
+package java.util.ArrayList.foo;
+
+public class bar {
+	public bar() {}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/Collection.java b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/List.java b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_ExternalPrefix/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_Prefix/Main.java b/Tests/A2/Je_3_PackageNameIsClassName_Prefix/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..de5573b40593b9d88d2fafb89df329ca5fdbb0a1
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_Prefix/Main.java
@@ -0,0 +1,23 @@
+//TYPE_LINKING
+//JOOS1:PACKAGE_CLASH_WITH_TYPE
+//JOOS2:PACKAGE_CLASH_WITH_TYPE
+//JAVAC:UNKNOWN
+
+
+/**
+ * TypeLinking:
+ * Check that no package names or prefixes hereof (consisting of whole
+ * identifiers) of declared packages, single-type-import declarations
+ * or used import-on-demand declarations resolve to qualified types,
+ * i.e. types not in the default package.
+ *
+ * The package foo.bar of the declared class foo.bar.baz.boz clashes with
+ * the type name of the declared class foo.bar. 
+ */
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_Prefix/foo/bar.java b/Tests/A2/Je_3_PackageNameIsClassName_Prefix/foo/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e01f62f7cd0bc71a82ae06cf24aea29521baac5
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_Prefix/foo/bar.java
@@ -0,0 +1,5 @@
+package foo;
+
+public class bar {
+	public bar() {}
+}
diff --git a/Tests/A2/Je_3_PackageNameIsClassName_Prefix/foo/bar/baz/boz.java b/Tests/A2/Je_3_PackageNameIsClassName_Prefix/foo/bar/baz/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..e70fd0236b80c104538f1489e9dc7c03198cc69a
--- /dev/null
+++ b/Tests/A2/Je_3_PackageNameIsClassName_Prefix/foo/bar/baz/boz.java
@@ -0,0 +1,5 @@
+package foo.bar.baz;
+
+public class boz {
+	public boz() {}
+}
diff --git a/Tests/A2/Je_3_Resolve_ImplicitJavaIO/Main.java b/Tests/A2/Je_3_Resolve_ImplicitJavaIO/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..29d9577769d929d22ea3036c569f83f210e1d92c
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_ImplicitJavaIO/Main.java
@@ -0,0 +1,12 @@
+//TYPE_LINKING
+//JOOS1:UNRESOLVED_TYPE
+//JOOS2:UNRESOLVED_TYPE
+//JAVAC:UNKNOWN
+
+public class Main implements Serializable {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}	
diff --git a/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/Main.java b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a62ca28f42e53b98c724325a04c8dc92f26f6da
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:TYPE_LINKING,UNRESOLVED_TYPE
+// JOOS2:TYPE_LINKING,UNRESOLVED_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * -Check that all types actually resolve to defined types in the
+ * program or the class library.
+ */
+import java.util.ArrayList;
+
+public class Main {
+
+    public Main() { }
+
+    public static int test() {
+	List l = null;
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/ArrayList.java b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/Collection.java b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/List.java b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_ImportDifferentFromSamePackage/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Foo.java b/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2515ef46cc4ee54d2d30106402251f83bbfccbd1
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Foo.java
@@ -0,0 +1,8 @@
+package Test;
+
+public class Foo extends Zoo{
+
+    public Foo(){}
+
+
+}
diff --git a/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Main.java b/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ed3136b8b24be854f724c4be099e6940ae691a6
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Main.java
@@ -0,0 +1,24 @@
+// JOOS1:TYPE_LINKING,DISAMBIGUATION,VARIABLE_OR_TYPE_NOT_FOUND
+// JOOS2:TYPE_LINKING,DISAMBIGUATION,VARIABLE_OR_TYPE_NOT_FOUND
+// JAVAC:UNKNOWN
+// 
+/**
+ * TypeLinking
+ * - Tests whether a simple typename is linked to the correct type in
+ * the same package, in the case where other packages are also defined
+ * within the program.
+ * Specifically, the type name Zoo in Test.Foo should not link to Test2.Zoo
+ */
+public class Main{
+
+    public Main(){}
+
+    public static int test(){
+	return Test.Foo.test();
+    }
+
+    public static void main(String[] args){
+	System.out.println(Main.test());
+    }
+    
+}
diff --git a/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Zoo.java b/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Zoo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ee61c7dde285923888691e70c11c681901ddf84
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_LinkToCorrectPackage/Zoo.java
@@ -0,0 +1,11 @@
+package Test2;
+
+public class Zoo{
+
+    public Zoo(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_Resolve_MissingImport/Main.java b/Tests/A2/Je_3_Resolve_MissingImport/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..d73b89b5ca6940a9dea58229e35a9560458997fd
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_MissingImport/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:TYPE_LINKING,UNRESOLVED_TYPE
+// JOOS2:TYPE_LINKING,UNRESOLVED_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * -Check that all types actually resolve to defined types in the
+ * program or the class library.
+ */
+public class Main {
+
+    public Main() { }
+
+    public static int test() {
+	List l = null;
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_Resolve_MissingImport/java/util/ArrayList.java b/Tests/A2/Je_3_Resolve_MissingImport/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_MissingImport/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_Resolve_MissingImport/java/util/Collection.java b/Tests/A2/Je_3_Resolve_MissingImport/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_MissingImport/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_Resolve_MissingImport/java/util/List.java b/Tests/A2/Je_3_Resolve_MissingImport/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_MissingImport/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_Resolve_NonExistingSuperclass.java b/Tests/A2/Je_3_Resolve_NonExistingSuperclass.java
new file mode 100644
index 0000000000000000000000000000000000000000..42584adab7953e2cec96b880a850e08f0fed2fe5
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_NonExistingSuperclass.java
@@ -0,0 +1,18 @@
+// JOOS1:TYPE_LINKING,UNRESOLVED_TYPE
+// JOOS2:TYPE_LINKING,UNRESOLVED_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that all types actually resolve to defined types in the
+ * program or the class library.
+ */
+public class Je_3_Resolve_NonExistingSuperclass extends foo {
+
+    public Je_3_Resolve_NonExistingSuperclass () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_Resolve_SamePackageAndClassName.java b/Tests/A2/Je_3_Resolve_SamePackageAndClassName.java
new file mode 100644
index 0000000000000000000000000000000000000000..49c00426dcefbc27bf74565a5b6818c391366808
--- /dev/null
+++ b/Tests/A2/Je_3_Resolve_SamePackageAndClassName.java
@@ -0,0 +1,20 @@
+// JOOS1:TYPE_LINKING,PREFIX_RESOLVES_TO_TYPE
+// JOOS2:TYPE_LINKING,PREFIX_RESOLVES_TO_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that no prefixes (consisting of whole identifiers) of fully
+ * qualified types themselves resolve to types.
+ */
+package Je_3_Resolve_SamePackageAndClassName;
+
+public class Je_3_Resolve_SamePackageAndClassName {
+
+    public Je_3_Resolve_SamePackageAndClassName() {}
+
+    public void test() {
+	new Je_3_Resolve_SamePackageAndClassName.Je_3_Resolve_SamePackageAndClassName().test();
+    }
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..2676488758b379533d276a5060362a41c366b7b4
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/List.java
@@ -0,0 +1,7 @@
+import java.util.List;
+
+public class List {
+
+    public List() {}
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/Main.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..963649d86f4b69ab8362fe4b107d66d7532bb915
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:TYPE_LINKING,SINGLE_TYPE_IMPORT_CLASH_WITH_CLASS
+// JOOS2:TYPE_LINKING,SINGLE_TYPE_IMPORT_CLASH_WITH_CLASS
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that no single-type-import declarations clash with the
+ * class (Joos 2: or interface) defined in the same file. (see List.java)
+ */
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/ArrayList.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/Main.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..4a382da25227cc0c1a00d7746740d0ea324e737a
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:TYPE_LINKING,SINGLE_TYPE_IMPORT_CLASH_WITH_CLASS
+// JOOS2:TYPE_LINKING,SINGLE_TYPE_IMPORT_CLASH_WITH_CLASS
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that no single-type-import declarations clash with the
+ * class (Joos 2: or interface) defined in the same file. (see foo/List.java)
+ */
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/foo/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/foo/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a77c2f14645e9f68370c4a5842e580da03817b
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/foo/List.java
@@ -0,0 +1,9 @@
+package foo;
+
+import java.util.List;
+
+public class List {
+
+    public List() {}
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/ArrayList.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithClass_InPackage/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/Main.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..65870497ce667f42fbbc78836004d68c9f8a8e17
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:TYPE_LINKING,TWO_SINGLE_TYPE_IMPORTS_CLASH
+// JOOS2:TYPE_LINKING,TWO_SINGLE_TYPE_IMPORTS_CLASH
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that no two single-type-import declarations clash with each
+ * other.
+ */
+import java.util.List;
+import java.awt.List;
+
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/awt/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/awt/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e253f6d15713cd32c9679d1d1e016d03a941c0d
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/awt/List.java
@@ -0,0 +1,5 @@
+package java.awt;
+public class List {
+    public List() {
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/ArrayList.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/Main.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac7c1091b8283a98bef76e94ff2554119a324184
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/Main.java
@@ -0,0 +1,23 @@
+// JOOS1:TYPE_LINKING,TWO_SINGLE_TYPE_IMPORTS_CLASH
+// JOOS2:TYPE_LINKING,TWO_SINGLE_TYPE_IMPORTS_CLASH
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that no two single-type-import declarations clash with each
+ * other.
+ */
+import java.io.File;
+import java.util.List;
+import java.lang.Object;
+import java.awt.List;
+
+public class Main {
+
+    public Main() {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/awt/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/awt/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e253f6d15713cd32c9679d1d1e016d03a941c0d
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/awt/List.java
@@ -0,0 +1,5 @@
+package java.awt;
+public class List {
+    public List() {
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/io/File.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/io/File.java
new file mode 100644
index 0000000000000000000000000000000000000000..2896897f9669271624feef8be1f3f45257bce096
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/io/File.java
@@ -0,0 +1,5 @@
+package java.io;
+public class File {
+    public File() {
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/util/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithEachOther_MultipleImports/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..719970e5bb00bbc68904b261d3995e03f0fcc371
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/List.java
@@ -0,0 +1,4 @@
+import java.util.List;
+
+public interface List {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/Main.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e933351f24096371b49658d9441f8ce1abd5ed9
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:TYPE_LINKING,SINGLE_TYPE_IMPORT_CLASH_WITH_CLASS
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that no single-type-import declarations clash with the
+ * class (Joos 2: or interface) defined in the same file. (see List.java)
+ */
+public class Main {
+    
+    public Main() {}
+
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/ArrayList.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/ArrayList.java
new file mode 100644
index 0000000000000000000000000000000000000000..69127b4aac590f4b4f72ca049801d146d00a89fc
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/ArrayList.java
@@ -0,0 +1,39 @@
+package java.util;
+public class ArrayList implements List {
+    protected int size = 0;
+    protected Object[] os = new Object[1];
+    public ArrayList() {
+    }
+    public int size() {
+        return size;
+    }
+    public Object get(int index) {
+        return os[index];
+    }
+    public Object set(int index, Object obj) {
+        Object ret = os[index];
+        os[index] = obj;
+        return ret;
+    }
+    public boolean add(Object obj) {
+        if(size >= os.length) {
+            Object[] newos = new Object[os.length*2];
+            for(int i = 0; i < size; i = i + 1) {
+                newos[i] = os[i];
+            }
+            os = newos;
+        }
+        size = size + 1;
+        if(os[size-1] == obj) return false;
+        os[size-1] = obj;
+        return true;
+    }
+    public Object remove(int index) {
+        Object ret = os[index];
+        size = size - 1;
+        for(int i = index; i < size; i = i + 1) {
+            os[i] = os[i+1];
+        }
+        return ret;
+    }
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/List.java b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..85fb05705a7940916c40e4771d37d87ec103dbaf
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_ClashWithInterface/java/util/List.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface List extends Collection {
+    public int size();
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_NonExistingPackage/Main.java b/Tests/A2/Je_3_SingleTypeImport_NonExistingPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..ecb71da124fb304e9bc99a901df951cdc87df3a8
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_NonExistingPackage/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:TYPE_LINKING,NON_EXISTING_PACKAGE,UNRESOLVED_TYPE
+// JOOS2:TYPE_LINKING,NON_EXISTING_PACKAGE,UNRESOLVED_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Type linking:
+ * - Check that all types actually resolve to defined types in the
+ * program or the class library.
+ */
+import java.Util.Collection;
+
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_NonExistingPackage/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_NonExistingPackage/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_NonExistingPackage/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_NonExistingType/Main.java b/Tests/A2/Je_3_SingleTypeImport_NonExistingType/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..315c8643eda858003be45cd8e64bc19ab17275e4
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_NonExistingType/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:TYPE_LINKING,UNRESOLVED_TYPE
+// JOOS2:TYPE_LINKING,UNRESOLVED_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Type linking:
+ * - Check that all types actually resolve to defined types in the
+ * program or the class library.
+ */
+import java.util.collection;
+
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_3_SingleTypeImport_NonExistingType/java/util/Collection.java b/Tests/A2/Je_3_SingleTypeImport_NonExistingType/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_3_SingleTypeImport_NonExistingType/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_3_UndefinedType_DefaultPackageNotVisible/A.java b/Tests/A2/Je_3_UndefinedType_DefaultPackageNotVisible/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..dded1873e900073fc50988bf66856ae1578a584c
--- /dev/null
+++ b/Tests/A2/Je_3_UndefinedType_DefaultPackageNotVisible/A.java
@@ -0,0 +1,4 @@
+package foo;
+public class A extends Main {
+    public A () {}
+}
diff --git a/Tests/A2/Je_3_UndefinedType_DefaultPackageNotVisible/Main.java b/Tests/A2/Je_3_UndefinedType_DefaultPackageNotVisible/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7223eaefba629b5af22c88e7f185ffb40f82cdb4
--- /dev/null
+++ b/Tests/A2/Je_3_UndefinedType_DefaultPackageNotVisible/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:TYPE_LINKING,UNRESOLVED_TYPE
+// JOOS2:TYPE_LINKING,UNRESOLVED_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Typelinking:
+ * - Check that all types actually resolve to defined types in the
+ * program or the class library. (see A.java)
+ */
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_AbstractObjectMethods/A.java b/Tests/A2/Je_4_AbstractMethod_AbstractObjectMethods/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5fbf0aac74e5da93715c56b55c96ba6c2b54a53
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_AbstractObjectMethods/A.java
@@ -0,0 +1,6 @@
+public abstract class A{
+
+    public A(){}
+
+    public abstract String toString();
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_AbstractObjectMethods/Main.java b/Tests/A2/Je_4_AbstractMethod_AbstractObjectMethods/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c4470f5d56075172a80f59d119cf74fff23bc79
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_AbstractObjectMethods/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1, well-formedness constraint 4).
+ **/
+public class Main extends A implements Cloneable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_Declared.java b/Tests/A2/Je_4_AbstractMethod_Declared.java
new file mode 100644
index 0000000000000000000000000000000000000000..8021c5ad9d17d8ddce4dd1894b1372d54bfbb354
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_Declared.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1, well-formedness constraint 4).
+ */
+public class Je_4_AbstractMethod_Declared {
+
+    public Je_4_AbstractMethod_Declared() {}
+    
+    public abstract int foo();
+
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_1/Main.java b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b361759b3a4b6f44e95806058b5dba731bb93b8
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_1/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1). (method run() not implemented)
+ */
+public class Main implements Runnable{
+
+    public Main(){
+    }
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_1/java/lang/Runnable.java b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_1/java/lang/Runnable.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e09c43103ca735d27545dadc5292720be9474b3
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_1/java/lang/Runnable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Runnable {
+    public void run();
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_2/Main.java b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7773c4bad4c3e9d4544323c1b5330b1cb7690bcb
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_2/Main.java
@@ -0,0 +1,25 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1). (method compare(Object, Object) not implemented)
+ */
+import java.util.Comparator;
+
+public class Main implements Comparator{
+
+    public Main(){
+    }
+
+    public boolean equals(Object obj){
+	return true;
+    }
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_2/java/util/Comparator.java b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_2/java/util/Comparator.java
new file mode 100644
index 0000000000000000000000000000000000000000..775e87208f6b105ba0228f16b187c88967c137fe
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromInterface_2/java/util/Comparator.java
@@ -0,0 +1,5 @@
+package java.util;
+
+public interface Comparator {
+    public int compare(Object o1, Object o2);
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/Main.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..d37d8b6ab833bd6f8ad36d75ab84bbb05de54299
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/Main.java
@@ -0,0 +1,98 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1). (Method addAll(Collection) from Set not
+ * implemented) 
+ */
+import java.util.*;
+
+public class Main implements SortedSet{
+    public Main(){}
+
+    public Comparator comparator(){
+	return null;
+    }
+
+    public Object first(){
+	return null;
+    }
+
+    public SortedSet headSet(Object toElement){
+	return null;
+    }
+
+    public Object last(){
+	return null;
+    }
+
+    public SortedSet subSet(Object fromElement, Object toElement){
+	return null;
+    }
+
+    public SortedSet tailSet(Object fromElement){
+	return null;
+    }
+
+    public boolean add(Object o){
+	return false;
+    }
+
+    public void clear(){}
+
+    public boolean contains(Object o){
+	return false;
+    }
+
+    public boolean containsAll(Collection c){
+	return false;
+    }
+
+    public boolean equals(Object o){
+	return false;
+    }
+
+    public int hashCode(){
+	return 0;
+    }
+
+    public boolean isEmpty(){
+	return false;
+    }
+
+    public Iterator iterator(){
+	return null;
+    }
+
+    public boolean remove(Object o){
+	return false;
+    }
+
+    public boolean removeAll(Collection c){
+	return false;
+    }
+
+    public boolean retainAll(Collection c){
+	return false;
+    }
+
+    public int size(){
+	return 0;
+    }
+
+    public Object[] toArray(){
+	return null;
+    }
+
+    public Object[] toArray(Object[] a){
+	return null;
+    }
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Collection.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Collection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be463e2a558b848d566ba3b86fdfbf3cd50ea2f
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Collection.java
@@ -0,0 +1,4 @@
+package java.util;
+
+public interface Collection {
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Comparator.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Comparator.java
new file mode 100644
index 0000000000000000000000000000000000000000..775e87208f6b105ba0228f16b187c88967c137fe
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Comparator.java
@@ -0,0 +1,5 @@
+package java.util;
+
+public interface Comparator {
+    public int compare(Object o1, Object o2);
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Iterator.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Iterator.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3ceee1bebc73fc62667a4dce70301dc8a6f9257
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Iterator.java
@@ -0,0 +1,6 @@
+package java.util;
+public interface Iterator {
+        public void remove();
+        public boolean hasNext();
+        public Object next();
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Set.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Set.java
new file mode 100644
index 0000000000000000000000000000000000000000..f106e7533984b05c9cb43b0fc6af5ed8ce8f7438
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/Set.java
@@ -0,0 +1,4 @@
+package java.util;
+public interface Set extends Collection {
+    public boolean addAll(Collection c);
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/SortedSet.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/SortedSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..629e5bc5827e15f83c9c94d4e5e0398dd98ff1eb
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperInterface/java/util/SortedSet.java
@@ -0,0 +1,3 @@
+package java.util;
+public interface SortedSet extends Set {
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclass/Main.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..256716ba760f31020895b3f8d30fb247341e0a42
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclass/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1, well-formedness constraint 4).
+ */
+public class Main extends Number{
+
+    public Main() {}
+
+    public static int test(){
+	return 123;
+    }
+   
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/Foo.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f707b72860f4b8540c8ed7bada8dd8c8d92af8fc
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/Foo.java
@@ -0,0 +1,12 @@
+/**
+ * Hierarchy check:
+
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1). (Method addAll(Collection) from Set not
+ * implemented) 
+ */
+public abstract class Foo implements Runnable{
+
+    public Foo(){}
+
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/Main.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..223f7d07f2e5e1e13f7bed94737e4c0413dfc398
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A class that has (declares or inherits) any abstract methods must
+ * be abstract (8.1.1.1). (Method run() from Runnable not
+ * implemented) 
+ */
+public class Main extends Foo{
+    
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/java/lang/Runnable.java b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/java/lang/Runnable.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e09c43103ca735d27545dadc5292720be9474b3
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_InheritFromSuperclassInterface/java/lang/Runnable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Runnable {
+    public void run();
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_NotAllImplemented/Main.java b/Tests/A2/Je_4_AbstractMethod_NotAllImplemented/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..061fd4257c35d267307c880205c2009600128151
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_NotAllImplemented/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/* Hierarchy:
+ * A class that has (declares or inherits) any abstract methods must be abstract
+ * (8.1.1.1, well-formedness constraint 4).
+ * 
+ * int compareTo(Object o) is still abstract
+ */
+
+public class Main implements Comparable {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_AbstractMethod_NotAllImplemented/java/lang/Comparable.java b/Tests/A2/Je_4_AbstractMethod_NotAllImplemented/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/Je_4_AbstractMethod_NotAllImplemented/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_ClassExtendsCyclicClass/A.java b/Tests/A2/Je_4_ClassExtendsCyclicClass/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..def05bf4210ca092e4c4e6dc530d41c3f490742a
--- /dev/null
+++ b/Tests/A2/Je_4_ClassExtendsCyclicClass/A.java
@@ -0,0 +1,3 @@
+public class A extends B {
+    public A() {}
+}
diff --git a/Tests/A2/Je_4_ClassExtendsCyclicClass/B.java b/Tests/A2/Je_4_ClassExtendsCyclicClass/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..730a6f419b65a7ab4b57484d32e3fecba165c7bd
--- /dev/null
+++ b/Tests/A2/Je_4_ClassExtendsCyclicClass/B.java
@@ -0,0 +1,3 @@
+public class B extends C {
+    public B() {}
+}
diff --git a/Tests/A2/Je_4_ClassExtendsCyclicClass/C.java b/Tests/A2/Je_4_ClassExtendsCyclicClass/C.java
new file mode 100644
index 0000000000000000000000000000000000000000..47e4900f58f282ab6991926f366834d12dbafaf6
--- /dev/null
+++ b/Tests/A2/Je_4_ClassExtendsCyclicClass/C.java
@@ -0,0 +1,3 @@
+public class C extends B {
+    public C() {}
+}
diff --git a/Tests/A2/Je_4_ClassExtendsCyclicClass/Main.java b/Tests/A2/Je_4_ClassExtendsCyclicClass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fbb55d1450ca05ab4e5245c4ae4564e6dfac20b
--- /dev/null
+++ b/Tests/A2/Je_4_ClassExtendsCyclicClass/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:HIERARCHY,CIRCULAR_INHERITANCE
+// JOOS2:HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+// 
+/* HierarchyCheck:
+ * A class or interface must not depend on itself
+ * (8.1.3, 9.1.2, well-formedness constraint 1).
+ * 
+ * A extends B 
+ * B extends C
+ * C extends B
+ */
+
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_DuplicateConstructor_Args.java b/Tests/A2/Je_4_DuplicateConstructor_Args.java
new file mode 100644
index 0000000000000000000000000000000000000000..54e01eda18b20fee4a84beedeab1e748149b8a23
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateConstructor_Args.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,DUPLICATE_CONSTRUCTOR
+// JOOS2:HIERARCHY,DUPLICATE_CONSTRUCTOR
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class must not declare two constructors with the same parameter
+ * types (8.8.2, simple constraint 5).
+ */
+public class Je_4_DuplicateConstructor_Args {
+
+    public Je_4_DuplicateConstructor_Args(int foo) { }
+
+    public Je_4_DuplicateConstructor_Args(int bar) { }
+
+    public static int test() { 
+	return 123; 
+    }
+}
diff --git a/Tests/A2/Je_4_DuplicateConstructor_ArrayArgs.java b/Tests/A2/Je_4_DuplicateConstructor_ArrayArgs.java
new file mode 100644
index 0000000000000000000000000000000000000000..baca168218682d9e0fd1add8dde5d31801230a53
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateConstructor_ArrayArgs.java
@@ -0,0 +1,17 @@
+// JOOS1:HIERARCHY,DUPLICATE_CONSTRUCTOR
+// JOOS2:HIERARCHY,DUPLICATE_CONSTRUCTOR
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class must not declare two constructors with the same parameter
+ * types (8.8.2, simple constraint 5).
+ */
+public class Je_4_DuplicateConstructor_ArrayArgs {
+    public Je_4_DuplicateConstructor_ArrayArgs(String[] a) {}
+    public Je_4_DuplicateConstructor_ArrayArgs(String[] b) {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_DuplicateConstructor_NoArgs.java b/Tests/A2/Je_4_DuplicateConstructor_NoArgs.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a20e116e4331149fe7f9c4600d59ad15eee836e
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateConstructor_NoArgs.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,DUPLICATE_CONSTRUCTOR
+// JOOS2:HIERARCHY,DUPLICATE_CONSTRUCTOR
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class must not declare two constructors with the same parameter
+ * types (8.8.2, simple constraint 5).
+ */
+public class Je_4_DuplicateConstructor_NoArgs {
+
+    public Je_4_DuplicateConstructor_NoArgs() { }
+
+    public Je_4_DuplicateConstructor_NoArgs() { }
+
+    public static int test() { 
+	return 123; 
+    }
+}
diff --git a/Tests/A2/Je_4_DuplicateMethodDeclare_Args.java b/Tests/A2/Je_4_DuplicateMethodDeclare_Args.java
new file mode 100644
index 0000000000000000000000000000000000000000..edcc00d01f85429043365652af2b15e4159f91e6
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateMethodDeclare_Args.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,DUPLICATE_METHOD
+// JOOS2:HIERARCHY,DUPLICATE_METHOD
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class or interface must not declare two methods with the same
+ * name and parameter types (8.4, 9.4, well-formedness constraint 2).
+ */
+public class Je_4_DuplicateMethodDeclare_Args {
+
+    public Je_4_DuplicateMethodDeclare_Args() { }
+
+    public static int test() { return 123; }
+
+    public void foo(int p) {}
+
+    public void foo(int a) {}
+}
diff --git a/Tests/A2/Je_4_DuplicateMethodDeclare_ArrayArgs.java b/Tests/A2/Je_4_DuplicateMethodDeclare_ArrayArgs.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1fca1754d46055745175d7ccf177e4b2ef3359e
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateMethodDeclare_ArrayArgs.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,DUPLICATE_METHOD
+// JOOS2:HIERARCHY,DUPLICATE_METHOD
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class or interface must not declare two methods with the same
+ * name and parameter types (8.4, 9.4, well-formedness constraint 2).
+ */
+public class Je_4_DuplicateMethodDeclare_ArrayArgs {
+    public Je_4_DuplicateMethodDeclare_ArrayArgs() {}
+    
+    public void method(String[] a) {}
+    public void method(String[] b) {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_DuplicateMethodDeclare_DifferentReturnTypes.java b/Tests/A2/Je_4_DuplicateMethodDeclare_DifferentReturnTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e7d1f5cb457e38584b36f9434144dce42b93dea
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateMethodDeclare_DifferentReturnTypes.java
@@ -0,0 +1,25 @@
+// JOOS1:HIERARCHY,DUPLICATE_METHOD
+// JOOS2:HIERARCHY,DUPLICATE_METHOD
+// JAVAC:UNKNOWN
+// 
+/**
+ * - Hierarchy check:
+ * - A class or interface must not declare two methods with the same
+ * name and parameter types (8.4, 9.4).  
+ */
+public class Je_4_DuplicateMethodDeclare_DifferentReturnTypes {
+
+    public Je_4_DuplicateMethodDeclare_DifferentReturnTypes() {}
+    
+    public int foo(String s) {
+        return 7;
+    }
+    
+    public String foo(String s) {
+        return "7";
+    }
+    
+    public static int test() {
+        return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_DuplicateMethodDeclare_NoArgs.java b/Tests/A2/Je_4_DuplicateMethodDeclare_NoArgs.java
new file mode 100644
index 0000000000000000000000000000000000000000..232189f175d1e909f9847800865807ba09547711
--- /dev/null
+++ b/Tests/A2/Je_4_DuplicateMethodDeclare_NoArgs.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,DUPLICATE_METHOD
+// JOOS2:HIERARCHY,DUPLICATE_METHOD
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class or interface must not declare two methods with the same
+ * name and parameter types (8.4, 9.4, well-formedness constraint 2).
+ */
+public class Je_4_DuplicateMethodDeclare_NoArgs {
+
+    public Je_4_DuplicateMethodDeclare_NoArgs() { }
+
+    public static int test() { 
+	return 123; 
+    }
+
+    public void foo() {}
+
+    public void foo() {}
+}
diff --git a/Tests/A2/Je_4_ExtendFinal.java b/Tests/A2/Je_4_ExtendFinal.java
new file mode 100644
index 0000000000000000000000000000000000000000..d58194bb4e432a921988d946716aefadf4ef6a99
--- /dev/null
+++ b/Tests/A2/Je_4_ExtendFinal.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,EXTENDS_FINAL_CLASS
+// JOOS2:HIERARCHY,EXTENDS_FINAL_CLASS
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class must not extend a final class (8.1.1.2, 8.1.3, simple
+ * constraint 4).
+ */
+public class Je_4_ExtendFinal extends Integer {
+
+    public Je_4_ExtendFinal() {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ExtendNonClass/Main.java b/Tests/A2/Je_4_ExtendNonClass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..28597818cd587d1dfaecd5cfda4c9fcc33a00497
--- /dev/null
+++ b/Tests/A2/Je_4_ExtendNonClass/Main.java
@@ -0,0 +1,16 @@
+// JOOS1:HIERARCHY,EXTENDS_NON_CLASS
+// JOOS2:HIERARCHY,EXTENDS_NON_CLASS
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - The type mentioned in the extends clause of a class must be a class (8.1.3, simple constraint 1).
+ */
+public class Main extends Cloneable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_FinalHide/Main.java b/Tests/A2/Je_4_FinalHide/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb67f88a39d47089bcb4fcd51ada1693e8aadec6
--- /dev/null
+++ b/Tests/A2/Je_4_FinalHide/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,REPLACE_FINAL
+// JOOS2:HIERARCHY,REPLACE_FINAL
+// JAVAC:UNKNOWN
+// 
+/* JLS 8.4.3.3:
+ * It is a compile-time error to attempt to override or hide a final method.
+ */
+
+import javax.swing.text.*;
+
+public class Main extends Utilities {
+	public Main() {}
+	
+    public int getRowStart(JTextComponent c, int offs) {
+    	return 0;
+    }
+    
+    public static int test() {
+    	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_FinalHide/javax/swing/text/JTextComponent.java b/Tests/A2/Je_4_FinalHide/javax/swing/text/JTextComponent.java
new file mode 100644
index 0000000000000000000000000000000000000000..b90b3f2d34d5593b77ad5193e9e3d45111db9b88
--- /dev/null
+++ b/Tests/A2/Je_4_FinalHide/javax/swing/text/JTextComponent.java
@@ -0,0 +1,5 @@
+package javax.swing.text;
+public class JTextComponent {
+    public JTextComponent() {
+    }
+}
diff --git a/Tests/A2/Je_4_FinalHide/javax/swing/text/Utilities.java b/Tests/A2/Je_4_FinalHide/javax/swing/text/Utilities.java
new file mode 100644
index 0000000000000000000000000000000000000000..77edca0a11aa0b6cacd3f43084c1ccb010d6bf54
--- /dev/null
+++ b/Tests/A2/Je_4_FinalHide/javax/swing/text/Utilities.java
@@ -0,0 +1,8 @@
+package javax.swing.text;
+public class Utilities {
+    public Utilities() {
+    }
+    public final int getRowStart(javax.swing.text.JTextComponent a, int b) {
+        return 1;
+    }
+}
diff --git a/Tests/A2/Je_4_FinalOverride_DifferentReturnTypes.java b/Tests/A2/Je_4_FinalOverride_DifferentReturnTypes.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd6cce321eb36934f7f2348ae6d5748a6e017ed0
--- /dev/null
+++ b/Tests/A2/Je_4_FinalOverride_DifferentReturnTypes.java
@@ -0,0 +1,22 @@
+// JOOS1:HIERARCHY,REPLACE_FINAL,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,REPLACE_FINAL,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+/**  
+ * Hierarchy:
+ * - A method must not override a final method (8.4.3.3,
+ * well-formedness constraint 9).  
+ */
+public class Je_4_FinalOverride_DifferentReturnTypes {
+
+    public Je_4_FinalOverride_DifferentReturnTypes(){}
+
+    public Object getClass(){
+	return new Object();
+    }
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_FinalOverride_SameSignature.java b/Tests/A2/Je_4_FinalOverride_SameSignature.java
new file mode 100644
index 0000000000000000000000000000000000000000..310b58e86b1080bf0ba7b9e7a51c10328996df5d
--- /dev/null
+++ b/Tests/A2/Je_4_FinalOverride_SameSignature.java
@@ -0,0 +1,22 @@
+// JOOS1:HIERARCHY,REPLACE_FINAL
+// JOOS2:HIERARCHY,REPLACE_FINAL
+// JAVAC:UNKNOWN
+// 
+/**  
+ * Hierarchy:
+ * - A method must not override a final method (8.4.3.3,
+ * well-formedness constraint 9).  
+ */
+public class Je_4_FinalOverride_SameSignature {
+
+    public Je_4_FinalOverride_SameSignature(){}
+
+    public Class getClass(){
+	return new Object().getClass();
+    }
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_Hide_DifferentReturnTypes/A.java b/Tests/A2/Je_4_Hide_DifferentReturnTypes/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc4ff19f1496c45e78ac80c46221c676f65b0ccc
--- /dev/null
+++ b/Tests/A2/Je_4_Hide_DifferentReturnTypes/A.java
@@ -0,0 +1,5 @@
+public class A {
+    public A() {}
+    
+    public static void test() {}
+}
diff --git a/Tests/A2/Je_4_Hide_DifferentReturnTypes/Main.java b/Tests/A2/Je_4_Hide_DifferentReturnTypes/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..d14ad104e2a3ba063984ccfe0cb3d389327a8ab2
--- /dev/null
+++ b/Tests/A2/Je_4_Hide_DifferentReturnTypes/Main.java
@@ -0,0 +1,12 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+public class Main extends A {
+    public Main() {}
+    
+    /* HierarchyCheck => return type incompatible with A.test() (JLS 8.4.6.3) */ 
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_ImplementNonInterface_Class.java b/Tests/A2/Je_4_ImplementNonInterface_Class.java
new file mode 100644
index 0000000000000000000000000000000000000000..e52eb87148a286a43f52490b0812e3466442a2a6
--- /dev/null
+++ b/Tests/A2/Je_4_ImplementNonInterface_Class.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,IMPLEMENTS_NON_INTERFACE
+// JOOS2:HIERARCHY,IMPLEMENTS_NON_INTERFACE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - All types mentioned in the implements clause of a class must be
+ * interfaces (8.1.4, simple constraint 2).
+ */
+public class Je_4_ImplementNonInterface_Class implements Object {
+
+    public Je_4_ImplementNonInterface_Class() {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ImplementNonInterface_InterfaceAndClass/Main.java b/Tests/A2/Je_4_ImplementNonInterface_InterfaceAndClass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..4cd7289e1d7c49c8e59ed60e72b823a71d05413a
--- /dev/null
+++ b/Tests/A2/Je_4_ImplementNonInterface_InterfaceAndClass/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,IMPLEMENTS_NON_INTERFACE
+// JOOS2:HIERARCHY,IMPLEMENTS_NON_INTERFACE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - All types mentioned in the implements clause of a class must be
+ * interfaces (8.1.4, simple constraint 2)
+ */
+public class Main implements Cloneable, Object{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ImplementTwice_QualifiedName/Main.java b/Tests/A2/Je_4_ImplementTwice_QualifiedName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8b6844fd1a74449eeb72552819bb23e9407d3ab
--- /dev/null
+++ b/Tests/A2/Je_4_ImplementTwice_QualifiedName/Main.java
@@ -0,0 +1,22 @@
+// JOOS1:HIERARCHY,REPEATED_INTERFACE
+// JOOS2:HIERARCHY,REPEATED_INTERFACE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - An interface must not be mentioned more than once in the same
+ * implements clause of a class (8.1.4, simple constraint 3).
+ */
+import java.io.*;
+
+public class Main implements Runnable, Serializable, Cloneable, java.io.Serializable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+    public void run(){}
+    
+}
diff --git a/Tests/A2/Je_4_ImplementTwice_QualifiedName/java/lang/Runnable.java b/Tests/A2/Je_4_ImplementTwice_QualifiedName/java/lang/Runnable.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e09c43103ca735d27545dadc5292720be9474b3
--- /dev/null
+++ b/Tests/A2/Je_4_ImplementTwice_QualifiedName/java/lang/Runnable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Runnable {
+    public void run();
+}
diff --git a/Tests/A2/Je_4_ImplementTwice_SimpleName/Main.java b/Tests/A2/Je_4_ImplementTwice_SimpleName/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..47e8304e7b8a7c7659e0e8b7db030bef3939ab9a
--- /dev/null
+++ b/Tests/A2/Je_4_ImplementTwice_SimpleName/Main.java
@@ -0,0 +1,22 @@
+// JOOS1:HIERARCHY,REPEATED_INTERFACE
+// JOOS2:HIERARCHY,REPEATED_INTERFACE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - An interface must not be mentioned more than once in the same
+ * implements clause of a class (8.1.4, simple constraint 3).
+ */
+import java.io.Serializable;
+
+public class Main implements Runnable, Serializable, Cloneable, Serializable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+    public void run(){}
+    
+}
diff --git a/Tests/A2/Je_4_ImplementTwice_SimpleName/java/lang/Runnable.java b/Tests/A2/Je_4_ImplementTwice_SimpleName/java/lang/Runnable.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e09c43103ca735d27545dadc5292720be9474b3
--- /dev/null
+++ b/Tests/A2/Je_4_ImplementTwice_SimpleName/java/lang/Runnable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Runnable {
+    public void run();
+}
diff --git a/Tests/A2/Je_4_InheritShadowsNonabstract/A.java b/Tests/A2/Je_4_InheritShadowsNonabstract/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..13e4aa4feea0f21257abe4d97d3af32e632d4df9
--- /dev/null
+++ b/Tests/A2/Je_4_InheritShadowsNonabstract/A.java
@@ -0,0 +1,7 @@
+public class A {
+    public A() {}
+    
+    public int m() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_InheritShadowsNonabstract/B.java b/Tests/A2/Je_4_InheritShadowsNonabstract/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0606a9b5926ed109200190bf8ebf23907b402b0
--- /dev/null
+++ b/Tests/A2/Je_4_InheritShadowsNonabstract/B.java
@@ -0,0 +1,5 @@
+public abstract class B extends A {
+    public B() {}
+    
+    public abstract int m();
+}
diff --git a/Tests/A2/Je_4_InheritShadowsNonabstract/C.java b/Tests/A2/Je_4_InheritShadowsNonabstract/C.java
new file mode 100644
index 0000000000000000000000000000000000000000..47e4900f58f282ab6991926f366834d12dbafaf6
--- /dev/null
+++ b/Tests/A2/Je_4_InheritShadowsNonabstract/C.java
@@ -0,0 +1,3 @@
+public class C extends B {
+    public C() {}
+}
diff --git a/Tests/A2/Je_4_InheritShadowsNonabstract/Main.java b/Tests/A2/Je_4_InheritShadowsNonabstract/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b2fadb1065199275d386a5d8d792701fe98f63a
--- /dev/null
+++ b/Tests/A2/Je_4_InheritShadowsNonabstract/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JOOS2:HIERARCHY,CLASS_MUST_BE_ABSTRACT
+// JAVAC:UNKNOWN
+// 
+/* Hierarchy:
+ * A class that has (declares or inherits) any abstract methods must be abstract
+ * (8.1.1.1, well-formedness constraint 4).
+ * 
+ * A declares m() as non-abstract
+ * B extends A and declares m() as abstract
+ * C extends B and does not declare m() => m() is still abstract
+ */
+
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	C c = new C();
+	return c.m();
+    }
+}
diff --git a/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/A.java b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..304a35af85c64ebf9a97efa0506f4510b4f3baad
--- /dev/null
+++ b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/A.java
@@ -0,0 +1,2 @@
+public interface A extends B {
+}
diff --git a/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/B.java b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..7348d37e5d8a9cf39c522bc5909ccb21b335055d
--- /dev/null
+++ b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/B.java
@@ -0,0 +1,2 @@
+public interface B extends C {
+}
diff --git a/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/C.java b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/C.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9f1f42b60f71292560d2c7d102f97b5b72e5cda
--- /dev/null
+++ b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/C.java
@@ -0,0 +1,2 @@
+public interface C extends B {
+}
diff --git a/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/Main.java b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cca13d4938cc838d894c96fadb7a3377e9866f3
--- /dev/null
+++ b/Tests/A2/Je_4_InterfaceExtendsCyclicInterface/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+// JOOS2:HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+// 
+/* HierarchyCheck:
+ * A class or interface must not depend on itself
+ * (8.1.3, 9.1.2, well-formedness constraint 1).
+ * 
+ * A extends B 
+ * B extends C
+ * C extends B
+ */
+
+public class Main {
+    public Main() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_Interface_FinalMethodFromObject/A.java b/Tests/A2/Je_4_Interface_FinalMethodFromObject/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..c20abeb17acd61388307b2f5e79c0f952a6f9045
--- /dev/null
+++ b/Tests/A2/Je_4_Interface_FinalMethodFromObject/A.java
@@ -0,0 +1,2 @@
+public interface A {
+}
diff --git a/Tests/A2/Je_4_Interface_FinalMethodFromObject/B.java b/Tests/A2/Je_4_Interface_FinalMethodFromObject/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..8830abd2d93cb6a3aff242f7cafd25403539484f
--- /dev/null
+++ b/Tests/A2/Je_4_Interface_FinalMethodFromObject/B.java
@@ -0,0 +1,3 @@
+public interface B extends A {
+	public Class getClass();
+}
diff --git a/Tests/A2/Je_4_Interface_FinalMethodFromObject/Main.java b/Tests/A2/Je_4_Interface_FinalMethodFromObject/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..2833ff0687feeb8898753a0293f518c88ac257c2
--- /dev/null
+++ b/Tests/A2/Je_4_Interface_FinalMethodFromObject/Main.java
@@ -0,0 +1,11 @@
+//JOOS1:PARSER_WEEDER,PARSER_EXCEPTION,JOOS1_INTERFACE
+//JOOS2:HIERARCHY,REPLACE_FINAL
+//JAVAC:UNKNOWN
+
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypesFromInterface/Main.java b/Tests/A2/Je_4_Override_DifferentReturnTypesFromInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a343a94f9af4821bdce4c1d42c850557c64bb16b
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypesFromInterface/Main.java
@@ -0,0 +1,23 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A class or interface must not have (declare or inherit) two
+ * methods with the same name and parameter types but different return
+ * types (8.1.1.1, 8.4, 8.4.2, 8.4.6.3, 8.4.6.4, 9.2, 9.4.1). (Method
+ * compareTo(Object) must return type int)
+ */
+public abstract class Main implements Comparable {
+    
+    public Main(){}
+
+    public boolean compareTo(Object o){
+	return true;
+    }
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypesFromInterface/java/lang/Comparable.java b/Tests/A2/Je_4_Override_DifferentReturnTypesFromInterface/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypesFromInterface/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/Foo.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..a0568cdd1dd7411218998239a850f1e2fceda782
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/Foo.java
@@ -0,0 +1,6 @@
+public abstract class Foo{
+
+    public Foo(){}
+
+    public abstract byte compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/Main.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..710d08f4cb9c8f0557decebbe685a714d7ed1bef
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class or interface must not have (declare or inherit) two
+ * methods with the same name and parameter types but different return
+ * types (8.1.1.1, 8.4, 8.4.2, 8.4.6.3, 8.4.6.4, 9.2, 9.4.1). 
+ */
+public abstract class Main extends Foo implements Comparable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/java/lang/Comparable.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_AbstractFromSuperclassAndInterface/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/Foo.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..40fe4833b7fba1c1dbec788204c2b8e62b81ccf3
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/Foo.java
@@ -0,0 +1,8 @@
+public class Foo {
+
+    public Foo(){}
+
+    public int run(){
+	return 0;
+    }
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/Main.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1b3b308e4cac1f58c4f7e169ed9693f240cc90e
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class or interface must not have (declare or inherit) two
+ * methods with the same name and parameter types but different return
+ * types (8.1.1.1, 8.4, 8.4.2, 8.4.6.3, 8.4.6.4, 9.2, 9.4.1). (Method
+ * run() must return type void, but inherited method run() returns int)
+ */
+public abstract class Main extends Foo implements Runnable {
+    
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/java/lang/Runnable.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/java/lang/Runnable.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e09c43103ca735d27545dadc5292720be9474b3
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface/java/lang/Runnable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Runnable {
+    public void run();
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/Foo.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f924f906933ff024b5062bc5112659a122e27ab9
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/Foo.java
@@ -0,0 +1,8 @@
+public class Foo {
+
+    public Foo(){}
+
+    public String compareTo(Object o){
+	return "0";
+    }
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/Main.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9f54bc57a5a3091bef27a54bd1b9bb016597f8e
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/Main.java
@@ -0,0 +1,20 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class or interface must not have (declare or inherit) two
+ * methods with the same name and parameter types but different return
+ * types (8.1.1.1, 8.4, 8.4.2, 8.4.6.3, 8.4.6.4, 9.2, 9.4.1). (Method
+ * compareTo(Object) must return type int, but inherited method 
+ * compareTo() returns String)
+ */
+public abstract class Main extends Foo implements Comparable {
+    
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/java/lang/Comparable.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_FromSuperclassAndInterface_NonVoid/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/A.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..567fc54278763e93c28cd15b10d77d2c803fe3ce
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/A.java
@@ -0,0 +1,3 @@
+public interface A {
+    public int foo();
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/B.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fa2d0087b9a7eb3d8ccd9e4dc7c154dcfd5528b
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/B.java
@@ -0,0 +1,3 @@
+public interface B {
+    public Object foo();
+}
diff --git a/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/Main.java b/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6d9a4a57ea99f2ae0717f800617569c7c54d485
--- /dev/null
+++ b/Tests/A2/Je_4_Override_DifferentReturnTypes_TwoInterfaces/Main.java
@@ -0,0 +1,33 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE
+// JAVAC:UNKNOWN
+// 
+/*
+ * Hierarchy:
+ * - A class or interface must not contain (declare or inherit) two
+ * methods with the same name and parameter types but different return
+ * types (8.1.1.1, 8.4, 8.4.2, 8.4.6.3, 8.4.6.4, 9.2, 9.4.1,
+ * well-formedness constraint 3).
+ *
+ * Interfaces javax.naming.Name and javax.naming.directory.Attribute are
+ * incompatible; both define getAll(), but with unrelated return
+ * types.
+ *
+ *
+ *  javax.naming.directory.Attribute                  javax.naming.Name
+ *	  interface                                     interface
+ *  method NamingEnumeration getAll             method Enumeration getAll
+ *	      \                                         /
+ *		\                                       /
+ *				   foo
+ *			  abstract 
+*/
+public abstract class Main implements A, B {
+
+    public Main () {}
+
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_ProtectedHide_FromSuperclass/A.java b/Tests/A2/Je_4_ProtectedHide_FromSuperclass/A.java
new file mode 100644
index 0000000000000000000000000000000000000000..833220a88c0eaf070dd5bb7a4373006ee46f3d01
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedHide_FromSuperclass/A.java
@@ -0,0 +1,5 @@
+public class A {
+    public A() {}
+    
+    public static void method() {}
+}
diff --git a/Tests/A2/Je_4_ProtectedHide_FromSuperclass/Main.java b/Tests/A2/Je_4_ProtectedHide_FromSuperclass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dabaf511ede9a19d887ba83655789f698df720d
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedHide_FromSuperclass/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A protected method must not hide a public method (8.4.6.3,
+ * well-formedness constraint 7).
+ **/
+public class Main extends A {
+    public Main() {}
+    
+    protected static void method() {}
+    
+    public static int test() {
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_Abstract/Foo.java b/Tests/A2/Je_4_ProtectedOverride_Abstract/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..7121b56ec4e87cafb1c1674ca9afee2b4c2c64d6
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_Abstract/Foo.java
@@ -0,0 +1,5 @@
+public abstract class Foo {
+	public Foo() {}
+	
+	public abstract void method();
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_Abstract/Main.java b/Tests/A2/Je_4_ProtectedOverride_Abstract/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..cae479a1a8bd5f60aff7028ffc7587e61f19bbb8
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_Abstract/Main.java
@@ -0,0 +1,13 @@
+//JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+//JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+//JAVAC:UNKNOWN
+public abstract class Main extends Foo {
+	public Main() {}
+	
+	// this overrides a public method from Foo
+	protected abstract void method();
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_DifferentThrows/Foo.java b/Tests/A2/Je_4_ProtectedOverride_DifferentThrows/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a2a1f0fc688439dbb7ac7d5a6683cd29ba3e787
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_DifferentThrows/Foo.java
@@ -0,0 +1,5 @@
+public class Foo {
+	public Foo() {}
+	
+	public void method() throws java.io.IOException {}
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_DifferentThrows/Main.java b/Tests/A2/Je_4_ProtectedOverride_DifferentThrows/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..885b924cebbc51bba20f59d3cfac3ce585f68276
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_DifferentThrows/Main.java
@@ -0,0 +1,13 @@
+//JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+//JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+//JAVAC:UNKNOWN
+public class Main extends Foo {
+	public Main() {}
+	
+	// this overrides a public method from Foo
+	protected void method() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_Exception_Clone/Main.java b/Tests/A2/Je_4_ProtectedOverride_Exception_Clone/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..53a5a58f4f534d527d695f3d6484b8e67ace8008
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_Exception_Clone/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A protected method must not override a public method (8.4.6.3,
+ * well-formedness constraint 7). (protected method clone() inherited 
+ * from superclass java.lang.Object, but interface javax.naming.Name
+ * requires method clone() to be public).
+ */
+public abstract class Main 
+    implements javax.naming.Name {
+
+    public Main(){}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_Exception_Clone/javax/naming/Name.java b/Tests/A2/Je_4_ProtectedOverride_Exception_Clone/javax/naming/Name.java
new file mode 100644
index 0000000000000000000000000000000000000000..56c4cfe088c9efef0e568b4c860882bbe2052858
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_Exception_Clone/javax/naming/Name.java
@@ -0,0 +1,4 @@
+package javax.naming;
+public interface Name {
+    public Object clone();
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromInterface/Main.java b/Tests/A2/Je_4_ProtectedOverride_FromInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f6acd5008961df7eda6a41f26e7451ace174122
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromInterface/Main.java
@@ -0,0 +1,22 @@
+// JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A protected method must not override a public method (8.4.6.3,
+ * well-formedness constraint 7).  
+ */
+public class Main implements Comparable {
+
+    public Main() {}
+    
+    protected int compareTo(Object o) {
+	return 0;
+    }
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromInterface/java/lang/Comparable.java b/Tests/A2/Je_4_ProtectedOverride_FromInterface/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromInterface/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromSuperclass/Main.java b/Tests/A2/Je_4_ProtectedOverride_FromSuperclass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..a131bac5513940fdad34f121d0ac3127e552e677
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromSuperclass/Main.java
@@ -0,0 +1,19 @@
+// JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A protected method must not override a public method (8.4.6.3,
+ * well-formedness constraint 7).
+ **/
+public class Main extends Thread{
+
+    public Main(){}
+
+    protected void interrupt(){}
+
+    public static int test(){
+	return 123;
+    }
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromSuperclass/java/lang/Thread.java b/Tests/A2/Je_4_ProtectedOverride_FromSuperclass/java/lang/Thread.java
new file mode 100644
index 0000000000000000000000000000000000000000..24930676d54fbb2fb9947e8ec552aebcb7da1f6d
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromSuperclass/java/lang/Thread.java
@@ -0,0 +1,11 @@
+package java.lang;
+
+public class Thread {
+    public Thread() {
+    }
+    public void interrupt() {
+    }
+    public static int activeCount() {
+        return 1;
+    }
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/Foo.java b/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/Foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..adf9f677059d61cd3e1150488ee8d1beb46ce53b
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/Foo.java
@@ -0,0 +1,9 @@
+public abstract class Foo{
+    
+    public Foo(){}
+
+    protected int compareTo(Object o){
+	return 0;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/Main.java b/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..431c2a43dbe37e0cc30cb363877d80e584e7c953
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/Main.java
@@ -0,0 +1,18 @@
+// JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A protected method must not override a public method (8.4.6.3,
+ * well-formedness constraint 7).
+ */
+public abstract class Main extends Foo implements Comparable{
+
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/java/lang/Comparable.java b/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/java/lang/Comparable.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b4d1a9bc2c2268781be9257344534da360ffddf
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_FromSuperclassAndInterface/java/lang/Comparable.java
@@ -0,0 +1,5 @@
+package java.lang;
+
+public interface Comparable {
+    public int compareTo(Object o);
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/B.java b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/B.java
new file mode 100644
index 0000000000000000000000000000000000000000..b087002f45ee7c90d78ecad87f5994bac956d28b
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/B.java
@@ -0,0 +1,7 @@
+public abstract class B{
+
+    public B() {}
+    
+    protected abstract void remove();
+}
+
diff --git a/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/C.java b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/C.java
new file mode 100644
index 0000000000000000000000000000000000000000..47b451a1cb28167c8ab5094e919b7d0e71d55c34
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/C.java
@@ -0,0 +1,11 @@
+public abstract class C extends B implements java.util.Iterator {
+    public C() {}
+
+    public boolean hasNext() {
+	return true;
+    }
+
+    public Object next() {
+	return new Object();
+    }
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/Main.java b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..443ec42a45e02c1ea67939d33d0dcf2e824be029
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/Main.java
@@ -0,0 +1,22 @@
+// JOOS1:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JOOS2:HIERARCHY,PROTECTED_REPLACE_PUBLIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A protected method must not override a public method (8.4.6.3,
+ * well-formedness constraint 7).
+ */
+public class Main extends C{
+
+    public Main() {}
+
+    protected void remove() {
+	System.out.println("not so good... actually wrong");
+    }
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/java/util/Iterator.java b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/java/util/Iterator.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3ceee1bebc73fc62667a4dce70301dc8a6f9257
--- /dev/null
+++ b/Tests/A2/Je_4_ProtectedOverride_TwoVersionsFromSuperclass/java/util/Iterator.java
@@ -0,0 +1,6 @@
+package java.util;
+public interface Iterator {
+        public void remove();
+        public boolean hasNext();
+        public Object next();
+}
diff --git a/Tests/A2/Je_4_ReplaceInstance_FromSuperclass.java b/Tests/A2/Je_4_ReplaceInstance_FromSuperclass.java
new file mode 100644
index 0000000000000000000000000000000000000000..752b1704bc9af30ec0e4b29d5d31fad15f066fcd
--- /dev/null
+++ b/Tests/A2/Je_4_ReplaceInstance_FromSuperclass.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,STATIC_REPLACE_NONSTATIC
+// JOOS2:HIERARCHY,STATIC_REPLACE_NONSTATIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy: 
+ * - A static method must not replace an instance method * (8.4.6.2,
+ * well-formedness constraint 5).
+ */
+public class Je_4_ReplaceInstance_FromSuperclass{
+
+    public Je_4_ReplaceInstance_FromSuperclass(){}
+
+    public static int test(){
+	return 123;
+    }
+
+    public static boolean equals(Object o){
+	return true;
+    }
+}
diff --git a/Tests/A2/Je_4_ReplaceStatic_FromSuperclass/Main.java b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1e770c3d24cab22d6f5c230b5b62eeb80275359
--- /dev/null
+++ b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,NONSTATIC_REPLACE_STATIC
+// JOOS2:HIERARCHY,NONSTATIC_REPLACE_STATIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - An instance method must not replace a static method (8.4.6.1,
+ * well-formedness constraint 5).  
+*/
+public class Main extends Thread {
+    
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+    public int activeCount(){
+	return 0;
+    }
+}
diff --git a/Tests/A2/Je_4_ReplaceStatic_FromSuperclass/java/lang/Thread.java b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass/java/lang/Thread.java
new file mode 100644
index 0000000000000000000000000000000000000000..24930676d54fbb2fb9947e8ec552aebcb7da1f6d
--- /dev/null
+++ b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass/java/lang/Thread.java
@@ -0,0 +1,11 @@
+package java.lang;
+
+public class Thread {
+    public Thread() {
+    }
+    public void interrupt() {
+    }
+    public static int activeCount() {
+        return 1;
+    }
+}
diff --git a/Tests/A2/Je_4_ReplaceStatic_FromSuperclass_DifferentReturnTypes/Main.java b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass_DifferentReturnTypes/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd951eae36630150599245cf8835215e4b368171
--- /dev/null
+++ b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass_DifferentReturnTypes/Main.java
@@ -0,0 +1,21 @@
+// JOOS1:HIERARCHY,DIFFERENT_RETURN_TYPE,NONSTATIC_REPLACE_STATIC
+// JOOS2:HIERARCHY,DIFFERENT_RETURN_TYPE,NONSTATIC_REPLACE_STATIC
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - An instance method must not replace a static method (8.4.6.1,
+ * well-formedness constraint 5).  
+*/
+public class Main extends Thread{
+    
+    public Main(){}
+
+    public static int test(){
+	return 123;
+    }
+
+    public String activeCount(){
+	return "0";
+    }
+}
diff --git a/Tests/A2/Je_4_ReplaceStatic_FromSuperclass_DifferentReturnTypes/java/lang/Thread.java b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass_DifferentReturnTypes/java/lang/Thread.java
new file mode 100644
index 0000000000000000000000000000000000000000..24930676d54fbb2fb9947e8ec552aebcb7da1f6d
--- /dev/null
+++ b/Tests/A2/Je_4_ReplaceStatic_FromSuperclass_DifferentReturnTypes/java/lang/Thread.java
@@ -0,0 +1,11 @@
+package java.lang;
+
+public class Thread {
+    public Thread() {
+    }
+    public void interrupt() {
+    }
+    public static int activeCount() {
+        return 1;
+    }
+}
diff --git a/Tests/A2/Je_4_Resolve_DefaultPackage/Main.java b/Tests/A2/Je_4_Resolve_DefaultPackage/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..25b2f87995e392377fdb9c5422d0fd6957d4a16e
--- /dev/null
+++ b/Tests/A2/Je_4_Resolve_DefaultPackage/Main.java
@@ -0,0 +1,11 @@
+//JOOS1:TYPE_LINKING,PREFIX_RESOLVES_TO_TYPE
+//JOOS2:TYPE_LINKING,PREFIX_RESOLVES_TO_TYPE
+//JAVAC:UNKNOWN
+public class Main {
+	public Main() {}
+	
+	public static int test() {
+		foo.bar fb = null;
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_4_Resolve_DefaultPackage/foo.java b/Tests/A2/Je_4_Resolve_DefaultPackage/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..236dd1b51b0b286d643db814937a8839572cf784
--- /dev/null
+++ b/Tests/A2/Je_4_Resolve_DefaultPackage/foo.java
@@ -0,0 +1,3 @@
+public class foo {
+	public foo() {}
+}
diff --git a/Tests/A2/Je_4_Resolve_DefaultPackage/foo/bar.java b/Tests/A2/Je_4_Resolve_DefaultPackage/foo/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e01f62f7cd0bc71a82ae06cf24aea29521baac5
--- /dev/null
+++ b/Tests/A2/Je_4_Resolve_DefaultPackage/foo/bar.java
@@ -0,0 +1,5 @@
+package foo;
+
+public class bar {
+	public bar() {}
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_1/Main.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..0274f0b3e4a0359dca7a31eb775a4f2be6388a48
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:HIERARCHY,CIRCULAR_INHERITANCE
+// JOOS2:HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class must not depend on itself
+ */
+public class Main extends foo {
+
+    public Main () {}
+
+    public static int test() {
+        return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_1/bar.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..77f85d9dd8c56c4281967c4ef0bd61abca2c09bb
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/bar.java
@@ -0,0 +1,5 @@
+public class bar extends baz {
+
+    public bar () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_1/baz.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..7798c958d4678beb8e5f5e94895f8cd62ba5aa87
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/baz.java
@@ -0,0 +1,5 @@
+public class baz extends boz {
+
+    public baz () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_1/boz.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..10efb3374cd3d14d68d055dc8947ea3097c0e3be
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/boz.java
@@ -0,0 +1,5 @@
+public class boz extends Main {
+
+    public boz () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_1/foo.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..33f2a92d477b5ab444d39039b7cbdffacae277ac
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_1/foo.java
@@ -0,0 +1,5 @@
+public class foo extends bar {
+
+    public foo () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_2/Main.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..22b49ff9cacc8a3e58cb63214429a68a6090ebce
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/Main.java
@@ -0,0 +1,17 @@
+// JOOS1:HIERARCHY,CIRCULAR_INHERITANCE
+// JOOS2:HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy:
+ * - A class must not depend on itself
+ */
+public class Main {
+
+    public Main () {}
+
+    public static int test() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_2/bar.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/bar.java
new file mode 100644
index 0000000000000000000000000000000000000000..77f85d9dd8c56c4281967c4ef0bd61abca2c09bb
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/bar.java
@@ -0,0 +1,5 @@
+public class bar extends baz {
+
+    public bar () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_2/baz.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/baz.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ebc6c02ea1423f043a1a413bf9c85b3c1897646
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/baz.java
@@ -0,0 +1,9 @@
+public class baz extends boz {
+
+    public baz () {}
+
+    public int result() {
+	return 123;
+    }
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_2/boz.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/boz.java
new file mode 100644
index 0000000000000000000000000000000000000000..96b2006aad147a80236843fd960e0efc999f7d79
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/boz.java
@@ -0,0 +1,5 @@
+public class boz extends foo {
+
+    public boz () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_CircularExtends_2/foo.java b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/foo.java
new file mode 100644
index 0000000000000000000000000000000000000000..33f2a92d477b5ab444d39039b7cbdffacae277ac
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_CircularExtends_2/foo.java
@@ -0,0 +1,5 @@
+public class foo extends bar {
+
+    public foo () {}
+
+}
diff --git a/Tests/A2/Je_4_SelfDependency_ExtendsItself.java b/Tests/A2/Je_4_SelfDependency_ExtendsItself.java
new file mode 100644
index 0000000000000000000000000000000000000000..12b09aff846afefe791f3ba4d6cfde049a104b62
--- /dev/null
+++ b/Tests/A2/Je_4_SelfDependency_ExtendsItself.java
@@ -0,0 +1,17 @@
+// JOOS1:HIERARCHY,CIRCULAR_INHERITANCE
+// JOOS2:HIERARCHY,CIRCULAR_INHERITANCE
+// JAVAC:UNKNOWN
+// 
+/**
+ * Hierarchy check:
+ * - A class or interface must not depend on itself (8.1.3, 9.1.2).
+ *   (must not extend itself)
+ */
+public class Je_4_SelfDependency_ExtendsItself extends Je_4_SelfDependency_ExtendsItself {
+
+	public Je_4_SelfDependency_ExtendsItself() {}
+	
+	public static int test() {
+		return 123;
+	}
+}
diff --git a/Tests/A2/Je_5_Interface_ImplicitReplace_DifferentReturnType.java b/Tests/A2/Je_5_Interface_ImplicitReplace_DifferentReturnType.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ce5c48891cf3a8f4aff195af527b45bf2b8b3aa
--- /dev/null
+++ b/Tests/A2/Je_5_Interface_ImplicitReplace_DifferentReturnType.java
@@ -0,0 +1,8 @@
+//HIERARCHY
+//JOOS1:PARSER_WEEDER,JOOS1_INTERFACE,PARSER_EXCEPTION
+//JOOS2:DIFFERENT_RETURN_TYPE
+//JAVAC:UNKNOWN
+
+public interface Je_5_Interface_ImplicitReplace_DifferentReturnType {
+	public int toString();
+}