diff --git a/plumbing/object/commit.go b/plumbing/object/commit.go
index e254342..b569d3c 100644
--- a/plumbing/object/commit.go
+++ b/plumbing/object/commit.go
@@ -76,8 +76,8 @@
 	return GetTree(c.s, c.TreeHash)
 }
 
-// Patch returns the Patch between the actual commit and the provided one.
-// Error will be return if context expires. Provided context must be non-nil
+// PatchContext returns the Patch between the actual commit and the provided one.
+// Error will be return if context expires. Provided context must be non-nil.
 func (c *Commit) PatchContext(ctx context.Context, to *Commit) (*Patch, error) {
 	fromTree, err := c.Tree()
 	if err != nil {
@@ -291,25 +291,33 @@
 	return err
 }
 
-// Stats shows the status of commit.
+// Stats returns the stats of a commit.
 func (c *Commit) Stats() (FileStats, error) {
-	// Get the previous commit.
-	ci := c.Parents()
-	parentCommit, err := ci.Next()
+	return c.StatsContext(context.Background())
+}
+
+// StatsContext returns the stats of a commit. Error will be return if context
+// expires. Provided context must be non-nil.
+func (c *Commit) StatsContext(ctx context.Context) (FileStats, error) {
+	fromTree, err := c.Tree()
 	if err != nil {
-		if err == io.EOF {
-			emptyNoder := treeNoder{}
-			parentCommit = &Commit{
-				Hash: emptyNoder.hash,
-				// TreeHash: emptyNoder.parent.Hash,
-				s: c.s,
-			}
-		} else {
+		return nil, err
+	}
+
+	toTree := &Tree{}
+	if c.NumParents() != 0 {
+		firstParent, err := c.Parents().Next()
+		if err != nil {
+			return nil, err
+		}
+
+		toTree, err = firstParent.Tree()
+		if err != nil {
 			return nil, err
 		}
 	}
 
-	patch, err := parentCommit.Patch(c)
+	patch, err := toTree.PatchContext(ctx, fromTree)
 	if err != nil {
 		return nil, err
 	}
diff --git a/plumbing/object/commit_stats_test.go b/plumbing/object/commit_stats_test.go
index ce366a2..2fb3f08 100644
--- a/plumbing/object/commit_stats_test.go
+++ b/plumbing/object/commit_stats_test.go
@@ -1,6 +1,7 @@
 package object_test
 
 import (
+	"context"
 	"time"
 
 	"gopkg.in/src-d/go-git.v4"
@@ -26,9 +27,25 @@
 	aCommit, err := r.CommitObject(hash)
 	c.Assert(err, IsNil)
 
+	fileStats, err := aCommit.StatsContext(context.Background())
+	c.Assert(err, IsNil)
+
+	c.Assert(fileStats[0].Name, Equals, "foo")
+	c.Assert(fileStats[0].Addition, Equals, 1)
+	c.Assert(fileStats[0].Deletion, Equals, 0)
+	c.Assert(fileStats[0].String(), Equals, " foo | 1 +\n")
+}
+
+func (s *CommitStatsSuite) TestStats_RootCommit(c *C) {
+	r, hash := s.writeHisotry(c, []byte("foo\n"))
+
+	aCommit, err := r.CommitObject(hash)
+	c.Assert(err, IsNil)
+
 	fileStats, err := aCommit.Stats()
 	c.Assert(err, IsNil)
 
+	c.Assert(fileStats, HasLen, 1)
 	c.Assert(fileStats[0].Name, Equals, "foo")
 	c.Assert(fileStats[0].Addition, Equals, 1)
 	c.Assert(fileStats[0].Deletion, Equals, 0)
