Ongoing work to add client profile and run browser inside it.
diff --git a/browser-module/src/main/root/browser.config b/browser-module/src/main/root/browser.config
index 105a29b..b5fea76 100644
--- a/browser-module/src/main/root/browser.config
+++ b/browser-module/src/main/root/browser.config
@@ -17,6 +17,10 @@
     serviceInvocationConstraints=InvocationConstraints.EMPTY;
         
     servicePreparer = 
-        new BasicProxyPreparer(true, new BasicMethodConstraints(serviceInvocationConstraints),
+        new BasicProxyPreparer(false, new BasicMethodConstraints(serviceInvocationConstraints),
+            new Permission[] { new RuntimePermission("accessClassInPackage.com.sun.proxy") } );
+
+    leasePreparer = 
+        new BasicProxyPreparer(false, new BasicMethodConstraints(serviceInvocationConstraints),
             new Permission[] { new RuntimePermission("accessClassInPackage.com.sun.proxy") } );
 }
diff --git a/river-container-core/src/main/java/org/apache/river/container/deployer/StarterServiceLifeCycleSM.java b/river-container-core/src/main/java/org/apache/river/container/deployer/StarterServiceLifeCycleSM.java
index 6eb4ed9..355074a 100644
--- a/river-container-core/src/main/java/org/apache/river/container/deployer/StarterServiceLifeCycleSM.java
+++ b/river-container-core/src/main/java/org/apache/river/container/deployer/StarterServiceLifeCycleSM.java
@@ -87,6 +87,10 @@
                 new String[]{ getStatus() });

     }

     

+    public void exception(Throwable ex) {

+        logger.log(Level.SEVERE, MessageNames.EXCEPTION_THROWN, ex);

+    }

+    

     public class Idle {

         /*

          * To start from idle means to prepare, and then start.

diff --git a/river-container-core/src/main/java/org/apache/river/container/deployer/StatusEvents.java b/river-container-core/src/main/java/org/apache/river/container/deployer/StatusEvents.java
index d9e0269..4d71092 100644
--- a/river-container-core/src/main/java/org/apache/river/container/deployer/StatusEvents.java
+++ b/river-container-core/src/main/java/org/apache/river/container/deployer/StatusEvents.java
@@ -30,7 +30,7 @@
     
     public void stopFailed();
     
-    public void exception(Exception ex);
+    public void exception(Throwable ex);
     
     public void timeout();
 }
diff --git a/test-container/src/main/root/profile/client/service-starter.cfg b/test-container/src/main/root/profile/client/service-starter.cfg
index 4df90b2..b53cc07 100644
--- a/test-container/src/main/root/profile/client/service-starter.cfg
+++ b/test-container/src/main/root/profile/client/service-starter.cfg
@@ -41,6 +41,13 @@
     java.security.SecurityPermission "getDomainCombiner";

     java.security.SecurityPermission "createAccessControlContext";

     java.security.SecurityPermission "getPolicy";

+

+    // BasicProxyPreparer requirements:

+    javax.security.auth.AuthPermission "getSubject";

+    // Should not be required once UmbrellaGrantPolicy is implemented.

+    // TODO: Config file parser doesn't recognize \"

+    net.jini.security.GrantPermission "delim=| java.lang.RuntimePermission |accessClassInPackage.com.sun.proxy|";

+

     net.jini.security.policy.UmbrellaGrantPermission;

     com.sun.jini.thread.ThreadPoolPermission "getSystemThreadPool";

     com.sun.jini.thread.ThreadPoolPermission "getUserThreadPool";

@@ -53,6 +60,9 @@
     java.util.PropertyPermission "*" "read";

 

     java.lang.RuntimePermission "accessClassInPackage.com.sun.proxy";

+

+    // Only in client configuration - apps can call System.exit()

+    java.lang.RuntimePermission "exitVM.*";

 }

 

 classloader {