diff --git a/errors.go b/errors.go
index f2aab6b..817b936 100644
--- a/errors.go
+++ b/errors.go
@@ -51,7 +51,7 @@
 //     %s    print the error. If the error has a Cause it will be
 //           printed recursively
 //     %v    see %s
-//     %+v   extended format. Each Frame of the error's Stacktrace will
+//     %+v   extended format. Each Frame of the error's StackTrace will
 //           be printed in detail.
 //
 // Retrieving the stack trace of an error or wrapper
@@ -59,20 +59,20 @@
 // New, Errorf, Wrap, and Wrapf record a stack trace at the point they are
 // invoked. This information can be retrieved with the following interface.
 //
-//     type Stacktrace interface {
-//             Stacktrace() errors.Stacktrace
+//     type StackTrace interface {
+//             StackTrace() errors.StackTrace
 //     }
 //
-// Where errors.Stacktrace is defined as
+// Where errors.StackTrace is defined as
 //
-//     type Stacktrace []Frame
+//     type StackTrace []Frame
 //
 // The Frame type represents a call site in the stacktrace. Frame supports
 // the fmt.Formatter interface that can be used for printing information about
 // the stacktrace of this error. For example:
 //
-//     if err, ok := err.(Stacktrace); ok {
-//             for _, f := range err.Stacktrace() {
+//     if err, ok := err.(StackTrace); ok {
+//             for _, f := range err.StackTrace() {
 //                     fmt.Printf("%+s:%d", f)
 //             }
 //     }
@@ -99,7 +99,7 @@
 	case 'v':
 		if s.Flag('+') {
 			io.WriteString(s, e.msg)
-			fmt.Fprintf(s, "%+v", e.Stacktrace())
+			fmt.Fprintf(s, "%+v", e.StackTrace())
 			return
 		}
 		fallthrough
@@ -145,7 +145,7 @@
 	case 'v':
 		if s.Flag('+') {
 			fmt.Fprintf(s, "%+v\n", w.Cause())
-			fmt.Fprintf(s, "%+v: %s", w.Stacktrace()[0], w.msg)
+			fmt.Fprintf(s, "%+v: %s", w.StackTrace()[0], w.msg)
 			return
 		}
 		fallthrough
diff --git a/example_test.go b/example_test.go
index 0f0c80a..f1df234 100644
--- a/example_test.go
+++ b/example_test.go
@@ -120,16 +120,16 @@
 }
 
 func Example_stacktrace() {
-	type Stacktrace interface {
-		Stacktrace() errors.Stacktrace
+	type StackTrace interface {
+		StackTrace() errors.StackTrace
 	}
 
-	err, ok := errors.Cause(fn()).(Stacktrace)
+	err, ok := errors.Cause(fn()).(StackTrace)
 	if !ok {
-		panic("oops, err does not implement Stacktrace")
+		panic("oops, err does not implement StackTrace")
 	}
 
-	st := err.Stacktrace()
+	st := err.StackTrace()
 	fmt.Printf("%+v", st[0:2]) // top two frames
 
 	// Example output:
diff --git a/stack.go b/stack.go
index 72a7a6c..243a64a 100644
--- a/stack.go
+++ b/stack.go
@@ -76,10 +76,10 @@
 	}
 }
 
-// Stacktrace is stack of Frames from innermost (newest) to outermost (oldest).
-type Stacktrace []Frame
+// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
+type StackTrace []Frame
 
-func (st Stacktrace) Format(s fmt.State, verb rune) {
+func (st StackTrace) Format(s fmt.State, verb rune) {
 	switch verb {
 	case 'v':
 		switch {
@@ -100,7 +100,7 @@
 // stack represents a stack of program counters.
 type stack []uintptr
 
-func (s *stack) Stacktrace() Stacktrace {
+func (s *stack) StackTrace() StackTrace {
 	f := make([]Frame, len(*s))
 	for i := 0; i < len(f); i++ {
 		f[i] = Frame((*s)[i])
diff --git a/stack_test.go b/stack_test.go
index dcc5436..c0488d5 100644
--- a/stack_test.go
+++ b/stack_test.go
@@ -167,30 +167,30 @@
 	}
 }
 
-func TestStacktrace(t *testing.T) {
+func TestStackTrace(t *testing.T) {
 	tests := []struct {
 		err  error
 		want []string
 	}{{
 		New("ooh"), []string{
-			"github.com/pkg/errors.TestStacktrace\n" +
+			"github.com/pkg/errors.TestStackTrace\n" +
 				"\t.+/github.com/pkg/errors/stack_test.go:175",
 		},
 	}, {
 		Wrap(New("ooh"), "ahh"), []string{
-			"github.com/pkg/errors.TestStacktrace\n" +
+			"github.com/pkg/errors.TestStackTrace\n" +
 				"\t.+/github.com/pkg/errors/stack_test.go:180", // this is the stack of Wrap, not New
 		},
 	}, {
 		Cause(Wrap(New("ooh"), "ahh")), []string{
-			"github.com/pkg/errors.TestStacktrace\n" +
+			"github.com/pkg/errors.TestStackTrace\n" +
 				"\t.+/github.com/pkg/errors/stack_test.go:185", // this is the stack of New
 		},
 	}, {
 		func() error { return New("ooh") }(), []string{
-			`github.com/pkg/errors.(func·005|TestStacktrace.func1)` +
+			`github.com/pkg/errors.(func·005|TestStackTrace.func1)` +
 				"\n\t.+/github.com/pkg/errors/stack_test.go:190", // this is the stack of New
-			"github.com/pkg/errors.TestStacktrace\n" +
+			"github.com/pkg/errors.TestStackTrace\n" +
 				"\t.+/github.com/pkg/errors/stack_test.go:190", // this is the stack of New's caller
 		},
 	}, {
@@ -199,40 +199,40 @@
 				return Errorf("hello %s", fmt.Sprintf("world"))
 			}()
 		}()), []string{
-			`github.com/pkg/errors.(func·006|TestStacktrace.func2.1)` +
+			`github.com/pkg/errors.(func·006|TestStackTrace.func2.1)` +
 				"\n\t.+/github.com/pkg/errors/stack_test.go:199", // this is the stack of Errorf
-			`github.com/pkg/errors.(func·007|TestStacktrace.func2)` +
+			`github.com/pkg/errors.(func·007|TestStackTrace.func2)` +
 				"\n\t.+/github.com/pkg/errors/stack_test.go:200", // this is the stack of Errorf's caller
-			"github.com/pkg/errors.TestStacktrace\n" +
+			"github.com/pkg/errors.TestStackTrace\n" +
 				"\t.+/github.com/pkg/errors/stack_test.go:201", // this is the stack of Errorf's caller's caller
 		},
 	}}
 	for _, tt := range tests {
 		x, ok := tt.err.(interface {
-			Stacktrace() Stacktrace
+			StackTrace() StackTrace
 		})
 		if !ok {
-			t.Errorf("expected %#v to implement Stacktrace() Stacktrace", tt.err)
+			t.Errorf("expected %#v to implement StackTrace() StackTrace", tt.err)
 			continue
 		}
-		st := x.Stacktrace()
+		st := x.StackTrace()
 		for j, want := range tt.want {
 			testFormatRegexp(t, st[j], "%+v", want)
 		}
 	}
 }
 
-func stacktrace() Stacktrace {
+func stacktrace() StackTrace {
 	const depth = 8
 	var pcs [depth]uintptr
 	n := runtime.Callers(1, pcs[:])
 	var st stack = pcs[0:n]
-	return st.Stacktrace()
+	return st.StackTrace()
 }
 
-func TestStacktraceFormat(t *testing.T) {
+func TestStackTraceFormat(t *testing.T) {
 	tests := []struct {
-		Stacktrace
+		StackTrace
 		format string
 		want   string
 	}{{
@@ -252,19 +252,19 @@
 		"%#v",
 		`\[\]errors.Frame\(nil\)`,
 	}, {
-		make(Stacktrace, 0),
+		make(StackTrace, 0),
 		"%s",
 		`\[\]`,
 	}, {
-		make(Stacktrace, 0),
+		make(StackTrace, 0),
 		"%v",
 		`\[\]`,
 	}, {
-		make(Stacktrace, 0),
+		make(StackTrace, 0),
 		"%+v",
 		"",
 	}, {
-		make(Stacktrace, 0),
+		make(StackTrace, 0),
 		"%#v",
 		`\[\]errors.Frame{}`,
 	}, {
@@ -281,7 +281,7 @@
 		"\n" +
 			"github.com/pkg/errors.stacktrace\n" +
 			"\t.+/github.com/pkg/errors/stack_test.go:228\n" +
-			"github.com/pkg/errors.TestStacktraceFormat\n" +
+			"github.com/pkg/errors.TestStackTraceFormat\n" +
 			"\t.+/github.com/pkg/errors/stack_test.go:279",
 	}, {
 		stacktrace()[:2],
@@ -290,6 +290,6 @@
 	}}
 
 	for _, tt := range tests {
-		testFormatRegexp(t, tt.Stacktrace, tt.format, tt.want)
+		testFormatRegexp(t, tt.StackTrace, tt.format, tt.want)
 	}
 }
