Program slicing, a program reduction technique that is used to simplify programs by removing non-relevant parts with respect to a slicing criterion, is gaining more and more attention in the software comprehension and maintenance community. In this research, we provide an overview of program slicing approaches, which are categorized into static, dynamic and hybrid slicing. Moreover, we present our own hybrid slicing algorithm that is based on the notion of removable blocks and computes executable slices for Java programs. The algorithm is implemented as part of the CONCEPT (C[barbelow]omprehension O[barbelow]f N[barbelow]et- CE ntered P[barbelow]rograms and T[barbelow]echniques) project. One advantage of our hybrid slicing algorithm is that it takes user inputs into account to customize the precision of the algorithm accordingly to a user's needs. As a result, our hybrid slicing algorithm provides the user with the ability to take advantage of both static and dynamic slicing, by avoiding at the same time their disadvantages