diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6f5ca5d3b70268afcf81f6e36cf27f2d09d70cc2..1de19eca00f65f1d9e121e7ca7200a1f5230f9fe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,7 @@
 - [#1949](https://github.com/influxdata/telegraf/issues/1949): Fix windows `net` plugin.
 - [#1775](https://github.com/influxdata/telegraf/issues/1775): Cache & expire metrics for delivery to prometheus.
 - [#2146](https://github.com/influxdata/telegraf/issues/2146): Fix potential panic in aggregator plugin metric maker.
+- [#1843](https://github.com/influxdata/telegraf/pull/1843) & [#1668](https://github.com/influxdata/telegraf/issues/1668): Add optional ability to define PID as a tag.
 
 ## v1.1.2 [2016-12-12]
 
diff --git a/plugins/inputs/procstat/procstat.go b/plugins/inputs/procstat/procstat.go
index e29b5031cbc62e9a0a3e5fbea6a0bbcb1127775b..929490e4a2e237249dd8adcf9f76be625463007b 100644
--- a/plugins/inputs/procstat/procstat.go
+++ b/plugins/inputs/procstat/procstat.go
@@ -21,6 +21,7 @@ type Procstat struct {
 	Prefix      string
 	ProcessName string
 	User        string
+	PidTag      bool
 
 	// pidmap maps a pid to a process object, so we don't recreate every gather
 	pidmap map[int32]*process.Process
@@ -53,6 +54,8 @@ var sampleConfig = `
   prefix = ""
   ## comment this out if you want raw cpu_time stats
   fielddrop = ["cpu_time_*"]
+  ## This is optional; moves pid into a tag instead of a field
+  pid_tag = false
 `
 
 func (_ *Procstat) SampleConfig() string {
@@ -70,6 +73,9 @@ func (p *Procstat) Gather(acc telegraf.Accumulator) error {
 			p.Exe, p.PidFile, p.Pattern, p.User, err.Error())
 	} else {
 		for pid, proc := range p.pidmap {
+			if p.PidTag {
+				p.tagmap[pid]["pid"] = fmt.Sprint(pid)
+			}
 			p := NewSpecProcessor(p.ProcessName, p.Prefix, pid, acc, proc, p.tagmap[pid])
 			p.pushMetrics()
 		}
diff --git a/plugins/inputs/procstat/spec_processor.go b/plugins/inputs/procstat/spec_processor.go
index 5143d8bccd65405df0ad06b9bcea1534f87384ad..3b56fbc3e212a663712851fc61b912f982c6dbc8 100644
--- a/plugins/inputs/procstat/spec_processor.go
+++ b/plugins/inputs/procstat/spec_processor.go
@@ -48,7 +48,12 @@ func (p *SpecProcessor) pushMetrics() {
 	if p.Prefix != "" {
 		prefix = p.Prefix + "_"
 	}
-	fields := map[string]interface{}{"pid": p.pid}
+	fields := map[string]interface{}{}
+
+	//If pid is not present as a tag, include it as a field.
+	if _, pidInTags := p.tags["pid"]; !pidInTags {
+		fields["pid"] = p.pid
+	}
 
 	numThreads, err := p.proc.NumThreads()
 	if err == nil {