diff --git a/spec/btl.ast b/spec/btl.ast
index fa4aed370ba1a129768c265e90f489cb492c6d60..9a63c3f892ab0718aa6f5b4200ec6d1444437443 100644
--- a/spec/btl.ast
+++ b/spec/btl.ast
@@ -6,30 +6,68 @@
 BTL ::= Declaration*;
 abstract Value ::= <val:String>;
 Identifier : Value;
+IntLiteral : Value;
 StringValue : Value;
 abstract Declaration ::= Value;
+abstract ColourSpec : Declaration;
+abstract Coord : Declaration;
+
+A : ColourSpec;
+B : ColourSpec;
+G : ColourSpec;
+R : ColourSpec;
+
+OX : Coord;
+OY : Coord;
+OZ : Coord;
+XX : Coord;
+XY : Coord;
+XZ : Coord;
+YX : Coord;
+YY : Coord;
+YZ : Coord;
+
+Annotation : Declaration;
+AssemblyNumber : Declaration;
 Architect : Declaration ;
 Build : Declaration ;
+Colour : Declaration ::= Declaration*;
 ComputerName : Declaration;
+Count : Declaration;
 Customer : Declaration ;
 DeliveryDate : Declaration;
+Designation : Declaration;
 Edition : Declaration;
 Editor : Declaration;
+ElementNumber : Declaration;
 ExportDate : Declaration;
 ExportFile : Declaration;
 ExportRelease : Declaration;
 ExportTime : Declaration;
+Group : Declaration;
+Height : Declaration;
 Language : Declaration;
+Length : Declaration;
 ListName : Declaration ;
+Material : Declaration;
+OrderNumber : Declaration;
+BTLPackage : Declaration;
 ProjectNumber : Declaration ;
 ProjectName : Declaration ;
 ProjectPart : Declaration ;
+QualityGrade : Declaration;
 ScaleUnit : Declaration;
+SingleMemberNumber : Declaration;
 SourceFile : Declaration;
+Storey : Declaration;
+TimberGrade : Declaration;
+Transformation : Declaration ::= Declaration*;
 Range : Declaration;
 Recess : Declaration;
+UID : Declaration;
 User : Declaration;
 Version : Declaration ;
-abstract Group : Declaration ::= Declaration*;
-GeneralGroup : Group;
-PartGroup : Group;
\ No newline at end of file
+Width : Declaration;
+abstract GroupDecl : Declaration ::= Declaration*;
+GeneralGroup : GroupDecl;
+PartGroup : GroupDecl;
\ No newline at end of file
diff --git a/spec/btl.flex b/spec/btl.flex
index a9f8fe846eb64e39544cdd3c22d2515377ef1cf9..488cc3f23de3ebd47006ddd5378f95a053e32225 100644
--- a/spec/btl.flex
+++ b/spec/btl.flex
@@ -20,17 +20,18 @@ import beaver.Scanner;
 // store line and column information in the tokens
 %line
 %column
-
+%unicode
+		 
 // this code will be inlined in the body of the generated scanner class
 %{
   StringBuffer string = new StringBuffer();
   // Sym sym;
 
   private Symbol symbol(short type) {
-	  return new Symbol(type, yyline, yycolumn, yylength(), yytext());
+	  return new Symbol(type, yyline+1, yycolumn+1, yylength(), yytext());
   }
   private Symbol symbol(short type, Object value) {
-    return new Symbol(type, yyline, yycolumn, yylength(), value);
+    return new Symbol(type, yyline+1, yycolumn+1, yylength(), value);
   }	
   // private beaver.Symbol sym(short id) {
   //   return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), yytext());
@@ -38,8 +39,9 @@ import beaver.Scanner;
 %}
 
 WhiteSpace = [ ] | \t | \f | \n | \r | \r\n
-Identifier = [:jletterdigit:][:jletterdigit:]*
-
+Identifier = [:jletter:][:jletterdigit:]*
+	IntLiteral = "-"?[0-9][0-9]*
+	
 %state YYINITIAL
 %state STRING
 	
@@ -48,31 +50,66 @@ Identifier = [:jletterdigit:][:jletterdigit:]*
 <YYINITIAL>	{
 	
 	// token definitions
+	"A" { return symbol(Terminals.A); }
+	"B" { return symbol(Terminals.B); }
+	"G" { return symbol(Terminals.G); }
+	"R" { return symbol(Terminals.R); }
+	"OX" { return symbol(Terminals.OX); }
+	"OY" { return symbol(Terminals.OY); }
+	"OZ" { return symbol(Terminals.OZ); }
+	"XX" { return symbol(Terminals.XX); }
+	"XY" { return symbol(Terminals.XY); }
+	"XZ" { return symbol(Terminals.XZ); }
+	"YX" { return symbol(Terminals.YX); }
+	"YY" { return symbol(Terminals.YY); }
+	"YZ" { return symbol(Terminals.YZ); }
+	"ANNOTATION" { return symbol(Terminals.ANNOTATION); }
 	"ARCHITECT" { return symbol(Terminals.ARCHITECT); }
+	"ASSEMBLYNUMBER" { return symbol(Terminals.ASSEMBLYNUMBER); }
 	"BUILD"         { return symbol(Terminals.BUILD); }
+	"COLOUR" { return symbol(Terminals.COLOUR); }
+	"COMPOSITE" { return symbol(Terminals.COMPOSITE); }
+
 	"COMPUTERNAME" { return symbol(Terminals.COMPUTERNAME); }
+	"COUNT" { return symbol(Terminals.COUNT); }
 	"CUSTOMER" { return symbol(Terminals.CUSTOMER); }
 	"DELIVERYDATE" { return symbol(Terminals.DELIVERYDATE); }
+	"DESIGNATION" { return symbol(Terminals.DESIGNATION); }
 	"EDITION"       { return symbol(Terminals.EDITION); }
 	"EDITOR" { return symbol(Terminals.EDITOR); }
+	"ELEMENTNUMBER" { return symbol(Terminals.ELEMENTNUMBER); }
 	"EXPORTDATE" { return symbol(Terminals.EXPORTDATE); }
 	"EXPORTFILE" { return symbol(Terminals.EXPORTFILE); }
 	"EXPORTRELEASE" { return symbol(Terminals.EXPORTRELEASE); }
 	"EXPORTTIME" { return symbol(Terminals.EXPORTTIME); }
 	"GENERAL"       { return symbol(Terminals.GENERAL); }
+	"GROUP" { return symbol(Terminals.GROUP); }
+	"HEIGHT" { return symbol(Terminals.HEIGHT); }
 	"LANGUAGE" { return symbol(Terminals.LANGUAGE); }
+	"LENGTH" { return symbol(Terminals.LENGTH); }
 	"LISTNAME" { return symbol(Terminals.LISTNAME); }
+	"MATERIAL" { return symbol(Terminals.MATERIAL); }
+	"ORDERNUMBER" { return symbol(Terminals.ORDERNUMBER); }
+	"PACKAGE" { return symbol(Terminals.PACKAGE); }
 	"PART" { return symbol(Terminals.PART); }
 	"PROJECTNUMBER" { return symbol(Terminals.PROJECTNUMBER); }
 	"PROJECTNAME"   { return symbol(Terminals.PROJECTNAME); }
 	"PROJECTPART"   { return symbol(Terminals.PROJECTPART); }
+	"QUALITYGRADE" { return symbol(Terminals.QUALITYGRADE); }
 	"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); }
 	"RANGE" { return symbol(Terminals.RANGE); }
 	"RECESS" { return symbol(Terminals.RECESS); }
+	"UID" { return symbol(Terminals.UID); }
 	"USER" { return symbol(Terminals.USER); }
 	"VERSION"       { return symbol(Terminals.VERSION); }
+	"WIDTH" { return symbol(Terminals.WIDTH); }
 	{Identifier}  { return symbol(Terminals.IDENTIFIER, yytext()); }
+	{IntLiteral}  { return symbol(Terminals.INT_LITERAL, yytext()); }
 	":"           { return symbol(Terminals.COLON); }
 	"["           { return symbol(Terminals.LBRACKET); }
 	"]"           { return symbol(Terminals.RBRACKET); }
diff --git a/spec/btl.parser b/spec/btl.parser
index 3514aaff4675cd65f3383a94f26cb0c3a9640244..3461c04196a4754f0add5f636de305f0a7a07b3e 100644
--- a/spec/btl.parser
+++ b/spec/btl.parser
@@ -25,27 +25,46 @@ List declaration_list =
 
 Declaration declaration =
     VERSION COLON value.v     {: return new Version(v); :}
+  | ANNOTATION COLON value.v     {: return new Annotation(v); :}
   | ARCHITECT COLON value.v     {: return new Architect(v); :}
+  | 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); :}
   | COMPUTERNAME COLON value.v     {: return new ComputerName(v); :}
+  | COUNT COLON value.v     {: return new Count(v); :}
   | CUSTOMER COLON value.v     {: return new Customer(v); :}
   | DELIVERYDATE COLON value.v     {: return new DeliveryDate(v); :}
+  | DESIGNATION COLON value.v     {: return new Designation(v); :}
   | EDITION COLON value.v     {: return new Edition(v); :}
   | EDITOR COLON value.v     {: return new Editor(v); :}
-  | EXPORTDATE COLON value.v     {: return new ExportDate(v); :}
+  | ELEMENTNUMBER COLON value.v     {: return new ElementNumber(v); :}
+	| EXPORTDATE COLON value.v     {: return new ExportDate(v); :}
   | EXPORTFILE COLON value.v     {: return new ExportFile(v); :}
   | EXPORTRELEASE COLON value.v     {: return new ExportRelease(v); :}
   | EXPORTTIME COLON value.v     {: return new ExportTime(v); :}
+  | GROUP COLON value.v     {: return new Group(v); :}
+  | HEIGHT COLON value.v     {: return new Height(v); :}
   | LANGUAGE COLON value.v     {: return new Language(v); :}
+  | LENGTH COLON value.v     {: return new Length(v); :}
   | LISTNAME COLON value.v     {: return new ListName(v); :}
+  | MATERIAL COLON value.v     {: return new Material(v); :}
+  | ORDERNUMBER COLON value.v     {: return new OrderNumber(v); :}
+  | PACKAGE COLON value.v     {: return new BTLPackage(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); :}
   | 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); :}
   | 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 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); :}
@@ -53,4 +72,30 @@ Declaration declaration =
 Value value =
 	STRING_LITERAL.s     {: return new StringValue(s); :}
 	| IDENTIFIER.i       {: return new Identifier(i); :}
+	| INT_LITERAL.i       {: return new IntLiteral(i); :}
   ;
+List colourSpec_list =
+    colourSpec.c                {: return new List().add(c); :}
+  | colourSpec_list colourSpec {: return colourSpec_list.add(colourSpec); :}
+  ;
+ColourSpec colourSpec =
+	A COLON value  {: return new A(value); :}
+	| B COLON value  {: return new B(value); :}
+	| G COLON value  {: return new G(value); :}
+	| R COLON value  {: return new R(value); :}
+	;
+List coord_list =
+    coord.c                {: return new List().add(c); :}
+  | coord_list coord {: return coord_list.add(coord); :}
+  ;
+Coord coord =
+	OX COLON value  {: return new OX(value); :}
+	| OY COLON value  {: return new OY(value); :}
+	| OZ COLON value  {: return new OZ(value); :}
+	| XX COLON value  {: return new XX(value); :}
+	| XY COLON value  {: return new XY(value); :}
+	| XZ COLON value  {: return new XZ(value); :}
+	| YX COLON value  {: return new YX(value); :}
+	| YY COLON value  {: return new YY(value); :}
+	| YZ COLON value  {: return new YZ(value); :}
+	;