public function cropCovers($request)
    {
        $path = $request['path'];
        $coords = $this->getCropCoordinates($request);
        $covers = $this->getNewCovers();

        $full = reset($this->_coverTypes);

        $cropperCover = $this->getTempCover();
        $cropperCover->setResourceFromFile(UPLOADS_PATH . 'tmp/' . $path);

        $originalCover = $this->getTempCover();
        $originalCover->setResourceFromFile(UPLOADS_PATH . 'tmp/' . str_replace('crop-', '', $path));

        $covers[$full]->setResourceFromFile($originalCover->getFile());
        $covers[$full]->save();

        $crop = next($this->_coverTypes);
        $workingCover = $covers[$crop];
        $workingCover->copyResource($covers[$full]);

        $ratio = $covers[$full]->getWidth() / $cropperCover->getWidth();
        $adjustX = round($coords['x'] * $ratio);
        $adjustY = round($coords['y'] * $ratio);
        $adjustWidth = round($coords['width'] * $ratio);
        $adjustHeight = round($coords['height'] * $ratio);

        $workingCover->crop(
            $adjustX, $adjustY,
            $workingCover->cropWidth, $workingCover->cropHeight,
            $adjustWidth, $adjustHeight);

        while ($size = next($this->_coverTypes)) {
            $covers[$size]->copyResource($covers[$crop])->resize()->unsharpMask()->save();
        }

        $covers[$crop]->unsharpMask()->save();

        Nip_File_System::instance()->deleteFile($cropperCover->getFile());
        Nip_File_System::instance()->deleteFile($originalCover->getFile());

        return $covers['default'];
    }