diff --git a/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java b/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java
index 3ff3791..1022546 100644
--- a/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java
+++ b/framework/src/main/java/org/apache/felix/framework/resolver/Candidates.java
@@ -32,6 +32,7 @@
 import java.util.TreeSet;
 import org.apache.felix.framework.BundleRevisionImpl;
 import org.apache.felix.framework.resolver.Resolver.ResolverState;
+import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.Util;
 import org.apache.felix.framework.wiring.BundleCapabilityImpl;
 import org.apache.felix.framework.wiring.BundleRequirementImpl;
@@ -201,7 +202,8 @@
             String resolution = req.getDirectives().get(Constants.RESOLUTION_DIRECTIVE);
             if (!state.isEffective(req)
 // TODO: OSGi R4.3 - Use proper "dynamic" constant.
-                || ((resolution != null) && resolution.equals("dynamic")))
+                || ((resolution != null)
+                    && resolution.equals(FelixConstants.RESOLUTION_DYNAMIC)))
             {
                 continue;
             }
diff --git a/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java b/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
index dd31e0e..021848a 100644
--- a/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
@@ -40,7 +40,7 @@
 import org.osgi.framework.wiring.BundleRevision;
 import org.osgi.framework.wiring.BundleWire;
 
-// TODO: OSGi R.4.3 - Make sure we have sufficient wrapping of caps/reqs.
+// TODO: OSGi R4.3 - Make sure we have sufficient wrapping of caps/reqs.
 public class ResolverImpl implements Resolver
 {
     private final Logger m_logger;
@@ -856,7 +856,7 @@
             {
                 if (req.getNamespace().equals(BundleRevision.BUNDLE_NAMESPACE))
                 {
-// TODO: OSGi R.4.3 - Something doesn't seem correct here since we don't calculate
+// TODO: OSGi R4.3 - Something doesn't seem correct here since we don't calculate
 //       reexported packages for resolved bundles. Create a test case.
                     String value = req.getDirectives().get(Constants.VISIBILITY_DIRECTIVE);
                     if ((value != null) && value.equals(Constants.VISIBILITY_REEXPORT)
diff --git a/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java b/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java
index b4e8ad0..df8ba28 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/FelixConstants.java
@@ -20,48 +20,48 @@
 
 public interface FelixConstants extends org.osgi.framework.Constants
 {
-    public static final String SYSTEM_BUNDLE_SYMBOLICNAME = "org.apache.felix.framework";
+    String SYSTEM_BUNDLE_SYMBOLICNAME = "org.apache.felix.framework";
     // Framework constants and values.
-    public static final String FRAMEWORK_VERSION_VALUE = "1.5";
-    public static final String FRAMEWORK_VENDOR_VALUE = "Apache Software Foundation";
+    String FRAMEWORK_VERSION_VALUE = "1.5";
+    String FRAMEWORK_VENDOR_VALUE = "Apache Software Foundation";
 
     // Framework constants and values.
-    public static final String FELIX_VERSION_PROPERTY = "felix.version";
+    String FELIX_VERSION_PROPERTY = "felix.version";
 
     // Miscellaneous manifest constants.
-    public static final String DIRECTIVE_SEPARATOR = ":=";
-    public static final String ATTRIBUTE_SEPARATOR = "=";
-    public static final String CLASS_PATH_SEPARATOR = ",";
-    public static final String CLASS_PATH_DOT = ".";
-    public static final String PACKAGE_SEPARATOR = ";";
-    public static final String VERSION_SEGMENT_SEPARATOR = ".";
-    public static final int VERSION_SEGMENT_COUNT = 3;
-    public static final String BUNDLE_NATIVECODE_OPTIONAL = "*";
+    String DIRECTIVE_SEPARATOR = ":=";
+    String ATTRIBUTE_SEPARATOR = "=";
+    String CLASS_PATH_SEPARATOR = ",";
+    String CLASS_PATH_DOT = ".";
+    String PACKAGE_SEPARATOR = ";";
+    String VERSION_SEGMENT_SEPARATOR = ".";
+    int VERSION_SEGMENT_COUNT = 3;
+    String BUNDLE_NATIVECODE_OPTIONAL = "*";
 
     // Miscellaneous OSGi constants.
-    public static final String BUNDLE_URL_PROTOCOL = "bundle";
+    String BUNDLE_URL_PROTOCOL = "bundle";
 
     // Miscellaneous framework configuration property names.
-    public static final String FRAMEWORK_BUNDLECACHE_IMPL
-        = "felix.bundlecache.impl";
-    public static final String LOG_LEVEL_PROP = "felix.log.level";
-    public static final String LOG_LOGGER_PROP = "felix.log.logger";
-    public static final String SYSTEMBUNDLE_ACTIVATORS_PROP
-        = "felix.systembundle.activators";
-    public static final String BUNDLE_STARTLEVEL_PROP
-        = "felix.startlevel.bundle";
-    public static final String SERVICE_URLHANDLERS_PROP = "felix.service.urlhandlers";
-    public static final String IMPLICIT_BOOT_DELEGATION_PROP = "felix.bootdelegation.implicit";
-    public static final String BOOT_CLASSLOADERS_PROP = "felix.bootdelegation.classloaders";
-    public static final String USE_LOCALURLS_PROP = "felix.jarurls";
+    String FRAMEWORK_BUNDLECACHE_IMPL = "felix.bundlecache.impl";
+    String LOG_LEVEL_PROP = "felix.log.level";
+    String LOG_LOGGER_PROP = "felix.log.logger";
+    String SYSTEMBUNDLE_ACTIVATORS_PROP = "felix.systembundle.activators";
+    String BUNDLE_STARTLEVEL_PROP = "felix.startlevel.bundle";
+    String SERVICE_URLHANDLERS_PROP = "felix.service.urlhandlers";
+    String IMPLICIT_BOOT_DELEGATION_PROP = "felix.bootdelegation.implicit";
+    String BOOT_CLASSLOADERS_PROP = "felix.bootdelegation.classloaders";
+    String USE_LOCALURLS_PROP = "felix.jarurls";
+
+    // Missing OSGi constant for resolution directive.
+    String RESOLUTION_DYNAMIC = "dynamic";
 
     // Start level-related constants.
-    public static final int FRAMEWORK_INACTIVE_STARTLEVEL = 0;
-    public static final int FRAMEWORK_DEFAULT_STARTLEVEL = 1;
-    public static final int SYSTEMBUNDLE_DEFAULT_STARTLEVEL = 0;
-    public static final int BUNDLE_DEFAULT_STARTLEVEL = 1;
+    int FRAMEWORK_INACTIVE_STARTLEVEL = 0;
+    int FRAMEWORK_DEFAULT_STARTLEVEL = 1;
+    int SYSTEMBUNDLE_DEFAULT_STARTLEVEL = 0;
+    int BUNDLE_DEFAULT_STARTLEVEL = 1;
 
     // Miscellaneous properties values.
-    public static final String FAKE_URL_PROTOCOL_VALUE = "location:";
-    public static final String FELIX_EXTENSION_ACTIVATOR = "Felix-Activator";
+    String FAKE_URL_PROTOCOL_VALUE = "location:";
+    String FELIX_EXTENSION_ACTIVATOR = "Felix-Activator";
 }
\ No newline at end of file
diff --git a/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java b/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
index b806f95..3647d2a 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
@@ -487,8 +487,8 @@
 
             // Add the resolution directive to indicate that these are
             // dynamic imports.
-// TODO: OSGi R4.3 - Use real constant value for "dynamic".
-            clause.m_dirs.put(Constants.RESOLUTION_DIRECTIVE, "dynamic");
+            clause.m_dirs.put(Constants.RESOLUTION_DIRECTIVE,
+                FelixConstants.RESOLUTION_DYNAMIC);
 
             // Check for "version" and "specification-version" attributes
             // and verify they are the same if both are specified.
