public function find(SQLPredicate $condition = null) {
		$this->mapper->connect();
		$table = $this->entityProfile->getEntityTable();
		
		//build fluent query
		$query = $this->mapper->newQuery($this->entityProfile)
		->from($table, Schema::DEFAULT_ALIAS)
		->select($this->getSelectColumns());
		
		//set query condition
		$args = func_get_args();
		if (empty($args) && $this->hasOption('query.filter'))
			$query->where($this->getFilter());
		elseif (isset($condition))
			$query->where(new Filter($args));
		
		//order by
		if ($this->hasOption('query.orderBy'))
			$query->orderBy($this->getOrderBy());
		
		//limit + offset
		if ($this->hasOption('query.limit'))
			$query->limit($this->getOption('query.limit'));
		
		if ($this->hasOption('query.offset'))
			$query->offset($this->getOption('query.offset'));
		
		//distinct
		if ($this->hasOption('query.distinct') && $this->getOption('query.distinct'))
			$query->distinct();
		
		list($sql, $args) = $query->build();
		return $this->mapper->merge($this->clean(['map.type' => $this->getListMappingExpression()]))->execute($sql, $args);
	}