diff --git a/decoder.go b/decoder.go
index 3c4246c..9a8b90d 100644
--- a/decoder.go
+++ b/decoder.go
@@ -16,17 +16,17 @@
 )
 
 // Decodes an ISO-8859-1 encoded buffer into a Properties struct.
-func Decode(buf []byte) (*Properties, error) {
+func Decode(buf []byte) (Properties, error) {
 	return decodeWithEncoding(buf, enc_iso_8859_1)
 }
 
 // Decodes an UTF-8 string into a Properties struct.
-func DecodeFromString(input string) (*Properties, error) {
+func DecodeFromString(input string) (Properties, error) {
 	return decodeWithEncoding([]byte(input), enc_utf8)
 }
 
 // Decodes either an ISO-8859-1 or an UTF-8 encoded string into a Properties struct.
-func decodeWithEncoding(buf []byte, enc encoding) (*Properties, error) {
+func decodeWithEncoding(buf []byte, enc encoding) (Properties, error) {
 	return newParser().Parse(convert(buf, enc))
 }
 
diff --git a/decoder_test.go b/decoder_test.go
index e445b8b..701ef2e 100644
--- a/decoder_test.go
+++ b/decoder_test.go
@@ -136,11 +136,11 @@
 	p, err := Decode([]byte(input))
 	c.Assert(err, IsNil)
 	c.Assert(p, NotNil)
-	c.Assert(p.Len(), Equals, len(keyvalues)/2, Commentf("Odd number of key/value pairs."))
+	c.Assert(len(p), Equals, len(keyvalues)/2, Commentf("Odd number of key/value pairs."))
 
 	for i := 0; i < len(keyvalues)/2; i += 2 {
 		key, value := keyvalues[i], keyvalues[i+1]
-		v, ok := p.Get(key)
+		v, ok := p[key]
 		c.Assert(ok, Equals, true, Commentf("No key %q for input %q", key, input))
 		c.Assert(v, Equals, value, Commentf("Value %q does not match input %q", value, input))
 	}
diff --git a/example_test.go b/example_test.go
index 7ecbc11..1c128cc 100644
--- a/example_test.go
+++ b/example_test.go
@@ -12,7 +12,7 @@
 	buf := []byte("key = ISO-8859-1 value with unicode literal \\u2318 and umlaut ")
 	buf = append(buf, 0xE4) // 0xE4 == ä
 	p, _ := Decode(buf)
-	v, ok := p.Get("key")
+	v, ok := p["key"]
 	fmt.Println(ok)
 	fmt.Println(v)
 	// Output:
@@ -22,7 +22,7 @@
 
 func ExampleDecodeFromString() {
 	p, _ := DecodeFromString("key = UTF-8 value with unicode character ⌘ and umlaut ä")
-	v, ok := p.Get("key")
+	v, ok := p["key"]
 	fmt.Println(ok)
 	fmt.Println(v)
 	// Output:
diff --git a/parser.go b/parser.go
index 0909443..849449b 100644
--- a/parser.go
+++ b/parser.go
@@ -17,10 +17,10 @@
 	return &parser{}
 }
 
-func (p *parser) Parse(input string) (props *Properties, err error) {
+func (p *parser) Parse(input string) (props Properties, err error) {
 	defer p.recover(&err)
 	p.lex = lex(input)
-	props = &Properties{m:make(map[string]string)}
+	props = make(map[string]string)
 
 	for {
 		token := p.expectOneOf(itemKey, itemEOF)
@@ -31,10 +31,10 @@
 
 		token = p.expectOneOf(itemValue, itemEOF)
 		if token.typ == itemEOF {
-			props.Set(key, "")
+			props[key] = ""
 			break
 		}
-		props.Set(key, token.val)
+		props[key] = token.val
 	}
 
 	return props, nil
diff --git a/properties.go b/properties.go
index ee0d318..0f965a9 100644
--- a/properties.go
+++ b/properties.go
@@ -4,28 +4,4 @@
 
 package goproperties
 
-type Properties struct {
-	m map[string]string
-}
-
-// Returns the value for the given key.
-func (p *Properties) Get(key string) (value string, ok bool) {
-	value, ok = p.m[key]
-	return value, ok
-}
-
-// Sets the property key to the given value and returns the previous value if exists or an empty string.
-func (p *Properties) Set(key, value string) (prevValue string) {
-	prevValue, ok := p.m[key]
-	if !ok {
-		prevValue = ""
-	}
-
-	p.m[key] = value
-	return prevValue
-}
-
-// Returns the number of keys.
-func (p *Properties) Len() int {
-	return len(p.m)
-}
+type Properties map[string]string
