1. A method comprising: parsing a file to identify boundaries for a plurality of first level objects, including a first compound object, in order to determine whether each of the plurality of first level objects is compound or primitive, wherein a primitive object is the most basic representation of a discrete data structure in the file; recursively parsing the first compound object until a plurality of lowest level primitive objects is identified; correlating primitive objects within the file and across a plurality of files; storing the identified boundaries for use in deduplication; setting deduplication boundaries at boundaries of the plurality of lowest level primitive objects such that deduplication uses variable sized blocks instead of fixed sized blocks; and optimizing the plurality of lowest level primitive objects with a plurality of object specific optimization algorithms.