diff --git a/rocksdb/_rocksdb.pyx b/rocksdb/_rocksdb.pyx
index cb06c6e5b731f3d49a6d5d03fadc30f028378229..7a2221e5780d681b0fb488742e7fe1c0ad4b8747 100644
--- a/rocksdb/_rocksdb.pyx
+++ b/rocksdb/_rocksdb.pyx
@@ -580,7 +580,8 @@ cdef class BlockBasedTableFactory(PyTableFactory):
             block_size=None,
             block_size_deviation=None,
             block_restart_interval=None,
-            whole_key_filtering=None):
+            whole_key_filtering=None,
+            enable_index_compression=True):
 
         cdef table_factory.BlockBasedTableOptions table_options
 
@@ -596,6 +597,11 @@ cdef class BlockBasedTableFactory(PyTableFactory):
         else:
             table_options.hash_index_allow_collision = False
 
+        if enable_index_compression:
+            table_options.enable_index_compression = True
+        else:
+            table_options.enable_index_compression = False
+
         if checksum == 'crc32':
             table_options.checksum = table_factory.kCRC32c
         elif checksum == 'xxhash':
@@ -1267,6 +1273,12 @@ cdef class Options(ColumnFamilyOptions):
         def __set__(self, value):
             self.opts.create_if_missing = value
 
+    property create_missing_column_families:
+        def __get__(self):
+            return self.opts.create_missing_column_families
+        def __set__(self, value):
+            self.opts.create_missing_column_families = value
+
     property error_if_exists:
         def __get__(self):
             return self.opts.error_if_exists
@@ -1315,6 +1327,18 @@ cdef class Options(ColumnFamilyOptions):
         def __set__(self, value):
             self.opts.max_background_compactions = value
 
+    property stats_history_buffer_size:
+        def __get__(self):
+            return self.opts.stats_history_buffer_size
+        def __set__(self, value):
+            self.opts.stats_history_buffer_size = value
+
+    property max_background_jobs:
+        def __get__(self):
+            return self.opts.max_background_jobs
+        def __set__(self, value):
+            self.opts.max_background_jobs = value
+
     property max_background_flushes:
         def __get__(self):
             return self.opts.max_background_flushes
@@ -1674,23 +1698,32 @@ cdef class DB(object):
         self.opts.in_use = True
 
     def __dealloc__(self):
+        self.close()
+
+    def close(self, safe=True):
         cdef ColumnFamilyOptions copts
+        # -- iFA88 --
+        cdef cpp_bool c_safe = safe
         if self.db != NULL:
+            # -- iFA88 -- <<
+            # We need stop backround compactions
+            with nogil:
+                db.CancelAllBackgroundWork(self.db, c_safe)
+            # -- iFA88 -- >>
             # We have to make sure we delete the handles so rocksdb doesn't
             # assert when we delete the db
-            self.cf_handles.clear()
+            del self.cf_handles[:]
             for copts in self.cf_options:
                 if copts:
                     copts.in_use = False
-            self.cf_options.clear()
-    
+            del self.cf_options[:]
+
             with nogil:
                 del self.db
 
             if self.opts is not None:
                 self.opts.in_use = False
 
-
     @property
     def column_families(self):
         return [handle.weakref for handle in self.cf_handles]