diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index ddcc20b..4c6283a 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -2693,7 +2693,7 @@
             {
                 for (int i = 0; i < classNames.length; i++)
                 {
-                    Class clazz = Util.loadClassUsingClass(svcObj.getClass(), classNames[i]);
+                    Class clazz = Util.loadClassUsingClass(svcObj.getClass(), classNames[i], m_secureAction);
                     if (clazz == null)
                     {
                         throw new IllegalArgumentException(
diff --git a/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java b/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
index 398f7fb..10b964e 100644
--- a/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
@@ -171,7 +171,7 @@
 
         // Case 1.
         Class sourceClass = (m_factory != null) ? m_factory.getClass() : m_svcObj.getClass();
-        return Util.loadClassUsingClass(sourceClass, clazz.getName()) == clazz;
+        return Util.loadClassUsingClass(sourceClass, clazz.getName(), Felix.m_secureAction) == clazz;
     }
 
     Object getProperty(String key)
@@ -315,7 +315,7 @@
         {
             for (int i = 0; i < m_classes.length; i++)
             {
-                Class clazz = Util.loadClassUsingClass(svcObj.getClass(), m_classes[i]);
+                Class clazz = Util.loadClassUsingClass(svcObj.getClass(), m_classes[i], Felix.m_secureAction);
                 if ((clazz == null) || !clazz.isAssignableFrom(svcObj.getClass()))
                 {
                     if (clazz == null)
diff --git a/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java b/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
index ef9b979..a9bc4a4 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
@@ -137,6 +137,27 @@
             return ClassLoader.getSystemClassLoader();
         }
     }
+    
+    public ClassLoader getClassLoader(Class clazz)
+    {
+        if (System.getSecurityManager() != null)
+        {
+            try
+            {
+                Actions actions = (Actions) m_actions.get();
+                actions.set(Actions.GET_CLASS_LOADER_ACTION, clazz);
+                return (ClassLoader) AccessController.doPrivileged(actions, m_acc);
+            }
+            catch (PrivilegedActionException ex)
+            {
+                throw (RuntimeException) ex.getException();
+            }
+        }
+        else
+        {
+            return clazz.getClassLoader();
+        }
+    }
 
     public Class forName(String name) throws ClassNotFoundException
     {
@@ -1094,6 +1115,7 @@
         public static final int SWAP_FIELD_ACTION = 38;
         public static final int SYSTEM_EXIT_ACTION = 39;
         public static final int FLUSH_FIELD_ACTION = 40;
+        public static final int GET_CLASS_LOADER_ACTION = 41;
 
         private int m_action = -1;
         private Object m_arg1 = null;
@@ -1340,6 +1362,10 @@
             {
                 _flush(((Class) arg1), arg2);
             }
+            else if (action == GET_CLASS_LOADER_ACTION)
+            {
+                return ((Class) arg1).getClassLoader();
+            }
 
             return null;
         }
diff --git a/framework/src/main/java/org/apache/felix/framework/util/Util.java b/framework/src/main/java/org/apache/felix/framework/util/Util.java
index 1c37219..8545707 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/Util.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/Util.java
@@ -158,16 +158,16 @@
      * @return the loaded class or <tt>null</tt> if it could not be
      *         loaded.
     **/
-    public static Class loadClassUsingClass(Class clazz, String name)
+    public static Class loadClassUsingClass(Class clazz, String name, SecureAction action)
     {
         Class loadedClass = null;
 
         while (clazz != null)
         {
             // Get the class loader of the current class object.
-            ClassLoader loader = clazz.getClassLoader();
+            ClassLoader loader = action.getClassLoader(clazz);
             // A null class loader represents the system class loader.
-            loader = (loader == null) ? ClassLoader.getSystemClassLoader() : loader;
+            loader = (loader == null) ? action.getSystemClassLoader() : loader;
             try
             {
                 return loader.loadClass(name);
@@ -183,7 +183,7 @@
             Class[] ifcs = clazz.getInterfaces();
             for (int i = 0; i < ifcs.length; i++)
             {
-                loadedClass = loadClassUsingClass(ifcs[i], name);
+                loadedClass = loadClassUsingClass(ifcs[i], name, action);
                 if (loadedClass != null)
                 {
                     return loadedClass;
