diff --git a/analysis/app/compare.go b/analysis/app/compare.go
index 396de99..c4f7854 100644
--- a/analysis/app/compare.go
+++ b/analysis/app/compare.go
@@ -332,7 +332,7 @@
 
 	// Prepare struct for template.
 	labels := make(map[string]bool)
-	// commonLabels are the key: value of every label that has an
+	// commonLabels are the key-value pairs for every label that has an
 	// identical value on every result.
 	commonLabels := make(benchfmt.Labels)
 	// Scan the first group for common labels.
diff --git a/analysis/app/trend.go b/analysis/app/trend.go
index 46d1386..8ee83ad 100644
--- a/analysis/app/trend.go
+++ b/analysis/app/trend.go
@@ -326,7 +326,7 @@
 //	one	1	2
 //	two	3	4
 //
-// and will turn in into a table like
+// and will turn it into a table like
 //
 //	one/value1	one/value2	two/value1	two/value2
 //	1		2		3		4
@@ -335,13 +335,13 @@
 type aggResults struct {
 	// Across is the name of the column whose values are the column prefix.
 	Across string
-	// Values is the name of the columns to split.
+	// Values contains the names of the columns to split.
 	Values []string
 	// Prefixes is filled in after calling agg with the name of each prefix that was found.
 	Prefixes []string
 }
 
-// agg implements ggstat.Aggregator and allows using a with ggstat.Agg.
+// agg implements ggstat.Aggregator and allows using aggResults with ggstat.Agg.
 func (a *aggResults) agg(input table.Grouping, output *table.Builder) {
 	var prefixes []string
 	rows := len(input.Tables())
diff --git a/benchfmt/internal/bytesconv/atof.go b/benchfmt/internal/bytesconv/atof.go
index 31b26f5..ade6418 100644
--- a/benchfmt/internal/bytesconv/atof.go
+++ b/benchfmt/internal/bytesconv/atof.go
@@ -120,7 +120,7 @@
 	// optional exponent moves decimal point.
 	// if we read a very large, very long number,
 	// just be sure to move the decimal point by
-	// a lot (say, 100000).  it doesn't matter if it's
+	// a lot (say, 100000). It doesn't matter if it's
 	// not the exact number.
 	if i < len(s) && lower(s[i]) == 'e' {
 		i++
@@ -251,7 +251,7 @@
 	// optional exponent moves decimal point.
 	// if we read a very large, very long number,
 	// just be sure to move the decimal point by
-	// a lot (say, 100000).  it doesn't matter if it's
+	// a lot (say, 100000). It doesn't matter if it's
 	// not the exact number.
 	if i < len(s) && lower(s[i]) == expChar {
 		i++
diff --git a/benchfmt/internal/bytesconv/decimal.go b/benchfmt/internal/bytesconv/decimal.go
index 31410b4..1dbc810 100644
--- a/benchfmt/internal/bytesconv/decimal.go
+++ b/benchfmt/internal/bytesconv/decimal.go
@@ -106,7 +106,7 @@
 const uintSize = 32 << (^uint(0) >> 63)
 const maxShift = uintSize - 4
 
-// Binary shift right (/ 2) by k bits.  k <= maxShift to avoid overflow.
+// Binary shift right (/ 2) by k bits. k <= maxShift to avoid overflow.
 func rightShift(a *decimal, k uint) {
 	r := 0 // read pointer
 	w := 0 // write pointer
@@ -163,7 +163,7 @@
 // Cheat sheet for left shift: table indexed by shift count giving
 // number of new digits that will be introduced by that shift.
 //
-// For example, leftcheats[4] = {2, "625"}.  That means that
+// For example, leftcheats[4] = {2, "625"}. That means that
 // if we are shifting by 4 (multiplying by 16), it will add 2 digits
 // when the string prefix is "625" through "999", and one fewer digit
 // if the string prefix is "000" through "624".
@@ -265,7 +265,7 @@
 	return false
 }
 
-// Binary shift left (* 2) by k bits.  k <= maxShift to avoid overflow.
+// Binary shift left (* 2) by k bits. k <= maxShift to avoid overflow.
 func leftShift(a *decimal, k uint) {
 	delta := leftcheats[k].delta
 	if prefixIsLessThan(a.d[0:a.nd], leftcheats[k].cutoff) {
diff --git a/benchproc/key.go b/benchproc/key.go
index 32f47cc..3730c9f 100644
--- a/benchproc/key.go
+++ b/benchproc/key.go
@@ -53,7 +53,7 @@
 	return k.string(true)
 }
 
-// StringValues returns Key as a space-separated sequences of
+// StringValues returns Key as a space-separated sequence of
 // values in field order.
 func (k Key) StringValues() string {
 	return k.string(false)
diff --git a/benchseries/benchseries.go b/benchseries/benchseries.go
index d284a91..9a36a28 100644
--- a/benchseries/benchseries.go
+++ b/benchseries/benchseries.go
@@ -17,9 +17,9 @@
 	"golang.org/x/perf/benchproc"
 )
 
-// A Cell is the observations for part of a benchmark comparison.
+// A Cell contains the observations for part of a benchmark comparison.
 type Cell struct {
-	Values []float64 // Actual values observed for this cell (sorted).  Typically 1-100.
+	Values []float64 // Actual values observed for this cell (sorted). Typically 1-100.
 
 	// Residues is the set of residue Keys mapped to this cell.
 	// It is used to check for non-unique keys.
@@ -39,10 +39,10 @@
 }
 
 // A ComparisonSummary is a summary of the comparison of a particular benchmark measurement
-// for two different versions of the toolchain.  Low, Center, and High are lower, middle and
+// for two different versions of the toolchain. Low, Center, and High are lower, middle, and
 // upper estimates of the value, most likely 2.5%ile, 50%ile, and 97.5%ile from a bootstrap
-// of the original measurement ratios.  Date is the (latest) date at which the measurements
-// were taken.  Present indicates that Low/Center/High/Date are valid; if comparison is non-nil,
+// of the original measurement ratios. Date is the (latest) date at which the measurements
+// were taken. Present indicates that Low/Center/High/Date are valid; if comparison is non-nil,
 // then there is a bootstrap that can be used or was used to initialize the other fields.
 // (otherwise the source was JSON or a database).
 type ComparisonSummary struct {
@@ -120,7 +120,7 @@
 	// one table per unit; each table maps from (benchmark,experiment) to a single trial of baseline vs one or more tests
 	tables map[unitTableKey]*table
 
-	// numHashBy to numerator order.
+	// hashToOrder maps numerator hashes to numerator order.
 	hashToOrder map[benchproc.Key]benchproc.Key
 
 	filter *benchproc.Filter
@@ -433,9 +433,9 @@
 )
 
 // AllComparisonSeries converts the accumulated "experiments" into a slice of series of comparisons,
-// with one slice element per goos-goarch-unit.  The experiments need not have occurred in any
-// sensible order; this deals with that, including overlaps (depend on flag, either replaces old with
-// younger or combines, REPLACE IS PREFERRED and works properly with combining old summary data with
+// with one slice element per goos-goarch-unit. The experiments need not have occurred in any
+// sensible order; this deals with that, including overlaps (depending on the flag, it either replaces old with
+// younger data or combines, REPLACE IS PREFERRED and works properly with combining old summary data with
 // fresh benchmarking data) and possibly also with previously processed summaries.
 func (b *Builder) AllComparisonSeries(existing []*ComparisonSeries, dupeHow int) ([]*ComparisonSeries, error) {
 	old := make(map[string]*ComparisonSeries)
@@ -814,15 +814,15 @@
 // ChangeScore returns an indicator of the change and direction.
 // This is a heuristic measure of the lack of overlap between
 // two confidence intervals; minimum lack of overlap (i.e., same
-// confidence intervals) is zero.  Exact non-overlap, meaning
+// confidence intervals) is zero. Exact non-overlap, meaning
 // the high end of one interval is equal to the low end of the
-// other, is one.  A gap of size G between the two intervals
+// other, is one. A gap of size G between the two intervals
 // yields a score of 1 + G/M where M is the size of the smaller
 // interval (this penalizes a ChangeScore in noise, which is also a
 // ChangeScore). A partial overlap of size G yields a score of
 // 1 - G/M.
 //
-// Empty confidence intervals are problematic and produces infinities
+// Empty confidence intervals are problematic and can produce infinities
 // or NaNs.
 func ChangeScore(l1, c1, h1, l2, c2, h2 float64) float64 {
 	sign := 1.0
@@ -858,7 +858,7 @@
 }
 
 // KSov returns the size-adjusted Kolmogorov-Smirnov statistic,
-// equal to D_{n,m} / sqrt((n+m)/n*m).  The result can be compared
+// equal to D_{n,m} / sqrt((n+m)/n*m). The result can be compared
 // to c(α) where α is the level at which the null hypothesis is rejected.
 //
 //	   α:  0.2   0.15  0.10  0.05  0.025 0.01  0.005 0.001
@@ -911,8 +911,8 @@
 	return ChangeScore(a.Low, a.Center, a.High, b.Low, b.Center, b.High)
 }
 
-// AddSummaries computes the summary data (bootstrapped estimated of the specified
-// confidence interval) for the comparison series cs.  The 3rd parameter N specifies
+// AddSummaries computes the summary data (bootstrapped estimate of the specified
+// confidence interval) for the comparison series cs. The third parameter N specifies
 // the number of sampled bootstraps to use; 1000 is recommended, but 500 is good enough
 // for testing.
 func (cs *ComparisonSeries) AddSummaries(confidence float64, N int) {
diff --git a/benchstat/text.go b/benchstat/text.go
index 55b7a26..b060980 100644
--- a/benchstat/text.go
+++ b/benchstat/text.go
@@ -113,8 +113,8 @@
 }
 
 // trimCommonPathPrefix returns a string slice with common
-// path-separator-terminated prefixes removed.  Empty strings
-// are ignored and a singleton non-empty string is left unchanged
+// path-separator-terminated prefixes removed. Empty strings
+// are ignored and a singleton non-empty string is left unchanged.
 func trimCommonPathPrefix(ss []string) []string {
 	commonPrefixLen := -1
 	commonPrefix := ""
diff --git a/cmd/benchseries/main.go b/cmd/benchseries/main.go
index dab8304..1b1a8d1 100644
--- a/cmd/benchseries/main.go
+++ b/cmd/benchseries/main.go
@@ -143,7 +143,7 @@
 		c.AddSummaries(confidence, 1000)
 	}
 
-	// Generate some output.  Options include CSV, JSON, PNG, perhaps also PDF and SVG.
+	// Generate some output. Options include CSV, JSON, PNG, perhaps also PDF and SVG.
 
 	var options benchseries.CsvOptions
 
diff --git a/cmd/benchseries/main_test.go b/cmd/benchseries/main_test.go
index 08d2066..ccda533 100644
--- a/cmd/benchseries/main_test.go
+++ b/cmd/benchseries/main_test.go
@@ -32,9 +32,9 @@
 
 // The two tests here work with two subdirectories of testdata, one containing
 // benchmarks that were started on an even second, the other containing benchmarks
-// started on an odd second.  Each subdirectory contains a file "reference.json"
-// that in theory contains the reference values for computer summaries (for
-// an artifcially small bootstrap, to save time).
+// started on an odd second. Each subdirectory contains a file "reference.json"
+// that in theory contains the reference values for computed summaries (for
+// an artificially small bootstrap, to save time).
 
 var oddReference = filepath.Join("odd", "reference.json")
 var evenReference = filepath.Join("even", "reference.json")
diff --git a/cmd/benchstat/internal/benchtab/builder.go b/cmd/benchstat/internal/benchtab/builder.go
index f5849fa..5e95ad2 100644
--- a/cmd/benchstat/internal/benchtab/builder.go
+++ b/cmd/benchstat/internal/benchtab/builder.go
@@ -47,7 +47,7 @@
 }
 
 type builderCell struct {
-	// values is the observed values in this cell.
+	// values are the observed values in this cell.
 	values []float64
 	// residue is the set of residue keys mapped to this cell.
 	// It is used to check for non-unique keys.
@@ -120,7 +120,7 @@
 	// intervals; e.g., 0.95 for 95%.
 	Confidence float64
 
-	// Thresholds is the thresholds to use for statistical tests.
+	// Thresholds are the thresholds to use for statistical tests.
 	Thresholds *benchmath.Thresholds
 
 	// Units is the unit metadata. This gives distributional
@@ -356,7 +356,7 @@
 	})
 }
 
-// ToCSV returns t to CSV (comma-separated values) format.
+// ToCSV renders t in CSV (comma-separated values) format.
 //
 // Warnings are written to a separate stream so as not to interrupt
 // the regular format of the CSV table.
diff --git a/cmd/benchstat/internal/benchtab/table.go b/cmd/benchstat/internal/benchtab/table.go
index 61ed8f4..49790ab 100644
--- a/cmd/benchstat/internal/benchtab/table.go
+++ b/cmd/benchstat/internal/benchtab/table.go
@@ -37,7 +37,7 @@
 	// col Keys have the same Projection.
 	Rows, Cols []benchproc.Key
 
-	// Cells is the cells in the body of this table. Each key in
+	// Cells contain the cells in the body of this table. Each key in
 	// this map is a pair of some Key from Rows and some Key
 	// from Cols. However, not all Pairs may be present in the
 	// map.
diff --git a/cmd/benchstat/internal/texttab/table.go b/cmd/benchstat/internal/texttab/table.go
index 742daa4..8d2c831 100644
--- a/cmd/benchstat/internal/texttab/table.go
+++ b/cmd/benchstat/internal/texttab/table.go
@@ -192,7 +192,7 @@
 		span := len(spanCols)
 		for _, col := range spanCols {
 			// What's the target average width at this
-			// point? Round up w/span.
+			// point? Round up with span.
 			avg := (w + span - 1) / span
 			// Expand column if it isn't wide enough.
 			ws[col] = max(ws[col], avg)
diff --git a/internal/stats/dist.go b/internal/stats/dist.go
index 048477d..91d0d40 100644
--- a/internal/stats/dist.go
+++ b/internal/stats/dist.go
@@ -90,7 +90,7 @@
 // InvCDF returns the inverse CDF function of the given distribution
 // (also known as the quantile function or the percent point
 // function). This is a function f such that f(dist.CDF(x)) == x. If
-// dist.CDF is only weakly monotonic (that it, there are intervals
+// dist.CDF is only weakly monotonic (that is, there are intervals
 // over which it is constant) and y > 0, f returns the smallest x that
 // satisfies this condition. In general, the inverse CDF is not
 // well-defined for y==0, but for convenience if y==0, f returns the
diff --git a/internal/stats/sample.go b/internal/stats/sample.go
index d6fe8a6..ef2c1fc 100644
--- a/internal/stats/sample.go
+++ b/internal/stats/sample.go
@@ -14,9 +14,9 @@
 	// Xs is the slice of sample values.
 	Xs []float64
 
-	// Weights[i] is the weight of sample Xs[i].  If Weights is
-	// nil, all Xs have weight 1.  Weights must have the same
-	// length of Xs and all values must be non-negative.
+	// Weights[i] is the weight of sample Xs[i]. If Weights is
+	// nil, all Xs have weight 1. Weights must have the same
+	// length as Xs and all values must be non-negative.
 	Weights []float64
 
 	// Sorted indicates that Xs is sorted in ascending order.
@@ -110,7 +110,7 @@
 	return sum
 }
 
-// Weight returns the total weight of the Sasmple.
+// Weight returns the total weight of the Sample.
 func (s Sample) Weight() float64 {
 	if s.Weights == nil {
 		return float64(len(s.Xs))
@@ -164,7 +164,7 @@
 	return math.Exp(m)
 }
 
-// GeoMean returns the geometric mean of the Sample. All samples
+// GeoMean returns the geometric mean of the Sample. All sample
 // values must be positive.
 func (s Sample) GeoMean() float64 {
 	if len(s.Xs) == 0 || s.Weights == nil {
diff --git a/storage/app/query_test.go b/storage/app/query_test.go
index e52d2b6..b94d224 100644
--- a/storage/app/query_test.go
+++ b/storage/app/query_test.go
@@ -24,10 +24,10 @@
 	app := createTestApp(t)
 	defer app.Close()
 
-	// Write 1024 test results to the database.  These results
+	// Write 1024 test results to the database. These results
 	// have labels named label0, label1, etc. Each label's value
 	// is an integer whose value is (record number) / (1 << label
-	// number).  So 1 record has each value of label0, 2 records
+	// number). So 1 record has each value of label0, 2 records
 	// have each value of label1, 4 records have each value of
 	// label2, etc. This allows writing queries that match 2^n records.
 	status := app.uploadFiles(t, func(mpw *multipart.Writer) {
