diff --git a/data/demo.mv.db b/data/demo.mv.db
index ffd29e5632ef9a131d2e65647c27ed4f451be013..c687424bbc764ff63cdef9e93a82885258976e41 100644
Binary files a/data/demo.mv.db and b/data/demo.mv.db differ
diff --git a/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java b/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java
index 8d463d729a1e739546dd0ae2fbca8dc3c55cb983..9bc0176c9188bc9a1ca3e1358126f82c8b3d0f3a 100644
--- a/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java
+++ b/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java
@@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MaxUploadSizeExceededException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
 
 @Controller
 @RequestMapping
@@ -31,7 +33,6 @@ public class FileUploadController {
     private final ReferenceService referenceService;
     private final CategoryService categoryService;
 
-
     public FileUploadController(GrobidClient grobidClient, HeaderService headerService, ReferenceService referenceService, CategoryService categoryService) {
         this.grobidClient = grobidClient;
         this.headerService = headerService;
@@ -54,7 +55,13 @@ public class FileUploadController {
             @RequestParam("tags") List<String> tags) {
 
         if (file.isEmpty()) {
-            return ResponseEntity.badRequest().body("No file uploaded!");
+            return ResponseEntity.badRequest().body(Map.of("error", "No file uploaded!"));
+        }
+
+        // Pridáme kontrolu veľkosti ešte pred spracovaním
+        final long maxFileSizeBytes = 5 * 1024 * 1024; // 5 MB
+        if (file.getSize() > maxFileSizeBytes) {
+            return ResponseEntity.badRequest().body(Map.of("error", "Uploaded PDF is too large. Maximum allowed size is 5MB."));
         }
 
         try {
@@ -64,10 +71,9 @@ public class FileUploadController {
             // save data from file to tmpFile
             try(FileOutputStream stream = new FileOutputStream(tmpFile)) {
                 stream.write(file.getBytes());
-             } catch (IOException e) {
-                return ResponseEntity.internalServerError().body("FAILURE - cannot process file : " + e.getMessage());
+            } catch (IOException e) {
+                return ResponseEntity.internalServerError().body(Map.of("error", "FAILURE - cannot process file : " + e.getMessage()));
             }
-            //System.out.println("File written to temporary location. ");
 
             String header;
             try {
@@ -79,15 +85,11 @@ public class FileUploadController {
                 }
                 return ResponseEntity.internalServerError().body(Map.of("error", "GROBID processing error"));
             }
-            //System.out.println("GROBID Header processed: " + header);
 
             String references = grobidClient.processReferences(tmpFile);
-            //System.out.println("GROBID Reference processed: " + references);
 
             Dokument savedDocument = headerService.processHeader(header, categoryId, tags, tmpFile);
-            //System.out.println("Header saved to database.");
 
-            // dokument already exists
             if(savedDocument == null) {
                 if (tmpFile.exists()) tmpFile.delete();
                 return ResponseEntity.status(HttpStatus.CONFLICT)
@@ -95,7 +97,6 @@ public class FileUploadController {
             }
 
             referenceService.extractReferences(references);
-            //System.out.println("References extracted..");
 
             if (tmpFile.exists()) tmpFile.delete();
 
@@ -105,14 +106,15 @@ public class FileUploadController {
 
             return ResponseEntity.ok(response);
 
-
         } catch (IOException e) {
-            return ResponseEntity.status(500).body("Chyba pri vytváraní dočasného súboru.");
+            return ResponseEntity.status(500).body(Map.of("error", "Chyba pri vytváraní dočasného súboru."));
         }
     }
 
-
+    // Globálny handler pre veľké súbory
+    @ExceptionHandler(MaxUploadSizeExceededException.class)
+    @ResponseBody
+    public ResponseEntity<?> handleMaxSizeException(MaxUploadSizeExceededException exc) {
+        return ResponseEntity.badRequest().body(Map.of("error", "Uploaded PDF is too large. Maximum allowed size is 5MB."));
+    }
 }
-
-
-
diff --git a/src/main/java/com/dre0059/articleprocessor/model/Dokument.java b/src/main/java/com/dre0059/articleprocessor/model/Dokument.java
index 8ae038251bcfe81919d40aaeac554870fd76be64..d7ab3ffea0bd75d449d05699844062218797ed62 100644
--- a/src/main/java/com/dre0059/articleprocessor/model/Dokument.java
+++ b/src/main/java/com/dre0059/articleprocessor/model/Dokument.java
@@ -110,7 +110,7 @@ public class Dokument {
         StringBuilder builder = new StringBuilder();
 
         for(Tag tag : tags){
-            builder.append(tag.getTitle() + " ");
+            builder.append(tag.getTitle() + ", ");
         }
 
         return builder.toString();
diff --git a/src/main/resources/templates/upload.html b/src/main/resources/templates/upload.html
index c263d6d2f0b93fb1402a6328d77c29337544e52a..7b640cb7e7510b67bd788f87cec55a52beb1860f 100644
--- a/src/main/resources/templates/upload.html
+++ b/src/main/resources/templates/upload.html
@@ -121,19 +121,35 @@
     // Náhľad PDF súboru
     document.getElementById('fileInput').addEventListener('change', function(event) {
         const file = event.target.files[0];
-        if (file && file.type === 'application/pdf') {
-            const fileURL = URL.createObjectURL(file);
-            const preview = document.getElementById('pdf-preview');
-            preview.src = fileURL;
-            preview.style.display = 'block';
-
-            document.getElementById('upload-button-wrapper').style.display = 'block';
-            preview.scrollIntoView({ behavior: 'smooth', block: 'start' });
-        } else {
-            alert('Please, choose a valid PDF file.');
+        if (file) {
+            // kontrola veÄľkosti
+            const maxSizeMB = 5;
+            const maxSizeBytes = maxSizeMB * 1024 * 1024;
+
+            if (file.size > maxSizeBytes) {
+                showAlert(`Uploaded PDF is too large. Maximum allowed size is ${maxSizeMB}MB.`, 'danger');
+                this.value = ''; // vyprázdni input
+                document.getElementById('pdf-preview').style.display = 'none';
+                document.getElementById('upload-button-wrapper').style.display = 'none';
+                return;
+            }
+
+            if (file.type === 'application/pdf') {
+                const fileURL = URL.createObjectURL(file);
+                const preview = document.getElementById('pdf-preview');
+                preview.src = fileURL;
+                preview.style.display = 'block';
+
+                document.getElementById('upload-button-wrapper').style.display = 'block';
+                preview.scrollIntoView({ behavior: 'smooth', block: 'start' });
+            } else {
+                alert('Please, choose a valid PDF file.');
+            }
         }
     });
 
+
+
     // Inicializácia SELECT2 pre tagy
     $(document).ready(function() {
         $('#tags').select2({