diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0b9fda9..c47ed76 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -64,6 +64,9 @@
 
     <body>
         <release version="3.6" date="TBA" description="">
+            <action type="update" dev="sebb">
+            POP3Mail example: support host port; allow reading password from Console/stdin/environment
+            </action>
             <action issue="NET-597" type="fix" dev="sebb" due-to="Hiroki Taniura">
             FTP fails to parse listings for Solaris 10 FTPd in Japanese
             </action>
diff --git a/src/main/java/examples/mail/POP3Mail.java b/src/main/java/examples/mail/POP3Mail.java
index fb7bd71..0b25520 100644
--- a/src/main/java/examples/mail/POP3Mail.java
+++ b/src/main/java/examples/mail/POP3Mail.java
@@ -60,13 +60,21 @@
         if (args.length < 3)
         {
             System.err.println(
-                "Usage: POP3Mail <pop3 server hostname> <username> <password> [TLS [true=implicit]]");
+                "Usage: POP3Mail <server[:port]> <username> <password|-|*|VARNAME> [TLS [true=implicit]]");
             System.exit(1);
         }
 
-        String server = args[0];
+        String arg0[] = args[0].split(":");
+        String server=arg0[0];
         String username = args[1];
         String password = args[2];
+        // prompt for the password if necessary
+        try {
+            password = Utils.getPassword(username, password);
+        } catch (IOException e1) {
+            System.err.println("Could not retrieve password: " + e1.getMessage());
+            return;
+        }
 
         String proto = args.length > 3 ? args[3] : null;
         boolean implicit = args.length > 4 ? Boolean.parseBoolean(args[4]) : false;
@@ -79,7 +87,14 @@
         } else {
             pop3 = new POP3Client();
         }
-        System.out.println("Connecting to server "+server+" on "+pop3.getDefaultPort());
+
+        int port;
+        if (arg0.length == 2) {
+            port = Integer.parseInt(arg0[1]);
+        } else {
+            port = pop3.getDefaultPort();
+        }
+        System.out.println("Connecting to server "+server+" on "+port);
 
         // We want to timeout if a response takes longer than 60 seconds
         pop3.setDefaultTimeout(60000);
@@ -95,7 +110,7 @@
         {
             System.err.println("Could not connect to server.");
             e.printStackTrace();
-            System.exit(1);
+            return;
         }
 
         try
@@ -104,14 +119,25 @@
             {
                 System.err.println("Could not login to server.  Check password.");
                 pop3.disconnect();
-                System.exit(1);
+                return;
             }
 
+            POP3MessageInfo status = pop3.status();
+            if (status == null) {
+                System.err.println("Could not retrieve status.");
+                pop3.logout();
+                pop3.disconnect();
+                return;
+            }
+
+            System.out.println("Status: " + status);
+
             POP3MessageInfo[] messages = pop3.listMessages();
 
             if (messages == null)
             {
                 System.err.println("Could not retrieve message list.");
+                pop3.logout();
                 pop3.disconnect();
                 return;
             }
@@ -123,13 +149,16 @@
                 return;
             }
 
+            System.out.println("Message count: " + messages.length);
+
             for (POP3MessageInfo msginfo : messages) {
                 BufferedReader reader = (BufferedReader) pop3.retrieveMessageTop(msginfo.number, 0);
 
                 if (reader == null) {
                     System.err.println("Could not retrieve message header.");
+                    pop3.logout();
                     pop3.disconnect();
-                    System.exit(1);
+                    return;
                 }
                 printMessageInfo(reader, msginfo.number);
             }
