extended Has function to work with paths
diff --git a/toml.go b/toml.go
index a7918ba..84403fe 100644
--- a/toml.go
+++ b/toml.go
@@ -18,16 +18,37 @@
 // This is the result of the parsing of a TOML file.
 type TomlTree map[string]interface{}
 
-// Has returns a boolean indicating if the toplevel tree contains the given
-// key.
+// Has returns a boolean indicating if the given key exists.
 func (t *TomlTree) Has(key string) bool {
-	mp := (map[string]interface{})(*t)
-	for k, _ := range mp {
-		if k == key {
-			return true
+	if key == "" {
+		return false
+	}
+	return t.HasPath(strings.Split(key, "."))
+}
+
+// Returns true if the given path of keys exists, false otherwise.
+func (t *TomlTree) HasPath(keys []string) bool {
+	if len(keys) == 0 {
+		return false
+	}
+	subtree := t
+	for _, intermediate_key := range keys[:len(keys)-1] {
+		_, exists := (*subtree)[intermediate_key]
+		if !exists {
+			return false
+		}
+		switch node := (*subtree)[intermediate_key].(type) {
+		case *TomlTree:
+			subtree = node
+		case []*TomlTree:
+			// go to most recent element
+			if len(node) == 0 {
+				return false
+			}
+			subtree = node[len(node)-1]
 		}
 	}
-	return false
+	return true
 }
 
 // Keys returns the keys of the toplevel tree.
diff --git a/toml_test.go b/toml_test.go
index 4b6610e..05a217e 100644
--- a/toml_test.go
+++ b/toml_test.go
@@ -4,6 +4,28 @@
 	"testing"
 )
 
+func TestTomlHas(t *testing.T) {
+	tree, _ := Load(`
+		[test]
+		key = "value"
+	`)
+
+	if !tree.Has("test.key") {
+		t.Errorf("Has - expected test.key to exists")
+	}
+}
+
+func TestTomlHasPath(t *testing.T) {
+	tree, _ := Load(`
+		[test]
+		key = "value"
+	`)
+
+	if !tree.HasPath([]string{"test", "key"}) {
+		t.Errorf("HasPath - expected test.key to exists")
+	}
+}
+
 func TestTomlGetPath(t *testing.T) {
 	node := make(TomlTree)
 	//TODO: set other node data