diff --git a/lib/convert/squirro/lib/convert/image_pdf.py b/lib/convert/squirro/lib/convert/image_pdf.py
index ccaecfede1..995c0bb37e 100644
--- a/lib/convert/squirro/lib/convert/image_pdf.py
+++ b/lib/convert/squirro/lib/convert/image_pdf.py
@@ -2,6 +2,7 @@ import logging
 from io import BytesIO
 
 from PIL import Image
+from pypdf import PdfReader, PdfWriter
 
 from squirro.common.error import SquirroPlatformError
 from squirro.lib.convert.base import BaseConverter
@@ -28,28 +29,33 @@ class ImagePdfConverter(BaseConverter):
 
 def convert_to_pdf(content: bytes) -> bytes:
     content_io = BytesIO(content)
-
-    with Image.open(content_io) as img:
-        img_list = []
-
-        # check if content contains several images (e.g. multi-page TIFF)
-        if hasattr(img, "n_frames") and img.n_frames > 1:
-            for i in range(img.n_frames):
-                img.seek(i)
-                frame = img.copy()
-                frame = _ensure_pdf_compatible_mode(frame)
-                img_list.append(frame)
-        else:
-            img = _ensure_pdf_compatible_mode(img)
-            img_list.append(img)
-
-        pdf_content_io = BytesIO()
-        img_list[0].save(
-            pdf_content_io, save_all=True, append_images=img_list[1:], format="PDF"
-        )
-        pdf_content = pdf_content_io.getvalue()
-
-        return pdf_content
+    pdf_content_io = BytesIO()
+
+    # Check if pdf is in header of content
+    if content_io.read(4) == b"%PDF":
+        content_io.seek(0)
+        pdf_content_io = content_io
+    else:
+        with Image.open(content_io) as img:
+            img_list = []
+
+            # check if content contains several images (e.g. multi-page TIFF)
+            if hasattr(img, "n_frames") and img.n_frames > 1:
+                for i in range(img.n_frames):
+                    img.seek(i)
+                    frame = img.copy()
+                    frame = _ensure_pdf_compatible_mode(frame)
+                    img_list.append(frame)
+            else:
+                img = _ensure_pdf_compatible_mode(img)
+                img_list.append(img)
+
+            img_list[0].save(
+                pdf_content_io, save_all=True, append_images=img_list[1:], format="PDF"
+            )
+
+    pdf_content = pdf_content_io.getvalue()
+    return pdf_content
 
 
 def _ensure_pdf_compatible_mode(img: Image.Image) -> Image.Image:
@@ -58,6 +64,4 @@ def _ensure_pdf_compatible_mode(img: Image.Image) -> Image.Image:
     :param img: The image to check
     :return: The image in a PDF compatible mode
     """
-    if img.mode not in ["RGB", "L", "1", "CMYK"]:
-        return img.convert("RGB")
-    return img
+    return img.convert("RGB")
diff --git a/lib/pipeline/squirro/lib/pipeline/steps/pdf_ocr.py b/lib/pipeline/squirro/lib/pipeline/steps/pdf_ocr.py
index da14947a16..917af8fd01 100644
--- a/lib/pipeline/squirro/lib/pipeline/steps/pdf_ocr.py
+++ b/lib/pipeline/squirro/lib/pipeline/steps/pdf_ocr.py
@@ -1,4 +1,6 @@
+import json
 import logging
+import os
 import pathlib
 import subprocess
 import tempfile
@@ -8,12 +10,13 @@ from typing import List, Optional, Tuple
 import pikepdf
 
 from squirro.common.dependency import get_injected
-from squirro.common.format import json
 from squirro.lib.convert import MimeTypeDetector
 
 from .base import BaseStep
 
 log = logging.getLogger(__name__)
+env = os.environ.copy()
+env["TMPDIR"] = "/apps/ocr-tmp"
 
 TIMEOUT = 60
 
@@ -131,6 +134,7 @@ def _run_ocr_pdf_content(content_url: str, args: List[str], timeout: Optional[fl
             check=True,
             capture_output=True,
             timeout=timeout,
+            env=env,
         )
     except subprocess.TimeoutExpired as error:
         log.error("ocrmypdf timed-out after %s for file %r", error.timeout, content_url)
@@ -180,6 +184,9 @@ class PdfOCRStep(BaseStep):
         """Convert and parse the item content data."""
         config = dict(kwargs.get("config", {}))
         timeout = config.pop("ocr_timeout", None)
+        force_ocr = config.pop("force_ocr", False)
+        if "pdf_ocr:force_ocr" in data:
+            force_ocr = data["pdf_ocr:force_ocr"]
         confidence = config.pop("confidence", False)
         try:
             timeout = int(timeout)
@@ -190,6 +197,7 @@ class PdfOCRStep(BaseStep):
             data,
             **config,
             ocr_timeout=timeout,
+            force_ocr=force_ocr,
             confidence=confidence,
         )
         return "success" if data_update else "error", data_update
@@ -207,6 +215,8 @@ class PdfOCRStep(BaseStep):
         ret = {}
 
         facets = data.get("keywords") or {}
+        facets["ocr_status"] = ["failed"]
+
         data_files = data.get("files", [])
         files_modified = False
         for file_ in data_files:
@@ -261,17 +271,23 @@ class PdfOCRStep(BaseStep):
                     confidence=confidence,
                 )
             except OCRSkipped as ex:
+                file_["pdf_ocr:ocr_status"], files_modified = "skipped", True
+                facets["ocr_status"] = ["skipped"]
                 self.dlog.debug("PDF OCR skipped for file %r: %r", content_url, ex)
             except OCRException as ex:
+                file_["pdf_ocr:ocr_status"], files_modified = "failed", True
                 self.dlog.exception(
                     "unable to convert content of file %r: %r", content_url, ex
                 )
             except Exception as ex:
+                file_["pdf_ocr:ocr_status"], files_modified = "failed", True
                 self.dlog.exception(
                     "unable to convert content of file %r: %r", content_url, ex
                 )
             else:
                 if not ocr_output.text:
+                    file_["pdf_ocr:ocr_status"], files_modified = "no_text", True
+                    facets["ocr_status"] = ["no_text"]
                     self.dlog.warning(
                         "PDF OCR returned no text for file: %r", content_url
                     )
@@ -293,7 +309,8 @@ class PdfOCRStep(BaseStep):
                     except KeyError:
                         pass
                 file_["sq:content"] = ocr_output.content
-                files_modified = True
+                file_["pdf_ocr:ocr_status"], files_modified = "success", True
+                facets["ocr_status"] = ["success"]
                 if replace_file:
                     file_["content_url"] = self._replace_file_in_storage(
                         content_url=content_url, content=ocr_output.content
