diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc
index ff3a6d067d4e86c3547b778d7a288c7d1297ad8e..fee6a091e58436d530cb0c26332ed0b80680fcce 100644
--- a/storage/tokudb/hatoku_hton.cc
+++ b/storage/tokudb/hatoku_hton.cc
@@ -178,7 +178,6 @@ void toku_hton_update_primary_key_bytes_inserted(uint64_t row_size) {
     increment_partitioned_counter(tokudb_primary_key_bytes_inserted, row_size);
 }
 
-static ulonglong tokudb_lock_timeout;
 static void tokudb_lock_timeout_callback(DB *db, uint64_t requesting_txnid, const DBT *left_key, const DBT *right_key, uint64_t blocking_txnid);
 static ulong tokudb_cleaner_period;
 static ulong tokudb_cleaner_iterations;
@@ -476,7 +475,7 @@ static int tokudb_init_func(void *p) {
     r = db_env->cleaner_set_iterations(db_env, tokudb_cleaner_iterations);
     assert(r == 0);
 
-    r = db_env->set_lock_timeout(db_env, tokudb_lock_timeout);
+    r = db_env->set_lock_timeout(db_env, DEFAULT_TOKUDB_LOCK_TIMEOUT, tokudb_get_lock_wait_time_callback);
     assert(r == 0);
 
     r = db_env->get_engine_status_num_rows (db_env, &toku_global_status_max_rows);
@@ -1156,20 +1155,6 @@ static void tokudb_cleanup_log_files(void) {
 
 
 // system variables
-
-static void tokudb_lock_timeout_update(THD * thd, struct st_mysql_sys_var * sys_var, void * var, const void * save) {
-    ulonglong *timeout = (ulonglong *) var;
-    *timeout = *(const ulonglong *) save;
-    db_env->set_lock_timeout(db_env, *timeout);
-}
-
-#define DEFAULT_LOCK_TIMEOUT_MSEC 4000
-
-static MYSQL_SYSVAR_ULONGLONG(lock_timeout, tokudb_lock_timeout,
-    0, "TokuDB lock timeout", 
-    NULL, tokudb_lock_timeout_update, DEFAULT_LOCK_TIMEOUT_MSEC,
-    0, ~0ULL, 0);
-
 static void tokudb_cleaner_period_update(THD * thd, struct st_mysql_sys_var * sys_var, void * var, const void * save) {
     ulong * cleaner_period = (ulong *) var;
     *cleaner_period = *(const ulonglong *) save;
diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h
index 0cdd64d0b48856c4c60569258a107cc5c6658e6f..19550491630e8b74d11ddfe03f66d45e6eac5b21 100644
--- a/storage/tokudb/hatoku_hton.h
+++ b/storage/tokudb/hatoku_hton.h
@@ -341,6 +341,25 @@ static MYSQL_THDVAR_STR(last_lock_timeout, PLUGIN_VAR_MEMALLOC, "last TokuDB loc
 
 static MYSQL_THDVAR_BOOL(hide_default_row_format, 0, "hide the default row format", NULL /*check*/, NULL /*update*/, false);
 
+#define DEFAULT_TOKUDB_LOCK_TIMEOUT 4000 /*milliseconds*/
+
+static MYSQL_THDVAR_ULONGLONG(lock_timeout,
+    0,
+    "lock timeout",
+    NULL, 
+    NULL, 
+    DEFAULT_TOKUDB_LOCK_TIMEOUT, /*default*/
+    0, /*min*/
+    ~0ULL, /*max*/
+    1 /*blocksize*/
+);
+
+static uint64_t tokudb_get_lock_wait_time_callback(uint64_t default_wait_time) {
+    THD *thd = current_thd;
+    uint64_t wait_time = THDVAR(thd, lock_timeout);
+    return wait_time;
+}
+
 extern HASH tokudb_open_tables;
 extern pthread_mutex_t tokudb_mutex;
 extern pthread_mutex_t tokudb_meta_mutex;