Fixed path handling and key group array name lexing for test compliance
diff --git a/lexer.go b/lexer.go
index 162885a..a995a02 100644
--- a/lexer.go
+++ b/lexer.go
@@ -417,7 +417,9 @@
 			l.pos += 1
 			l.emit(tokenDoubleRightBracket)
 			return lexVoid
-		}
+		} else if l.peek() == '[' {
+			return l.errorf("group name cannot contain ']'")
+    }
 
 		if l.next() == eof {
 			break
@@ -436,7 +438,9 @@
 			l.pos += 1
 			l.emit(tokenRightBracket)
 			return lexVoid
-		}
+		} else if l.peek() == '[' {
+			return l.errorf("group name cannot contain ']'")
+    }
 
 		if l.next() == eof {
 			break
diff --git a/toml.go b/toml.go
index cafad2c..b5b0d57 100644
--- a/toml.go
+++ b/toml.go
@@ -64,7 +64,16 @@
 		if !exists {
 			return nil
 		}
-		subtree = (*subtree)[intermediate_key].(*TomlTree)
+    switch node := (*subtree)[intermediate_key].(type) {
+    case *TomlTree:
+      subtree = node
+    case []*TomlTree:
+      // go to most recent element
+      if len(node) == 0 {
+        return nil //(*subtree)[intermediate_key] = append(node, &TomlTree{})
+      }
+      subtree = node[len(node)-1]
+    }
 	}
 	return (*subtree)[keys[len(keys)-1]]
 }
@@ -93,7 +102,16 @@
 			var new_tree TomlTree = make(TomlTree)
 			(*subtree)[intermediate_key] = &new_tree
 		}
-		subtree = (*subtree)[intermediate_key].(*TomlTree)
+    switch node := (*subtree)[intermediate_key].(type) {
+    case *TomlTree:
+      subtree = node
+    case []*TomlTree:
+      // go to most recent element
+      if len(node) == 0 {
+        (*subtree)[intermediate_key] = append(node, &TomlTree{})
+      }
+      subtree = node[len(node)-1]
+    }
 	}
 	(*subtree)[keys[len(keys)-1]] = value
 }