Added error context for parsing of subtrees
diff --git a/parser.go b/parser.go
index 4d3927c..2e70e74 100644
--- a/parser.go
+++ b/parser.go
@@ -134,7 +134,9 @@
 		}
 	}
 	p.seenGroupKeys = append(p.seenGroupKeys, key.val)
-	p.tree.createSubTree(key.val)
+	if err := p.tree.createSubTree(key.val); err != nil {
+    p.raiseError(key, "%s", err)
+  }
 	p.assume(tokenRightBracket)
 	p.currentGroup = strings.Split(key.val, ".")
 	return parseStart(p)
diff --git a/parser_test.go b/parser_test.go
index b73fcce..752c4a7 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -228,7 +228,7 @@
 
 func TestEmptyIntermediateTable(t *testing.T) {
 	_, err := Load("[foo..bar]")
-	if err.Error() != "empty intermediate table" {
+	if err.Error() != "(1, 2): empty intermediate table" {
 		t.Error("Bad error message:", err.Error())
 	}
 }
diff --git a/toml.go b/toml.go
index 84403fe..5dceb15 100644
--- a/toml.go
+++ b/toml.go
@@ -142,11 +142,13 @@
 //
 // e.g. passing a.b.c will create (assuming tree is empty) tree[a], tree[a][b]
 // and tree[a][b][c]
-func (t *TomlTree) createSubTree(key string) {
+//
+// Returns nil on success, error object on failure
+func (t *TomlTree) createSubTree(key string) error{
 	subtree := t
 	for _, intermediate_key := range strings.Split(key, ".") {
 		if intermediate_key == "" {
-			panic("empty intermediate table")
+			return fmt.Errorf("empty intermediate table")
 		}
 		_, exists := (*subtree)[intermediate_key]
 		if !exists {
@@ -155,6 +157,7 @@
 		}
 		subtree = ((*subtree)[intermediate_key]).(*TomlTree)
 	}
+  return nil
 }
 
 // encodes a string to a TOML-compliant string value