add AOP architecture