diff --git a/Lib/test/test_frozen.py b/Lib/test/test_frozen.py
index 3c9fab3..2de2535 100644
--- a/Lib/test/test_frozen.py
+++ b/Lib/test/test_frozen.py
@@ -4,37 +4,41 @@
 from test.test_support import captured_stdout, run_unittest
 import unittest
 import sys, os
+import warnings
 
 class FrozenTests(unittest.TestCase):
     def test_frozen(self):
+        try:
+            import __hello__
+        except ImportError as x:
+            self.fail("import __hello__ failed:" + str(x))
+        self.assertEqual(__hello__.initialized, True)
+        self.assertEqual(len(dir(__hello__)), 5)
 
-        with captured_stdout() as stdout:
-            try:
-                import __hello__
-            except ImportError as x:
-                self.fail("import __hello__ failed:" + str(x))
+        try:
+            import __phello__
+        except ImportError as x:
+            self.fail("import __phello__ failed:" + str(x))
+        self.assertEqual(__phello__.initialized, True)
+        if not "__phello__.spam" in sys.modules:
+            self.assertEqual(len(dir(__phello__)), 6, dir(__phello__))
+        else:
+            self.assertEqual(len(dir(__phello__)), 7, dir(__phello__))
 
-            try:
-                import __phello__
-            except ImportError as x:
-                self.fail("import __phello__ failed:" + str(x))
+        try:
+            import __phello__.spam
+        except ImportError as x:
+            self.fail("import __phello__.spam failed:" + str(x))
+        self.assertEqual(__phello__.spam.initialized, True)
+        self.assertEqual(len(dir(__phello__.spam)), 5)
+        self.assertEqual(len(dir(__phello__)), 7)
 
-            try:
-                import __phello__.spam
-            except ImportError as x:
-                self.fail("import __phello__.spam failed:" + str(x))
-
-            if sys.platform != "mac":  # On the Mac this import does succeed.
-                try:
-                    import __phello__.foo
-                except ImportError:
-                    pass
-                else:
-                    self.fail("import __phello__.foo should have failed")
-
-        self.assertEquals(stdout.getvalue(),
-                          'Hello world...\nHello world...\nHello world...\n')
-
+        try:
+            import __phello__.foo
+        except ImportError:
+            pass
+        else:
+            self.fail("import __phello__.foo should have failed")
 
 def test_main():
     run_unittest(FrozenTests)
diff --git a/Python/frozen.c b/Python/frozen.c
index ee06c35..1e40d7d 100644
--- a/Python/frozen.c
+++ b/Python/frozen.c
@@ -8,19 +8,18 @@
    some famous words... */
 
 /* To regenerate this data after the bytecode or marshal format has changed,
-   go to ../Tools/freeze/ and freeze the hello.py file; then copy and paste
+   go to ../Tools/freeze/ and freeze the flag.py file; then copy and paste
    the appropriate bytes from M___main__.c. */
 
 static unsigned char M___hello__[] = {
-	99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
-	0,64,0,0,0,115,14,0,0,0,101,0,0,100,0,0,
-	131,1,0,1,100,1,0,83,40,2,0,0,0,117,14,0,
-	0,0,72,101,108,108,111,32,119,111,114,108,100,46,46,46,
-	78,40,1,0,0,0,117,5,0,0,0,112,114,105,110,116,
-	40,0,0,0,0,40,0,0,0,0,40,0,0,0,0,117,
-	8,0,0,0,104,101,108,108,111,46,112,121,117,8,0,0,
-	0,60,109,111,100,117,108,101,62,1,0,0,0,115,0,0,
-	0,0,
+	99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+	0,64,0,0,0,115,10,0,0,0,100,1,0,90,1,0,
+	100,0,0,83,40,2,0,0,0,78,84,40,2,0,0,0,
+	117,4,0,0,0,84,114,117,101,117,11,0,0,0,105,110,
+	105,116,105,97,108,105,122,101,100,40,0,0,0,0,40,0,
+	0,0,0,40,0,0,0,0,117,7,0,0,0,102,108,97,
+	103,46,112,121,117,8,0,0,0,60,109,111,100,117,108,101,
+	62,1,0,0,0,115,0,0,0,0,
 };
 
 #define SIZE (int)sizeof(M___hello__)
diff --git a/Tools/freeze/flag.py b/Tools/freeze/flag.py
new file mode 100644
index 0000000..ea6d633
--- /dev/null
+++ b/Tools/freeze/flag.py
@@ -0,0 +1 @@
+initialized = True
