diff --git a/Language/SQL/SimpleSQL/Dialect.lhs b/Language/SQL/SimpleSQL/Dialect.lhs
index ab93c8c..30c2d08 100644
--- a/Language/SQL/SimpleSQL/Dialect.lhs
+++ b/Language/SQL/SimpleSQL/Dialect.lhs
@@ -92,6 +92,8 @@ Data types to represent different dialect options
 >     ,diConvertFunction :: Bool
 >      -- | allow creating autoincrement columns
 >     ,diAutoincrement :: Bool
+>      -- | allow omitting the comma between constraint clauses
+>     ,diNonCommaSeparatedConstraints :: Bool
 >     }
 >                deriving (Eq,Show,Read,Data,Typeable)
 
@@ -115,6 +117,7 @@ Data types to represent different dialect options
 >                    ,diSqlServerSymbols = False
 >                    ,diConvertFunction = False                     
 >                    ,diAutoincrement = False
+>                    ,diNonCommaSeparatedConstraints = False
 >                    }
 
 > -- | mysql dialect
diff --git a/Language/SQL/SimpleSQL/Parse.lhs b/Language/SQL/SimpleSQL/Parse.lhs
index 7674c51..29c098c 100644
--- a/Language/SQL/SimpleSQL/Parse.lhs
+++ b/Language/SQL/SimpleSQL/Parse.lhs
@@ -1509,12 +1509,21 @@ TODO: change style
 >     CreateSchema <$> names
 
 > createTable :: Parser Statement
-> createTable = keyword_ "table" >>
+> createTable = do 
+>   d <- getState
+>   let 
+>     parseColumnDef = TableColumnDef <$> columnDef 
+>     parseConstraintDef = uncurry TableConstraintDef <$> tableConstraintDef
+>     separator = if diNonCommaSeparatedConstraints d
+>       then optional comma
+>       else void comma
+>     constraints = sepBy parseConstraintDef separator
+>     entries = ((:) <$> parseColumnDef <*> ((comma >> entries) <|> pure [])) <|> constraints
+>
+>   keyword_ "table" >>
 >     CreateTable
->     <$> names
->     -- todo: is this order mandatory or is it a perm?
->     <*> parens (commaSep1 (uncurry TableConstraintDef <$> tableConstraintDef
->                            <|> TableColumnDef <$> columnDef))
+>     <$> names 
+>     <*> parens entries
 
 > createIndex :: Parser Statement
 > createIndex =
diff --git a/shell.nix b/shell.nix
index 2ea013d..0de9067 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,4 +1,4 @@
-with import <nixpkgs> {};
+with import <nixpkgs> { };
 stdenv.mkDerivation rec {
   name = "env";
   env = buildEnv { name = name; paths = buildInputs; };
@@ -6,6 +6,7 @@ stdenv.mkDerivation rec {
     ghc
     cabal-install
     glibcLocales
+    gnumake
   ];
   shellHook = "export LANG=en_GB.UTF-8";
 }
diff --git a/tools/Language/SQL/SimpleSQL/SQL2011Schema.lhs b/tools/Language/SQL/SimpleSQL/SQL2011Schema.lhs
index d60ae64..f10f479 100644
--- a/tools/Language/SQL/SimpleSQL/SQL2011Schema.lhs
+++ b/tools/Language/SQL/SimpleSQL/SQL2011Schema.lhs
@@ -651,6 +651,28 @@ defintely skip
 >                 DefaultReferentialAction DefaultReferentialAction
 >        ])
 
+>     ,(TestStatement ansi2011 { diNonCommaSeparatedConstraints = True }
+>       "create table t (a int, b int,\n\
+>       \                foreign key (a) references u(c)\n\
+>       \                foreign key (b) references v(d));"
+>      $ CreateTable [Name Nothing "t"]
+>        [TableColumnDef $ ColumnDef (Name Nothing "a") (TypeName [Name Nothing "int"]) Nothing []
+>        ,TableColumnDef $ ColumnDef (Name Nothing "b") (TypeName [Name Nothing "int"]) Nothing []
+>        ,TableConstraintDef Nothing $
+>             TableReferencesConstraint
+>                 [Name Nothing "a"]
+>                 [Name Nothing "u"]
+>                 (Just [Name Nothing "c"])
+>                 DefaultReferenceMatch
+>                 DefaultReferentialAction DefaultReferentialAction
+>        ,TableConstraintDef Nothing $
+>             TableReferencesConstraint
+>                 [Name Nothing "b"]
+>                 [Name Nothing "v"]
+>                 (Just [Name Nothing "d"])
+>                 DefaultReferenceMatch
+>                 DefaultReferentialAction DefaultReferentialAction
+>        ])
 
 
 <references specification> ::=