Make encoding explicit.
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()))
 }