diff --git a/rebase.go b/rebase.go
index 8384d68..8553e25 100644
--- a/rebase.go
+++ b/rebase.go
@@ -145,16 +145,21 @@
 // OperationAt gets the rebase operation specified by the given index.
 func (rebase *Rebase) OperationAt(index uint) *RebaseOperation {
 	operation := C.git_rebase_operation_byindex(rebase.ptr, C.size_t(index))
+	
 	return newRebaseOperationFromC(operation)
 }
 
 // CurrentOperationIndex gets the index of the rebase operation that is currently being applied.
 // Returns an error if no rebase operation is currently applied.
 func (rebase *Rebase) CurrentOperationIndex() (uint, error) {
+	runtime.LockOSThread()
+	defer runtime.UnlockOSThread()
+
 	operationIndex := int(C.git_rebase_operation_current(rebase.ptr))
 	if operationIndex == C.GIT_REBASE_NO_OPERATION {
 		return 0, MakeGitError(C.GIT_REBASE_NO_OPERATION)
 	}
+
 	return uint(operationIndex), nil
 }
 
diff --git a/rebase_test.go b/rebase_test.go
index 9c8e0c2..fb88a4e 100644
--- a/rebase_test.go
+++ b/rebase_test.go
@@ -9,29 +9,6 @@
 
 // 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
 
