diff --git a/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg b/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg
index 5025a17..39437d0 100644
--- a/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg
+++ b/karaf/assembly/src/main/distribution/text/etc/org.apache.felix.karaf.log.cfg
@@ -19,4 +19,4 @@
 
 #
 size = 500
-pattern = %d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n
+pattern = %d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
diff --git a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java
index 5cffacd..cb67733 100644
--- a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java
+++ b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/VmLogAppender.java
@@ -38,6 +38,7 @@
 
     public void doAppend(PaxLoggingEvent event) {
         if (events != null) {
+            event.getProperties(); // ensure MDC properties are copied
             events.add(event);
         }
     }
diff --git a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java
index ed6f4e6..f6507f8 100644
--- a/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java
+++ b/karaf/shell/log/src/main/java/org/apache/felix/karaf/shell/log/layout/PatternParser.java
@@ -18,7 +18,9 @@
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.Map;
 
 import org.apache.log4j.spi.LoggingEvent;
 import org.ops4j.pax.logging.spi.PaxLocationInfo;
@@ -344,12 +346,12 @@
       pc = new BasicPatternConverter(formattingInfo, NDC_CONVERTER);
       //LogLog.debug("NDC converter.");
       currentLiteral.setLength(0);
-      break;
+      break;*/
     case 'X':
       String xOpt = extractOption();
       pc = new MDCPatternConverter(formattingInfo, xOpt);
       currentLiteral.setLength(0);
-      break;*/
+      break;
     default:
       //LogLog.error("Unexpected char [" +c+"] at position "+i+" in conversion patterrn.");
       pc = new LiteralPatternConverter(currentLiteral.toString());
@@ -523,5 +525,43 @@
       return event.getLoggerName();
     }
   }
+
+  private class MDCPatternConverter extends PatternConverter {
+    String key;
+
+    MDCPatternConverter(FormattingInfo formattingInfo, String key) {
+      super(formattingInfo);
+      this.key = key;
+    }
+
+    public
+    String convert(PaxLoggingEvent event) {
+        if (key == null) {
+            StringBuffer buf = new StringBuffer("{");
+            Map properties = event.getProperties();
+            if (properties.size() > 0) {
+              Object[] keys = properties.keySet().toArray();
+              Arrays.sort(keys);
+              for (int i = 0; i < keys.length; i++) {
+                  buf.append('{');
+                  buf.append(keys[i]);
+                  buf.append(',');
+                  buf.append(properties.get(keys[i]));
+                  buf.append('}');
+              }
+            }
+            buf.append('}');
+            return buf.toString();
+        } else {
+          Object val = event.getProperties().get(key);
+          if(val == null) {
+              return null;
+          } else {
+              return val.toString();
+          }
+        }
+    }
+
+  }
 }
 
