Grid enablement of existing applications has been a prime area of research in recent times and numerous solutions have been proposed in this regard. Grid enablement of an application involves conversion of a single (monolithic) application into a set of well coupled grid jobs and services, which can be deployed in a grid. Determining the optimum partitioning of an application is the cornerstone for efficient grid enablement. In this paper, we present the the process of abstracting applications as Application Structure Graphs (ASG) and also provide an in depth analysis of different application level dependencies that affect grid enablement. We also present an extensive study of the steps involved in grid enablement of a Java Application, with special attention to application profiling.