diff --git a/godev/cmd/worker/main.go b/godev/cmd/worker/main.go
index 372976f..5b45d74 100644
--- a/godev/cmd/worker/main.go
+++ b/godev/cmd/worker/main.go
@@ -273,16 +273,16 @@
 		result.Programs = append(result.Programs, prog)
 		var charts []*chart
 		if !telemetry.IsToolchainProgram(p.Name) {
-			charts = append(charts, partition(d, p.Name, "Version", p.Versions))
+			charts = append(charts, d.partition(p.Name, "Version", p.Versions))
 		}
 		charts = append(charts,
-			partition(d, p.Name, "GOOS", cfg.GOOS),
-			partition(d, p.Name, "GOARCH", cfg.GOARCH),
-			partition(d, p.Name, "GoVersion", cfg.GoVersion))
+			d.partition(p.Name, "GOOS", cfg.GOOS),
+			d.partition(p.Name, "GOARCH", cfg.GOARCH),
+			d.partition(p.Name, "GoVersion", cfg.GoVersion))
 		for _, c := range p.Counters {
 			// TODO: add support for histogram counters by getting the counter type
 			// from the chart config.
-			charts = append(charts, partition(d, p.Name, c.Name, tconfig.Expand(c.Name)))
+			charts = append(charts, d.partition(p.Name, c.Name, tconfig.Expand(c.Name)))
 		}
 		for _, p := range charts {
 			if p != nil {
@@ -335,7 +335,7 @@
 
 // partition builds a chart for the program and the counter. It can return nil
 // if there is no data for the counter in dat.
-func partition(dat data, program, counterPrefix string, counters []string) *chart {
+func (d data) partition(program, counterPrefix string, counters []string) *chart {
 	count := &chart{
 		ID:   "charts:" + program + ":" + counterPrefix,
 		Name: counterPrefix,
@@ -344,10 +344,10 @@
 	pk := programKey{program}
 	prefix, _ := splitCounterName(counterPrefix)
 	gk := graphKey{prefix}
-	for wk := range dat {
+	for wk := range d {
 		// TODO: when should this be number of reports?
 		// total := len(xs)
-		total := len(dat[wk][pk][gk][counterKey{gk.prefix}])
+		total := len(d[wk][pk][gk][counterKey{gk.prefix}])
 		if total == 0 {
 			return nil
 		}
@@ -363,7 +363,7 @@
 			seen[counter] = true
 			ck := counterKey{counter}
 			// number of reports where count prefix:bucket > 0
-			n := len(dat[wk][pk][gk][ck])
+			n := len(d[wk][pk][gk][ck])
 			_, bucket := splitCounterName(counter)
 			d := &datum{
 				Week:  wk.date,
@@ -427,7 +427,7 @@
 }
 
 // readCount reads the count value based on the input keys.
-// Return nil if any key does not exist.
+// Return error if any key does not exist.
 func (d data) readCount(week, program, prefix, counter string, x float64) (int64, error) {
 	wk := weekKey{week}
 	if _, ok := d[wk]; !ok {
diff --git a/godev/cmd/worker/main_test.go b/godev/cmd/worker/main_test.go
index 824a97c..fff40b2 100644
--- a/godev/cmd/worker/main_test.go
+++ b/godev/cmd/worker/main_test.go
@@ -295,7 +295,6 @@
 		program string
 		name    string
 		buckets []string
-		xs      []float64
 	}
 	tests := []struct {
 		name string
@@ -303,14 +302,13 @@
 		want *chart
 	}{
 		{
-			"versions counter",
-			args{
-				"example.com/mod/pkg",
-				"Version",
-				[]string{"v1.2.3", "v2.3.4"},
-				[]float64{0.123456789, 0.987654321},
+			name: "major.minor.patch version counter",
+			args: args{
+				program: "example.com/mod/pkg",
+				name:    "Version",
+				buckets: []string{"v1.2.3", "v2.3.4"},
 			},
-			&chart{
+			want: &chart{
 				ID:   "charts:example.com/mod/pkg:Version",
 				Name: "Version",
 				Type: "partition",
@@ -329,14 +327,63 @@
 			},
 		},
 		{
-			"goos counter",
-			args{
-				"example.com/mod/pkg",
-				"GOOS",
-				[]string{"darwin", "linux"},
-				[]float64{0.123456789, 0.987654321},
+			name: "major.minor version counter should have same result as major.minor.patch",
+			args: args{
+				program: "example.com/mod/pkg",
+				name:    "Version",
+				buckets: []string{"v1.2", "v2.3"},
 			},
-			&chart{
+			want: &chart{
+				ID:   "charts:example.com/mod/pkg:Version",
+				Name: "Version",
+				Type: "partition",
+				Data: []*datum{
+					{
+						Week:  "2999-01-01",
+						Key:   "v1.2",
+						Value: 1,
+					},
+					{
+						Week:  "2999-01-01",
+						Key:   "v2.3",
+						Value: 0.5,
+					},
+				},
+			},
+		},
+		{
+			name: "duplicated counter should be ignored",
+			args: args{
+				program: "example.com/mod/pkg",
+				name:    "Version",
+				buckets: []string{"v1.2.3", "v2.3.4", "v1.2.3"},
+			},
+			want: &chart{
+				ID:   "charts:example.com/mod/pkg:Version",
+				Name: "Version",
+				Type: "partition",
+				Data: []*datum{
+					{
+						Week:  "2999-01-01",
+						Key:   "v1.2",
+						Value: 1,
+					},
+					{
+						Week:  "2999-01-01",
+						Key:   "v2.3",
+						Value: 0.5,
+					},
+				},
+			},
+		},
+		{
+			name: "goos counter",
+			args: args{
+				program: "example.com/mod/pkg",
+				name:    "GOOS",
+				buckets: []string{"darwin", "linux"},
+			},
+			want: &chart{
 				ID:   "charts:example.com/mod/pkg:GOOS",
 				Name: "GOOS",
 				Type: "partition",
@@ -357,8 +404,8 @@
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := partition(dat, tt.args.program, tt.args.name, tt.args.buckets); !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("histogram() = %v, want %v", got, tt.want)
+			if got := dat.partition(tt.args.program, tt.args.name, tt.args.buckets); !reflect.DeepEqual(got, tt.want) {
+				t.Errorf("partition() = %v, want %v", got, tt.want)
 			}
 		})
 	}
