~~NOTRANS~~ ~~Title: Rename Server-Side Objects and Action Names~~ If you call an action or request a server-side object, you should know the name of the action or the object. Usually this isn't a big problem because it's your application and you know everything about it. But it's different if you use pre-defined application frames like ProjX. The application frame has some prerequisites, e.g., the menu will be created after authentication. The application frame does the following call: AbstractConnection con = getConnection(); Object[] oResult = con.call(new String[] {"workScreenAccess", "workScreenAccess", "workScreenAccess"}, new String[] {"getAvailableWorkScreens", "getAvailableRoles", "getAvailableMetaData"}); This means that you have the following in your Session LCO: public IWorkScreenAccess getWorkScreenAccess() throws Exception { IWorkScreenAccess wsac = (IWorkScreenAccess)get("workScreenAccess"); if (wsac == null) { wsac = new DBWorkScreenAccess(); ((DBWorkScreenAccess)wsac).setDBDataSource(getDBAccess()); put("workScreenAccess", wsac); } return wsac; } The application frame won't work if the method name isn't getWorkScreenAccess. If you have a specific naming schema and won't use the same method name, you could do the following: @Replacement(name="workScreenAccess") public IWorkScreenAccess getWSAccess() throws Exception { ... } The Replacement annotation maps the custom method to the expected name. This annotation can be used for object and action names: @Replacement(name="sendCustomerEmail") public void notifyCustomer() throws Exception { ... } The Replacement will work for LCO names as well: @Replacement(name = "Public") public class ExternalSession extends GenericBean { } The LCO can be used with the original name or the Replacement. Both names will work.