diff --git a/Python/compile.c b/Python/compile.c
index dd27ba8..91ce04b 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -24,6 +24,7 @@
 #include "Python.h"
 
 #include "Python-ast.h"
+#include "pycore_pystate.h"   /* _PyInterpreterState_GET_UNSAFE() */
 #include "ast.h"
 #include "code.h"
 #include "symtable.h"
@@ -310,6 +311,7 @@
     PyCodeObject *co = NULL;
     PyCompilerFlags local_flags;
     int merged;
+    _PyCoreConfig *config = &_PyInterpreterState_GET_UNSAFE()->core_config;
 
     if (!__doc__) {
         __doc__ = PyUnicode_InternFromString("__doc__");
@@ -338,7 +340,7 @@
     c.c_future->ff_features = merged;
     flags->cf_flags = merged;
     c.c_flags = flags;
-    c.c_optimize = (optimize == -1) ? Py_OptimizeFlag : optimize;
+    c.c_optimize = (optimize == -1) ? config->optimization_level : optimize;
     c.c_nestlevel = 0;
 
     if (!_PyAST_Optimize(mod, arena, c.c_optimize)) {
diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c
index 4967afc..f275e53 100644
--- a/Python/dynload_hpux.c
+++ b/Python/dynload_hpux.c
@@ -19,48 +19,47 @@
                                        const char *shortname,
                                        const char *pathname, FILE *fp)
 {
-    dl_funcptr p;
-    shl_t lib;
-    int flags;
-    char funcname[258];
-
-    flags = BIND_FIRST | BIND_DEFERRED;
-    if (Py_VerboseFlag) {
+    int flags = BIND_FIRST | BIND_DEFERRED;
+    int verbose = _PyInterpreterState_GET_UNSAFE()->core_config.verbose;
+    if (verbose) {
         flags = BIND_FIRST | BIND_IMMEDIATE |
             BIND_NONFATAL | BIND_VERBOSE;
         printf("shl_load %s\n",pathname);
     }
-    lib = shl_load(pathname, flags, 0);
+
+    shl_t lib = shl_load(pathname, flags, 0);
     /* XXX Chuck Blake once wrote that 0 should be BIND_NOSTART? */
     if (lib == NULL) {
-        char buf[256];
-        PyObject *pathname_ob = NULL;
-        PyObject *buf_ob = NULL;
-        PyObject *shortname_ob = NULL;
-
-        if (Py_VerboseFlag)
+        if (verbose) {
             perror(pathname);
+        }
+        char buf[256];
         PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s",
                       pathname);
-        buf_ob = PyUnicode_FromString(buf);
-        shortname_ob = PyUnicode_FromString(shortname);
-        pathname_ob = PyUnicode_FromString(pathname);
+        PyObject *buf_ob = PyUnicode_FromString(buf);
+        PyObject *shortname_ob = PyUnicode_FromString(shortname);
+        PyObject *pathname_ob = PyUnicode_FromString(pathname);
         PyErr_SetImportError(buf_ob, shortname_ob, pathname_ob);
         Py_DECREF(buf_ob);
         Py_DECREF(shortname_ob);
         Py_DECREF(pathname_ob);
         return NULL;
     }
+
+    char funcname[258];
     PyOS_snprintf(funcname, sizeof(funcname), FUNCNAME_PATTERN,
                   prefix, shortname);
-    if (Py_VerboseFlag)
+    if (verbose) {
         printf("shl_findsym %s\n", funcname);
+    }
+
+    dl_funcptr p;
     if (shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p) == -1) {
         shl_unload(lib);
         p = NULL;
     }
-    if (p == NULL && Py_VerboseFlag)
+    if (p == NULL && verbose) {
         perror(funcname);
-
+    }
     return p;
 }
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 014b19a..4e74e0b 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -150,12 +150,13 @@
     PyObject *importlib;
     PyObject *impmod;
     PyObject *value;
+    int verbose = interp->core_config.verbose;
 
     /* Import _importlib through its frozen version, _frozen_importlib. */
     if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
         return _Py_INIT_ERR("can't import _frozen_importlib");
     }
-    else if (Py_VerboseFlag) {
+    else if (verbose) {
         PySys_FormatStderr("import _frozen_importlib # frozen\n");
     }
     importlib = PyImport_AddModule("_frozen_importlib");
@@ -175,7 +176,7 @@
     if (impmod == NULL) {
         return _Py_INIT_ERR("can't import _imp");
     }
-    else if (Py_VerboseFlag) {
+    else if (verbose) {
         PySys_FormatStderr("import _imp # builtin\n");
     }
     if (_PyImport_SetModuleString("_imp", impmod) < 0) {
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 199ea82..3d83044 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -591,10 +591,12 @@
     PyObject *exception, *value, *tb;
     int exitcode = 0;
 
-    if (Py_InspectFlag)
+    int inspect = _PyInterpreterState_GET_UNSAFE()->core_config.inspect;
+    if (inspect) {
         /* Don't exit if -i flag was given. This flag is set to 0
          * when entering interactive mode for inspecting. */
         return;
+    }
 
     PyErr_Fetch(&exception, &value, &tb);
     fflush(stdout);
