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
