diff --git a/README.md b/README.md
index ccd869a..5dc83e0 100644
--- a/README.md
+++ b/README.md
@@ -52,5 +52,4 @@ Almost C API, excepts:
 - [ ] putv/mergev/deletev/delete_rangev
 - [ ] compaction_filter/compaction_filter_factory/compaction_filter_context
 - [ ] transactiondb_property_value/transactiondb_property_int
-- [ ] optimistictransactiondb_write/optimistictransactiondb_checkpoint_object_create/optimistictransactiondb_property_value/optimistictransactiondb_property_int
-
+- [ ] optimistictransactiondb_property_value/optimistictransactiondb_property_int
diff --git a/filter_policy.go b/filter_policy.go
index 677088f..1df3c2e 100644
--- a/filter_policy.go
+++ b/filter_policy.go
@@ -106,8 +106,8 @@ func NewBloomFilterFull(bitsPerKey float64) FilterPolicy {
 //
 // Also consider using optimize_filters_for_memory to save filter
 // memory.
-func NewRibbonFilterPolicy(bitsPerKey float64) FilterPolicy {
-	return NewNativeFilterPolicy(C.rocksdb_filterpolicy_create_ribbon(C.double(bitsPerKey)))
+func NewRibbonFilterPolicy(bitsPerKey float64, bloomBeforeLevel int) FilterPolicy {
+	return NewNativeFilterPolicy(C.rocksdb_filterpolicy_create_ribbon_hybrid(C.double(bitsPerKey), C.int(bloomBeforeLevel)))
 }
 
 // Hold references to filter policies.
diff --git a/optimistic_transaction_db.go b/optimistic_transaction_db.go
index 360960b..8f822ee 100644
--- a/optimistic_transaction_db.go
+++ b/optimistic_transaction_db.go
@@ -113,6 +113,21 @@ func (db *OptimisticTransactionDB) TransactionBegin(
 		db.c, opts.c, transactionOpts.c, nil))
 }
 
+// NewCheckpoint creates a new Checkpoint for this db.
+func (db *OptimisticTransactionDB) NewCheckpoint() (cp *Checkpoint, err error) {
+	var cErr *C.char
+
+	cCheckpoint := C.rocksdb_optimistictransactiondb_checkpoint_object_create(
+		db.c, &cErr,
+	)
+	if err = fromCError(cErr); err == nil {
+		cp = NewNativeCheckpoint(cCheckpoint)
+	}
+
+	return
+}
+
+// Write batch.
 func (db *OptimisticTransactionDB) Write(opts *WriteOptions, batch *WriteBatch) (err error) {
 	var cErr *C.char