Add DefaultRebaseOptions() [git_rebase_init_options(GIT_REBASE_OPTIONS_VERSION)] service to wrapper
diff --git a/rebase.go b/rebase.go
index a51b7ce..464840b 100644
--- a/rebase.go
+++ b/rebase.go
@@ -5,7 +5,6 @@
 */
 import "C"
 import (
-	"errors"
 	"runtime"
 	"unsafe"
 )
@@ -43,7 +42,53 @@
 }
 
 // RebaseOptions are used to tell the rebase machinery how to operate
-type RebaseOptions struct{}
+type RebaseOptions struct {
+	Version         uint
+	Quiet           int
+	InMemory        int
+	RewriteNotesRef string
+	MergeOptions    MergeOptions
+	CheckoutOptions CheckoutOpts
+}
+
+// DefaultRebaseOptions returns a RebaseOptions with default values.
+func DefaultRebaseOptions() (RebaseOptions, error) {
+	opts := C.git_rebase_options{}
+
+	runtime.LockOSThread()
+	defer runtime.UnlockOSThread()
+
+	ecode := C.git_rebase_init_options(&opts, C.GIT_REBASE_OPTIONS_VERSION)
+	if ecode < 0 {
+		return RebaseOptions{}, MakeGitError(ecode)
+	}
+	return rebaseOptionsFromC(&opts), nil
+}
+
+func rebaseOptionsFromC(opts *C.git_rebase_options) RebaseOptions {
+	return RebaseOptions{
+		Version:         uint(opts.version),
+		Quiet:           int(opts.quiet),
+		InMemory:        int(opts.inmemory),
+		RewriteNotesRef: C.GoString(opts.rewrite_notes_ref),
+		MergeOptions:    mergeOptionsFromC(&opts.merge_options),
+		CheckoutOptions: checkoutOptionsFromC(&opts.checkout_options),
+	}
+}
+
+func (ro *RebaseOptions) toC() *C.git_rebase_options {
+	if ro == nil {
+		return nil
+	}
+	return &C.git_rebase_options{
+		version:           C.uint(ro.Version),
+		quiet:             C.int(ro.Quiet),
+		inmemory:          C.int(ro.InMemory),
+		rewrite_notes_ref: C.CString(ro.RewriteNotesRef),
+		merge_options:     *ro.MergeOptions.toC(),
+		checkout_options:  *ro.CheckoutOptions.toC(),
+	}
+}
 
 // Rebase object wrapper for C pointer
 type Rebase struct {
@@ -55,11 +100,6 @@
 	runtime.LockOSThread()
 	defer runtime.UnlockOSThread()
 
-	//TODO : use real rebase_options
-	if opts != nil {
-		return nil, errors.New("RebaseOptions Not implemented yet, use nil for default opts")
-	}
-
 	if branch == nil {
 		branch = &AnnotatedCommit{ptr: nil}
 	}
@@ -73,7 +113,7 @@
 	}
 
 	var ptr *C.git_rebase
-	err := C.git_rebase_init(&ptr, r.ptr, branch.ptr, upstream.ptr, onto.ptr, nil)
+	err := C.git_rebase_init(&ptr, r.ptr, branch.ptr, upstream.ptr, onto.ptr, opts.toC())
 	if err < 0 {
 		return nil, MakeGitError(err)
 	}
@@ -86,13 +126,8 @@
 	runtime.LockOSThread()
 	defer runtime.UnlockOSThread()
 
-	//TODO : use real rebase_options
-	if opts != nil {
-		return nil, errors.New("RebaseOptions Not implemented yet, use nil for default opts")
-	}
-
 	var ptr *C.git_rebase
-	err := C.git_rebase_open(&ptr, r.ptr, nil)
+	err := C.git_rebase_open(&ptr, r.ptr, opts.toC())
 	if err < 0 {
 		return nil, MakeGitError(err)
 	}
@@ -198,9 +233,3 @@
 	runtime.SetFinalizer(rebase, (*Rebase).Free)
 	return rebase
 }
-
-/* TODO -- Add last wrapper services and manage rebase_options
-
-int git_rebase_init_options(git_rebase_options *opts, unsigned int version);
-
-*/
diff --git a/rebase_test.go b/rebase_test.go
index 745297e..f76baed 100644
--- a/rebase_test.go
+++ b/rebase_test.go
@@ -9,6 +9,29 @@
 
 // Tests
 
+func TestDefaultRebaseOptions(t *testing.T) {
+	opts, err := DefaultRebaseOptions()
+	checkFatal(t, err)
+
+	if opts.Version != 1 {
+		t.Error("Expected opts Version to equal 1, got ", opts.Version)
+	}
+	if opts.Quiet != 0 {
+		t.Error("Expected opts Quiet to equal 1, got ", opts.Quiet)
+	}
+	if opts.InMemory != 0 {
+		t.Error("Expected opts InMemory to equal 1, got ", opts.InMemory)
+	}
+	if opts.RewriteNotesRef != "" {
+		t.Error("Expected opts RewriteNotesRef to equal 1, got ", opts.RewriteNotesRef)
+	}
+
+	copts := opts.toC()
+	if copts == nil {
+		t.Error("Copts should not be nil")
+	}
+}
+
 func TestRebaseAbort(t *testing.T) {
 	// TEST DATA