diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
index 5416761..41c0e10 100644
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
+++ b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/main/java/om/TurbineUser.java
@@ -77,10 +77,10 @@
     }
     
     /**
-     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity$HretrieveAttachedObjects(java.sql.Connection)
+     * @see org.apache.fulcrum.security.torque.TorqueAbstractSecurityEntity$HretrieveAttachedObjects(java.sql.Connection, , Boolean lazy)
      */
     @Override
-	public void retrieveAttachedObjects(Connection con) throws TorqueException
+	public void retrieveAttachedObjects(Connection con, Boolean lazy) throws TorqueException
     {
         Set<TurbineUserGroupRole> userGroupRoleSet = new HashSet<TurbineUserGroupRole>();
 
diff --git a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
index 1006e6d..aa38651 100644
--- a/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
+++ b/trunk/turbine-webapp-4.0/src/main/resources/archetype-resources/src/test/java/services/security/TurbineSecurityServiceTest.java
@@ -22,10 +22,12 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import org.apache.fulcrum.security.ModelManager;
 import org.apache.fulcrum.security.entity.ExtendedUser;
 import org.apache.fulcrum.security.entity.Group;
 import org.apache.fulcrum.security.entity.Permission;
 import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
 import org.apache.fulcrum.security.model.turbine.TurbineModelManager;
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
 import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
@@ -38,9 +40,9 @@
 import org.apache.turbine.annotation.TurbineService;
 import org.apache.turbine.om.security.DefaultUserImpl;
 import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.SecurityService;
 import org.apache.turbine.services.ServiceManager;
 import org.apache.turbine.services.TurbineServices;
+import org.apache.turbine.services.security.SecurityService;
 import org.apache.turbine.util.TurbineConfig;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -67,6 +69,8 @@
     SecurityService turbineSecurityService;
 
     static TurbineConfig tc;
+    
+    ModelManager modelManager;
 
     boolean onDeleteCascade = true;
 
@@ -90,17 +94,18 @@
         
         ServiceManager serviceManager = TurbineServices.getInstance();
         fulcrumSecurityService = (org.apache.fulcrum.security.SecurityService) serviceManager.getService( org.apache.fulcrum.security.SecurityService.ROLE );
+        
 //      setConfigurationFileName("src/test/conf/torque/fulcrumComponentConfiguration.xml");
 //      setRoleFileName("src/test/conf/torque/fulcrumRoleConfiguration.xml");
 //      fulcrumSecurityService  = (org.apache.fulcrum.security.SecurityService) lookup(org.apache.fulcrum.security.SecurityService.ROLE);
-//
+//      factory = (ACLFactory) lookup(ACLFactory.ROLE);
+//      modelManager  = (TurbineModelManager) lookup(TurbineModelManager.ROLE);
     }
 
     @Test
     public void testAccountExists()
         throws Exception
     {
-
         // User user = new org.apache.turbine.om.security.DefaultUserImpl(new TurbineUserImpl());
         User user = turbineSecurityService.getUserInstance();
         user.setAccessCounter( 5 );
@@ -184,7 +189,6 @@
             group = turbineSecurityService.addGroup( group ); // assign here to delete later as
             role = turbineSecurityService.getRoleInstance( "TEST_Role" );
             role = turbineSecurityService.addRole( role );
-
             // Turbine security service returns a wrapped instance: org.apache.turbine.om.security.DefaultUserImpl
             // which implements org.apache.turbine.om.security.User
             user = turbineSecurityService.getUserInstance( "Clint" );
@@ -206,8 +210,15 @@
             existingRole = turbineSecurityService.getRoleByName( "turbineadmin" );
             turbineSecurityService.grant( user, existingGroup, existingRole );
             assertTrue( user.getUserGroupRoleSet().size() == 3 );
+
+            TurbineAccessControlList tacl = turbineSecurityService.<TurbineAccessControlList>getACL( user );
+            
+            assertTrue(tacl.hasRole( existingRole, existingGroup ) );
+            assertTrue(tacl.hasRole( "turbineuser" ));
+            
             turbineSecurityService.revoke( user, existingGroup, existingRole );
-            user = turbineSecurityService.getUser( "Clint" );
+
+            //user = turbineSecurityService.getUser( "Clint" );
             assertTrue( user.getUserGroupRoleSet().size() == 2 );
             userGroupRoleCheck( group, role, user.getUserDelegate() );
             // compare
@@ -221,8 +232,16 @@
             userManager.addUser( fulcrumUser, "clint2" );
             ( (TurbineModelManager) fulcrumSecurityService.getModelManager() ).grant( fulcrumUser, group, role );
             userGroupRoleCheck( group, role, fulcrumUser );
+            
+            tacl = turbineSecurityService.getACL( user );
+            // revoked
+            assertFalse(tacl.hasRole( existingRole, existingGroup ) );
+;
+            
+            
         } catch (EntityExistsException e) {
-          // cft. finally   
+          // cft. finally
+            fail();
         } catch (Exception e) {
             log.error( "error" , e);
             fail();
@@ -239,11 +258,15 @@
                 deleteGroup( group );
             if ( role != null )
                 deleteRole( role );
-
         }
+    }
+    
+    public void testCreatingTurbineACLandModel() throws Exception
+    {
 
     }
 
+
     /**
      * Fulcrum contract check
      *
@@ -254,7 +277,7 @@
      * @throws DataBackendException
      * @throws UnknownEntityException
      */
-    private void userGroupRoleCheck( Group group, Role role, TurbineUser user )
+    private void userGroupRoleCheck( Group group, Role role, TurbineUser user ) throws DataBackendException
     {
 
         boolean ugrFound = false;
@@ -334,6 +357,7 @@
                 group = turbineSecurityService.getGroupByName(group.getName() );
             }
             log.info( "deleting group " + group.getName() );
+            
             turbineSecurityService.removeGroup( group );
             group = null;
         }
