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)
