An overall goal in software development is to design a modular system where the modules are both easy to use, reuse and have well defined responsibilities. However, limitations in most programming language today can make this hard to achieve. This thesis will present the theories behind Separation of Concerns (SoC) and Aspect Oriented Programming (AOP), and how these can be applied in software development, allowing for a more modular system design. There are no programming languages today that have native AOP support, therefore we have chosen to focus on a Java extension, AspectJ. We have concluded that the fundamental ideas from AOP and SoC are relevant in software development. AOP is a fairly new principle and it is impossible to predict how it will be accepted by the software community. However, AOP exposes problems in software today that will require a solution. Perhaps AOP will reveal itself to be a part of the solution.