diff --git a/sigil/common/core/src/org/apache/felix/sigil/bnd/BundleBuilder.java b/sigil/common/core/src/org/apache/felix/sigil/bnd/BundleBuilder.java
index 6fe195e..ca371fd 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/bnd/BundleBuilder.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/bnd/BundleBuilder.java
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -75,8 +76,10 @@
      * 
      * @param classpath
      * @param destPattern
-     *            ivy-like pattern: PATH/[id].[ext] [id] is replaced with the
-     *            bundle id. [name] is replaced with the Bundle-SymbolicName
+     *            ivy-like pattern: PATH/[name]-[revision].[ext].
+     *            [id] is replaced with the bundle id.
+     *            [name] is replaced with the Bundle-SymbolicName
+     *            [revision] is replaced with the Bundle-Version
      *            [ext] is replaced with "jar".
      * @param hashtable
      */
@@ -168,13 +171,14 @@
 
         String dest = destPattern.replaceFirst("\\[id\\]", bundle.getId());
         dest = dest.replaceFirst("\\[name\\]", bundle.getSymbolicName());
+        dest = dest.replaceFirst("\\[revision\\]", bundle.getVersion());
         dest = dest.replaceFirst("\\[ext\\]", "jar");
 
         bracket = dest.indexOf('[');
         if (bracket >= 0)
         {
             String token = dest.substring(bracket);
-            throw new Exception("destPattern: expected [id] or [name]: " + token);
+            throw new Exception("destPattern: expected [id],  [name] or [revision]: " + token);
         }
 
         errors.clear();
@@ -185,6 +189,7 @@
         if (log != null)
         {
             log.verbose("BND instructions: " + spec.toString());
+            log.verbose("BND classpath: " + Arrays.asList(classpath));
         }
 
         Builder builder = new Builder();
@@ -199,6 +204,10 @@
 
         convertErrors("BND: ", builder.getErrors());
         convertWarnings("BND: ", builder.getWarnings());
+        
+        Attributes main = jar.getManifest().getMainAttributes();
+        String expHeader = main.getValue(Constants.EXPORT_PACKAGE);
+        log.verbose("BND exports: " + expHeader);
 
         augmentImports(builder, jar, bundle);
 
diff --git a/sigil/ivy/resolver/src/org/apache/felix/sigil/ant/BundleTask.java b/sigil/ivy/resolver/src/org/apache/felix/sigil/ant/BundleTask.java
index 7fce3d4..0f0d1f3 100644
--- a/sigil/ivy/resolver/src/org/apache/felix/sigil/ant/BundleTask.java
+++ b/sigil/ivy/resolver/src/org/apache/felix/sigil/ant/BundleTask.java
@@ -42,6 +42,7 @@
     private boolean force;
     private String property;
     private String sigilFile;
+    private String revision;
 
     @Override
     public void execute() throws BuildException
@@ -129,6 +130,12 @@
                 log(id + ": " + count(nErr, "error") + ", " + count(nWarn, "warning")
                     + msg);
             }
+        
+            if (revision != null)
+            {
+                // FIXME: hopefully if we have multiple bundles they all have the same version
+                getProject().setProperty(revision, bundle.getVersion());
+            }
         }
 
         if (anyModified && property != null)
@@ -168,6 +175,11 @@
         this.property = property;
     }
 
+    public void setRevision(String revision)
+    {
+        this.revision = revision;
+    }
+
     public void setClasspathref(String value)
     {
         Path p = (Path) getProject().getReference(value);
