diff --git a/orte/tools/console/Makefile.am b/orte/tools/console/Makefile.am
index 6fc1e84318..68df8a4eda 100644
--- a/orte/tools/console/Makefile.am
+++ b/orte/tools/console/Makefile.am
@@ -16,6 +16,9 @@
 
 include $(top_srcdir)/config/Makefile.options
 
+EXTRA_DIST = $(pkgdata_DATA)
+pkgdata_DATA = help-orteconsole.txt
+
 libs = \
         $(top_builddir)/orte/liborte.la \
         $(top_builddir)/opal/libopal.la
diff --git a/orte/tools/console/help-orteconsole.txt b/orte/tools/console/help-orteconsole.txt
new file mode 100644
index 0000000000..2a7a077f2b
--- /dev/null
+++ b/orte/tools/console/help-orteconsole.txt
@@ -0,0 +1,36 @@
+# -*- text -*-
+#
+# Copyright (c) 2004-2005 The Trustees of Indiana University.
+#                         All rights reserved.
+# Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
+#                         All rights reserved.
+# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
+#                         University of Stuttgart.  All rights reserved.
+# Copyright (c) 2004-2005 The Regents of the University of California.
+#                         All rights reserved.
+# $COPYRIGHT$
+# 
+# Additional copyrights may follow
+# 
+# $HEADER$
+#
+# This is the US/English general help file for Open RTE's Console.
+#
+[orteconsole:usage]
+Usage: %s [OPTION]...
+Start the Open RTE Console interface
+
+%s
+[orteconsole:init-failure]
+Open RTE was unable to initialize properly.  The error occured while
+attempting to %s.  Returned value %d instead of ORTE_SUCCESS.
+[orteconsole:finalize-failure]
+Open RTE was unable to finalize properly.  The error occured while
+attempting to %s.  Returned value %d instead of ORTE_SUCCESS.
+[orteconsole:unknown-command]
+Open RTE Console did not recognize the command:
+   %s
+[orteconsole:unimplemented-command]
+The command "%s" is not currently implemented in the Open RTE Console.
+[orteconsole:failed-command]
+The command "%s" failed with return value %d.
diff --git a/orte/tools/console/orteconsole.c b/orte/tools/console/orteconsole.c
index aba21aa5e7..51038eddb6 100644
--- a/orte/tools/console/orteconsole.c
+++ b/orte/tools/console/orteconsole.c
@@ -22,7 +22,9 @@
 #include "include/orte_constants.h"
 #include <stdlib.h>
 #include <sys/types.h>
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 
 #include "dps/dps.h"
 
@@ -44,99 +46,216 @@
 #include "mca/pls/base/base.h"
 #include "tools/orted/orted.h"
 
-#define ORTE_CONSOLE_MAX_LINE_LENGTH 1024
+#include "tools/console/orteconsole.h"
 
-static char *orte_getinputline(void);
+/*
+ * Global Variables
+ */
+static bool exit_cmd;
 
-static void orte_console_sendcmd(orte_daemon_cmd_flag_t usercmd);
+/*
+ * Globals for catching command line options
+ */
+orteconsole_globals_t orteconsole_globals;
 
+opal_cmd_line_init_t cmd_line_opts[] = {
+    { NULL, NULL, NULL, 'h', NULL, "help", 0, 
+      &orteconsole_globals.help, OPAL_CMD_LINE_TYPE_BOOL,
+      "This help message" },
+
+    /* End of list */
+    { NULL, NULL, NULL, '\0', NULL, NULL, 0,
+      NULL, OPAL_CMD_LINE_TYPE_NULL, NULL }
+};
+
+/*
+ * Global structure describing valid internal commands
+ */
+orte_console_command_t console_commands[] = {
+    { "quit", "q", 0, ORTE_CONSOLE_TYPE_STD, 
+      orte_console_exit,
+      "Exit the console" },
+
+    { "help", "h", 0, ORTE_CONSOLE_TYPE_STD,
+      orte_console_help,
+      "Print this display" },
+
+    { "contactinfo", "ci", 0, ORTE_CONSOLE_TYPE_STD,
+      orte_console_contactinfo,
+      "Query Contact Information from Daemons" },
+
+    { "dumpvm", "vm", 0, ORTE_CONSOLE_TYPE_STD,
+      orte_console_dumpvm,
+      "Get VM List from daemons" },
+
+    /* End of list */
+    { NULL, NULL, 0, ORTE_CONSOLE_TYPE_NULL,
+      NULL,
+      NULL }
+};
 
 int main(int argc, char *argv[])
 {
     int ret=0;
     opal_cmd_line_t *cmd_line;
-    bool exit_cmd;
-    char *usercmd, *str_response;
-    orte_buffer_t *buffer = NULL;
-    orte_process_name_t seed={0,0,0};
-    size_t n;
+    char *usercmd;
 
-    /* setup to check common command line options that just report and die */
+    /* 
+     * Setup to check common command line options
+     */
+    memset(&orteconsole_globals, 0, sizeof(orteconsole_globals_t));
     cmd_line = OBJ_NEW(opal_cmd_line_t);
-
-    opal_cmd_line_make_opt(cmd_line, 'v', "version", 0,
-            "Show version of this program");
-
-    opal_cmd_line_make_opt(cmd_line, 'h', "help", 0,
-            "Show help for this function");
-
-
-    /* parse the local commands */
-    if (OMPI_SUCCESS != opal_cmd_line_parse(cmd_line, true, argc, argv)) {
+    opal_cmd_line_create(cmd_line, cmd_line_opts);
+    if (OMPI_SUCCESS != (ret = opal_cmd_line_parse(cmd_line, false,
+                                                   argc, argv))) {
         char *args = NULL;
         args = opal_cmd_line_get_usage_msg(cmd_line);
-        opal_show_help("help-console.txt", "console:usage", false,
+        opal_show_help("help-orteconsole.txt", "orteconsole:usage", false,
+                       argv[0], args);
+        free(args);
+        return ret;
+    }
+
+    /* Check for help request */
+    if(orteconsole_globals.help) {
+        char *args = NULL;
+        args = opal_cmd_line_get_usage_msg(cmd_line);
+        opal_show_help("help-orteconsole.txt", "orteconsole:usage", false,
                        argv[0], args);
         free(args);
         return 1;
     }
 
-    /* check for help and version requests */
-    if (opal_cmd_line_is_taken(cmd_line, "help") || 
-        opal_cmd_line_is_taken(cmd_line, "h")) {
-        char *args = NULL;
-        args = opal_cmd_line_get_usage_msg(cmd_line);
-        opal_show_help("help-console.txt", "console:usage", false,
-                       argv[0], args);
-        free(args);
-        return 1;
-    }
-
-    if (opal_cmd_line_is_taken(cmd_line, "version") ||
-        opal_cmd_line_is_taken(cmd_line, "v")) {
-        printf("...showing off my version!\n");
-        exit(1);
-    }
-
     /*
      * Intialize the ORTE environment
      */
-    if (OMPI_SUCCESS != orte_init()) {
-        /* BWB show_help */
-        printf("show_help: ompi_init failed\n");
+    if (OMPI_SUCCESS != (ret = orte_init()) ) {
+        opal_show_help("help-orteconsole.txt", "orteconsole:init-failure", false,
+                       "orte_init()", ret);
         return ret;
     }
 
+    /*
+     * Work Loop
+     */
     exit_cmd = false;
     while (!exit_cmd) {
-        	printf("ompiconsole> ");
-        	usercmd = orte_getinputline();
-        	if (0 == strncmp(usercmd, "exit", strlen("exit"))) {
-        	    exit_cmd = true;
-        	    orte_console_sendcmd(ORTE_DAEMON_EXIT_CMD);
-        	} else if (0 == strncmp(usercmd, "contactinfo", strlen("contactinfo"))) {
-        	    orte_console_sendcmd(ORTE_DAEMON_CONTACT_QUERY_CMD);
-        	    if (0 > orte_rml.recv_buffer(&seed, buffer, ORTE_RML_TAG_DAEMON)) {
-        		    printf("****got a bad response\n");
-        	    } else {
-                 n = 1;
-            		if (ORTE_SUCCESS != orte_dps.unpack(buffer, &str_response, &n, ORTE_STRING)) {
-            		    printf("****couldn't decode answer\n");
-            		} else {
-            		    printf(str_response);
-            		    printf("\n");
-            		}
-        	    }
-        	} else if (0 == strncmp(usercmd, "dumpvm", strlen("dumpvm"))) {
-        	    fprintf(stderr, "getting vm list\n");
-        	} else {
-        	    printf("huh???\n");
-        	}
+        printf("ompiconsole> ");
+        
+        usercmd = orte_getinputline();
+        
+        execute_command(usercmd);
     }
 
-    fprintf(stderr, "finalize rte\n");
-    orte_finalize();
-    exit(0);
+    /*
+     * Finialize ORTE Environment
+     */
+    if(ORTE_SUCCESS != (ret = orte_finalize()) ) {
+        opal_show_help("help-orteconsole.txt", "orteconsole:finalize-failure", false,
+                       "orte_finalize()", ret);
+        return ret;
+    }
+    
+    return ORTE_SUCCESS;
+}
+
+static int execute_command(char *command) {
+    orte_console_command_t *cur_cmd;
+    int i, ret;
+
+    for(i = 0; console_commands[i].cmd_type != ORTE_CONSOLE_TYPE_NULL; ++i) {
+        cur_cmd = &console_commands[i];
+        
+        /*
+         * Check Full Name then check short name
+         */
+        if ( ( 0 == strncmp(command, cur_cmd->cmd_full_name, 
+                            strlen(cur_cmd->cmd_full_name))           )  ||
+             ( ( strlen(command) == strlen(cur_cmd->cmd_short_name) ) &&
+               ( 0 == strncmp(command, cur_cmd->cmd_short_name,
+                              strlen(cur_cmd->cmd_short_name))      ) ) ) {
+            ret = cur_cmd->cmd_function();
+
+            if(ret == ORTE_ERR_NOT_IMPLEMENTED) {
+                opal_show_help("help-orteconsole.txt", "orteconsole:unimplemented-command", false,
+                               cur_cmd->cmd_full_name);
+                return ret;
+            }
+            else if(ret != ORTE_SUCCESS) {
+                opal_show_help("help-orteconsole.txt", "orteconsole:failed-command", false,
+                               cur_cmd->cmd_full_name, ret);
+                return ret;
+            }
+            break;
+        }
+    }
+
+    /*
+     * If command was not found :(
+     */
+    if( console_commands[i].cmd_type == ORTE_CONSOLE_TYPE_NULL ) {
+        opal_show_help("help-orteconsole.txt", "orteconsole:unknown-command", false,
+                       command);
+        return ORTE_ERR_NOT_IMPLEMENTED;
+    }
+
+    return ORTE_SUCCESS;
+}
+
+static int orte_console_exit() {
+    exit_cmd = true;
+
+    orte_console_sendcmd(ORTE_DAEMON_EXIT_CMD);
+
+    return ORTE_SUCCESS;
+}
+
+static int orte_console_help() {
+    orte_console_command_t *cur_cmd;
+    int i;
+
+    printf("Open RTE Console Commands:\n\n");
+
+    for(i = 0; console_commands[i].cmd_type != ORTE_CONSOLE_TYPE_NULL; ++i) {
+        cur_cmd = &console_commands[i];
+        printf("%15s | %5s \t%s\n", 
+               cur_cmd->cmd_full_name,
+               cur_cmd->cmd_short_name, 
+               cur_cmd->cmd_description);
+    }
+
+    printf("\n");
+
+    return ORTE_SUCCESS;
+}
+
+static int orte_console_dumpvm() {
+
+    return ORTE_ERR_NOT_IMPLEMENTED;
+}
+
+static int orte_console_contactinfo() {
+    char * str_response;
+    orte_buffer_t *buffer = NULL;
+    orte_process_name_t seed={0,0,0};
+    size_t n;
+
+    orte_console_sendcmd(ORTE_DAEMON_CONTACT_QUERY_CMD);
+    if (0 > orte_rml.recv_buffer(&seed, buffer, ORTE_RML_TAG_DAEMON)) {
+        printf("****got a bad response\n");
+        return ORTE_ERROR;
+    } else {
+        n = 1;
+        if (ORTE_SUCCESS != orte_dps.unpack(buffer, &str_response, &n, ORTE_STRING)) {
+            printf("****couldn't decode answer\n");
+            return ORTE_ERROR;
+        } else {
+            printf(str_response);
+            printf("\n");
+        }
+    }
+
+    return ORTE_SUCCESS;
 }
 
 static void orte_console_sendcmd(orte_daemon_cmd_flag_t usercmd)
@@ -171,9 +290,9 @@ char *orte_getinputline()
 
     ret = fgets(input, ORTE_CONSOLE_MAX_LINE_LENGTH, stdin);
     if (NULL != ret) {
-	input[strlen(input)-1] = '\0';  /* remove newline */
-	buff = strdup(input);
-	return buff;
+        input[strlen(input)-1] = '\0';  /* remove newline */
+        buff = strdup(input);
+        return buff;
     }
     return NULL;
 }
diff --git a/orte/tools/console/orteconsole.h b/orte/tools/console/orteconsole.h
new file mode 100644
index 0000000000..daac50ac37
--- /dev/null
+++ b/orte/tools/console/orteconsole.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2004-2005 The Trustees of Indiana University.
+ *                         All rights reserved.
+ * Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
+ *                         All rights reserved.
+ * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 
+ *                         University of Stuttgart.  All rights reserved.
+ * Copyright (c) 2004-2005 The Regents of the University of California.
+ *                         All rights reserved.
+ * $COPYRIGHT$
+ * 
+ * Additional copyrights may follow
+ * 
+ * $HEADER$
+ */
+
+#ifndef ORTECONSOLE_H
+#define ORTECONSOLE_H
+
+#define ORTE_CONSOLE_MAX_LINE_LENGTH 1024
+
+/*
+ * Local Structures
+ */
+
+/* Command line Structure */
+typedef struct {
+    bool help;
+
+    opal_mutex_t lock;
+    opal_condition_t cond;
+} orteconsole_globals_t;
+
+enum orte_console_type_t {
+    ORTE_CONSOLE_TYPE_NULL,
+    ORTE_CONSOLE_TYPE_STD
+};
+typedef enum orte_console_type_t orte_console_type_t;
+
+/* Structure detailing each command allowed by the console */
+typedef struct {
+    /* Full Name for the command */
+    const char *cmd_full_name;
+    /* Common abbreviation for this command */
+    const char *cmd_short_name;
+    /* Number of expected arguments */
+    int cmd_args;
+    /* Type of command */
+    orte_console_type_t cmd_type;
+    /* Pointer to the function to execute */
+    int (*cmd_function) (void);
+    /* Short description of what this command does */
+    const char *cmd_description;
+} orte_console_command_t;
+
+/*
+ * Function for each command
+ */
+static int orte_console_exit(void);
+static int orte_console_help(void);
+static int orte_console_contactinfo(void);
+static int orte_console_dumpvm(void);
+
+/*
+ * Support Functions
+ */
+static char *orte_getinputline(void);
+static void  orte_console_sendcmd(orte_daemon_cmd_flag_t usercmd);
+static int   execute_command(char *command);
+
+#endif /* ORTECONSOLE_H */