diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/BundleForm.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/BundleForm.java
index 6aa0a48..a805611 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/BundleForm.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/BundleForm.java
@@ -20,6 +20,8 @@
 
 import java.io.BufferedReader;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -31,6 +33,7 @@
 import java.util.LinkedList;
 import java.util.Set;
 import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
 
@@ -146,7 +149,11 @@
             }
             URI[] resolved = resolver.resolve(bundles[i]);
             for ( URI uri : resolved ) {
-                ret.add( toBundle(uri, isStarted(bundles[i])) );
+                BundleStatus bundle = toBundle(uri, isStarted(bundles[i]));
+                if ( bundle == null ) {
+                    throw new IllegalStateException("Failed to read bundle " + uri);
+                }
+                ret.add( bundle );
             }
         }
         
@@ -156,32 +163,69 @@
     
     private BundleStatus toBundle(URI uri, boolean started) throws IOException
     {
-        URL url = uri.toURL();
-        InputStream in = url.openStream();
         try {
-            JarInputStream jin = new JarInputStream(in);
-            Manifest mf = jin.getManifest();
+            Manifest mf = findManifest(uri);
+            if ( mf == null ) return null;
             Attributes attr = mf.getMainAttributes();
             String bsn = attr.getValue(Constants.BUNDLE_SYMBOLICNAME);
             String ver = attr.getValue(Constants.BUNDLE_VERSION);
             BundleStatus st = new BundleStatus();
             st.setBundleSymbolicName(bsn);
             st.setVersion(ver);
-            st.setLocation(url.toExternalForm());
+            st.setLocation(uri.toURL().toExternalForm());
             st.setStatus(started ? Bundle.ACTIVE : Bundle.INSTALLED);
             return st;
         }
-        finally {
-            try
-            {
-                in.close();
-            }
-            catch (IOException e)
-            {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
+        catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException("Invalid uri " + uri, e);
+        }
+    }
+
+    private Manifest findManifest(URI uri) throws IOException
+    {
+        Manifest mf = null;
+
+        try {
+            File f = new File(uri);
+            if ( f.isDirectory() ) {
+                f = new File(f, "META-INF/MANIFEST.MF" );
+                if ( f.isFile() ) {
+                    FileInputStream fin = new FileInputStream(f);
+                    try {
+                        mf = new Manifest(fin);
+                    }
+                    finally { 
+                        fin.close();
+                    }
+                }
             }
         }
+        catch (IllegalArgumentException e) {
+            // fine
+        }
+        
+        if ( mf == null) {
+            InputStream in = uri.toURL().openStream();
+            try {
+                JarInputStream jin = new JarInputStream(in);
+                mf = jin.getManifest();
+                if ( mf == null ) {
+                    for(;;) {
+                        JarEntry entry = jin.getNextJarEntry();
+                        if ( entry == null ) break;
+                        if ( "META-INF/MANIFEST.MF".equals(entry.getName()) ) {
+                            mf = new Manifest(jin);
+                            break;
+                        }
+                    }
+                }
+                
+            }
+            finally {
+                in.close();
+            }
+        }
+        return mf;
     }
 
     public static BundleForm create(URL formURL) throws IOException, URISyntaxException {
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/Action.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/Action.java
index c3fe114..3beef14 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/Action.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/Action.java
@@ -20,9 +20,11 @@
 package org.apache.felix.sigil.common.runtime.io;
 
 
+import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.io.PrintStream;
 
 import org.osgi.framework.BundleException;
 import org.osgi.framework.launch.Framework;
@@ -39,6 +41,7 @@
  */
 public abstract class Action<I, O>
 {
+    private static final String PREFIX = "\t";
     private static final String ASCII = "ASCII";
     private final DataInputStream in;
     private final DataOutputStream out;
@@ -89,6 +92,11 @@
         writeInt( ERROR );
     }
 
+    protected void writeThrowable(Throwable t) throws IOException {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        t.printStackTrace(new PrintStream( bos ));
+        writeString( bos.toString() );
+    }
 
     protected String readString() throws IOException
     {
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/InstallAction.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/InstallAction.java
index 4156197..3a822ec 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/InstallAction.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/InstallAction.java
@@ -75,8 +75,9 @@
         }
         catch ( BundleException e )
         {
+            e.printStackTrace();
             writeError();
-            writeString( e.getMessage() );
+            writeThrowable( e );
         }
         flush();
     }
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StartAction.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StartAction.java
index 6790f74..41958cc 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StartAction.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StartAction.java
@@ -80,7 +80,7 @@
             catch ( BundleException e )
             {
                 writeError();
-                writeString( e.getMessage() );
+                writeThrowable(e);
             }
         }
         flush();
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StopAction.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StopAction.java
index 9588a25..a44818b 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StopAction.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/StopAction.java
@@ -79,7 +79,7 @@
             catch ( BundleException e )
             {
                 writeError();
-                writeString( e.getMessage() );
+                writeThrowable( e );
             }
         }
     }
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UninstallAction.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UninstallAction.java
index 0abb739..eddf847 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UninstallAction.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UninstallAction.java
@@ -78,7 +78,7 @@
             catch ( BundleException e )
             {
                 writeError();
-                writeString( e.getMessage() );
+                writeThrowable( e );
             }
         }
     }
diff --git a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UpdateAction.java b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UpdateAction.java
index 562fb14..905e0b7 100644
--- a/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UpdateAction.java
+++ b/sigil/common/runtime/src/org/apache/felix/sigil/common/runtime/io/UpdateAction.java
@@ -116,7 +116,7 @@
                     }
                     catch (IOException e) {
                         writeError();
-                        writeString(e.getMessage());
+                        writeThrowable( e );
                     }
                 }
                 else
