diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/dynamic/DynamicClassLoader.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/dynamic/DynamicClassLoader.java
index 9e850aa..585fc65 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/dynamic/DynamicClassLoader.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/dynamic/DynamicClassLoader.java
@@ -17,8 +17,6 @@
  ******************************************************************************/
 package org.eclipse.persistence.dynamic;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 //javase imports
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -214,14 +212,7 @@ protected Class<?> findClass(String className) throws ClassNotFoundException {
             try {
                 byte[] bytes = writer.writeClass(this, className);
                 if (bytes != null) {
-                    String outputPath = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                            AccessController.doPrivileged(new PrivilegedAction<String>() {
-                                @Override
-                                public String run() {
-                                    return System.getProperty(SystemProperties.WEAVING_OUTPUT_PATH, "");
-                                }
-                            })
-                            : System.getProperty(SystemProperties.WEAVING_OUTPUT_PATH, "");
+                    String outputPath = PrivilegedAccessHelper.getSystemProperty(SystemProperties.WEAVING_OUTPUT_PATH, "");
 
                     if (!outputPath.equals("")) {
                         Helper.outputClassFile(className, bytes, outputPath);
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/EclipseLinkException.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/EclipseLinkException.java
index f2f3ba4..906cb36 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/EclipseLinkException.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/EclipseLinkException.java
@@ -17,8 +17,6 @@
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 
 import org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator;
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
@@ -34,22 +32,10 @@ public abstract class EclipseLinkException extends RuntimeException {
     protected static Boolean shouldPrintInternalException = null;
     protected String indentationString;
     protected int errorCode;
-    protected static final String CR;
+    protected static final String CR = PrivilegedAccessHelper.getSystemProperty("line.separator");
     //Bug#3559280  Added to avoid logging an exception twice
     protected boolean hasBeenLogged;
 
-    static {
-        // bug 2756643
-        CR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty("line.separator");
-                    }
-                })
-                : System.getProperty("line.separator");
-    }
-
     /**
      * INTERNAL:
      * Return a new exception.
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/i18n/ExceptionMessageGenerator.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/i18n/ExceptionMessageGenerator.java
index ac4b747..a0ab7c3 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/i18n/ExceptionMessageGenerator.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/exceptions/i18n/ExceptionMessageGenerator.java
@@ -14,8 +14,6 @@
  ******************************************************************************/
 package org.eclipse.persistence.exceptions.i18n;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.text.MessageFormat;
 import java.util.Locale;
 import java.util.ResourceBundle;
@@ -33,18 +31,7 @@
  * @author: Rick Barkhouse
  */
 public class ExceptionMessageGenerator {
-    private final static String CR;
-
-    static {
-        CR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty("line.separator");
-                    }
-                })
-                : System.getProperty("line.separator");
-    }
+    private final static String CR = PrivilegedAccessHelper.getSystemProperty("line.separator");
 
     /**
      * Return the loader for loading the resource bundles.
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/core/helper/CoreHelper.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/core/helper/CoreHelper.java
index aa5c5b5..b29ed6e 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/core/helper/CoreHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/core/helper/CoreHelper.java
@@ -14,27 +14,12 @@
  ******************************************************************************/
 package org.eclipse.persistence.internal.core.helper;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
 
 public class CoreHelper {
 
     /** Store CR string, for some reason \n is not platform independent. */
-    protected final static String CR;
-
-    static {
-        // bug 2756643
-        CR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty("line.separator");
-                    }
-                })
-                : System.getProperty("line.separator");
-    }
+    protected static String CR = null;
 
     /**
      * Return a string containing the platform-appropriate
@@ -42,6 +27,9 @@ public String run() {
      */
     public static String cr() {
         // bug 2756643
+        if (CR == null) {
+            CR = PrivilegedAccessHelper.getSystemProperty("line.separator");
+        }
         return CR;
     }
 
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/ConcurrencyManager.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/ConcurrencyManager.java
index a30cc91..18805b9 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/ConcurrencyManager.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/ConcurrencyManager.java
@@ -42,7 +42,7 @@ public class ConcurrencyManager implements Serializable {
 
     public static final Map<Thread, DeferredLockManager> deferredLockManagers = initializeDeferredLockManagers();
 
-    protected static boolean shouldTrackStack = getPropertyRecordStackOnLock() != null;
+    protected static boolean shouldTrackStack = PrivilegedAccessHelper.getSystemProperty(SystemProperties.RECORD_STACK_ON_LOCK) != null;
 
     protected int numberOfReaders;
     protected int depth;
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/Helper.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/Helper.java
index 3d79ce4..b91e54e 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/Helper.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/Helper.java
@@ -36,7 +36,6 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.sql.Timestamp;
 import java.util.ArrayList;
@@ -94,7 +93,7 @@ public class Helper extends CoreHelper implements Serializable {
     // Changed static initialization to lazy initialization for bug 2756643
 
     /** Store CR string, for some reason \n is not platform independent. */
-    protected final static String CR;
+    protected static String CR;
 
     /** formatting strings for indenting */
     public static final String SPACE = " ";
@@ -142,18 +141,6 @@ public class Helper extends CoreHelper implements Serializable {
     private static String defaultStartDatabaseDelimiter = null;
     private static String defaultEndDatabaseDelimiter = null;
 
-    static {
-        // bug 2756643
-        CR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty("line.separator");
-                    }
-                })
-                : System.getProperty("line.separator");
-    }
-
     /**
      * Return if JDBC date access should be optimized.
      */
@@ -816,6 +803,9 @@ public static Vector copyVector(List originalVector, int startIndex, int stopInd
      * characters for carriage return.
      */
     public static String cr() {
+        if (CR == null) {
+            CR = PrivilegedAccessHelper.getSystemProperty("line.separator");
+        }
         return CR;
     }
 
@@ -825,14 +815,7 @@ public static String cr() {
     public static String currentWorkingDirectory() {
         // bug 2756643
         if (CURRENT_WORKING_DIRECTORY == null) {
-            CURRENT_WORKING_DIRECTORY = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty("user.dir");
-                        }
-                    })
-                    : System.getProperty("user.dir");
+            CURRENT_WORKING_DIRECTORY = PrivilegedAccessHelper.getSystemProperty("user.dir");
         }
         return CURRENT_WORKING_DIRECTORY;
     }
@@ -843,14 +826,7 @@ public String run() {
     public static String tempDirectory() {
         // Bug 2756643
         if (TEMP_DIRECTORY == null) {
-            TEMP_DIRECTORY = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty("java.io.tmpdir");
-                        }
-                    })
-                    : System.getProperty("java.io.tmpdir");
+            TEMP_DIRECTORY = PrivilegedAccessHelper.getSystemProperty("java.io.tmpdir");
         }
         return TEMP_DIRECTORY;
     }
@@ -983,14 +959,7 @@ public static String extractJarNameFromURL(java.net.URL url) {
     public static String fileSeparator() {
         //Bug 2756643
         if (FILE_SEPARATOR == null) {
-            FILE_SEPARATOR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty("file.separator");
-                        }
-                    })
-                    : System.getProperty("file.separator");
+            FILE_SEPARATOR = PrivilegedAccessHelper.getSystemProperty("file.separator");
         }
         return FILE_SEPARATOR;
     }
@@ -1260,16 +1229,7 @@ public static void outputClassFile(String className, byte[] classBytes,
                             "weaver_not_overwriting", file);
                 }
             } else {
-                String weavingShouldOverwriteProp = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                        AccessController.doPrivileged(new PrivilegedAction<String>() {
-                            @Override
-                            public String run() {
-                                return System.getProperty(SystemProperties.WEAVING_SHOULD_OVERWRITE, "false");
-                            }
-                        })
-                        : System.getProperty(SystemProperties.WEAVING_SHOULD_OVERWRITE, "false");
-
-                if (!weavingShouldOverwriteProp.equalsIgnoreCase("true")) {
+                if (!PrivilegedAccessHelper.getSystemProperty(SystemProperties.WEAVING_SHOULD_OVERWRITE, "false").equalsIgnoreCase("true")) {
                     AbstractSessionLog.getLog().log(SessionLog.WARNING,
                             SessionLog.WEAVER, "weaver_not_overwriting",
                             className);
@@ -1296,14 +1256,7 @@ public String run() {
     public static String pathSeparator() {
         // Bug 2756643
         if (PATH_SEPARATOR == null) {
-            PATH_SEPARATOR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty("path.separator");
-                        }
-                    })
-                    : System.getProperty("path.separator");
+            PATH_SEPARATOR = PrivilegedAccessHelper.getSystemProperty("path.separator");
         }
         return PATH_SEPARATOR;
     }
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/JavaVersion.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/JavaVersion.java
index 0b7f903..cdb0bd6 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/JavaVersion.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/helper/JavaVersion.java
@@ -12,12 +12,10 @@
  ******************************************************************************/
 package org.eclipse.persistence.internal.helper;
 
-import java.security.AccessController;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
-import org.eclipse.persistence.internal.security.PrivilegedGetSystemProperty;
 
 /**
  * Java version storage class. Used for version numbers retrieved from
@@ -54,10 +52,7 @@ public final class JavaVersion {
      * @return Java specification version {@see String} from JDK system property.
      */
     public static String vmVersionString() {
-        if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
-            return AccessController.doPrivileged(new PrivilegedGetSystemProperty(VM_VERSION_PROPERTY));
-        }
-        return System.getProperty(VM_VERSION_PROPERTY);
+        return PrivilegedAccessHelper.getSystemProperty(VM_VERSION_PROPERTY);
     }
 
     /**
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/Constants.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/Constants.java
index 0475340..4ab467f 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/Constants.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/oxm/Constants.java
@@ -15,8 +15,6 @@
 package org.eclipse.persistence.internal.oxm;
 
 import java.nio.charset.Charset;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 
 import javax.xml.namespace.QName;
 
@@ -30,7 +28,7 @@ public class Constants {
     public static final String BOOLEAN_STRING_TRUE = "true";
     public static final String CDATA = "CDATA";
     public static final char COLON = ':';
-    private static final String CR;
+    private static String CR;
     public static final String DEFAULT_XML_ENCODING = "UTF-8";
     public static final Charset DEFAULT_CHARSET = Charset.forName(DEFAULT_XML_ENCODING);
     public static final char DOT = '.';
@@ -153,18 +151,6 @@ public class Constants {
     public static final QName SWA_REF_QNAME = new QName(REF_URL, SWA_REF);
     public static final QName EXPECTED_CONTENT_TYPES_QNAME = new QName(XML_MIME_URL, EXPECTED_CONTENT_TYPES);
 
-    static {
-        // bug 2756643
-        CR = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty("line.separator");
-                    }
-                })
-                : System.getProperty("line.separator");
-    }
-
     public static final MediaType APPLICATION_JSON = new MediaType() {
 
         @Override
@@ -198,6 +184,9 @@ public boolean isApplicationXML() {
      * characters for carriage return.
      */
     public static String cr() {
+        if (CR == null) {
+            CR = PrivilegedAccessHelper.getSystemProperty("line.separator");
+        }
         return CR;
     }
 
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java
index 746e4f8..5b7f6ac 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java
@@ -26,12 +26,19 @@
 import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.eclipse.persistence.config.SystemProperties;
 import org.eclipse.persistence.internal.helper.Helper;
 import org.eclipse.persistence.internal.localization.ExceptionLocalization;
+import org.eclipse.persistence.platform.server.ServerPlatformBase;
+import org.eclipse.persistence.platform.xml.XMLPlatformFactory;
 
 /**
  * INTERNAL:
@@ -51,6 +58,20 @@ public class PrivilegedAccessHelper {
     private static boolean shouldCheckPrivilegedAccess = true;
     private static boolean shouldUsePrivilegedAccess = false;
 
+    private final static String[] legalProperties = { "file.separator", "java.io.tmpdir", "java.version", "line.separator", "path.separator", "user.dir",
+            "org.eclipse.persistence.fetchgroupmonitor", "org.eclipse.persistence.querymonitor", "SAP_J2EE_Engine_Version",
+            PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.JAVASE_DB_INTERACTION, 
+            PersistenceUnitProperties.LOGGING_FILE, PersistenceUnitProperties.LOGGING_LEVEL,
+            SystemProperties.ARCHIVE_FACTORY, SystemProperties.DO_NOT_PROCESS_XTOMANY_FOR_QBE, SystemProperties.RECORD_STACK_ON_LOCK,
+            SystemProperties.WEAVING_OUTPUT_PATH, SystemProperties.WEAVING_SHOULD_OVERWRITE, SystemProperties.WEAVING_REFLECTIVE_INTROSPECTION,
+            SystemProperties.DO_NOT_PROCESS_XTOMANY_FOR_QBE,
+            ServerPlatformBase.JMX_REGISTER_RUN_MBEAN_PROPERTY, ServerPlatformBase.JMX_REGISTER_DEV_MBEAN_PROPERTY,
+            XMLPlatformFactory.XML_PLATFORM_PROPERTY};
+    private final static Set<String> legalPropertiesSet = Collections.unmodifiableSet(new HashSet(Arrays.asList(legalProperties)));
+
+    private final static String[] exemptedProperties = { "line.separator" };
+    private final static Set<String> exemptedPropertiesSet = Collections.unmodifiableSet(new HashSet(Arrays.asList(exemptedProperties)));
+
     private static Map<String, Class> primitiveClasses;
 
     static {
@@ -360,10 +381,21 @@ public static Class getFieldType(final Field field) {
      *         or {@code false} otherwise.
      */
     private static boolean isIllegalProperty(final String key) {
-        return key == null || !(key.startsWith("eclipselink.") || "line.separator".equals(key)
+        return key == null || !(legalPropertiesSet.contains(key) || key.startsWith("eclipselink.")
                 || key.startsWith("javax.persistence.") || key.startsWith("org.eclipse.persistence.")
-                || key.startsWith("persistence.") || key.startsWith("javax.xml.")
-                || PersistenceUnitProperties.JAVASE_DB_INTERACTION.equals(key));
+                || key.startsWith("persistence.") || key.startsWith("javax.xml."));
+    }    
+
+    /**
+     * Vet certain System properties as "safe" enough to override defaultUseDoPrivilegedValue setting.  Reserved
+     * for properties that must be read before the application server runtime environment is known.  Consider
+     * security implications very carefully before adding new system property names to this list.
+     * @param key The name of the {@link System} property.
+     * @return Value of {@code true} if {@code getSystemProperty} is allowed defaultUseDoPrivilegedValue override
+     *         or {@code false} otherwise.
+     */
+    private static boolean isExemptedProperty(final String key) {
+        return key != null && exemptedPropertiesSet.contains(key);
     }
 
     /**
@@ -379,7 +411,7 @@ public static final String getSystemProperty(final String key) {
             throw new IllegalArgumentException(
                     ExceptionLocalization.buildMessage("unexpect_argument", new Object[] {key}));
         }
-        if (shouldUsePrivilegedAccess()) {
+        if (isExemptedProperty(key) || shouldUsePrivilegedAccess()) {
             return AccessController.doPrivileged(new PrivilegedGetSystemProperty(key));
         } else {
             return System.getProperty(key);
@@ -400,7 +432,7 @@ public static final String getSystemProperty(final String key, final String def)
             throw new IllegalArgumentException(
                     ExceptionLocalization.buildMessage("unexpect_argument", new Object[] {key}));
         }
-        if (shouldUsePrivilegedAccess()) {
+        if (isExemptedProperty(key) || shouldUsePrivilegedAccess()) {
             return AccessController.doPrivileged(new PrivilegedGetSystemProperty(key, def));
         } else {
             return System.getProperty(key, def);
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/PropertiesHandler.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/PropertiesHandler.java
index 9717a45..bb8a64a 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/PropertiesHandler.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/sessions/PropertiesHandler.java
@@ -48,6 +48,7 @@
 import org.eclipse.persistence.descriptors.DescriptorQueryManager;
 import org.eclipse.persistence.internal.localization.ExceptionLocalization;
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
+import org.eclipse.persistence.internal.security.PrivilegedGetSystemProperty;
 import org.eclipse.persistence.logging.SessionLog;
 import org.eclipse.persistence.queries.ObjectLevelReadQuery;
 
@@ -242,14 +243,11 @@ protected static abstract class Prop {
         static String getPropertyValueFromMap(String name, Map m, boolean useSystemAsDefault) {
             String value = (String)m.get(name);
             if (value == null && useSystemAsDefault) {
-                value = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                        AccessController.doPrivileged(new PrivilegedAction<String>() {
-                            @Override
-                            public String run() {
-                                return System.getProperty(name);
-                            }
-                        })
-                        : System.getProperty(name);
+                if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
+                    value = AccessController.doPrivileged(new PrivilegedGetSystemProperty(name));
+                } else {
+                    value = System.getProperty(name);
+                }
             }
 
             return value;
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/logging/AbstractSessionLog.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/logging/AbstractSessionLog.java
index 781b044..49ee0e0 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/logging/AbstractSessionLog.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/logging/AbstractSessionLog.java
@@ -18,7 +18,6 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.security.AccessController;
 import java.text.DateFormat;
 import java.util.Date;
 
@@ -28,7 +27,6 @@
 import org.eclipse.persistence.internal.helper.ConversionManager;
 import org.eclipse.persistence.internal.localization.LoggingLocalization;
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
-import org.eclipse.persistence.internal.security.PrivilegedGetSystemProperty;
 import org.eclipse.persistence.sessions.Session;
 
 /**
@@ -164,10 +162,7 @@ public abstract class AbstractSessionLog implements SessionLog, java.lang.Clonea
      * @return The system default log level property value or {@code null} if no such property is set.
      */
     private static String getDefaultLoggingLevelProperty() {
-        return PrivilegedAccessHelper.shouldUsePrivilegedAccess()
-                ? AccessController.doPrivileged(
-                        new PrivilegedGetSystemProperty(PersistenceUnitProperties.LOGGING_LEVEL))
-                : System.getProperty(PersistenceUnitProperties.LOGGING_LEVEL);
+        return PrivilegedAccessHelper.getSystemProperty(PersistenceUnitProperties.LOGGING_LEVEL);
     }
 
     /**
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/mappings/CollectionMapping.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/mappings/CollectionMapping.java
index 35b1431..d31458a 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/mappings/CollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/mappings/CollectionMapping.java
@@ -27,8 +27,6 @@
 package org.eclipse.persistence.mappings;
 
 import java.beans.PropertyChangeListener;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.*;
 
 import org.eclipse.persistence.annotations.OrderCorrectionType;
@@ -337,14 +335,7 @@ public Object buildElementClone(Object element, Object parent, CacheKey parentCa
      * ObjectBuilder.
      */
     public Expression buildExpression(Object queryObject, QueryByExamplePolicy policy, Expression expressionBuilder, Map processedObjects, AbstractSession session) {
-        String bypassProperty = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(SystemProperties.DO_NOT_PROCESS_XTOMANY_FOR_QBE);
-                    }
-                })
-                : System.getProperty(SystemProperties.DO_NOT_PROCESS_XTOMANY_FOR_QBE);
+        String bypassProperty = PrivilegedAccessHelper.getSystemProperty(SystemProperties.DO_NOT_PROCESS_XTOMANY_FOR_QBE);
         if (this.getContainerPolicy().isMapPolicy() ||  (bypassProperty != null && bypassProperty.toLowerCase().equals("true")) ){
             // not supported
             return super.buildExpression(queryObject, policy, expressionBuilder, processedObjects, session);
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/ServerPlatformBase.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/ServerPlatformBase.java
index bc3df78..f024837 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/ServerPlatformBase.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/ServerPlatformBase.java
@@ -22,7 +22,6 @@
 package org.eclipse.persistence.platform.server;
 
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.sql.SQLException;
 import java.util.concurrent.ExecutorService;
@@ -154,14 +153,7 @@ public ServerPlatformBase(DatabaseSession newDatabaseSession) {
         this.databaseSession = newDatabaseSession;
         this.setIsCMP(false);
         // Enable users to disable or enable (default) MBean registration
-        String shouldRegisterRuntimeBeanProperty = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(JMX_REGISTER_RUN_MBEAN_PROPERTY);
-                    }
-                })
-                : System.getProperty(JMX_REGISTER_RUN_MBEAN_PROPERTY);
+        String shouldRegisterRuntimeBeanProperty = PrivilegedAccessHelper.getSystemProperty(JMX_REGISTER_RUN_MBEAN_PROPERTY);
         if(null != shouldRegisterRuntimeBeanProperty) {
             if(shouldRegisterRuntimeBeanProperty.toLowerCase().indexOf("false") > -1) {
                 shouldRegisterRuntimeBean = false;
@@ -170,14 +162,7 @@ public String run() {
                 shouldRegisterRuntimeBean = true;
             }
         }
-        String shouldRegisterDevelopmentBeanProperty = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(JMX_REGISTER_DEV_MBEAN_PROPERTY);
-                    }
-                })
-                : System.getProperty(JMX_REGISTER_DEV_MBEAN_PROPERTY);
+        String shouldRegisterDevelopmentBeanProperty = PrivilegedAccessHelper.getSystemProperty(JMX_REGISTER_DEV_MBEAN_PROPERTY);
         if(null != shouldRegisterDevelopmentBeanProperty) {
             if(shouldRegisterDevelopmentBeanProperty.toLowerCase().indexOf("false") > -1) {
                 shouldRegisterDevelopmentBean = false;
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/sap/SAPNetWeaver_7_1_Platform.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/sap/SAPNetWeaver_7_1_Platform.java
index f49c959..e4a8b56 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/sap/SAPNetWeaver_7_1_Platform.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/server/sap/SAPNetWeaver_7_1_Platform.java
@@ -14,9 +14,6 @@
  ******************************************************************************/
 package org.eclipse.persistence.platform.server.sap;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
 import javax.persistence.spi.PersistenceUnitInfo;
 
 import org.eclipse.persistence.internal.helper.JPAClassLoaderHolder;
@@ -58,14 +55,7 @@ public Class getExternalTransactionControllerClass() {
 
     @Override
     public String getServerNameAndVersion() {
-        String version = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty("SAP_J2EE_Engine_Version");
-                    }
-                })
-                : System.getProperty("SAP_J2EE_Engine_Version");
+        String version = PrivilegedAccessHelper.getSystemProperty("SAP_J2EE_Engine_Version");
         if (version != null) {
             return version;
         }
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java
index 6eb3d3f..6a9d433 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java
@@ -15,7 +15,6 @@
 package org.eclipse.persistence.platform.xml;
 
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
@@ -57,14 +56,7 @@ public Class getXMLPlatformClass() throws XMLPlatformException {
             return xmlPlatformClass;
         }
 
-        String newXMLPlatformClassName = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(XML_PLATFORM_PROPERTY);
-                    }
-                })
-                : System.getProperty(XML_PLATFORM_PROPERTY);
+        String newXMLPlatformClassName = PrivilegedAccessHelper.getSystemProperty(XML_PLATFORM_PROPERTY);
         if (null == newXMLPlatformClassName) {
             newXMLPlatformClassName = JAXP_PLATFORM_CLASS_NAME;
         }
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/FetchGroupMonitor.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/FetchGroupMonitor.java
index 0c7d1cc..cb1f232 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/FetchGroupMonitor.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/FetchGroupMonitor.java
@@ -14,8 +14,6 @@
  ******************************************************************************/
 package org.eclipse.persistence.tools.profiler;
 
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.*;
 
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
@@ -38,14 +36,7 @@ public class FetchGroupMonitor {
     public static boolean shouldMonitor() {
         if (shouldMonitor == null) {
             shouldMonitor = Boolean.FALSE;
-            String property = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty("org.eclipse.persistence.fetchgroupmonitor");
-                        }
-                    })
-                    : System.getProperty("org.eclipse.persistence.fetchgroupmonitor");
+            String property = PrivilegedAccessHelper.getSystemProperty("org.eclipse.persistence.fetchgroupmonitor");
             if ((property != null) && (property.toUpperCase().equals("TRUE"))) {
                 shouldMonitor = Boolean.TRUE;
             }
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/QueryMonitor.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/QueryMonitor.java
index d197db1..23339a4 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/QueryMonitor.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/tools/profiler/QueryMonitor.java
@@ -15,8 +15,6 @@
 package org.eclipse.persistence.tools.profiler;
 
 import java.io.StringWriter;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -44,15 +42,7 @@ public class QueryMonitor {
     public static boolean shouldMonitor() {
         if (shouldMonitor == null) {
             shouldMonitor = Boolean.FALSE;
-            String property = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty("org.eclipse.persistence.querymonitor");
-                        }
-                    })
-                    : System.getProperty("org.eclipse.persistence.querymonitor");
-
+            String property = PrivilegedAccessHelper.getSystemProperty("org.eclipse.persistence.querymonitor");
             if ((property != null) && (property.toUpperCase().equals("TRUE"))) {
                 shouldMonitor = Boolean.TRUE;
             }
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/JPAInitializer.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/JPAInitializer.java
index 1ed3ef3..ebb8f49 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/JPAInitializer.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/JPAInitializer.java
@@ -18,8 +18,6 @@
 
 import java.io.FileWriter;
 import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -71,14 +69,7 @@ public abstract class JPAInitializer {
      * Initialize the logging file if it is specified by the system property.
      */
     public static void initializeTopLinkLoggingFile() {
-        String loggingFile = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(PersistenceUnitProperties.LOGGING_FILE);
-                    }
-                })
-                : System.getProperty(PersistenceUnitProperties.LOGGING_FILE);
+        String loggingFile = PrivilegedAccessHelper.getSystemProperty(PersistenceUnitProperties.LOGGING_FILE);
         try {
             if (loggingFile != null) {
                 AbstractSessionLog.getLog().setWriter(new FileWriter(loggingFile));
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/PersistenceUnitProcessor.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/PersistenceUnitProcessor.java
index a8a9118..789c1bf 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/PersistenceUnitProcessor.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/internal/jpa/deployment/PersistenceUnitProcessor.java
@@ -34,7 +34,6 @@
 import java.net.URL;
 import java.net.URLDecoder;
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -297,14 +296,7 @@ public static Set<Archive> findPersistenceArchives(){
     public static Set<Archive> findPersistenceArchives(ClassLoader loader){
         // allow alternate persistence location to be specified via system property.  This will allow persistence units
         // with alternate persistence xml locations to be weaved
-        String descriptorLocation = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
-                    }
-                })
-                : System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
+        String descriptorLocation = PrivilegedAccessHelper.getSystemProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
 
         return findPersistenceArchives(loader, descriptorLocation);
     }
@@ -404,14 +396,7 @@ public static Set<Archive> findPersistenceArchives(ClassLoader loader, String de
     public static Set<SEPersistenceUnitInfo> getPersistenceUnits(ClassLoader loader, Map m, List<URL> jarFileUrls) {
         String descriptorPath = (String) m.get(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML);
         if(descriptorPath == null) {
-            descriptorPath = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
-                        }
-                    })
-                    : System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
+            descriptorPath = PrivilegedAccessHelper.getSystemProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
         }
         Set<Archive> archives = findPersistenceArchives(loader, descriptorPath, jarFileUrls);
         Set<SEPersistenceUnitInfo> puInfos = new HashSet();
@@ -434,14 +419,7 @@ public static ArchiveFactory getArchiveFactory(ClassLoader loader){
         }
 
         ArchiveFactory factory = null;
-        String factoryClassName = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                AccessController.doPrivileged(new PrivilegedAction<String>() {
-                    @Override
-                    public String run() {
-                        return System.getProperty(SystemProperties.ARCHIVE_FACTORY, null);
-                    }
-                })
-                : System.getProperty(SystemProperties.ARCHIVE_FACTORY, null);
+        String factoryClassName = PrivilegedAccessHelper.getSystemProperty(SystemProperties.ARCHIVE_FACTORY, null);
 
         if (factoryClassName == null) {
             return new ArchiveFactoryImpl();
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/FileBasedProjectCache.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/FileBasedProjectCache.java
index c215da9..7345741 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/FileBasedProjectCache.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/FileBasedProjectCache.java
@@ -18,11 +18,11 @@
 import java.io.FileOutputStream;
 import java.io.ObjectOutputStream;
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.Map;
 
 import org.eclipse.persistence.config.PersistenceUnitProperties;
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
+import org.eclipse.persistence.internal.security.PrivilegedGetSystemProperty;
 import org.eclipse.persistence.logging.SessionLog;
 import org.eclipse.persistence.sessions.Project;
 
@@ -109,14 +109,11 @@ public Object getConfigPropertyLogDebug(final String propertyName, Map propertie
             value = properties.get(propertyName);
         }
         if (value == null) {
-            value = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty(propertyName);
-                        }
-                    })
-                    : System.getProperty(propertyName);
+            if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
+                value = AccessController.doPrivileged(new PrivilegedGetSystemProperty(propertyName));
+            } else {
+                value = System.getProperty(propertyName);
+            }
         }
         if ((value != null) && (log !=  null)) {
             log.log(SessionLog.FINEST, SessionLog.PROPERTIES, "property_value_specified", new Object[]{propertyName, value});
diff --git a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/XMLMetadataSource.java b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/XMLMetadataSource.java
index 344ca49..858010c 100644
--- a/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/XMLMetadataSource.java
+++ b/jpa/org.eclipse.persistence.jpa/src/org/eclipse/persistence/jpa/metadata/XMLMetadataSource.java
@@ -21,7 +21,6 @@
 import java.io.Reader;
 import java.net.URL;
 import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
@@ -29,6 +28,7 @@
 
 import org.eclipse.persistence.internal.jpa.metadata.xml.XMLEntityMappingsReader;
 import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
+import org.eclipse.persistence.internal.security.PrivilegedGetSystemProperty;
 import org.eclipse.persistence.internal.jpa.metadata.xml.XMLEntityMappings;
 
 import org.eclipse.persistence.config.PersistenceUnitProperties;
@@ -211,14 +211,11 @@ public Object getConfigPropertyLogDebug(final String propertyName, Map propertie
             value = properties.get(propertyName);
         }
         if (value == null) {
-            value = PrivilegedAccessHelper.shouldUsePrivilegedAccess() ?
-                    AccessController.doPrivileged(new PrivilegedAction<String>() {
-                        @Override
-                        public String run() {
-                            return System.getProperty(propertyName);
-                        }
-                    })
-                    : System.getProperty(propertyName);
+            if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) {
+                value = AccessController.doPrivileged(new PrivilegedGetSystemProperty(propertyName));
+            } else {
+                value = System.getProperty(propertyName);
+            }
         }
         if ((value != null) && (log !=  null)) {
             log.log(SessionLog.FINEST, SessionLog.PROPERTIES, "property_value_specified", new Object[]{propertyName, value});
