diff --git a/CHANGELOG.md b/CHANGELOG.md
index 751ee1eaaed702df1508c78f9036f8b7da1061e6..b228a891d008e2697c5273f0a5eccd96736efaa8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,7 +29,8 @@ in their config file.
 - [#2078](https://github.com/influxdata/telegraf/pull/2078): Ping input: add standard deviation field.
 - [#2121](https://github.com/influxdata/telegraf/pull/2121): Add GC pause metric to InfluxDB input plugin.
 - [#2006](https://github.com/influxdata/telegraf/pull/2006): Added response_timeout property to prometheus input plugin.
-- [#1763](https://github.com/influxdata/telegraf/issues/1763): Pulling github.com/lxn/win's pdh wrapper into telegraf
+- [#1763](https://github.com/influxdata/telegraf/issues/1763): Pulling github.com/lxn/win's pdh wrapper into telegraf.
+- [#1898](https://github.com/influxdata/telegraf/issues/1898): Support negative statsd counters.
 
 ### Bugfixes
 
diff --git a/plugins/inputs/statsd/statsd.go b/plugins/inputs/statsd/statsd.go
index 75dfc915ef1f5c9dc1040026d6c1f00ec1f114c6..1b0189a9ea3b276e62cf16d339da1dbe27dec2e5 100644
--- a/plugins/inputs/statsd/statsd.go
+++ b/plugins/inputs/statsd/statsd.go
@@ -426,8 +426,8 @@ func (s *Statsd) parseStatsdLine(line string) error {
 
 		// Parse the value
 		if strings.HasPrefix(pipesplit[0], "-") || strings.HasPrefix(pipesplit[0], "+") {
-			if m.mtype != "g" {
-				log.Printf("E! Error: +- values are only supported for gauges: %s\n", line)
+			if m.mtype != "g" && m.mtype != "c" {
+				log.Printf("E! Error: +- values are only supported for gauges & counters: %s\n", line)
 				return errors.New("Error Parsing statsd line")
 			}
 			m.additive = true
diff --git a/plugins/inputs/statsd/statsd_test.go b/plugins/inputs/statsd/statsd_test.go
index 9fbaf5372a744c5e1416a3cb242b7837cf419635..ff3002d2cf6c1f56f256190576d23b897cbc83e2 100644
--- a/plugins/inputs/statsd/statsd_test.go
+++ b/plugins/inputs/statsd/statsd_test.go
@@ -197,6 +197,8 @@ func TestParse_Counters(t *testing.T) {
 		"sample.rate:1|c|@0.1",
 		"sample.rate:1|c",
 		"scientific.notation:4.696E+5|c",
+		"negative.test:100|c",
+		"negative.test:-5|c",
 	}
 
 	for _, line := range valid_lines {
@@ -230,6 +232,10 @@ func TestParse_Counters(t *testing.T) {
 			"sample_rate",
 			11,
 		},
+		{
+			"negative_test",
+			95,
+		},
 	}
 
 	for _, test := range validations {
@@ -299,11 +305,9 @@ func TestParse_InvalidLines(t *testing.T) {
 		"i.dont.have.a.pipe:45g",
 		"i.dont.have.a.colon45|c",
 		"invalid.metric.type:45|e",
-		"invalid.plus.minus.non.gauge:+10|c",
 		"invalid.plus.minus.non.gauge:+10|s",
 		"invalid.plus.minus.non.gauge:+10|ms",
 		"invalid.plus.minus.non.gauge:+10|h",
-		"invalid.plus.minus.non.gauge:-10|c",
 		"invalid.value:foobar|c",
 		"invalid.value:d11|c",
 		"invalid.value:1d1|c",