diff --git a/src/main/grammar/JastAddAspect.bnf b/src/main/grammar/JastAddAspect.bnf
index 256965b9f0a7dc7314ce59872a6ac67cb8852fcb..d967e0e51bf9d7992b01310ec78f7025b4b1ad3f 100644
--- a/src/main/grammar/JastAddAspect.bnf
+++ b/src/main/grammar/JastAddAspect.bnf
@@ -40,17 +40,17 @@
 // aspect_body_declarations_eof ::= aspect_body_declaration* EOF
 
 
-jastaddAspectFile ::= ( aspect_declaration | comment )*
-
-comment ::= (MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
+//jastaddAspectFile ::= ( aspect_declaration | comment )*
+//
+//comment ::= (MULTI_LINE_COMMENT | DOC_COMMENT | SINGLE_LINE_COMMENT)
 
 compilation_unit ::= import_declaration* type_declaration*
 
-import_declaration ::= IMPORT STATIC? name (DOT STAR)? SEMICOLON
+import_declaration ::= IMPORT STATIC? name_name (DOT STAR)? SEMICOLON
 
 modifiers ::= (PUBLIC | STATIC  | PROTECTED | PRIVATE | FINAL | ABSTRACT | SYNCHRONIZED | NATIVE | TRANSIENT | VOLATILE | STRICTFP)*
 
-type_declaration ::= SEMICOLON | (modifiers ( class_declaration | interface_declaration | unmodified_enum_declaration | annotation_type_declaration | aspect_declaration ) )
+type_declaration ::= SEMICOLON | (modifiers ( class_declaration | interface_declaration | enum_declaration | annotation_type_declaration | aspect_declaration ) )
 
 aspect_declaration ::= ASPECT IDENTIFIER aspect_body
 
@@ -77,9 +77,7 @@ aspect_body_declaration ::= ( aspect_refine_inh_equation
                             | aspect_field_declaration
                             | aspect_cache_declaration )
 
-aspect_class_declaration ::= modifiers CLASS IDENTIFIER type_parameters (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? aspect_class_body
-
-aspect_class_body ::= class_body_declaration_in_paren // including curly braces
+aspect_class_declaration ::= modifiers class_declaration
 
 aspect_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE
 
@@ -90,17 +88,17 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
                                         | aspect_interface_method_declaration
                                         | aspect_interface_field_declaration )
 
-aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SEMICOLON
+aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? SEMICOLON
 
-aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SEMICOLON
+aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? SEMICOLON
 
 aspect_interface_method_declaration ::= (PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED )* aspect_result_type method_declarator (THROWS name_list ) SEMICOLON
 
 aspect_interface_field_declaration ::= modifiers aspect_type variable_declarator (COMMA variable_declarator)* SEMICOLON
 
-aspect_nested_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? EXTENDS? LBRACE JAVA_INTERFACE_MEMBER_DECLARATIONS RBRACE
+aspect_nested_interface_declaration ::= modifiers interface_declaration
 
-aspect_nested_class_declaration ::= modifiers CLASS IDENTIFIER type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? java_class_body_declaration
+aspect_nested_class_declaration ::= modifiers class_declaration
 
 aspect_method_declaration ::= modifiers type_parameters? aspect_result_type IDENTIFIER DOT method_declarator (THROWS name_list)? (block | SEMICOLON)
 
@@ -112,9 +110,9 @@ aspect_refine_constructor_declaration ::= REFINE IDENTIFIER (PUBLIC | PROTECTED
 
 aspect_field_declaration ::= modifiers aspect_type IDENTIFIER DOT variable_declarator (COMMA variable_declarator)* SEMICOLON
 
-aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? ( ASSIGN JAVA_EXPRESSION SEMICOLON | block | SEMICOLON )
+aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR expression_in_brackets)? ( ASSIGN JAVA_EXPRESSION SEMICOLON | block | SEMICOLON )
 
-aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? (CIRCULAR LBRACKET JAVA_EXPRESSION RBRACKET)? SEMICOLON
+aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? (CIRCULAR expression_in_brackets)? SEMICOLON
 
 aspect_rewrite ::= REWRITE IDENTIFIER (IDENTIFIER DOT IDENTIFIER LPAREN RPAREN)? LBRACE ((WHEN LPAREN JAVA_EXPRESSION RPAREN)? TO aspect_type ( JAVA_EXPRESSION SEMICOLON | block ))+ RBRACE
 
@@ -126,7 +124,7 @@ aspect_inh_equation ::= annotation* EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (I
 
 aspect_refine_inh_equation ::= REFINE IDENTIFIER EQUATION IDENTIFIER DOT IDENTIFIER LPAREN (INT IDENTIFIER)? RPAREN DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN JAVA_EXPRESSION | block)
 
-collection_attribute ::= annotation* COLL aspect_type IDENTIFIER DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET JAVA_EXPRESSION RBRACKET)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON
+collection_attribute ::= annotation* COLL aspect_type IDENTIFIER DOT attribute_name LPAREN RPAREN CIRCULAR? (expression_in_brackets)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON
 
 collection_contribution ::= annotation* CONTRIBUTES ( NTA JAVA_EXPRESSION TO IDENTIFIER DOT attribute_name LPAREN RPAREN | EACH? JAVA_EXPRESSION (WHEN JAVA_EXPRESSION)? TO IDENTIFIER DOT attribute_name LPAREN RPAREN (FOR  EACH? JAVA_EXPRESSION)? | block TO IDENTIFIER DOT attribute_name LPAREN RPAREN ) SEMICOLON
 
@@ -145,21 +143,18 @@ block_statement ::= (FINAL? type java_identifier local_variable_declaration SEMI
 
 aspect_cache_declaration ::= (CACHE | UNCACHE) IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER? (type IDENTIFIER?)* )? RPAREN SEMICOLON
 
+java_identifier ::= IDENTIFIER | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE
 
 // Attribute type names can not start with JastAdd reserved words such as 'syn', 'eq', etc.
 aspect_type ::= aspect_reference_type | ( primitive_type (LBRACKET RBRACKET)? )
 
 formal_parameters ::= LPAREN ( formal_parameter ( COMMA formal_parameter )* )? RPAREN
 
-name_list ::= name (COMMA name)*
-
 formal_parameter ::= FINAL? type DOTS? variable_declarator_id
 
 variable_declarator_id ::= java_identifier ( LBRACKET RBRACKET )*
 
-java_identifier ::= IDENTIFIER | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE
-
-aspect_enum_declaration ::= modifiers ENUM IDENTIFIER (IMPLEMENTS type_name_list)? JAVA_ENUM_BODY
+aspect_enum_declaration ::= modifiers enum_declaration
 
 variable_declarator ::= variable_declarator_id ( ASSIGN variable_initializer )?
 
@@ -185,6 +180,80 @@ wildcard_bounds ::= (EXTENDS reference_type) | SUPER reference_type
 
 primitive_type ::= boolean | char | byte | short | int | long | float | double
 
+result_type ::= VOID | type
+
+name_name ::= java_identifier (DOT java_identifier)*
+
+name_list ::= name_name (COMMA name_name)*
+
+expression ::= lambda_expression | ( conditional_expression (assignment_operator expression)? )
+
+assignment_operator ::= ASSIGN | STARASSIGN | SLASHASSIGN | REMASSIGN | PLUSASSIGN | MINUSASSIGN | LSHIFTASSIGN | RSIGNEDSHIFTASSIGN | RUNSIGNEDSHIFTASSIGN | ANDASSIGN | XORASSIGN | ORASSIGN
+
+conditional_expression ::= conditional_or_expression ( HOOK expression COLON conditional_expression)?
+
+conditional_or_expression ::= conditional_and_expression ( SC_OR expression COLON conditional_expression )*
+
+conditional_and_expression ::= inclusive_or_expression ( SC_AND inclusive_or_expression )*
+
+inclusive_or_expression ::= exclusive_or_expression ( BIT_OR exclusive_or_expression )*
+
+exclusive_or_expression ::= and_expression ( XOR and_expression )*
+
+and_expression ::= equality_expression ( BIT_AND equality_expression )*
+
+equality_expression ::= instance_of_expression ( (EQ | NE) instance_of_expression )*
+
+instance_of_expression ::= relational_expression ( INSTANCEOF type )?
+
+relational_expression ::= shift_expression ( (LT | GT | LE | GE) shift_expression )*
+
+shift_expression ::= additive_expression ( ( (LSHIFT) | (GT GT GT?) ) additive_expression )*
+
+additive_expression ::= multiplicative_expression ( (PLUS | MINUS) multiplicative_expression )*
+
+multiplicative_expression ::= unary_expression ( (STAR | SLASH | REM) unary_expression )*
+
+unary_expression ::= ( (PLUS | MINUS) unary_expression ) | pre_increment_expression | pre_decrement_expression | unary_expression_not_plus_minus
+
+pre_increment_expression ::= INCR primary_expression
+
+pre_decrement_expression ::= DECR primary_expression
+
+unary_expression_not_plus_minus ::= ( (TILDE | BANG) unary_expression ) | cast_expression | postfix_expression
+
+postfix_expression ::= primary_expression (INCR | DECR)?
+
+cast_expression ::= LPAREN type RPAREN unary_expression_not_plus_minus
+
+primary_expression ::= primary_prefix (primary_suffix)*
+
+primary_prefix ::= literal | THIS | (SUPER DOT java_identifier) | (LPAREN expression RPAREN) | allocation_expression | (result_type DOT CLASS) | name_name
+
+primary_suffix ::= (DOT THIS) | (DOT allocation_expression) | (DOT type_arguments java_identifier) | (LBRACKET expression RBRACKET) | (DOT java_identifier) | arguments | DOUBLECOLON NEW | DOUBLECOLON java_identifier
+
+literal ::= INTEGER_LITERAL | FLOATING_POINT_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | boolean_literal | null_literal
+
+boolean_literal ::= TRUE | FALSE
+
+null_literal ::= NULL
+
+arguments ::= LPAREN argument_list RPAREN
+
+argument_list ::= expression (COMMA expression)*
+
+allocation_expression ::= ( NEW primitive_type array_dims_and_inits ) | (NEW class_or_interface_type type_arguments? (array_dims_and_inits | (arguments class_body?)) )
+
+array_dims_and_inits ::= ( (LBRACKET expression RBRACKET)+ (LBRACKET RBRACKET)* ) | ( (LBRACKET RBRACKET)+ array_initializer )
+
+lambda_expression ::= lambda_parameters  ARROW ( expression | block )
+
+lambda_parameters ::= name_name | (LPAREN (typed_lambda_parameter | untyped_lambda_parameter)? RPAREN)
+
+typed_lambda_parameter ::= type name_name (COMMA type name_name)*
+
+untyped_lambda_parameter ::= name_name (COMMA name_name)*
+
 local_variable_declaration ::= FINAL? type variable_declarator (COMMA variable_declarator)*
 
 type_parameters ::= LT type_parameter (COMMA type_parameter)* GT
@@ -197,24 +266,43 @@ aspect_result_type ::= VOID | aspect_type
 
 method_declarator ::= java_identifier formal_parameters (LBRACKET RBRACKET)*
 
+// TODO maybe change order!
 annotation ::= ( normal_annotation | single_member_annotation | marker_annotation )
 
-normal_annotation ::= AT name java_member_value_pairs_in_paren
 
-marker_annotation ::= AT name
 
-single_member_annotation ::= AT name java_member_value_in_paren
 
 
 
 // island things
 
-class_body_declaration_in_paren ::= JAVA_IN_PAREN
+//class_body_declaration_in_paren ::= JAVA_IN_PAREN
 //{
 //  implements="org.jastadd.tooling.aspect.psi.JastAddAspectJavaBlockExtension"
 //  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectJavaBlockImplExtension"
 //}
 
-java_member_value_in_paren ::= JAVA_IN_PAREN // LPAREN member_value RPAREN
+// should be parsed after circular and in collection attributes
+expression_in_brackets ::= LBRACKET_ANYTHING_RBRACKET // LBRACKET expression RBRACKET
+
+// at symbol only in these rules
+marker_annotation ::= AT_NAME
+normal_annotation ::= AT_NAME_LPAREN_ANYTHING_RPAREN // TODO!
+single_member_annotation ::= AT_NAME_LPAREN_ANYTHING_RPAREN // TODO!
+annotation_type_declaration ::= AT_INTERFACE_ANYTHING_LBRACE_ANYTHING_RBRACE // AT INTERFACE java_indentifier LBRACE annotation_type_member_declaration RBRACE
+
+
+// previous token must not be DOT!
+class_declaration ::= CLASS_ANYTHING_LBRACE_ANYTHING_RBRACE // CLASS IDENTIFIER (EXTENDS class_or_type_interface)? (implements type_name_list)? LBRACE class_body_declaration RBRACE
+
+// must not be directly in an aspect, but can be in a class or interface (or enum?) in an aspect
+interface_declaration ::= INTERFACE_ANYTHING_LBRACE_ANYTHING_RBRACE // INTERFACE java_indentifier LBRACE interface_member_declaration RBRACE
+
+// can be anywhere
+enum_declaration ::= ENUM_ANYTHING_LPAREN_ANYTHING_RPAREN // ENUM java_identifier (implements type_name_list)? LBRACE enum_constant (COMMA enum_constant)* (SEMICOLON class_body_declaration* )? RBRACE
+
+
+
+// TODO unsupported
 
-java_member_value_pairs_in_paren ::= JAVA_IN_PAREN // LPAREN member_value_pairs? RPAREN
+class_body ::= CLASS_BODY_UNSUPPORTED
diff --git a/src/main/grammar/JastAddAspect.flex b/src/main/grammar/JastAddAspect.flex
index 2120cab7c3864636ffb3fe10e468d897cd49de75..07135a56e8ba0861a53ef315c810c47862aedb76 100644
--- a/src/main/grammar/JastAddAspect.flex
+++ b/src/main/grammar/JastAddAspect.flex
@@ -30,10 +30,10 @@ MultiLineComment    = "/*"  [^*]+ [*]+([^*/][^*]*[*]+)*[/]
 NotParenthesis    = [^{}]+
 
 // from jjt
-// DecimalLiteral    = [1-9] [0-9]*
-// HexLiteral        = 0 [xX] [0-9a-fA-F]+
-// OctalLiteral      = 0 [0-7]*
-// IntegerLiteral    = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]?
+DecimalLiteral    = [1-9] [0-9]*
+HexLiteral        = 0 [xX] [0-9a-fA-F]+
+OctalLiteral      = 0 [0-7]*
+IntegerLiteral    = ( {DecimalLiteral} | {HexLiteral} | {OctalLiteral} ) [lL]?
 
 Exponent             = [eE] [+-]? [0-9]+
 FloatingPointLiteral = [0-9]+ "." [0-9]* {Exponent}? [fFdD]?
@@ -93,9 +93,9 @@ Identifier           = [:jletter:] [:jletterdigit:]*
 //"do"                          { return JastAddAspectTypes.DO; }
   "double"                      { return JastAddAspectTypes.DOUBLE; }
 //"else"                        { return JastAddAspectTypes.ELSE; }
-  "enum"                        { return JastAddAspectTypes.ENUM; }
+//"enum"                        { return JastAddAspectTypes.ENUM; }
   "extends"                     { return JastAddAspectTypes.EXTENDS; }
-//"false"                       { return JastAddAspectTypes.FALSE; }
+  "false"                       { return JastAddAspectTypes.FALSE; }
   "final"                       { return JastAddAspectTypes.FINAL; }
 //"finally"                     { return JastAddAspectTypes.FINALLY; }
   "float"                       { return JastAddAspectTypes.FLOAT; }
@@ -104,13 +104,13 @@ Identifier           = [:jletter:] [:jletterdigit:]*
 //"if"                          { return JastAddAspectTypes.IF; }
   "implements"                  { return JastAddAspectTypes.IMPLEMENTS; }
   "import"                      { return JastAddAspectTypes.IMPORT; }
-//"instanceof"                  { return JastAddAspectTypes.INSTANCEOF; }
+  "instanceof"                  { return JastAddAspectTypes.INSTANCEOF; }
   "int"                         { return JastAddAspectTypes.INT; }
   "interface"                   { return JastAddAspectTypes.INTERFACE; }
   "long"                        { return JastAddAspectTypes.LONG; }
   "native"                      { return JastAddAspectTypes.NATIVE; }
 //"new"                         { return JastAddAspectTypes.NEW; }
-//"null"                        { return JastAddAspectTypes.NULL; }
+  "null"                        { return JastAddAspectTypes.NULL; }
 //"package"                     { return JastAddAspectTypes.PACKAGE; }
   "private"                     { return JastAddAspectTypes.PRIVATE; }
   "protected"                   { return JastAddAspectTypes.PROTECTED; }
@@ -126,7 +126,7 @@ Identifier           = [:jletter:] [:jletterdigit:]*
 //"throw"                       { return JastAddAspectTypes.THROW; }
   "throws"                      { return JastAddAspectTypes.THROWS; }
   "transient"                   { return JastAddAspectTypes.TRANSIENT; }
-//"true"                        { return JastAddAspectTypes.TRUE; }
+  "true"                        { return JastAddAspectTypes.TRUE; }
 //"try"                         { return JastAddAspectTypes.TRY; }
   "void"                        { return JastAddAspectTypes.VOID; }
   "volatile"                    { return JastAddAspectTypes.VOLATILE; }
@@ -161,10 +161,10 @@ Identifier           = [:jletter:] [:jletterdigit:]*
 
 <YYINITIAL, COLLECTION_DECL> {
   // LITERALS
-//{IntegerLiteral}              { return JastAddAspectTypes.INTEGER_LITERAL; }
-//{FloatingPointLiteral}        { return JastAddAspectTypes.FLOATING_POINT_LITERAL; }
-//{CharacterLiteral}            { return JastAddAspectTypes.CHARACTER_LITERAL; }
-//{StringLiteral}               { return JastAddAspectTypes.STRING_LITERAL; }
+  {IntegerLiteral}              { return JastAddAspectTypes.INTEGER_LITERAL; }
+  {FloatingPointLiteral}        { return JastAddAspectTypes.FLOATING_POINT_LITERAL; }
+  {CharacterLiteral}            { return JastAddAspectTypes.CHARACTER_LITERAL; }
+  {StringLiteral}               { return JastAddAspectTypes.STRING_LITERAL; }
 
   // IDENTIFIERS
   {Identifier}                  { return JastAddAspectTypes.IDENTIFIER; }
@@ -182,43 +182,43 @@ Identifier           = [:jletter:] [:jletterdigit:]*
   "@"                           { return JastAddAspectTypes.AT; }
 
   // OPERATORS
-//"="                           { return JastAddAspectTypes.ASSIGN; }
+  "="                           { return JastAddAspectTypes.ASSIGN; }
   "<"                           { return JastAddAspectTypes.LT; }
-//"!"                           { return JastAddAspectTypes.BANG; }
-//"~"                           { return JastAddAspectTypes.TILDE; }
-//"?"                           { return JastAddAspectTypes.HOOK; }
-//":"                           { return JastAddAspectTypes.COLON; }
-//"=="                          { return JastAddAspectTypes.EQ; }
-//"<="                          { return JastAddAspectTypes.LE; }
-//">="                          { return JastAddAspectTypes.GE; }
-//"!="                          { return JastAddAspectTypes.NE; }
-//"||"                          { return JastAddAspectTypes.SC_OR; }
-//"&&"                          { return JastAddAspectTypes.SC_AND; }
-//"++"                          { return JastAddAspectTypes.INCR; }
-//"--"                          { return JastAddAspectTypes.DECR; }
-//"+"                           { return JastAddAspectTypes.PLUS; }
-//"-"                           { return JastAddAspectTypes.MINUS; }
+  "!"                           { return JastAddAspectTypes.BANG; }
+  "~"                           { return JastAddAspectTypes.TILDE; }
+  "?"                           { return JastAddAspectTypes.HOOK; }
+  ":"                           { return JastAddAspectTypes.COLON; }
+  "=="                          { return JastAddAspectTypes.EQ; }
+  "<="                          { return JastAddAspectTypes.LE; }
+  ">="                          { return JastAddAspectTypes.GE; }
+  "!="                          { return JastAddAspectTypes.NE; }
+  "||"                          { return JastAddAspectTypes.SC_OR; }
+  "&&"                          { return JastAddAspectTypes.SC_AND; }
+  "++"                          { return JastAddAspectTypes.INCR; }
+  "--"                          { return JastAddAspectTypes.DECR; }
+  "+"                           { return JastAddAspectTypes.PLUS; }
+  "-"                           { return JastAddAspectTypes.MINUS; }
   "*"                           { return JastAddAspectTypes.STAR; }
-//"/"                           { return JastAddAspectTypes.SLASH; }
-//"&"                           { return JastAddAspectTypes.BIT_AND; }
-//"|"                           { return JastAddAspectTypes.BIT_OR; }
-//"^"                           { return JastAddAspectTypes.XOR; }
-//"%"                           { return JastAddAspectTypes.REM; }
-//"<<"                          { return JastAddAspectTypes.LSHIFT; }
-//"+="                          { return JastAddAspectTypes.PLUSASSIGN; }
-//"-="                          { return JastAddAspectTypes.MINUSASSIGN; }
-//"*="                          { return JastAddAspectTypes.STARASSIGN; }
-//"/="                          { return JastAddAspectTypes.SLASHASSIGN; }
-//"&="                          { return JastAddAspectTypes.ANDASSIGN; }
-//"|="                          { return JastAddAspectTypes.ORASSIGN; }
-//"^="                          { return JastAddAspectTypes.XORASSIGN; }
-//"%="                          { return JastAddAspectTypes.REMASSIGN; }
-//"<<="                         { return JastAddAspectTypes.LSHIFTASSIGN; }
-//">>="                         { return JastAddAspectTypes.RSIGNEDSHIFTASSIGN; }
-//">>>="                        { return JastAddAspectTypes.RUNSIGNEDSHIFTASSIGN; }
+  "/"                           { return JastAddAspectTypes.SLASH; }
+  "&"                           { return JastAddAspectTypes.BIT_AND; }
+  "|"                           { return JastAddAspectTypes.BIT_OR; }
+  "^"                           { return JastAddAspectTypes.XOR; }
+  "%"                           { return JastAddAspectTypes.REM; }
+  "<<"                          { return JastAddAspectTypes.LSHIFT; }
+  "+="                          { return JastAddAspectTypes.PLUSASSIGN; }
+  "-="                          { return JastAddAspectTypes.MINUSASSIGN; }
+  "*="                          { return JastAddAspectTypes.STARASSIGN; }
+  "/="                          { return JastAddAspectTypes.SLASHASSIGN; }
+  "&="                          { return JastAddAspectTypes.ANDASSIGN; }
+  "|="                          { return JastAddAspectTypes.ORASSIGN; }
+  "^="                          { return JastAddAspectTypes.XORASSIGN; }
+  "%="                          { return JastAddAspectTypes.REMASSIGN; }
+  "<<="                         { return JastAddAspectTypes.LSHIFTASSIGN; }
+  ">>="                         { return JastAddAspectTypes.RSIGNEDSHIFTASSIGN; }
+  ">>>="                        { return JastAddAspectTypes.RUNSIGNEDSHIFTASSIGN; }
 //"..."                         { return JastAddAspectTypes.ELLIPSIS; }
-//"->"                          { return JastAddAspectTypes.ARROW; }
-//"::"                          { return JastAddAspectTypes.DOUBLECOLON; }
+  "->"                          { return JastAddAspectTypes.ARROW; }
+  "::"                          { return JastAddAspectTypes.DOUBLECOLON; }
 
   // TODO RUNSIGNEDSHIFT >>> and RSIGNEDSHIFT >> are not parsed
 
diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java
index 7a749b6acc908ba9305e764fbb83c093fd19e981..8e9ce5c8b187dc668deca297009558e10789506d 100644
--- a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java
+++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectParserDefinition.java
@@ -19,7 +19,8 @@ import org.jetbrains.annotations.NotNull;
 public class JastAddAspectParserDefinition implements ParserDefinition {
 
   public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE);
-  public static final TokenSet COMMENTS = TokenSet.create(JastAddAspectTypes.COMMENT);
+  public static final TokenSet COMMENTS = TokenSet.create(JastAddAspectTypes.SINGLE_LINE_COMMENT, JastAddAspectTypes.MULTI_LINE_COMMENT, JastAddAspectTypes.FORMAL_COMMENT);
+  public static final TokenSet STRING_LITERALS = TokenSet.create(JastAddAspectTypes.STRING_LITERAL);
 
   public static final IFileElementType FILE = new IFileElementType(JastAddAspectLanguage.INSTANCE);
 
@@ -44,7 +45,7 @@ public class JastAddAspectParserDefinition implements ParserDefinition {
   @NotNull
   @Override
   public TokenSet getStringLiteralElements() {
-    return TokenSet.EMPTY;
+    return STRING_LITERALS;
   }
 
   @NotNull
diff --git a/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java b/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java
index c2a7cb99dc4d9b7b02d792021d454b5a1dacceb0..609f83528ec73a718569295fc67a166e571376f5 100644
--- a/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java
+++ b/src/main/java/org/jastadd/tooling/aspect/JavaBlockLanguageInjector.java
@@ -6,7 +6,7 @@ import com.intellij.openapi.util.TextRange;
 import com.intellij.psi.InjectedLanguagePlaces;
 import com.intellij.psi.LanguageInjector;
 import com.intellij.psi.PsiLanguageInjectionHost;
-import org.jastadd.tooling.aspect.psi.JastAddAspectClassBodyDeclarationInParen;
+import org.jastadd.tooling.aspect.psi.*;
 import org.jetbrains.annotations.NotNull;
 
 public class JavaBlockLanguageInjector implements LanguageInjector {
@@ -21,9 +21,23 @@ public class JavaBlockLanguageInjector implements LanguageInjector {
    */
   @Override
   public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host, @NotNull InjectedLanguagePlaces injectionPlacesRegistrar) {
-    if (host.isValidHost() && host instanceof JastAddAspectClassBodyDeclarationInParen) {
-      System.out.println(host.getText());
-      injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}");
+    if (host.isValidHost()) {
+      if (host instanceof JastAddAspectExpressionInBrackets) {
+        // TODO
+        injectionPlacesRegistrar.addPlace(JavaLanguage.INSTANCE, new TextRange(0, host.getTextLength()), "class X { public void m(){", "}");
+      } else if (host instanceof JastAddAspectNormalAnnotation) {
+        // TODO
+      } else if (host instanceof JastAddAspectSingleMemberAnnotation) {
+        // TODO
+      } else if (host instanceof JastAddAspectClassDeclaration) {
+        // TODO
+      } else if (host instanceof JastAddAspectInterfaceDeclaration) {
+        // TODO
+      } else if (host instanceof JastAddAspectEnumDeclaration) {
+        // TODO
+      } else if (host instanceof JastAddAspectAnnotationTypeDeclaration) {
+        // TODO
+      }
     }
   }
 }