diff --git a/buildheader/make_tdb.cc b/buildheader/make_tdb.cc
index 9b279aa6095a618a3a22b9598cfbcf070ace1168..dfa17bdecdaff00881f29b2f6e7c086590f7bb77 100644
--- a/buildheader/make_tdb.cc
+++ b/buildheader/make_tdb.cc
@@ -459,7 +459,7 @@ static void print_db_env_struct (void) {
                              "void (*change_fsync_log_period)             (DB_ENV*, uint32_t)",
                              "int (*iterate_live_transactions)            (DB_ENV *env, iterate_transactions_callback callback, void *extra)",
                              "int (*iterate_pending_lock_requests)        (DB_ENV *env, iterate_requests_callback callback, void *extra)",
-                             "void (*set_loader_memory_size)(DB_ENV *env, uint64_t loader_memory_size)",
+                             "void (*set_loader_memory_size)(DB_ENV *env, uint64_t (*get_loader_memory_size_callback)(void))",
                              "uint64_t (*get_loader_memory_size)(DB_ENV *env)",
                              NULL};
 
diff --git a/src/loader.cc b/src/loader.cc
index 57beee3810f520e0faaf989ad755ef94debfda91..93ac551632e9b98128c6b98e82c4c1102d3b409f 100644
--- a/src/loader.cc
+++ b/src/loader.cc
@@ -319,8 +319,8 @@ toku_loader_create_loader(DB_ENV *env,
         }
         TOKUTXN ttxn = txn ? db_txn_struct_i(txn)->tokutxn : NULL;
         rval = toku_ft_loader_open(&loader->i->ft_loader,
-                                 loader->i->env->i->cachetable,
-                                 loader->i->env->i->generate_row_for_put,
+                                 env->i->cachetable,
+                                 env->i->generate_row_for_put,
                                  src_db,
                                  N,
                                  brts, dbs,
@@ -330,7 +330,7 @@ toku_loader_create_loader(DB_ENV *env,
                                  load_lsn,
                                  ttxn,
                                  puts_allowed,
-                                 loader->i->env->i->loader_memory_size,
+                                 env->get_loader_memory_size(env),
                                  compress_intermediates);
         if ( rval!=0 ) {
             toku_free(new_inames_in_env);
diff --git a/src/tests/env_loader_memory.cc b/src/tests/env_loader_memory.cc
index 1cbdc1b16f5883cb6b2b2729a2d8a82a52e18370..106bdefd3a97e6e476f39b1c9ef7a3345caa9ab1 100644
--- a/src/tests/env_loader_memory.cc
+++ b/src/tests/env_loader_memory.cc
@@ -91,14 +91,21 @@ PATENT RIGHTS GRANT:
 #include "test.h"
 #include <db.h>
 
+static uint64_t my_loader_memory_size;
+
+static uint64_t get_loader_memory_size(void) {
+    return my_loader_memory_size;
+}
+
 int test_main (int argc, char * const argv[]) {
     parse_args(argc, argv);
     int r;
     DB_ENV *env;
     r = db_env_create(&env, 0);
     assert_zero(r);
+    env->set_loader_memory_size(env, get_loader_memory_size);
     for (uint64_t n = 0 ; n < 10000000000; n += 1000000000) {
-        env->set_loader_memory_size(env, n);
+        my_loader_memory_size = n;
         assert(env->get_loader_memory_size(env) == n);
     }
     r = env->close(env, 0);
diff --git a/src/ydb-internal.h b/src/ydb-internal.h
index fe1113d2c0ddc68c98dbfa16d7fd7f0d7aed7336..bcb3d63badc1a99a2d54cb4e279749315b672919 100644
--- a/src/ydb-internal.h
+++ b/src/ydb-internal.h
@@ -182,7 +182,7 @@ struct __toku_db_env_internal {
     int datadir_lockfd;
     int logdir_lockfd;
     int tmpdir_lockfd;
-    uint64_t loader_memory_size;
+    uint64_t (*get_loader_memory_size_callback)(void);
 };
 
 // test-only environment function for running lock escalation
diff --git a/src/ydb.cc b/src/ydb.cc
index dc8ec6c7ffa895aac8b3b8eb895fe105ab9eddd1..4bb2e37c19350faf9a0382647f3fe63960550411 100644
--- a/src/ydb.cc
+++ b/src/ydb.cc
@@ -2416,12 +2416,15 @@ env_iterate_live_transactions(DB_ENV *env,
     return toku_txn_manager_iter_over_live_root_txns(txn_manager, iter_txns_callback, &e);
 }
 
-static void env_set_loader_memory_size(DB_ENV *env, uint64_t loader_memory_size) {
-    env->i->loader_memory_size = loader_memory_size;
+static void env_set_loader_memory_size(DB_ENV *env, uint64_t (*get_loader_memory_size_callback)(void)) {
+    env->i->get_loader_memory_size_callback = get_loader_memory_size_callback;
 }
 
 static uint64_t env_get_loader_memory_size(DB_ENV *env) {
-    return env->i->loader_memory_size;
+    uint64_t memory_size = 0;
+    if (env->i->get_loader_memory_size_callback)
+        memory_size = env->i->get_loader_memory_size_callback();
+    return memory_size;
 }
 
 static int