diff --git a/example_test.go b/example_test.go
index d8ee275..18081aa 100644
--- a/example_test.go
+++ b/example_test.go
@@ -9,10 +9,10 @@
 	"log"
 )
 
-func ExampleLoad() {
+func ExampleLoad_ISO() {
 	buf := []byte("key = ISO-8859-1 value with unicode literal \\u2318 and umlaut ")
 	buf = append(buf, 0xE4) // 0xE4 == ä
-	p, _ := Load(buf)
+	p, _ := Load(buf, ISO_8859_1)
 	v, ok := p.Get("key")
 	fmt.Println(ok)
 	fmt.Println(v)
@@ -21,8 +21,8 @@
 	// ISO-8859-1 value with unicode literal ⌘ and umlaut ä
 }
 
-func ExampleLoadString() {
-	p, _ := LoadString("key = UTF-8 value with unicode character ⌘ and umlaut ä")
+func ExampleLoad_UTF8() {
+	p, _ := Load([]byte("key = UTF-8 value with unicode character ⌘ and umlaut ä"), UTF8)
 	v, ok := p.Get("key")
 	fmt.Println(ok)
 	fmt.Println(v)
@@ -32,7 +32,7 @@
 }
 
 func Example_Properties_GetDefault() {
-	p, _ := LoadString("key=value")
+	p, _ := Load([]byte("key=value"), ISO_8859_1)
 	v := p.GetDefault("another key", "default value")
 	fmt.Println(v)
 	// Output:
@@ -41,7 +41,7 @@
 
 func Example() {
 	// Decode some key/value pairs with expressions
-	p, err := LoadString("key=value\nkey2=${key}")
+	p, err := Load([]byte("key=value\nkey2=${key}"), ISO_8859_1)
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/load.go b/load.go
index ecb9439..b77da41 100644
--- a/load.go
+++ b/load.go
@@ -10,57 +10,50 @@
 	"os"
 )
 
-// Load reads an ISO-8859-1 encoded buffer into a Properties struct.
-func Load(buf []byte) (*Properties, error) {
-	return loadBuf(buf, enc_iso_8859_1)
-}
-
-// LoadString reads an UTF-8 string into a Properties struct.
-func LoadString(input string) (*Properties, error) {
-	return loadBuf([]byte(input), enc_utf8)
+// Load reads a buffer into a Properties struct.
+func Load(buf []byte, enc Encoding) (*Properties, error) {
+	return loadBuf(buf, enc)
 }
 
 // LoadFile reads a file into a Properties struct.
-func LoadFile(filename string) (*Properties, error) {
-	return loadFiles([]string{filename}, false)
+func LoadFile(filename string, enc Encoding) (*Properties, error) {
+	return loadFiles([]string{filename}, enc, false)
 }
 
-// LoadFiles reads multiple file in the given order into
-// a Properties struct. If 'ignoreMissing' is 'true' then
+// LoadFiles reads multiple files in the given order into
+// a Properties struct. If 'ignoreMissing' is true then
 // non-existent files will not be reported as error.
-func LoadFiles(filenames []string, ignoreMissing bool) (*Properties, error) {
-	return loadFiles(filenames, ignoreMissing)
+func LoadFiles(filenames []string, enc Encoding, ignoreMissing bool) (*Properties, error) {
+	return loadFiles(filenames, enc, ignoreMissing)
 }
 
-// MustLoadFile reads a file into a Properties struct and panics on error.
-func MustLoadFile(filename string) *Properties {
-	return MustLoadFiles([]string{filename}, false)
+// MustLoadFile reads a file into a Properties struct and
+// panics on error.
+func MustLoadFile(filename string, enc Encoding) *Properties {
+	return mustLoadFiles([]string{filename}, enc, false)
 }
 
-// MustLoadFiles reads multiple file in the given order into
-// a Properties struct and panics on error.
-// If 'ignoreMissing' is 'true' then non-existent files will not be reported as error.
-func MustLoadFiles(filenames []string, ignoreMissing bool) *Properties {
-	p, err := loadFiles(filenames, ignoreMissing)
-	if err != nil {
-		panic(err)
-	}
-	return p
+// MustLoadFiles reads multiple files in the given order into
+// a Properties struct and panics on error. If 'ignoreMissing'
+// is true then non-existent files will not be reported as error.
+func MustLoadFiles(filenames []string, enc Encoding, ignoreMissing bool) *Properties {
+	return mustLoadFiles(filenames, enc, ignoreMissing)
 }
 
-type encoding uint
+// ----------------------------------------------------------------------------
+
+type Encoding uint
 
 const (
-	enc_utf8 encoding = 1 << iota
-	enc_iso_8859_1
+	UTF8 Encoding = 1 << iota
+	ISO_8859_1
 )
 
-// Loads either an ISO-8859-1 or an UTF-8 encoded string into a Properties struct.
-func loadBuf(buf []byte, enc encoding) (*Properties, error) {
+func loadBuf(buf []byte, enc Encoding) (*Properties, error) {
 	return parse(convert(buf, enc))
 }
 
-func loadFiles(filenames []string, ignoreMissing bool) (*Properties, error) {
+func loadFiles(filenames []string, enc Encoding, ignoreMissing bool) (*Properties, error) {
 	buff := make([]byte, 0, 4096)
 
 	for _, filename := range filenames {
@@ -78,17 +71,25 @@
 		buff = append(append(buff, buf...), '\n')
 	}
 
-	return loadBuf(buff, enc_iso_8859_1)
+	return loadBuf(buff, enc)
 }
 
-// Interprets a byte buffer either as ISO-8859-1 or UTF-8 encoded string.
+func mustLoadFiles(filenames []string, enc Encoding, ignoreMissing bool) *Properties {
+	p, err := loadFiles(filenames, enc, ignoreMissing)
+	if err != nil {
+		panic(err)
+	}
+	return p
+}
+
+// Interprets a byte buffer either as an ISO-8859-1 or UTF-8 encoded string.
 // For ISO-8859-1 we can convert each byte straight into a rune since the
 // first 256 unicode code points cover ISO-8859-1.
-func convert(buf []byte, enc encoding) string {
+func convert(buf []byte, enc Encoding) string {
 	switch enc {
-	case enc_utf8:
+	case UTF8:
 		return string(buf)
-	case enc_iso_8859_1:
+	case ISO_8859_1:
 		runes := make([]rune, len(buf))
 		for i, b := range buf {
 			runes[i] = rune(b)
diff --git a/load_test.go b/load_test.go
index 42fe1d7..0d9ef75 100644
--- a/load_test.go
+++ b/load_test.go
@@ -23,7 +23,7 @@
 // ----------------------------------------------------------------------------
 
 func (s *LoadSuite) TestLoadFailsWithNotExistingFile(c *C) {
-	_, err := LoadFile("doesnotexist.properties")
+	_, err := LoadFile("doesnotexist.properties", ISO_8859_1)
 	c.Assert(err, NotNil)
 	c.Assert(err, ErrorMatches, "open.*no such file or directory")
 }
@@ -31,7 +31,7 @@
 // ----------------------------------------------------------------------------
 
 func (s *LoadSuite) TestLoadFilesFailsOnNotExistingFile(c *C) {
-	_, err := LoadFiles([]string{"doesnotexist.properties"}, false)
+	_, err := LoadFiles([]string{"doesnotexist.properties"}, ISO_8859_1, false)
 	c.Assert(err, NotNil)
 	c.Assert(err, ErrorMatches, "open.*no such file or directory")
 }
@@ -39,7 +39,7 @@
 // ----------------------------------------------------------------------------
 
 func (s *LoadSuite) TestLoadFilesDoesNotFailOnNotExistingFileAndIgnoreMissing(c *C) {
-	p, err := LoadFiles([]string{"doesnotexist.properties"}, true)
+	p, err := LoadFiles([]string{"doesnotexist.properties"}, ISO_8859_1, true)
 	c.Assert(err, IsNil)
 	c.Assert(p.Len(), Equals, 0)
 }
@@ -48,7 +48,7 @@
 
 func (s *LoadSuite) TestLoad(c *C) {
 	filename := s.makeFile(c, "key=value")
-	p := MustLoadFile(filename)
+	p := MustLoadFile(filename, ISO_8859_1)
 
 	c.Assert(p.Len(), Equals, 1)
 	assertKeyValues(c, "", p, "key", "value")
@@ -59,7 +59,7 @@
 func (s *LoadSuite) TestLoadFiles(c *C) {
 	filename := s.makeFile(c, "key=value")
 	filename2 := s.makeFile(c, "key2=value2")
-	p := MustLoadFiles([]string{filename, filename2}, false)
+	p := MustLoadFiles([]string{filename, filename2}, ISO_8859_1, false)
 	assertKeyValues(c, "", p, "key", "value", "key2", "value2")
 }
 
@@ -68,7 +68,7 @@
 func (s *LoadSuite) TestLoadFilesAndIgnoreMissing(c *C) {
 	filename := s.makeFile(c, "key=value")
 	filename2 := s.makeFile(c, "key2=value2")
-	p := MustLoadFiles([]string{filename, filename + "foo", filename2, filename2 + "foo"}, true)
+	p := MustLoadFiles([]string{filename, filename + "foo", filename2, filename2 + "foo"}, ISO_8859_1, true)
 	assertKeyValues(c, "", p, "key", "value", "key2", "value2")
 }
 
diff --git a/properties_test.go b/properties_test.go
index 91b1a7e..0522007 100644
--- a/properties_test.go
+++ b/properties_test.go
@@ -120,7 +120,7 @@
 	}
 	b.ResetTimer()
 	for i := 0; i < b.N; i++ {
-		Load([]byte(input))
+		Load([]byte(input), ISO_8859_1)
 	}
 }
 
@@ -188,7 +188,7 @@
 func testKeyValue(c *C, input string, keyvalues ...string) {
 	printf("%q\n", input)
 
-	p, err := Load([]byte(input))
+	p, err := Load([]byte(input), ISO_8859_1)
 	c.Assert(err, IsNil)
 	assertKeyValues(c, input, p, keyvalues...)
 }
@@ -197,7 +197,7 @@
 func testError(c *C, input, msg string) {
 	printf("%q\n", input)
 
-	_, err := Load([]byte(input))
+	_, err := Load([]byte(input), ISO_8859_1)
 	c.Assert(err, NotNil)
 	c.Assert(strings.Contains(err.Error(), msg), Equals, true, Commentf("Expected %q got %q", msg, err.Error()))
 }
