diff --git a/minimal/Makefile b/minimal/Makefile
index 3206a21214cfd6ce209f3d97dcaca37a9107a11d..457d63e31e376204c3a49a67015a251f4448a995 100644
--- a/minimal/Makefile
+++ b/minimal/Makefile
@@ -50,6 +50,7 @@ SRC_C = \
 	lib/utils/pyexec.c \
 	lib/libc/string0.c \
 	lib/mp-readline/readline.c \
+	$(BUILD)/_frozen_mpy.c \
 
 OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
 
@@ -59,6 +60,10 @@ else
 all: $(BUILD)/firmware.elf
 endif
 
+$(BUILD)/_frozen_mpy.c: frozentest.mpy
+	$(ECHO) "MISC freezing bytecode"
+	$(Q)../tools/mpy-tool.py -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h -mlongint-impl=none $^ > $@
+
 $(BUILD)/firmware.elf: $(OBJ)
 	$(ECHO) "LINK $@"
 	$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
diff --git a/minimal/frozentest.mpy b/minimal/frozentest.mpy
new file mode 100644
index 0000000000000000000000000000000000000000..c8345b1910611e890fde2e3058f3c41cf2c19970
Binary files /dev/null and b/minimal/frozentest.mpy differ
diff --git a/minimal/frozentest.py b/minimal/frozentest.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f99b74297fbbec570bdb0a57b1b494467ca54d7
--- /dev/null
+++ b/minimal/frozentest.py
@@ -0,0 +1,7 @@
+print('uPy')
+print('a long string that is not interned')
+print('a string that has unicode αβγ chars')
+print(b'bytes 1234\x01')
+print(123456789)
+for i in range(4):
+    print(i)
diff --git a/minimal/mpconfigport.h b/minimal/mpconfigport.h
index 95e216b129e486164665bb60476bd044193fc8e9..c8f9838650def75241e679a2a0821d602d46520d 100644
--- a/minimal/mpconfigport.h
+++ b/minimal/mpconfigport.h
@@ -3,6 +3,7 @@
 // options to control how Micro Python is built
 
 #define MICROPY_QSTR_BYTES_IN_HASH  (1)
+#define MICROPY_QSTR_EXTRA_POOL     mp_qstr_frozen_const_pool
 #define MICROPY_ALLOC_PATH_MAX      (256)
 #define MICROPY_ALLOC_PARSE_CHUNK_INIT (16)
 #define MICROPY_EMIT_X64            (0)
@@ -43,7 +44,7 @@
 #define MICROPY_PY_IO               (0)
 #define MICROPY_PY_STRUCT           (0)
 #define MICROPY_PY_SYS              (0)
-#define MICROPY_MODULE_FROZEN       (0)
+#define MICROPY_MODULE_FROZEN_MPY   (1)
 #define MICROPY_CPYTHON_COMPAT      (0)
 #define MICROPY_LONGINT_IMPL        (MICROPY_LONGINT_IMPL_NONE)
 #define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_NONE)