private <DataType> void loadSingle(GraphDatabaseDriver driver, GraphMappingStrategy strategy, ClassLoader classloader, ServiceRepository repository, Property p, DataType returned, Vertex objectVertex, ObjectCache objectsBeingAccessed) {
Iterator<Edge> iterator = strategy.getOutEdgesFor(objectVertex, p).iterator();
Object value = null;
if (iterator.hasNext()) {
// yeah, there is a value !
Edge edge = iterator.next();
Vertex firstVertex = edge.getVertex(Direction.IN);
value = GraphUtils.createInstance(driver, strategy, classloader, firstVertex, p.getType(), repository, objectsBeingAccessed);
if (repository.containsKey(value.getClass())) {
// value requires fields loading
AbstractBluePrintsBackedFinderService<IndexableGraph, DataType, ?> blueprints = (AbstractBluePrintsBackedFinderService<IndexableGraph, DataType, ?>) repository.get(value.getClass());
value = loadObject(blueprints, firstVertex, objectsBeingAccessed);