diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc
index 1f9103996e8ea2062492c371770c84e5bcc3fba4..8dbdbcba028df4fc221e022ac17d2c106571927a 100644
--- a/storage/tokudb/ha_tokudb.cc
+++ b/storage/tokudb/ha_tokudb.cc
@@ -500,16 +500,6 @@ static int smart_dbt_do_nothing (DBT const *key, DBT  const *row, void *context)
   return 0;
 }
 
-static int smart_dbt_metacallback (DBT const *key, DBT  const *row, void *context) {
-    DBT* val = (DBT *)context;
-    val->data = tokudb_my_malloc(row->size, MYF(MY_WME|MY_ZEROFILL));
-    if (val->data == NULL) return ENOMEM;
-    memcpy(val->data, row->data, row->size);
-    val->size = row->size;
-    return 0;
-}
-
-
 static int
 smart_dbt_callback_rowread_ptquery (DBT const *key, DBT  const *row, void *context) {
     SMART_DBT_INFO info = (SMART_DBT_INFO)context;
@@ -991,135 +981,6 @@ static uchar* pack_toku_field_blob(
     return (to_tokudb + len_bytes + length);
 }
 
-
-static int add_table_to_metadata(const char *name, TABLE* table, DB_TXN* txn) {
-    int error = 0;
-    DBT key;
-    DBT val;
-    uchar hidden_primary_key = (table->s->primary_key >= MAX_KEY);
-    assert(txn);
-    
-    memset((void *)&key, 0, sizeof(key));
-    memset((void *)&val, 0, sizeof(val));
-    key.data = (void *)name;
-    key.size = strlen(name) + 1;
-    val.data = &hidden_primary_key;
-    val.size = sizeof(hidden_primary_key);
-    error = metadata_db->put(
-        metadata_db,
-        txn,
-        &key,
-        &val,
-        0
-        );
-    return error;
-}
-
-static int drop_table_from_metadata(const char *name, DB_TXN* txn) {
-    int error = 0;
-    DBT key;
-    DBT data;
-    assert(txn);
-    memset((void *)&key, 0, sizeof(key));
-    memset((void *)&data, 0, sizeof(data));
-    key.data = (void *)name;
-    key.size = strlen(name) + 1;
-    error = metadata_db->del(
-        metadata_db, 
-        txn, 
-        &key , 
-        DB_DELETE_ANY
-        );
-    return error;
-}
-
-static int rename_table_in_metadata(const char *from, const char *to, DB_TXN* txn) {
-    int error = 0;
-    DBT from_key;
-    DBT to_key;
-    DBT val;
-    assert(txn);
-    
-    memset((void *)&from_key, 0, sizeof(from_key));
-    memset((void *)&to_key, 0, sizeof(to_key));
-    memset((void *)&val, 0, sizeof(val));
-    from_key.data = (void *)from;
-    from_key.size = strlen(from) + 1;
-    to_key.data = (void *)to;
-    to_key.size = strlen(to) + 1;
-    
-    error = metadata_db->getf_set(
-        metadata_db, 
-        txn, 
-        0, 
-        &from_key, 
-        smart_dbt_metacallback, 
-        &val
-        );
-
-    if (error) {
-        goto cleanup;
-    }
-
-    error = metadata_db->put(
-        metadata_db,
-        txn,
-        &to_key,
-        &val,
-        0
-        );
-    if (error) {
-        goto cleanup;
-    }
-
-    error = metadata_db->del(
-        metadata_db, 
-        txn, 
-        &from_key, 
-        DB_DELETE_ANY
-        );
-    if (error) {
-        goto cleanup;
-    }
-
-    error = 0;
-
-cleanup:
-    tokudb_my_free(val.data);
-
-    return error;
-}
-
-
-static int check_table_in_metadata(const char *name, bool* table_found, DB_TXN* txn) {
-    int error = 0;
-    DBT key;
-    pthread_mutex_lock(&tokudb_meta_mutex);
-    memset((void *)&key, 0, sizeof(key));
-    key.data = (void *)name;
-    key.size = strlen(name) + 1;
-    
-    error = metadata_db->getf_set(
-        metadata_db, 
-        txn, 
-        0, 
-        &key, 
-        smart_dbt_do_nothing, 
-        NULL
-        );
-
-    if (error == 0) {
-        *table_found = true;
-    }
-    else if (error == DB_NOTFOUND){
-        *table_found = false;
-        error = 0;
-    }
-
-    pthread_mutex_unlock(&tokudb_meta_mutex);
-    return error;
-}
-
 static int create_tokudb_trx_data_instance(tokudb_trx_data** out_trx) {
     int error;
     tokudb_trx_data* trx = NULL;
@@ -1709,7 +1570,6 @@ int ha_tokudb::initialize_share(
 {
     int error = 0;
     uint64_t num_rows = 0;
-    bool table_exists;
     DB_TXN* txn = NULL;
     bool do_commit = false;
     THD* thd = ha_thd();
@@ -1726,18 +1586,6 @@ int ha_tokudb::initialize_share(
 
     DBUG_PRINT("info", ("share->use_count %u", share->use_count));
 
-    table_exists = true;
-    error = check_table_in_metadata(name, &table_exists, txn);
-
-    if (error) {
-        goto exit;
-    }
-    if (!table_exists) {
-        sql_print_error("table %s does not exist in metadata, was it moved from someplace else? Not opening table", name);
-        error = HA_ADMIN_FAILED;
-        goto exit;
-    }
-
     error = get_status(txn);
     if (error) {
         goto exit;
@@ -6951,6 +6799,8 @@ static inline enum row_type row_format_to_row_type(srv_row_format_t row_format)
     return ROW_TYPE_DEFAULT;
 }
 
+volatile int tokudb_create_wait = 0;
+
 //
 // Creates a new table
 // Parameters:
@@ -6963,6 +6813,7 @@ static inline enum row_type row_format_to_row_type(srv_row_format_t row_format)
 //
 int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_info) {
     TOKUDB_DBUG_ENTER("ha_tokudb::create %p %s", this, name);
+    while (tokudb_create_wait) sleep(1);
     int error;
     DB *status_block = NULL;
     uint version;
@@ -6976,8 +6827,6 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
     bool create_from_engine= (create_info->table_options & HA_OPTION_CREATE_FROM_ENGINE);
     memset(&kc_info, 0, sizeof(kc_info));
 
-    pthread_mutex_lock(&tokudb_meta_mutex);
-
     trx = (tokudb_trx_data *) thd_data_get(ha_thd(), tokudb_hton->slot);
 
     const enum row_type row_type = ((create_info->used_fields & HA_CREATE_USED_ROW_FORMAT)
@@ -7086,9 +6935,6 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
         }
     }
 
-    error = add_table_to_metadata(name, form, txn);
-    if (error) { goto cleanup; }
-
     error = 0;
 cleanup:
     if (status_block != NULL) {
@@ -7105,7 +6951,6 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
         }
     }
     tokudb_my_free(newname);
-    pthread_mutex_unlock(&tokudb_meta_mutex);
     TOKUDB_DBUG_RETURN(error);
 }
 
@@ -7201,7 +7046,6 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam
     DBT curr_val;
     memset(&curr_key, 0, sizeof(curr_key));
     memset(&curr_val, 0, sizeof(curr_val));
-    pthread_mutex_lock(&tokudb_meta_mutex);
 
     DB_TXN *parent_txn = NULL;
     tokudb_trx_data *trx = NULL;
@@ -7213,17 +7057,6 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam
     error = txn_begin(db_env, parent_txn, &txn, 0, thd);
     if (error) { goto cleanup; }
 
-    //
-    // modify metadata db
-    //
-    if (is_delete) {
-        error = drop_table_from_metadata(from_name, txn);
-    }
-    else {
-        error = rename_table_in_metadata(from_name, to_name, txn);
-    }
-    if (error) { goto cleanup; }
-
     //
     // open status db,
     // create cursor,
@@ -7292,7 +7125,6 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam
             commit_txn(txn, 0);
         }
     }
-    pthread_mutex_unlock(&tokudb_meta_mutex);
     return error;
 }
 
diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc
index 08d59001a4601db6f3294cdf4cde7fe0ab6e0d5c..93a2f1312eb77f3158bab0d228d86d7b6201f092 100644
--- a/storage/tokudb/hatoku_hton.cc
+++ b/storage/tokudb/hatoku_hton.cc
@@ -170,10 +170,8 @@ const char *ha_tokudb_ext = ".tokudb";
 char *tokudb_data_dir;
 ulong tokudb_debug;
 DB_ENV *db_env;
-DB* metadata_db;
 HASH tokudb_open_tables;
 pthread_mutex_t tokudb_mutex;
-pthread_mutex_t tokudb_meta_mutex;
 
 #if TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL
 static my_bool tokudb_gdb_on_fatal;
@@ -310,12 +308,10 @@ static int tokudb_init_func(void *p) {
     assert(r == 0);
 
     db_env = NULL;
-    metadata_db = NULL;
 
     tokudb_hton = (handlerton *) p;
 
     pthread_mutex_init(&tokudb_mutex, MY_MUTEX_INIT_FAST);
-    pthread_mutex_init(&tokudb_meta_mutex, MY_MUTEX_INIT_FAST);
     (void) my_hash_init(&tokudb_open_tables, table_alias_charset, 32, 0, 0, (my_hash_get_key) tokudb_get_key, 0, 0);
 
     tokudb_hton->state = SHOW_OPTION_YES;
@@ -506,35 +502,6 @@ static int tokudb_init_func(void *p) {
         toku_global_status_rows = (TOKU_ENGINE_STATUS_ROW_S*)tokudb_my_malloc(sizeof(*toku_global_status_rows)*toku_global_status_max_rows, mem_flags);
     }
 
-    r = db_create(&metadata_db, db_env, 0);
-    if (r) {
-        DBUG_PRINT("info", ("failed to create metadata db %d\n", r));
-        goto error;
-    }
-    
-
-    r= metadata_db->open(metadata_db, NULL, TOKU_METADB_NAME, NULL, DB_BTREE, DB_THREAD, 0);
-    if (r) {
-        if (r != ENOENT) {
-            sql_print_error("Got error %d when trying to open metadata_db", r);
-            goto error;
-        }
-        r = metadata_db->close(metadata_db,0);
-        assert(r == 0);
-        r = db_create(&metadata_db, db_env, 0);
-        if (r) {
-            DBUG_PRINT("info", ("failed to create metadata db %d\n", r));
-            goto error;
-        }
-
-        r= metadata_db->open(metadata_db, NULL, TOKU_METADB_NAME, NULL, DB_BTREE, DB_THREAD | DB_CREATE | DB_EXCL, my_umask);
-        if (r) {
-            goto error;
-        }
-    }
-
-
-
     tokudb_primary_key_bytes_inserted = create_partitioned_counter();
 
     //3938: succeeded, set the init status flag and unlock
@@ -543,10 +510,6 @@ static int tokudb_init_func(void *p) {
     DBUG_RETURN(false);
 
 error:
-    if (metadata_db) {
-        int rr = metadata_db->close(metadata_db, 0);
-        assert(rr==0);
-    }
     if (db_env) {
         int rr= db_env->close(db_env, 0);
         assert(rr==0);
@@ -567,7 +530,6 @@ static int tokudb_done_func(void *p) {
     toku_global_status_rows = NULL;
     my_hash_free(&tokudb_open_tables);
     pthread_mutex_destroy(&tokudb_mutex);
-    pthread_mutex_destroy(&tokudb_meta_mutex);
 #if defined(_WIN64)
     toku_ydb_destroy();
 #endif
@@ -589,10 +551,6 @@ int tokudb_end(handlerton * hton, ha_panic_function type) {
     rw_wrlock(&tokudb_hton_initialized_lock);
     assert(tokudb_hton_initialized);
 
-    if (metadata_db) {
-        int r = metadata_db->close(metadata_db, 0);
-        assert(r == 0);
-    }
     if (db_env) {
         if (tokudb_init_flags & DB_INIT_LOG)
             tokudb_cleanup_log_files();
diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h
index c2963291f2e1edc086bbcdcacb5cf0324aca8bc4..62538fe00a2dd603206abf2abcd05cd3e98508eb 100644
--- a/storage/tokudb/hatoku_hton.h
+++ b/storage/tokudb/hatoku_hton.h
@@ -96,7 +96,6 @@ PATENT RIGHTS GRANT:
 extern handlerton *tokudb_hton;
 
 extern DB_ENV *db_env;
-extern DB *metadata_db;
 
 enum srv_row_format_enum {
     SRV_ROW_FORMAT_UNCOMPRESSED = 0,
@@ -379,7 +378,6 @@ static uint64_t tokudb_get_loader_memory_size_callback(void) {
 
 extern HASH tokudb_open_tables;
 extern pthread_mutex_t tokudb_mutex;
-extern pthread_mutex_t tokudb_meta_mutex;
 extern uint32_t tokudb_write_status_frequency;
 extern uint32_t tokudb_read_status_frequency;