diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
index 0bc3712..0592088 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/FieldHandler.java
@@ -324,7 +324,7 @@
             }
 
             // if the field is dynamic with the replace strategy it has to be volatile
-            if ( !metadata.isStatic() && metadata.getFieldStrategy().equals(ReferenceMetadata.FIELD_STRATEGY_REPLACE) )
+            if ( !metadata.isStatic() && metadata.isReplace() )
             {
                 if ( !Modifier.isVolatile(f.getModifiers()) )
                 {
@@ -336,7 +336,7 @@
 
             // replace strategy: field must not be final
             //                   only collection and list allowed
-            if ( metadata.getFieldStrategy().equals(ReferenceMetadata.FIELD_STRATEGY_REPLACE) )
+            if ( metadata.isReplace()  )
             {
                 if ( Modifier.isFinal(f.getModifiers()) )
                 {
@@ -410,7 +410,7 @@
             if ( metadata.isMultiple()
                  && !metadata.isStatic() )
             {
-                if ( ReferenceMetadata.FIELD_STRATEGY_REPLACE.equals(metadata.getFieldStrategy()) )
+                if ( metadata.isReplace()  )
                 {
                     this.setFieldValue(componentInstance, Collections.emptyList());
                 }
@@ -517,7 +517,7 @@
             {
                 final Object obj = getValue(key, refPair);
                 this.boundValues.put(refPair, obj);
-                if ( ReferenceMetadata.FIELD_STRATEGY_REPLACE.equals(metadata.getFieldStrategy()) )
+                if ( metadata.isReplace() )
                 {
                     this.setFieldValue(componentInstance, getReplaceCollection());
                 }
@@ -534,7 +534,7 @@
                 if ( !metadata.isStatic() )
                 {
                     final Object obj = this.boundValues.remove(refPair);
-                    if ( ReferenceMetadata.FIELD_STRATEGY_REPLACE.equals(metadata.getFieldStrategy()) )
+                    if ( metadata.isReplace() )
                     {
                         this.setFieldValue(componentInstance, getReplaceCollection());
                     }
@@ -556,7 +556,7 @@
                     final Object obj = getValue(key, refPair);
                     final Object oldObj = this.boundValues.put(refPair, obj);
 
-                    if ( ReferenceMetadata.FIELD_STRATEGY_REPLACE.equals(metadata.getFieldStrategy()) )
+                    if ( metadata.isReplace() )
                     {
                         this.setFieldValue(componentInstance, getReplaceCollection());
                     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
index 8284164..8842972 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
@@ -65,10 +65,10 @@
     private static final Set<String> POLICY_OPTION_VALID;
 
     // constant for update field strategy
-    public static final String FIELD_STRATEGY_UPDATE = "update";
+    private static final String FIELD_STRATEGY_UPDATE = "update";
 
     // constant for replace field strategy
-    public static final String FIELD_STRATEGY_REPLACE = "replace";
+    private static final String FIELD_STRATEGY_REPLACE = "replace";
 
     // set of valid field strategy settings
     private static final Set<String> FIELD_STRATEGY_VALID;
@@ -135,6 +135,7 @@
     private boolean m_isOptional = false;
     private boolean m_isMultiple = false;
     private boolean m_isReluctant = true;
+    private boolean m_isReplace = true;
 
     // Flag that is set once the component is verified (its properties cannot be changed)
     private boolean m_validated = false;
@@ -363,6 +364,8 @@
         }
 
         m_field_strategy = strategy;
+
+        m_isReplace = FIELD_STRATEGY_REPLACE.equals(strategy);
     }
 
     /**
@@ -539,7 +542,6 @@
         return m_isStatic;
     }
 
-
     /**
      * Test if dependency is optional (0..1 or 0..n)
      *
@@ -572,6 +574,15 @@
         return m_isReluctant;
     }
 
+    /**
+     * Test if field strategy is replace.
+     *
+     * @return true if field strategy is replace
+     */
+    public boolean isReplace()
+    {
+        return m_isReplace;
+    }
 
     /**
      * Returns the name of the component property referring to the {@link #getTarget() target}
@@ -746,6 +757,7 @@
             return getField() +
                     "interface=" + this.getInterface() +
                     ", filter=" + this.getTarget() +
+                    ", strategy=" + this.getFieldStrategy() +
                     ", policy=" + this.getPolicy() +
                     ", cardinality=" + this.getCardinality();
         }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
index d2f31ef..42331da 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
@@ -317,14 +317,7 @@
 			dto.scope = r.getScope().name();
 			if ( r.getField() != null )
 			{
-			    if ( ReferenceMetadata.FIELD_STRATEGY_REPLACE.equals(r.getFieldStrategy()) )
-			    {
-			        dto.strategy = ReferenceDTO.STRATEGY_FIELD_REPLACE;
-			    }
-			    else
-			    {
-                    dto.strategy = ReferenceDTO.STRATEGY_FIELD_UPDATE;
-			    }
+		        dto.strategy = r.isReplace() ? ReferenceDTO.STRATEGY_FIELD_REPLACE : ReferenceDTO.STRATEGY_FIELD_UPDATE;
 			}
 			else
 			{
