diff --git a/branch.go b/branch.go
index bb231c3..54b01fb 100644
--- a/branch.go
+++ b/branch.go
@@ -30,10 +30,7 @@
 	repo *Repository
 }
 
-type BranchInfo struct {
-	Branch *Branch
-	Type   BranchType
-}
+type BranchIteratorFunc func(*Branch, BranchType) error
 
 func newBranchIteratorFromC(repo *Repository, ptr *C.git_branch_iterator) *BranchIterator {
 	i := &BranchIterator{repo: repo, ptr: ptr}
@@ -65,8 +62,20 @@
 	C.git_branch_iterator_free(i.ptr)
 }
 
-func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, error) {
+func (i *BranchIterator) ForEach(f BranchIteratorFunc) error {
+	b, t, err := i.Next()
 
+	for err == nil {
+		err = f(b, t)
+		if err == nil {
+			b, t, err = i.Next()
+		}
+	}
+
+	return err
+}
+
+func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, error) {
 	refType := C.git_branch_t(flags)
 	var ptr *C.git_branch_iterator
 
diff --git a/branch_test.go b/branch_test.go
index 44f6338..09ebeba 100644
--- a/branch_test.go
+++ b/branch_test.go
@@ -1,11 +1,8 @@
 package git
 
-import (
-	"testing"
-)
+import "testing"
 
 func TestBranchIterator(t *testing.T) {
-
 	repo := createTestRepo(t)
 	seedTestRepo(t, repo)
 
@@ -24,3 +21,35 @@
 		t.Fatal("expected iterover")
 	}
 }
+
+func TestBranchIteratorEach(t *testing.T) {
+	repo := createTestRepo(t)
+	seedTestRepo(t, repo)
+
+	i, err := repo.NewBranchIterator(BranchLocal)
+	checkFatal(t, err)
+
+	var names []string
+	f := func(b *Branch, t BranchType) error {
+		name, err := b.Name()
+		if err != nil {
+			return err
+		}
+
+		names = append(names, name)
+		return nil
+	}
+
+	err = i.ForEach(f)
+	if err != nil && !IsErrorCode(err, ErrIterOver) {
+		t.Fatal(err)
+	}
+
+	if len(names) != 1 {
+		t.Fatalf("expect 1 branch, but it was %d\n", len(names))
+	}
+
+	if names[0] != "master" {
+		t.Fatalf("expect branch master, but it was %s\n", names[0])
+	}
+}
