diff --git a/sigil/common/core/src/org/apache/felix/sigil/config/BldConverter.java b/sigil/common/core/src/org/apache/felix/sigil/config/BldConverter.java
index dcfde4b..176b79f 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/config/BldConverter.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/config/BldConverter.java
@@ -32,6 +32,7 @@
 import java.util.regex.Pattern;
 
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.config.IBldProject.IBldBundle;
 import org.apache.felix.sigil.core.BldCore;
 import org.apache.felix.sigil.core.internal.model.eclipse.SigilBundle;
@@ -43,7 +44,6 @@
 import org.apache.felix.sigil.model.osgi.IRequiredBundle;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.osgi.framework.Version;
 
 import aQute.lib.osgi.Constants;
 
@@ -155,7 +155,7 @@
 
         info.setSymbolicName( bundle.getSymbolicName() );
 
-        info.setVersion( Version.parseVersion( bundle.getVersion() ) );
+        info.setVersion( VersionTable.getVersion( bundle.getVersion() ) );
 
         String activator = bundle.getActivator();
         if ( activator != null )
diff --git a/sigil/common/core/src/org/apache/felix/sigil/config/BldProject.java b/sigil/common/core/src/org/apache/felix/sigil/config/BldProject.java
index 7f024d5..8e5ff65 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/config/BldProject.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/config/BldProject.java
@@ -42,6 +42,7 @@
 import java.util.TreeSet;
 
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.core.internal.model.osgi.BundleModelElement;
 import org.apache.felix.sigil.core.internal.model.osgi.PackageExport;
 import org.apache.felix.sigil.core.internal.model.osgi.PackageImport;
@@ -53,7 +54,6 @@
 import org.apache.felix.sigil.model.osgi.IPackageImport;
 import org.apache.felix.sigil.model.osgi.IPackageImport.OSGiImport;
 import org.apache.felix.sigil.model.osgi.IRequiredBundle;
-import org.osgi.framework.Version;
 
 public class BldProject implements IBldProject, IRepositoryConfig
 {
@@ -888,7 +888,7 @@
                     }
 
                     if (version != null)
-                        pkgExport.setVersion(new Version(version));
+                        pkgExport.setVersion(VersionTable.getVersion(version));
 
                     list.add(pkgExport);
                 }
diff --git a/sigil/common/core/src/org/apache/felix/sigil/repository/AbstractBundleRepository.java b/sigil/common/core/src/org/apache/felix/sigil/repository/AbstractBundleRepository.java
index dbd81ad..ef6aa67 100644
--- a/sigil/common/core/src/org/apache/felix/sigil/repository/AbstractBundleRepository.java
+++ b/sigil/common/core/src/org/apache/felix/sigil/repository/AbstractBundleRepository.java
@@ -30,6 +30,7 @@
 import java.util.jar.Manifest;
 
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.core.BldCore;
 import org.apache.felix.sigil.core.licence.ILicenseManager;
 import org.apache.felix.sigil.core.licence.ILicensePolicy;
@@ -298,7 +299,7 @@
                 {
                     info = ModelElementFactory.getInstance().newModelElement( IBundleModelElement.class );
                     info.setSymbolicName( name.split( ";" )[0] );
-                    info.setVersion( Version.parseVersion( attrs.getValue( "Bundle-Version" ) ) );
+                    info.setVersion( VersionTable.getVersion( attrs.getValue( "Bundle-Version" ) ) );
                     info.setName( attrs.getValue( "Bundle-Name" ) );
                     info.setDescription( attrs.getValue( "Bundle-Description" ) );
                     info.setVendor( attrs.getValue( "Bundle-Vendor" ) );
@@ -433,7 +434,7 @@
     private Version parseVersion( String val )
     {
         val = val.replaceAll( "\"", "" );
-        return new Version( val );
+        return VersionTable.getVersion( val );
     }
 
 
diff --git a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/OBRHandler.java b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/OBRHandler.java
index 8646bba..19b0aab 100644
--- a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/OBRHandler.java
+++ b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/OBRHandler.java
@@ -34,6 +34,7 @@
 import org.apache.felix.sigil.common.osgi.LDAPParser;
 import org.apache.felix.sigil.common.osgi.SimpleTerm;
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.model.ModelElementFactory;
 import org.apache.felix.sigil.model.eclipse.ISigilBundle;
 import org.apache.felix.sigil.model.osgi.IBundleModelElement;
@@ -42,7 +43,6 @@
 import org.apache.felix.sigil.model.osgi.IRequiredBundle;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.osgi.framework.Version;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -143,7 +143,7 @@
                 IBundleModelElement info = ModelElementFactory.getInstance()
                     .newModelElement( IBundleModelElement.class );
                 info.setSymbolicName( attributes.getValue( "", SYMBOLIC_NAME ) );
-                info.setVersion( new Version( attributes.getValue( "", VERSION ) ) );
+                info.setVersion( VersionTable.getVersion(attributes.getValue( "", VERSION ) ) );
                 info.setName( attributes.getValue( "", PRESENTATION_NAME ) );
                 URI l = makeAbsolute( uri );
                 info.setUpdateLocation( l );
@@ -284,7 +284,7 @@
             }
             else if ( "version".equals( name ) )
             {
-                export.setVersion( new Version( value ) );
+                export.setVersion( VersionTable.getVersion( value ) );
             }
         }
     }
diff --git a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/VersionRangeHelper.java b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/VersionRangeHelper.java
index bf72f64..f25babb 100644
--- a/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/VersionRangeHelper.java
+++ b/sigil/common/obr/src/org/apache/felix/sigil/obr/impl/VersionRangeHelper.java
@@ -30,6 +30,7 @@
 import org.apache.felix.sigil.common.osgi.Ops;
 import org.apache.felix.sigil.common.osgi.SimpleTerm;
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.osgi.framework.Version;
 
 
@@ -178,7 +179,7 @@
 
     private static Version toVersion( SimpleTerm t )
     {
-        return new Version( t.getRval() );
+        return VersionTable.getVersion( t.getRval() );
     }
 
 
diff --git a/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionRange.java b/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionRange.java
index a4a1558..321f4e2 100644
--- a/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionRange.java
+++ b/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionRange.java
@@ -97,7 +97,7 @@
         }
         else
         {
-            Version atLeast = Version.parseVersion( val );
+            Version atLeast = VersionTable.getVersion( val );
             return new VersionRange( atLeast );
         }
 
@@ -122,7 +122,7 @@
         {
             throw new IllegalArgumentException( "illegal version range syntax " + "too many commas" );
         }
-        Version floor = Version.parseVersion( floorCeiling[0] );
+        Version floor = VersionTable.getVersion( floorCeiling[0] );
         Version ceiling = "*".equals( floorCeiling[1] ) ? INFINITE_VERSION : Version.parseVersion( floorCeiling[1] );
         return new VersionRange( openFloor, floor, ceiling, openCeiling );
     }
@@ -260,16 +260,16 @@
         switch ( lowerBoundRule )
         {
             case Any:
-                floor = new Version( 0, 0, 0 );
+                floor = VersionTable.getVersion( 0, 0, 0 );
                 break;
             case Major:
-                floor = new Version( pointVersion.getMajor(), 0, 0 );
+                floor = VersionTable.getVersion( pointVersion.getMajor(), 0, 0 );
                 break;
             case Minor:
-                floor = new Version( pointVersion.getMajor(), pointVersion.getMinor(), 0 );
+                floor = VersionTable.getVersion( pointVersion.getMajor(), pointVersion.getMinor(), 0 );
                 break;
             case Micro:
-                floor = new Version( pointVersion.getMajor(), pointVersion.getMinor(), pointVersion.getMicro() );
+                floor = VersionTable.getVersion( pointVersion.getMajor(), pointVersion.getMinor(), pointVersion.getMicro() );
                 break;
             case Exact:
                 floor = pointVersion;
@@ -284,13 +284,13 @@
                 ceiling = INFINITE_VERSION;
                 break;
             case Major:
-                ceiling = new Version( pointVersion.getMajor() + 1, 0, 0 );
+                ceiling = VersionTable.getVersion( pointVersion.getMajor() + 1, 0, 0 );
                 break;
             case Minor:
-                ceiling = new Version( pointVersion.getMajor(), pointVersion.getMinor() + 1, 0 );
+                ceiling = VersionTable.getVersion( pointVersion.getMajor(), pointVersion.getMinor() + 1, 0 );
                 break;
             case Micro:
-                ceiling = new Version( pointVersion.getMajor(), pointVersion.getMinor(), pointVersion.getMicro() + 1 );
+                ceiling = VersionTable.getVersion( pointVersion.getMajor(), pointVersion.getMinor(), pointVersion.getMicro() + 1 );
                 break;
             case Exact:
                 ceiling = pointVersion;
diff --git a/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionTable.java b/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionTable.java
new file mode 100644
index 0000000..1fb5565
--- /dev/null
+++ b/sigil/common/osgi/src/org/apache/felix/sigil/common/osgi/VersionTable.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.sigil.common.osgi;
+
+import java.util.WeakHashMap;
+
+import org.osgi.framework.Version;
+
+/**
+ * Cache of Versions used in Sigil backed by a WeakHashMap to conserve memory.
+ * 
+ * VersionTable.getVersion should be used in preference to new Version() or Version.parseVersion.
+ * 
+ * @author dave
+ *
+ */
+public class VersionTable
+{
+    private static final WeakHashMap<String, Version> versions = new WeakHashMap<String, Version>();
+    
+    public static Version getVersion(String version) {
+        synchronized( versions ) {
+            Version v = versions.get(version);
+            if ( v == null ) {
+                v = Version.parseVersion(version);
+                versions.put(version, v);
+            }
+            
+            return v;
+        }
+    }
+    
+    public static Version getVersion(int major, int minor, int micro) {
+        return getVersion(major, minor, micro, null);
+    }
+
+    public static Version getVersion(int major, int minor, int micro, String qualifier) {
+        String key;
+        
+        if ( qualifier == null ) {
+            key = major + "." + minor + "." + micro;
+        }
+        else {
+            assert qualifier.trim().length() > 0;
+            key = major + "." + minor + "." + micro + "." + qualifier;            
+        }
+        
+        synchronized( versions ) {
+            Version v = versions.get(key);
+            if ( v == null ) {
+                v = new Version(major, minor, micro);
+                versions.put(key, v);
+            }
+            
+            return v;
+        }
+    }
+}
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/GeneralInfoSection.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/GeneralInfoSection.java
index 8cb74e1..7cc61f8 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/GeneralInfoSection.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/GeneralInfoSection.java
@@ -20,6 +20,7 @@
 package org.apache.felix.sigil.ui.eclipse.ui.editors.project;
 
 
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.eclipse.model.project.ISigilProjectModel;
 import org.apache.felix.sigil.model.ModelElementFactory;
 import org.apache.felix.sigil.model.eclipse.ISigilBundle;
@@ -134,7 +135,7 @@
 
             public Object getValue( String label )
             {
-                return Version.parseVersion( label );
+                return VersionTable.getVersion( label );
             }
         };
 
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/NewPackageExportDialog.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/NewPackageExportDialog.java
index 6558114..cefa091 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/NewPackageExportDialog.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/NewPackageExportDialog.java
@@ -22,6 +22,7 @@
 
 import java.util.Comparator;
 
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.ui.eclipse.ui.util.BackgroundLoadingSelectionDialog;
 import org.apache.felix.sigil.ui.eclipse.ui.util.IElementDescriptor;
 import org.eclipse.jdt.core.IPackageFragment;
@@ -67,7 +68,7 @@
 
     private Version version = null;
     private String error = null;
-    private Version projectVersion = new Version( 0, 0, 0 );
+    private Version projectVersion = VersionTable.getVersion( 0, 0, 0 );
 
     private Button btnInheritBundleVersion;
     private Button btnExplicitVersion;
@@ -130,7 +131,7 @@
                     txtVersion.setEnabled( true );
                     try
                     {
-                        version = new Version( txtVersion.getText() );
+                        version = VersionTable.getVersion( txtVersion.getText() );
                     }
                     catch ( IllegalArgumentException e )
                     {
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/PackageExportDialog.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/PackageExportDialog.java
index 246b2a3..42f2f58 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/PackageExportDialog.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/PackageExportDialog.java
@@ -20,6 +20,7 @@
 package org.apache.felix.sigil.ui.eclipse.ui.editors.project;
 
 
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.eclipse.jface.viewers.IContentProvider;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.swt.SWT;
@@ -59,7 +60,7 @@
             {
                 try
                 {
-                    version = Version.parseVersion( versionText.getText() );
+                    version = VersionTable.getVersion( versionText.getText() );
                     setErrorMessage( null );
                 }
                 catch ( IllegalArgumentException ex )
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/VersionRangeComponent.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/VersionRangeComponent.java
index d38578b..a99640b 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/VersionRangeComponent.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/editors/project/VersionRangeComponent.java
@@ -24,6 +24,7 @@
 import java.util.Set;
 
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.ui.eclipse.ui.util.IValidationListener;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.swt.SWT;
@@ -254,15 +255,14 @@
                 }
                 else
                 {
-                    Version v = Version.parseVersion( specificText.getText().trim() );
+                    Version v = VersionTable.getVersion( specificText.getText().trim() );
                     versions = new VersionRange( false, v, v, false );
                 }
             }
             else
             {
-                Version min = Version.parseVersion( minimumText.getText() );
-                Version max = "*".equals( maximumText.getText() ) ? VersionRange.INFINITE_VERSION : Version
-                    .parseVersion( maximumText.getText() );
+                Version min = VersionTable.getVersion( minimumText.getText() );
+                Version max = "*".equals( maximumText.getText() ) ? VersionRange.INFINITE_VERSION : VersionTable.getVersion( maximumText.getText() );
                 versions = new VersionRange( !minInclusiveButton.getSelection(), min, max, !maxInclusiveButton
                     .getSelection() );
             }
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/LibraryConfigurationDialog.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/LibraryConfigurationDialog.java
index 1c1584f..32770ce 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/LibraryConfigurationDialog.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/LibraryConfigurationDialog.java
@@ -24,6 +24,7 @@
 import java.util.Iterator;
 import java.util.TreeSet;
 
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.model.ModelElementFactory;
 import org.apache.felix.sigil.model.eclipse.ILibrary;
 import org.apache.felix.sigil.model.osgi.IPackageImport;
@@ -224,7 +225,7 @@
 
         try
         {
-            version = new Version( txtVersion.getText() );
+            version = VersionTable.getVersion( txtVersion.getText() );
             if ( version.getQualifier().indexOf( '_' ) > -1 )
             {
                 warning = "The use of underscores in a version qualifier is discouraged.";
diff --git a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/VersionsPreferencePage.java b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/VersionsPreferencePage.java
index 1ec4892..846f764 100644
--- a/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/VersionsPreferencePage.java
+++ b/sigil/eclipse/ui/src/org/apache/felix/sigil/ui/eclipse/ui/preferences/VersionsPreferencePage.java
@@ -22,8 +22,8 @@
 
 import org.apache.felix.sigil.common.osgi.VersionRange;
 import org.apache.felix.sigil.common.osgi.VersionRangeBoundingRule;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.eclipse.SigilCore;
-import org.apache.felix.sigil.ui.eclipse.ui.SigilUI;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.swt.SWT;
@@ -31,7 +31,6 @@
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -48,7 +47,7 @@
 public class VersionsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
 {
 
-    private static final Version SAMPLE_VERSION = new Version( 1, 2, 3, "qualifier" );
+    private static final Version SAMPLE_VERSION = VersionTable.getVersion( 1, 2, 3, "qualifier" );
 
     private IWorkbench workbench;
 
@@ -169,7 +168,7 @@
             {
                 try
                 {
-                    sampleVersion = new Version( txtSampleVersion.getText() );
+                    sampleVersion = VersionTable.getVersion( txtSampleVersion.getText() );
                 }
                 catch ( IllegalArgumentException x )
                 {
@@ -184,7 +183,7 @@
             {
                 try
                 {
-                    matchVersion = new Version( txtMatchVersion.getText() );
+                    matchVersion = VersionTable.getVersion( txtMatchVersion.getText() );
                 }
                 catch ( IllegalArgumentException x )
                 {
diff --git a/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/ProjectRepository.java b/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/ProjectRepository.java
index 73a992c..2f9e58a 100644
--- a/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/ProjectRepository.java
+++ b/sigil/ivy/resolver/src/org/apache/felix/sigil/ivy/ProjectRepository.java
@@ -30,6 +30,7 @@
 import java.util.Map;
 
 import org.apache.felix.sigil.common.osgi.VersionRange;
+import org.apache.felix.sigil.common.osgi.VersionTable;
 import org.apache.felix.sigil.config.BldFactory;
 import org.apache.felix.sigil.config.IBldProject;
 import org.apache.felix.sigil.config.IBldProject.IBldBundle;
@@ -270,7 +271,7 @@
 
             info.setSymbolicName(bb.getSymbolicName());
 
-            Version version = new Version(bb.getVersion());
+            Version version = VersionTable.getVersion(bb.getVersion());
             info.setVersion(version);
 
             ISigilBundle pb = ModelElementFactory.getInstance().newModelElement(ISigilBundle.class);
