diff --git a/cmd/process-exporter/main.go b/cmd/process-exporter/main.go
index 6dfc0a0..fedff1b 100644
--- a/cmd/process-exporter/main.go
+++ b/cmd/process-exporter/main.go
@@ -3,6 +3,7 @@ package main
 import (
 	"flag"
 	"fmt"
+	"github.com/prometheus/client_golang/prometheus/collectors"
 	"log"
 	"net/http"
 	_ "net/http/pprof"
@@ -140,9 +141,12 @@ func (nmr *nameMapperRegex) MatchAndName(nacl common.ProcAttributes) (bool, stri
 	return false, ""
 }
 
+// Create a new custom Prometheus registry
+var registry = prometheus.NewRegistry()
+
 func init() {
 	promVersion.Version = version
-	prometheus.MustRegister(verCollector.NewCollector("process_exporter"))
+	registry.MustRegister(verCollector.NewCollector("process_exporter"))
 }
 
 func main() {
@@ -180,6 +184,8 @@ func main() {
 		showVersion = flag.Bool("version", false,
 			"print version information and exit")
 		removeEmptyGroups = flag.Bool("remove-empty-groups", false, "forget process groups with no processes")
+		disableGoMetrics  = flag.Bool("collector.disable-go-runtime-metrics", false,
+			"Disable collection of Go runtime metrics")
 	)
 	flag.Parse()
 
@@ -256,7 +262,12 @@ func main() {
 		log.Fatalf("Error initializing: %v", err)
 	}
 
-	prometheus.MustRegister(pc)
+	registry.MustRegister(pc)
+
+	if !*disableGoMetrics {
+		// Register Go runtime metrics if the flag is not set
+		registry.MustRegister(collectors.NewGoCollector())
+	}
 
 	if *onceToStdoutDelay != 0 {
 		// We throw away the first result because that first collection primes the pump, and
@@ -269,7 +280,7 @@ func main() {
 		return
 	}
 
-	http.Handle(*metricsPath, promhttp.Handler())
+	http.Handle(*metricsPath, promhttp.HandlerFor(registry, promhttp.HandlerOpts{}))
 
 	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 		w.Write([]byte(`<html>