diff --git a/libraries/liblmdb/lmdb.h b/libraries/liblmdb/lmdb.h
index 5f2216e36ec8f398ddf37aa86db159b3ddc51c45..911b61bec04f3f5794241ff83c3f1ce3e9644d9c 100644
--- a/libraries/liblmdb/lmdb.h
+++ b/libraries/liblmdb/lmdb.h
@@ -802,6 +802,21 @@ int  mdb_env_set_maxdbs(MDB_env *env, MDB_dbi dbs);
 	 */
 int  mdb_env_get_maxkeysize(MDB_env *env);
 
+	/** @brief Set application information associated with the #MDB_env.
+	 *
+	 * @param[in] env An environment handle returned by #mdb_env_create()
+	 * @param[in] ctx An arbitrary pointer for whatever the application needs.
+	 * @return A non-zero error value on failure and 0 on success.
+	 */
+int  mdb_env_set_userctx(MDB_env *env, void *ctx);
+
+	/** @brief Get the application information associated with the #MDB_env.
+	 *
+	 * @param[in] env An environment handle returned by #mdb_env_create()
+	 * @return The pointer set by #mdb_env_set_userctx().
+	 */
+void *mdb_env_get_userctx(MDB_env *env);
+
 	/** @brief Create a transaction for use with the environment.
 	 *
 	 * The transaction handle may be discarded using #mdb_txn_abort() or #mdb_txn_commit().
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 70ef5e66123a15613ffb6d2c8b18f8bfc796fb9c..82d40113785978312a85b26c8e4ccdb46828fa90 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -1080,6 +1080,7 @@ struct MDB_env {
 	sem_t		*me_rmutex;		/* Shared mutexes are not supported */
 	sem_t		*me_wmutex;
 #endif
+	void		*me_userctx;	 /**< User-settable context */
 };
 
 	/** Nested transaction */
@@ -7916,6 +7917,21 @@ mdb_env_get_flags(MDB_env *env, unsigned int *arg)
 	return MDB_SUCCESS;
 }
 
+int
+mdb_env_set_userctx(MDB_env *env, void *ctx)
+{
+	if (!env)
+		return EINVAL;
+	env->me_userctx = ctx;
+	return MDB_SUCCESS;
+}
+
+void *
+mdb_env_get_userctx(MDB_env *env)
+{
+	return env ? env->me_userctx : NULL;
+}
+
 int
 mdb_env_get_path(MDB_env *env, const char **arg)
 {