diff --git a/init/init.cpp b/init/init.cpp
index 704597d..bac27df 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -74,7 +74,8 @@
 
 static char qemu[32];
 
-std::vector<std::string> console_names;
+int have_console;
+std::string console_name = "/dev/console";
 static time_t process_needs_restart;
 
 const char *ENV[32];
@@ -297,23 +298,38 @@
 
 static int console_init_action(const std::vector<std::string>& args)
 {
-    std::vector<std::string> consoles;
-    std::string c_prop = property_get("ro.boot.console");
-    if (c_prop.empty()) {
-        // Property is missing, so check the system console by default.
-        consoles.emplace_back(DEFAULT_CONSOLE);
-    } else {
-        consoles = android::base::Split(c_prop, ":");
+    std::string console = property_get("ro.boot.console");
+    if (!console.empty()) {
+        console_name = "/dev/" + console;
     }
 
-    for (const auto& c : consoles) {
-        std::string console = "/dev/" + c;
-        int fd = open(console.c_str(), O_RDWR | O_CLOEXEC);
-        if (fd != -1) {
-            console_names.emplace_back(c);
-            close(fd);
-        }
+    int fd = open(console_name.c_str(), O_RDWR | O_CLOEXEC);
+    if (fd >= 0)
+        have_console = 1;
+    close(fd);
+
+    fd = open("/dev/tty0", O_WRONLY | O_CLOEXEC);
+    if (fd >= 0) {
+        const char *msg;
+            msg = "\n"
+        "\n"
+        "\n"
+        "\n"
+        "\n"
+        "\n"
+        "\n"  // console is 40 cols x 30 lines
+        "\n"
+        "\n"
+        "\n"
+        "\n"
+        "\n"
+        "\n"
+        "\n"
+        "             A N D R O I D ";
+        write(fd, msg, strlen(msg));
+        close(fd);
     }
+
     return 0;
 }
 
diff --git a/init/init.h b/init/init.h
index c844489..b6a095b 100644
--- a/init/init.h
+++ b/init/init.h
@@ -18,17 +18,16 @@
 #define _INIT_INIT_H
 
 #include <string>
-#include <vector>
 
 class Action;
 class Service;
 
 #define COMMAND_RETRY_TIMEOUT 5
-#define DEFAULT_CONSOLE "console"
 
 extern const char *ENV[32];
 extern bool waiting_for_exec;
-extern std::vector<std::string> console_names;
+extern int have_console;
+extern std::string console_name;
 extern struct selabel_handle *sehandle;
 extern struct selabel_handle *sehandle_prop;
 
diff --git a/init/readme.txt b/init/readme.txt
index 7d453c6..ef85ccf 100644
--- a/init/readme.txt
+++ b/init/readme.txt
@@ -115,11 +115,6 @@
 Options are modifiers to services.  They affect how and when init
 runs the service.
 
-console [<console>]
-  This service needs a console. The optional second parameter chooses a
-  specific console instead of the default "/dev/console". The leading "/dev/"
-  should be omitted, so "/dev/tty0" would be specified as just "console tty0".
-
 critical
   This is a device-critical service. If it exits more than four times in
   four minutes, the device will reboot into recovery mode.
diff --git a/init/service.cpp b/init/service.cpp
index e7bbf7b..bdecc32 100644
--- a/init/service.cpp
+++ b/init/service.cpp
@@ -172,7 +172,6 @@
 
 bool Service::HandleConsole(const std::vector<std::string>& args, std::string* err) {
     flags_ |= SVC_CONSOLE;
-    console_ = args.size() > 1 ? args[1] : DEFAULT_CONSOLE;
     return true;
 }
 
@@ -283,7 +282,7 @@
     constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
     static const Map option_handlers = {
         {"class",       {1,     1,    &Service::HandleClass}},
-        {"console",     {0,     1,    &Service::HandleConsole}},
+        {"console",     {0,     0,    &Service::HandleConsole}},
         {"critical",    {0,     0,    &Service::HandleCritical}},
         {"disabled",    {0,     0,    &Service::HandleDisabled}},
         {"group",       {1,     NR_SVC_SUPP_GIDS + 1, &Service::HandleGroup}},
@@ -330,7 +329,7 @@
     }
 
     bool needs_console = (flags_ & SVC_CONSOLE);
-    if (needs_console && console_names.empty()) {
+    if (needs_console && !have_console) {
         ERROR("service '%s' requires console\n", name_.c_str());
         flags_ |= SVC_DISABLED;
         return false;
@@ -607,12 +606,10 @@
 }
 
 void Service::OpenConsole() const {
-    int fd = -1;
-    if (std::find(console_names.begin(), console_names.end(), console_) != console_names.end()) {
-        std::string c_path = "/dev/" + console_;
-        fd = open(c_path.c_str(), O_RDWR);
+    int fd;
+    if ((fd = open(console_name.c_str(), O_RDWR)) < 0) {
+        fd = open("/dev/null", O_RDWR);
     }
-    if (fd == -1) fd = open("/dev/null", O_RDWR);
     ioctl(fd, TIOCSCTTY, 0);
     dup2(fd, 0);
     dup2(fd, 1);
diff --git a/init/service.h b/init/service.h
index b003ca0..35abde9 100644
--- a/init/service.h
+++ b/init/service.h
@@ -129,7 +129,6 @@
 
     std::string name_;
     std::string classname_;
-    std::string console_;
 
     unsigned flags_;
     pid_t pid_;
