diff --git a/Lib/test/test_frozen.py b/Lib/test/test_frozen.py
index 07131af..5243ebb 100644
--- a/Lib/test/test_frozen.py
+++ b/Lib/test/test_frozen.py
@@ -6,31 +6,37 @@
 
 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__)), 7, dir(__hello__))
+        with captured_stdout() as stdout:
+            try:
+                import __hello__
+            except ImportError as x:
+                self.fail("import __hello__ failed:" + str(x))
+            self.assertEqual(__hello__.initialized, True)
+            self.assertEqual(len(dir(__hello__)), 7, dir(__hello__))
+            self.assertEqual(stdout.getvalue(), 'Hello world!\n')
 
-        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__)), 8, dir(__phello__))
-        else:
-            self.assertEqual(len(dir(__phello__)), 9, dir(__phello__))
-        self.assertEqual(__phello__.__path__, [__phello__.__name__])
+        with captured_stdout() as stdout:
+            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__)), 8, dir(__phello__))
+            else:
+                self.assertEqual(len(dir(__phello__)), 9, dir(__phello__))
+            self.assertEqual(__phello__.__path__, [__phello__.__name__])
+            self.assertEqual(stdout.getvalue(), 'Hello world!\n')
 
-        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)), 7)
-        self.assertEqual(len(dir(__phello__)), 9)
+        with captured_stdout() as stdout:
+            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)), 7)
+            self.assertEqual(len(dir(__phello__)), 9)
+            self.assertEqual(stdout.getvalue(), 'Hello world!\n')
 
         try:
             import __phello__.foo
diff --git a/Misc/NEWS b/Misc/NEWS
index 3e8f474..c774b48 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -676,6 +676,9 @@
 Tests
 -----
 
+- Issue #11614: import __hello__ prints "Hello World!". Patch written by
+  Andreas Stührk.
+
 - Issue #5723: Improve json tests to be executed with and without accelerations.
 
 - Issue #12041: Make test_wait3 more robust.
diff --git a/Python/frozen.c b/Python/frozen.c
index 57d8257..ddf6224 100644
--- a/Python/frozen.c
+++ b/Python/frozen.c
@@ -12,14 +12,17 @@
    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,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,
+    99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+    0,64,0,0,0,115,20,0,0,0,100,2,0,90,1,0,
+    101,2,0,100,0,0,131,1,0,1,100,1,0,83,40,3,
+    0,0,0,117,12,0,0,0,72,101,108,108,111,32,119,111,
+    114,108,100,33,78,84,40,3,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,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,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,2,0,0,0,6,
+    1,
 };
 
 #define SIZE (int)sizeof(M___hello__)
diff --git a/Tools/freeze/flag.py b/Tools/freeze/flag.py
index ea6d633..1cefa0a 100644
--- a/Tools/freeze/flag.py
+++ b/Tools/freeze/flag.py
@@ -1 +1,2 @@
 initialized = True
+print("Hello world!")
