Added GetParsedDuration()/MustGetParsedDuration()
diff --git a/README.md b/README.md
index 462004f..30fdaea 100644
--- a/README.md
+++ b/README.md
@@ -53,6 +53,11 @@
 History
 -------
 
+v1.5.1, 08 Dec 2014
+-------------------
+ * Added GetParsedDuration() and MustGetParsedDuration() for values specified compatible with
+   [time.ParseDuration()](http://golang.org/pkg/time/#ParseDuration).
+
 v1.5.0, 18 Nov 2014
 -------------------
  * Added support for single and multi-line comments (reading, writing and updating)
diff --git a/properties.go b/properties.go
index b6e0d59..03abec2 100644
--- a/properties.go
+++ b/properties.go
@@ -180,9 +180,9 @@
 
 // ----------------------------------------------------------------------------
 
-// GetDuration parses the expanded value as an time.Duration if the key exists.
-// If key does not exist or the value cannot be parsed the default
-// value is returned.
+// GetDuration parses the expanded value as an time.Duration (in ns) if the
+// key exists. If key does not exist or the value cannot be parsed the default
+// value is returned. In almost all cases you want to use GetParsedDuration().
 func (p *Properties) GetDuration(key string, def time.Duration) time.Duration {
 	v, err := p.getInt64(key)
 	if err != nil {
@@ -191,8 +191,9 @@
 	return time.Duration(v)
 }
 
-// MustGetDuration parses the expanded value as an time.Duration if the key exists.
-// If key does not exist or the value cannot be parsed the function panics.
+// MustGetDuration parses the expanded value as an time.Duration (in ns) if
+// the key exists. If key does not exist or the value cannot be parsed the
+// function panics. In almost all cases you want to use MustGetParsedDuration().
 func (p *Properties) MustGetDuration(key string) time.Duration {
 	v, err := p.getInt64(key)
 	if err != nil {
@@ -203,6 +204,37 @@
 
 // ----------------------------------------------------------------------------
 
+// GetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.
+// If key does not exist or the value cannot be parsed the default
+// value is returned.
+func (p *Properties) GetParsedDuration(key string, def time.Duration) time.Duration {
+	s, ok := p.Get(key)
+	if !ok {
+		return def
+	}
+	v, err := time.ParseDuration(s)
+	if err != nil {
+		return def
+	}
+	return v
+}
+
+// MustGetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.
+// If key does not exist or the value cannot be parsed the function panics.
+func (p *Properties) MustGetParsedDuration(key string) time.Duration {
+	s, ok := p.Get(key)
+	if !ok {
+		ErrorHandler(invalidKeyError(key))
+	}
+	v, err := time.ParseDuration(s)
+	if err != nil {
+		ErrorHandler(err)
+	}
+	return v
+}
+
+// ----------------------------------------------------------------------------
+
 // GetFloat64 parses the expanded value as a float64 if the key exists.
 // If key does not exist or the value cannot be parsed the default
 // value is returned.
diff --git a/properties_test.go b/properties_test.go
index fee9de8..6f1c5c1 100644
--- a/properties_test.go
+++ b/properties_test.go
@@ -242,6 +242,30 @@
 
 // ----------------------------------------------------------------------------
 
+var parsedDurationTests = []struct {
+	input, key string
+	def, value time.Duration
+}{
+	// valid values
+	{"key = -1ns", "key", 999, -1*time.Nanosecond},
+	{"key = 300ms", "key", 999, 300*time.Millisecond},
+	{"key = 5s", "key", 999, 5*time.Second},
+	{"key = 3h", "key", 999, 3*time.Hour},
+	{"key = 2h45m", "key", 999, 2*time.Hour+45*time.Minute},
+
+	// invalid values
+	{"key = 0xff", "key", 999, 999},
+	{"key = 1.0", "key", 999, 999},
+	{"key = a", "key", 999, 999},
+	{"key = 1", "key", 999, 999},
+	{"key = 0", "key", 999, 0},
+
+	// non existent key
+	{"key = 1", "key2", 999, 999},
+}
+
+// ----------------------------------------------------------------------------
+
 var floatTests = []struct {
 	input, key string
 	def, value float64
@@ -458,6 +482,24 @@
 	c.Assert(func() { p.MustGetDuration("invalid") }, PanicMatches, "unknown property: invalid")
 }
 
+func (s *TestSuite) TestGetParsedDuration(c *C) {
+	for _, test := range parsedDurationTests {
+		p, err := parse(test.input)
+		c.Assert(err, IsNil)
+		c.Assert(p.Len(), Equals, 1)
+		c.Assert(p.GetParsedDuration(test.key, test.def), Equals, test.value)
+	}
+}
+
+func (s *TestSuite) TestMustGetParsedDuration(c *C) {
+	input := "key = 123ms\nkey2 = ghi"
+	p, err := parse(input)
+	c.Assert(err, IsNil)
+	c.Assert(p.MustGetParsedDuration("key"), Equals, 123*time.Millisecond)
+	c.Assert(func() { p.MustGetParsedDuration("key2") }, PanicMatches, "time: invalid duration ghi")
+	c.Assert(func() { p.MustGetParsedDuration("invalid") }, PanicMatches, "unknown property: invalid")
+}
+
 func (s *TestSuite) TestGetFloat64(c *C) {
 	for _, test := range floatTests {
 		p, err := parse(test.input)