diff --git a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java
index c6b6eb3..c1051ef 100644
--- a/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java
+++ b/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/CommandSessionImpl.java
@@ -343,40 +343,46 @@
     {
         boolean found = false;
         Formatter f = new Formatter();
-        f.close();
 
-        Method methods[] = b.getClass().getMethods();
-        for (Method m : methods)
+        try
         {
-            try
+            Method methods[] = b.getClass().getMethods();
+            for (Method m : methods)
             {
-                String name = m.getName();
-                if (!name.equals("getClass") && name.startsWith("get") && m.getParameterTypes().length == 0)
+                try
                 {
-                    m.setAccessible(true);
-                    Object value = m.invoke(b);
+                    String name = m.getName();
+                    if (!name.equals("getClass") && name.startsWith("get") && m.getParameterTypes().length == 0)
+                    {
+                        m.setAccessible(true);
+                        Object value = m.invoke(b);
 
-                    found = true;
-                    name = name.substring(3);
-                    f.format(COLUMN, name, format(value, Converter.LINE, this));
+                        found = true;
+                        name = name.substring(3);
+                        f.format(COLUMN, name, format(value, Converter.LINE, this));
+                    }
+                }
+                catch (IllegalAccessException e)
+                {
+                    // Ignore
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
                 }
             }
-            catch (IllegalAccessException e)
+            if (found)
             {
-                // Ignore
+                return (StringBuilder) f.out();
             }
-            catch (Exception e)
+            else
             {
-                e.printStackTrace();
+                return b.toString();
             }
         }
-        if (found)
+        finally
         {
-            return (StringBuilder) f.out();
-        }
-        else
-        {
-            return b.toString();
+            f.close();
         }
     }
 
diff --git a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Posix.java b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Posix.java
index 39b8005..e96d5aa 100644
--- a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Posix.java
+++ b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Posix.java
@@ -50,7 +50,7 @@
         }
 
         URI cwd = Shell.cwd(session);
-        
+
         for (String arg : args)
         {
             copy(cwd.resolve(arg), System.out);
@@ -141,7 +141,7 @@
             {
                 URI cwd = Shell.cwd(session);
                 in = (arg == null) ? System.in : cwd.resolve(arg).toURL().openStream();
-                
+
                 BufferedReader rdr = new BufferedReader(new InputStreamReader(in));
                 int line = 0;
                 String s;
@@ -180,21 +180,26 @@
 
         return match && status;
     }
-    
-    public static void copy(URI source, OutputStream out) throws IOException {
+
+    public static void copy(URI source, OutputStream out) throws IOException
+    {
         InputStream in = source.toURL().openStream();
-        try {
+        try
+        {
             copy(in, out);
-        } finally {
+        }
+        finally
+        {
             in.close();
         }
     }
 
-
-    public static void copy(InputStream in, OutputStream out) throws IOException {
+    public static void copy(InputStream in, OutputStream out) throws IOException
+    {
         byte buf[] = new byte[10240];
         int len;
-        while ((len = in.read(buf)) > 0) {
+        while ((len = in.read(buf)) > 0)
+        {
             out.write(buf, 0, len);
         }
         out.flush();
diff --git a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java
index 8344581..8c26ed0 100644
--- a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java
+++ b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Shell.java
@@ -71,6 +71,7 @@
                 "     --nointeractive       don't start interactive session",
                 "     --login               login shell (same session, reads etc/gosh_profile)",
                 "  -s --noshutdown          don't shutdown framework when script completes",
+                "  -q --quiet               don't display message-of-the-day",
                 "  -x --xtrace              echo commands before execution",
                 "  -? --help                show help",
                 "If no script-file, an interactive shell is started, type $D to exit." };
@@ -100,6 +101,10 @@
         }
 
         CommandSession newSession = (login ? session : processor.createSession(session.getKeyboard(), session.getConsole(), System.err));
+        // Make some of the given arguments available to the shell itself...
+        newSession.put(".gosh_login", login);
+        newSession.put(".gosh_interactive", interactive);
+        newSession.put(".gosh_quiet", opt.isSet("quiet"));
 
         if (opt.isSet("xtrace"))
         {
diff --git a/gogo/shell/src/main/resources/gosh_profile b/gogo/shell/src/main/resources/gosh_profile
index d27c97b..98eb0c5 100644
--- a/gogo/shell/src/main/resources/gosh_profile
+++ b/gogo/shell/src/main/resources/gosh_profile
@@ -30,8 +30,8 @@
   # set prompt
   prompt = 'g! '
 
-  # print welcome message
-  cat ($0 resolve motd)
+  # print welcome message, unless we're explicitly told not to...
+  if {$.gosh_quiet} {} { cat ($0 resolve motd) }
 } {
     echo "$0: ERROR: $exception"
 }
