diff --git a/examples/test.btl b/examples/test.btl
new file mode 100644
index 0000000000000000000000000000000000000000..e0165e7ab2c6237f9a1ae1230058278cc423669d
--- /dev/null
+++ b/examples/test.btl
@@ -0,0 +1,94 @@
+VERSION: "BTL V10.5"
+BUILD: "10500"
+EDITION: PREFABRICATION
+[GENERAL]
+PROJECTNUMBER: " "
+PROJECTNAME: " "
+PROJECTPART: " "
+LISTNAME: "simple_wall"
+CUSTOMER: " "
+ARCHITECT: " "
+EDITOR: " "
+DELIVERYDATE: " "
+EXPORTDATE: "2015-07-31"
+EXPORTTIME: "11:44:51"
+EXPORTRELEASE: "CADWORK-3D_21.0 Build:   803"
+LANGUAGE: "fr"
+RANGE: STANDARD
+SCALEUNIT: 2
+COMPUTERNAME: "VUISTERNENS"
+USER: "LResch"
+SOURCEFILE: "C:\Users\lresch\Desktop\SME_robotics\simple_wall.3d"
+EXPORTFILE: "C:\Users\lresch\Desktop\SME_robotics\simple_wall.btl"
+RECESS: AUTOMATIC
+[PART]
+SINGLEMEMBERNUMBER: 2
+ASSEMBLYNUMBER: " "
+ORDERNUMBER: 0
+DESIGNATION: "Semelle"
+ANNOTATION: " "
+STOREY: " "
+GROUP: "SME_Robotics"
+ELEMENTNUMBER: "SME_Robotics"
+PACKAGE: " "
+MATERIAL: "CF-Rab"
+TIMBERGRADE: " "
+QUALITYGRADE: " "
+COUNT: 2
+LENGTH: 00125000
+HEIGHT: 00012000
+WIDTH: 00006000
+COLOUR: R:255 G:255 B:  0 A:100
+UID: 2320435
+TRANSFORMATION: OX:00000000 OY:00000000 OZ:00000000 XX:01000000 XY:00000000 XZ:00000000 YX:00000000 YY:01000000 YZ:00000000
+UID: 2320436
+TRANSFORMATION: OX:00000000 OY:00000000 OZ:00244000 XX:01000000 XY:00000000 XZ:00000000 YX:00000000 YY:01000000 YZ:00000000
+[COMPOSITE]
+TYPE: LAYER
+SINGLEMEMBERNUMBER: 3000003
+ASSEMBLYNUMBER: " "
+ORDERNUMBER: 0
+DESIGNATION: "Couche porteuse"
+ANNOTATION: " "
+STOREY: " "
+GROUP: "SME_Robotics"
+ELEMENTNUMBER: "SME_Robotics"
+PACKAGE: " "
+MATERIAL: " "
+TIMBERGRADE: " "
+QUALITYGRADE: " "
+COUNT: 1
+LENGTH: 00125000
+HEIGHT: 00012000
+WIDTH: 00250000
+COLOUR: R:255 G:255 B:255 A:100
+UID: 2323636
+TRANSFORMATION: OX:00000000 OY:00000000 OZ:00000000 XX:01000000 XY:00000000 XZ:00000000 YX:00000000 YY:01000000 YZ:00000000
+PROCESSKEY: 0-300-0 2: Semelle
+REFERENCEPLANE: OX:00000000 OY:00000000 OZ:00000000 XX:00000100 XY:00000000 XZ:00000000 YX:00000000 YY:00000100 YZ:00000000 
+
+REFERENCEPLANE: OX:00000000 OY:00000000 OZ:00000000 XX:00000100 XY:00000000 XZ:00000000 YX:00000000 YY:00000100 YZ:00000000 
+PROCESSPARAMETERS: UID: 2320435 
+PROCESSINGQUALITY: AUTOMATIC
+COMMENT: "2: Semelle"
+PROCESSKEY: 0-300-0 2: Filiere
+REFERENCEPLANE: OX:00000000 OY:00000000 OZ:00244000 XX:00000100 XY:00000000 XZ:00000000 YX:00000000 YY:00000100 YZ:00000000 
+PROCESSPARAMETERS: UID: 2320436 
+PROCESSINGQUALITY: AUTOMATIC
+COMMENT: "2: Filiere"
+PROCESSKEY: 0-300-0 3: Montant
+REFERENCEPLANE: OX:00006000 OY:00000000 OZ:00006000 XX:00000000 XY:00000000 XZ:00000100 YX:00000000 YY:00000100 YZ:00000000 
+PROCESSPARAMETERS: UID: 2320437 
+PROCESSINGQUALITY: AUTOMATIC
+COMMENT: "3: Montant"
+PROCESSKEY: 0-300-0 3: Montant
+REFERENCEPLANE: OX:00125000 OY:00000000 OZ:00006000 XX:00000000 XY:00000000 XZ:00000100 YX:00000000 YY:00000100 YZ:00000000 
+PROCESSPARAMETERS: UID: 2320441 
+PROCESSINGQUALITY: AUTOMATIC
+COMMENT: "3: Montant"
+PROCESSKEY: 0-300-0 3: Montant
+REFERENCEPLANE: OX:00065500 OY:00000000 OZ:00006000 XX:00000000 XY:00000000 XZ:00000100 YX:00000000 YY:00000100 YZ:00000000 
+PROCESSPARAMETERS: UID: 2320442 
+PROCESSINGQUALITY: AUTOMATIC
+COMMENT: "3: Montant"
+
diff --git a/spec/btl.ast b/spec/btl.ast
index 9a63c3f892ab0718aa6f5b4200ec6d1444437443..a02902aae22ea0b582afb7f05a3fb30e655f61b2 100644
--- a/spec/btl.ast
+++ b/spec/btl.ast
@@ -7,6 +7,8 @@ BTL ::= Declaration*;
 abstract Value ::= <val:String>;
 Identifier : Value;
 IntLiteral : Value;
+SpecialValue : Value;
+SpecialLiteral : SpecialValue;
 StringValue : Value;
 abstract Declaration ::= Value;
 abstract ColourSpec : Declaration;
@@ -32,6 +34,7 @@ AssemblyNumber : Declaration;
 Architect : Declaration ;
 Build : Declaration ;
 Colour : Declaration ::= Declaration*;
+Comment : Declaration;
 ComputerName : Declaration;
 Count : Declaration;
 Customer : Declaration ;
@@ -52,16 +55,21 @@ ListName : Declaration ;
 Material : Declaration;
 OrderNumber : Declaration;
 BTLPackage : Declaration;
+ProcessingQuality : Declaration;
+ProcessKey : Declaration ;
+ProcessParameters : Declaration ;
 ProjectNumber : Declaration ;
 ProjectName : Declaration ;
 ProjectPart : Declaration ;
 QualityGrade : Declaration;
+ReferencePlane : Declaration ::= Declaration*;
 ScaleUnit : Declaration;
 SingleMemberNumber : Declaration;
 SourceFile : Declaration;
 Storey : Declaration;
 TimberGrade : Declaration;
 Transformation : Declaration ::= Declaration*;
+Type : Declaration;
 Range : Declaration;
 Recess : Declaration;
 UID : Declaration;
@@ -69,5 +77,6 @@ User : Declaration;
 Version : Declaration ;
 Width : Declaration;
 abstract GroupDecl : Declaration ::= Declaration*;
+CompositeGroup : GroupDecl;
 GeneralGroup : GroupDecl;
-PartGroup : GroupDecl;
\ No newline at end of file
+PartGroup : GroupDecl;
diff --git a/spec/btl.flex b/spec/btl.flex
index 488cc3f23de3ebd47006ddd5378f95a053e32225..7bf279bc00a664a2568da1a539b960a1eeaeb377 100644
--- a/spec/btl.flex
+++ b/spec/btl.flex
@@ -40,10 +40,12 @@ import beaver.Scanner;
 
 WhiteSpace = [ ] | \t | \f | \n | \r | \r\n
 Identifier = [:jletter:][:jletterdigit:]*
-	IntLiteral = "-"?[0-9][0-9]*
+IntLiteral = "-"?[0-9][0-9]*
+
 	
 %state YYINITIAL
 %state STRING
+%state SPECIAL
 	
 %%
 
@@ -68,6 +70,7 @@ Identifier = [:jletter:][:jletterdigit:]*
 	"ASSEMBLYNUMBER" { return symbol(Terminals.ASSEMBLYNUMBER); }
 	"BUILD"         { return symbol(Terminals.BUILD); }
 	"COLOUR" { return symbol(Terminals.COLOUR); }
+	"COMMENT" { return symbol(Terminals.COMMENT); }
 	"COMPOSITE" { return symbol(Terminals.COMPOSITE); }
 
 	"COMPUTERNAME" { return symbol(Terminals.COMPUTERNAME); }
@@ -92,16 +95,21 @@ Identifier = [:jletter:][:jletterdigit:]*
 	"ORDERNUMBER" { return symbol(Terminals.ORDERNUMBER); }
 	"PACKAGE" { return symbol(Terminals.PACKAGE); }
 	"PART" { return symbol(Terminals.PART); }
+	"PROCESSINGQUALITY" { return symbol(Terminals.PROCESSINGQUALITY); }
+	"PROCESSKEY" { yybegin(SPECIAL);string.setLength(0);return symbol(Terminals.PROCESSKEY); }
+	"PROCESSPARAMETERS" { yybegin(SPECIAL);string.setLength(0);return symbol(Terminals.PROCESSPARAMETERS); }
 	"PROJECTNUMBER" { return symbol(Terminals.PROJECTNUMBER); }
 	"PROJECTNAME"   { return symbol(Terminals.PROJECTNAME); }
 	"PROJECTPART"   { return symbol(Terminals.PROJECTPART); }
 	"QUALITYGRADE" { return symbol(Terminals.QUALITYGRADE); }
+	"REFERENCEPLANE" { return symbol(Terminals.REFERENCEPLANE); }
 	"SCALEUNIT" { return symbol(Terminals.SCALEUNIT); }
 	"SINGLEMEMBERNUMBER" { return symbol(Terminals.SINGLEMEMBERNUMBER); }
 	"SOURCEFILE" { return symbol(Terminals.SOURCEFILE); }
 	"STOREY" { return symbol(Terminals.STOREY); }
 	"TIMBERGRADE" { return symbol(Terminals.TIMBERGRADE); }
 	"TRANSFORMATION" { return symbol(Terminals.TRANSFORMATION); }
+	"TYPE" { return symbol(Terminals.TYPE); }
 	"RANGE" { return symbol(Terminals.RANGE); }
 	"RECESS" { return symbol(Terminals.RECESS); }
 	"UID" { return symbol(Terminals.UID); }
@@ -123,6 +131,11 @@ Identifier = [:jletter:][:jletterdigit:]*
 	<<EOF>>       { return symbol(Terminals.EOF); }
 }
 
+<SPECIAL> {
+	[\n|\r|\r\n] { yybegin(YYINITIAL); return symbol(Terminals.SPECIAL_LITERAL, string.toString()); }
+	[^\n\r]+                   { string.append( yytext() ); }
+}	
+
 <STRING> {
   \"                             { yybegin(YYINITIAL); 
                                    return symbol(Terminals.STRING_LITERAL, 
diff --git a/spec/btl.parser b/spec/btl.parser
index 3461c04196a4754f0add5f636de305f0a7a07b3e..50e05c3c4a2f56edc9d7bf521f617818159359ec 100644
--- a/spec/btl.parser
+++ b/spec/btl.parser
@@ -30,6 +30,7 @@ Declaration declaration =
   | ASSEMBLYNUMBER COLON value.v     {: return new AssemblyNumber(v); :}
   | BUILD COLON value.v     {: return new Build(v); :}
 	| COLOUR COLON colourSpec_list.v     {: return new Colour(new Identifier(COLOUR),v); :}
+  | COMMENT COLON value.v     {: return new Comment(v); :}
   | COMPUTERNAME COLON value.v     {: return new ComputerName(v); :}
   | COUNT COLON value.v     {: return new Count(v); :}
   | CUSTOMER COLON value.v     {: return new Customer(v); :}
@@ -50,21 +51,27 @@ Declaration declaration =
   | MATERIAL COLON value.v     {: return new Material(v); :}
   | ORDERNUMBER COLON value.v     {: return new OrderNumber(v); :}
   | PACKAGE COLON value.v     {: return new BTLPackage(v); :}
+  | PROCESSINGQUALITY COLON value.v     {: return new ProcessingQuality(v); :}
+  | PROCESSKEY  special_value.v     {: return new ProcessKey(v); :}
+  | PROCESSPARAMETERS  special_value.v     {: return new ProcessParameters(v); :}
   | PROJECTNUMBER COLON value.v     {: return new ProjectNumber(v); :}
   | PROJECTNAME COLON value.v     {: return new ProjectName(v); :}
   | PROJECTPART COLON value.v     {: return new ProjectPart(v); :}
   | QUALITYGRADE COLON value.v     {: return new QualityGrade(v); :}
+  | REFERENCEPLANE COLON coord_list.v     {: return new ReferencePlane(new Identifier(REFERENCEPLANE),v); :}
   | SCALEUNIT COLON value.v     {: return new ScaleUnit(v); :}
   | SINGLEMEMBERNUMBER COLON value.v     {: return new SingleMemberNumber(v); :}
   | SOURCEFILE COLON value.v     {: return new SourceFile(v); :}
   | STOREY COLON value.v     {: return new Storey(v); :}
   | TIMBERGRADE COLON value.v     {: return new TimberGrade(v); :}
-	| TRANSFORMATION COLON coord_list.v     {: return new Transformation(new Identifier(TRANSFORMATION),v); :}
+  | TRANSFORMATION COLON coord_list.v     {: return new Transformation(new Identifier(TRANSFORMATION),v); :}
+  | TYPE COLON value.v     {: return new Type(v); :}
   | RANGE COLON value.v     {: return new Range(v); :}
   | RECESS COLON value.v     {: return new Recess(v); :}
   | UID COLON value.v     {: return new UID(v); :}
   | USER COLON value.v     {: return new User(v); :}
   | WIDTH COLON value.v     {: return new Width(v); :}
+  | LBRACKET COMPOSITE.g RBRACKET declaration_list    {: return new CompositeGroup(new Identifier(g),declaration_list); :}
   | LBRACKET GENERAL.g RBRACKET declaration_list    {: return new GeneralGroup(new Identifier(g),declaration_list); :}
   | LBRACKET PART.p RBRACKET declaration_list    {: return new PartGroup(new Identifier(p),declaration_list); :}
   // | TRANS IDENTIFIER.ID1 COLON IDENTIFIER.ID2 ARROW IDENTIFIER.ID3 SEMI {: return new Transition(ID1, ID2, ID3); :}
@@ -74,6 +81,9 @@ Value value =
 	| IDENTIFIER.i       {: return new Identifier(i); :}
 	| INT_LITERAL.i       {: return new IntLiteral(i); :}
   ;
+SpecialValue special_value =
+	SPECIAL_LITERAL.i       {: return new SpecialLiteral(i); :}
+  ;
 List colourSpec_list =
     colourSpec.c                {: return new List().add(c); :}
   | colourSpec_list colourSpec {: return colourSpec_list.add(colourSpec); :}