Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/GlobalExceptionHandler.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/GlobalExceptionHandler.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/GlobalExceptionHandler.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -10,4 +10,5 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
@@ -96,4 +97,11 @@
     }
 
+    @ExceptionHandler(MissingServletRequestParameterException.class)
+    public ResponseEntity<Map<String, String>> handleMissingParam(MissingServletRequestParameterException ex) {
+        return ResponseEntity
+                .status(HttpStatus.BAD_REQUEST)
+                .body(Map.of("error", "Missing required request parameter '" + ex.getParameterName() + "'."));
+    }
+
     @ExceptionHandler(Exception.class)
     public ResponseEntity<Map<String, String>> handleGenericException(Exception ex) {
Index: nkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContribution.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContribution.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ 	(revision )
@@ -1,32 +1,0 @@
-package com.ukim.finki.develop.finkwave.model;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
-import org.hibernate.annotations.OnDelete;
-import org.hibernate.annotations.OnDeleteAction;
-
-@Getter
-@Setter
-@Entity
-@Table(name = "artist_contributions", schema = "project")
-public class ArtistContribution {
-    @EmbeddedId
-    private ArtistContributionId id;
-
-    @MapsId("artistId")
-    @ManyToOne(fetch = FetchType.LAZY, optional = false)
-    @OnDelete(action = OnDeleteAction.CASCADE)
-    @JoinColumn(name = "artist_id", nullable = false)
-    private Artist artist;
-
-    @MapsId("musicalEntityId")
-    @ManyToOne(fetch = FetchType.LAZY, optional = false)
-    @OnDelete(action = OnDeleteAction.CASCADE)
-    @JoinColumn(name = "musical_entity_id", nullable = false)
-    private MusicalEntity musicalEntity;
-
-    @Column(name = "role", nullable = false, length = Integer.MAX_VALUE)
-    private String role;
-
-}
Index: nkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContributionId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ArtistContributionId.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ 	(revision )
@@ -1,37 +1,0 @@
-package com.ukim.finki.develop.finkwave.model;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Embeddable;
-import lombok.Getter;
-import lombok.Setter;
-import org.hibernate.Hibernate;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-@Getter
-@Setter
-@Embeddable
-public class ArtistContributionId implements Serializable {
-    private static final long serialVersionUID = -3193987026608380950L;
-    @Column(name = "artist_id", nullable = false)
-    private Long artistId;
-
-    @Column(name = "musical_entity_id", nullable = false)
-    private Long musicalEntityId;
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
-        ArtistContributionId entity = (ArtistContributionId) o;
-        return Objects.equals(this.artistId, entity.artistId) &&
-                Objects.equals(this.musicalEntityId, entity.musicalEntityId);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(artistId, musicalEntityId);
-    }
-
-}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Contribution.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Contribution.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Contribution.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -0,0 +1,32 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "contributions", schema = "project")
+public class Contribution {
+    @EmbeddedId
+    private ContributionId id;
+
+    @MapsId("musicalEntityId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "musical_entity_id", nullable = false)
+    private MusicalEntity musicalEntity;
+
+    @MapsId("artistId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @OnDelete(action = OnDeleteAction.CASCADE)
+    @JoinColumn(name = "artist_id", nullable = false)
+    private Artist artist;
+
+    @Column(name = "contribution_order", nullable = false)
+    private Integer contributionOrder;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionId.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionId.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -0,0 +1,37 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class ContributionId implements Serializable {
+    private static final long serialVersionUID = -3193987026608380951L;
+    @Column(name = "musical_entity_id", nullable = false)
+    private Long musicalEntityId;
+
+    @Column(name = "artist_id", nullable = false)
+    private Long artistId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        ContributionId entity = (ContributionId) o;
+        return Objects.equals(this.musicalEntityId, entity.musicalEntityId) &&
+                Objects.equals(this.artistId, entity.artistId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(musicalEntityId, artistId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionRole.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionRole.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionRole.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -0,0 +1,26 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "contribution_roles", schema = "project")
+public class ContributionRole {
+    @EmbeddedId
+    private ContributionRoleId id;
+
+    @MapsId("roleId")
+    @ManyToOne(fetch = FetchType.LAZY, optional = false)
+    @JoinColumn(name = "role_id", nullable = false)
+    private MusicalRole role;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionRoleId.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionRoleId.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/ContributionRoleId.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -0,0 +1,41 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Embeddable;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.Hibernate;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+@Getter
+@Setter
+@Embeddable
+public class ContributionRoleId implements Serializable {
+    private static final long serialVersionUID = -3193987026608380952L;
+    @Column(name = "musical_entity_id", nullable = false)
+    private Long musicalEntityId;
+
+    @Column(name = "artist_id", nullable = false)
+    private Long artistId;
+
+    @Column(name = "role_id", nullable = false)
+    private Long roleId;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
+        ContributionRoleId entity = (ContributionRoleId) o;
+        return Objects.equals(this.musicalEntityId, entity.musicalEntityId) &&
+                Objects.equals(this.artistId, entity.artistId) &&
+                Objects.equals(this.roleId, entity.roleId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(musicalEntityId, artistId, roleId);
+    }
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalEntity.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalEntity.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalEntity.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -34,6 +34,4 @@
     private LocalDate releaseDate;
 
-    private String cover;
-
     @ManyToOne(fetch = FetchType.LAZY)
     @OnDelete(action = OnDeleteAction.CASCADE)
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalRole.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalRole.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/MusicalRole.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -0,0 +1,25 @@
+package com.ukim.finki.develop.finkwave.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Entity
+@Table(name = "roles", schema = "project")
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+public class MusicalRole {
+    @Id
+    @Column(name = "role_id", nullable = false)
+    private Long id;
+
+    @Column(name = "name", nullable = false, length = Integer.MAX_VALUE)
+    private String name;
+
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Playlist.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Playlist.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Playlist.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -24,7 +24,4 @@
     private Long id;
 
-    @Column(name = "cover", length = Integer.MAX_VALUE)
-    private String cover;
-
     @Column(name = "name", nullable = false, length = Integer.MAX_VALUE)
     private String name;
@@ -35,6 +32,5 @@
     private Listener createdBy;
 
-    public Playlist(String cover, String name, Listener createdBy) {
-        this.cover = cover;
+    public Playlist(String name, Listener createdBy) {
         this.name = name;
         this.createdBy = createdBy;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -31,5 +31,5 @@
     private String email;
 
-    @Column(nullable = false, length = Integer.MAX_VALUE)
+    @Column(name = "password_hash", nullable = false, length = Integer.MAX_VALUE)
     @JsonIgnore
     private String password;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AlbumRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AlbumRepository.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/AlbumRepository.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -18,5 +18,5 @@
     @Query("""
         SELECT NEW com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto(
-            a.id, me.title, me.genre, 'ALBUM', u.fullName, u.username, me.cover, FALSE )
+            a.id, me.title, me.genre, 'ALBUM', u.fullName, u.username, CAST(NULL AS string), FALSE )
         FROM Album a
         JOIN a.musicalEntities me
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -8,22 +8,22 @@
 import org.springframework.stereotype.Repository;
 
-import com.ukim.finki.develop.finkwave.model.ArtistContribution;
-import com.ukim.finki.develop.finkwave.model.ArtistContributionId;
+import com.ukim.finki.develop.finkwave.model.Contribution;
+import com.ukim.finki.develop.finkwave.model.ContributionId;
 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDto;
 import com.ukim.finki.develop.finkwave.model.dto.ArtistContributionSummaryDto;
 
 @Repository
-public interface ArtistContributionRepository extends JpaRepository<ArtistContribution, ArtistContributionId> {
+public interface ArtistContributionRepository extends JpaRepository<Contribution, ContributionId> {
 
     @Query("""
         SELECT NEW com.ukim.finki.develop.finkwave.model.dto.ArtistContributionDto(
-            ac.musicalEntity.id, ac.musicalEntity.title, ac.musicalEntity.genre, ac.role,
+            ac.musicalEntity.id, ac.musicalEntity.title, ac.musicalEntity.genre, CAST(ac.contributionOrder AS string),
             (CASE WHEN s.id IS NOT NULL THEN 'SONG'
                   WHEN a.id IS NOT NULL THEN 'ALBUM'
                   ELSE 'Unknown' END),
             (CASE WHEN l.id IS NOT NULL THEN true ELSE false END),
-            ac.musicalEntity.cover,
+            CAST(NULL AS string),
             s.link)
-        FROM ArtistContribution ac
+        FROM Contribution ac
         LEFT JOIN Song s  ON s.musicalEntities.id=ac.musicalEntity.id
         LEFT JOIN Album a ON a.musicalEntities.id=ac.musicalEntity.id
@@ -36,7 +36,7 @@
     @Query("""
     SELECT NEW com.ukim.finki.develop.finkwave.model.dto.ArtistContributionSummaryDto(
-    ac.artist.nonAdminUser.user.fullName, ac.role
+    ac.artist.nonAdminUser.user.fullName, CAST(ac.contributionOrder AS string)
     )
-    FROM ArtistContribution ac
+    FROM Contribution ac
     WHERE ac.id.musicalEntityId = :songId
     """)
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/LikeRepository.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -24,5 +24,5 @@
             u.fullName,
             u.username,
-            me.cover,
+            CAST(NULL AS string),
             (CASE WHEN currentUserLike.id IS NOT NULL THEN true ELSE false END))
         FROM Like l
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -28,5 +28,5 @@
     @Query("""
     SELECT NEW com.ukim.finki.develop.finkwave.model.dto.BasicPlaylistDto(
-    p.id, p.name, p.cover, (SELECT COUNT(*) FROM PlaylistSong ps where ps.playlist.id = p.id)
+    p.id, p.name, CAST(NULL AS string), (SELECT COUNT(*) FROM PlaylistSong ps where ps.playlist.id = p.id)
     )
     FROM Playlist p
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -17,5 +17,5 @@
     @Query("""
         SELECT NEW com.ukim.finki.develop.finkwave.model.dto.SongWithLinkDto(
-            s.id, me.title, me.genre, 'SONG', u.fullName, u.username, me.cover,
+            s.id, me.title, me.genre, 'SONG', u.fullName, u.username, CAST(NULL AS string),
             (CASE WHEN :currentUserId IS NOT NULL AND l.id IS NOT NULL THEN true ELSE false END),
             s.link
@@ -34,5 +34,5 @@
     @Query("""
         SELECT NEW com.ukim.finki.develop.finkwave.model.dto.SongWithLinkDto(
-            s.id, me.title, me.genre, 'SONG', u.fullName, u.username, me.cover,
+            s.id, me.title, me.genre, 'SONG', u.fullName, u.username, CAST(NULL AS string),
             (CASE WHEN :currentUserId IS NOT NULL AND l.id IS NOT NULL THEN true ELSE false END),
             s.link
@@ -57,5 +57,5 @@
             s.musicalEntities.releasedBy.nonAdminUser.user.fullName,
             s.musicalEntities.releasedBy.nonAdminUser.user.username,
-            s.musicalEntities.cover,
+            CAST(NULL AS string),
             (EXISTS (SELECT 1 FROM Like l WHERE l.musicalEntity.id = s.id AND l.listener.id = :currentUserId)),
             s.album.musicalEntities.title,
@@ -71,5 +71,4 @@
             s.musicalEntities.releasedBy.nonAdminUser.user.fullName,
             s.musicalEntities.releasedBy.nonAdminUser.user.username,
-            s.musicalEntities.cover,
             s.album.musicalEntities.title,
             s.album.musicalEntities.id
@@ -87,5 +86,5 @@
         u.fullName,
         u.username,
-        me.cover,
+        CAST(NULL AS string),
         (EXISTS (
             SELECT 1 FROM Like l
@@ -116,5 +115,5 @@
             t.username,
             t.link,
-            t.cover
+            NULL
         FROM (
                  SELECT DISTINCT ON (l.song_id)
@@ -123,5 +122,4 @@
                      u.full_name,
                      u.username,
-                     me.cover,
                      s.link,
                      l.timestamp
@@ -146,5 +144,5 @@
             u.fullName,
             u.username,
-            me.cover,
+            CAST(NULL AS string),
             (EXISTS (
                 SELECT 1 FROM Like l
@@ -177,5 +175,5 @@
             ELSE NULL
            END),
-          me.cover,
+          CAST(NULL AS string),
           me.releaseDate
         )
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AlbumService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AlbumService.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AlbumService.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -36,5 +36,5 @@
                 album.getMusicalEntities().getReleasedBy().getNonAdminUser().getUser().getFullName(),
                 album.getMusicalEntities().getReleasedBy().getNonAdminUser().getUser().getUsername(),
-                album.getMusicalEntities().getCover(),
+                null,
                 likeRepository.isLikedByUser(currentUserId));
         List<SongWithLinkDto>songsFromAlbum=songRepository.findSongsByAlbum(id,currentUserId);
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/MusicalEntityService.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -2,22 +2,16 @@
 
 import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.time.LocalDate;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.UUID;
 
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
 
-import com.ukim.finki.develop.finkwave.exceptions.InvalidFileException;
 import com.ukim.finki.develop.finkwave.model.Album;
 import com.ukim.finki.develop.finkwave.model.Artist;
-import com.ukim.finki.develop.finkwave.model.ArtistContribution;
-import com.ukim.finki.develop.finkwave.model.ArtistContributionId;
+import com.ukim.finki.develop.finkwave.model.Contribution;
+import com.ukim.finki.develop.finkwave.model.ContributionId;
 import com.ukim.finki.develop.finkwave.model.MusicalEntity;
 import com.ukim.finki.develop.finkwave.model.Song;
@@ -43,7 +37,7 @@
     MusicalEntityRepository musicalEntityRepository;
 
-    private static final long MAX_FILE_SIZE = 2_000_000;
-    private static final String MAIN_VOCAL_ROLE = "MAIN VOCAL";
-    
+    // the publishing artist is always recorded first
+    private static final int PUBLISHING_ARTIST_ORDER = 1;
+
     @Transactional
     public void handleSongPublish(PublishSongRequestDto requestDto) throws IOException {
@@ -54,5 +48,4 @@
                 requestDto.getTitle(),
                 requestDto.getGenre(),
-                requestDto.getCover(),
                 artist
         );
@@ -65,5 +58,5 @@
 
         // add publishing artist
-        saveContribution(artist, musicalEntity, MAIN_VOCAL_ROLE);
+        saveContribution(artist, musicalEntity, PUBLISHING_ARTIST_ORDER);
 
         // add additional contributors
@@ -72,33 +65,26 @@
 
     @Transactional
-    protected MusicalEntity createMusicalEntity(String title, String genre, MultipartFile cover, Artist releasedBy)
-            throws IOException {
-        MusicalEntity.MusicalEntityBuilder builder = MusicalEntity.builder()
+    protected MusicalEntity createMusicalEntity(String title, String genre, Artist releasedBy) {
+        MusicalEntity musicalEntity = MusicalEntity.builder()
                 .title(title)
                 .genre(genre)
                 .releaseDate(LocalDate.now())
-                .releasedBy(releasedBy);
+                .releasedBy(releasedBy)
+                .build();
 
-        if (cover != null && !cover.isEmpty()) {
-            try {
-                String filename = saveCoverPhoto(cover);
-                builder.cover("profile-pictures/" + filename);
-            } catch (Exception ignored) {}
-        }
-
-        return musicalEntityRepository.save(builder.build());
+        return musicalEntityRepository.save(musicalEntity);
     }
 
     @Transactional
-    protected void saveContribution(Artist artist, MusicalEntity musicalEntity, String role) {
-        ArtistContributionId id = new ArtistContributionId();
+    protected void saveContribution(Artist artist, MusicalEntity musicalEntity, int contributionOrder) {
+        ContributionId id = new ContributionId();
         id.setArtistId(artist.getId());
         id.setMusicalEntityId(musicalEntity.getId());
 
-        ArtistContribution contribution = new ArtistContribution();
+        Contribution contribution = new Contribution();
         contribution.setId(id);
         contribution.setArtist(artist);
         contribution.setMusicalEntity(musicalEntity);
-        contribution.setRole(role);
+        contribution.setContributionOrder(contributionOrder);
 
         artistContributionRepository.save(contribution);
@@ -109,9 +95,10 @@
         if (contributors == null) return;
 
+        int order = PUBLISHING_ARTIST_ORDER + 1;
         for (ArtistContributionSummaryDto contributorDto : contributors) {
             if (contributorDto.getId() == null) continue;
 
             Artist contributor = artistService.getArtistById(contributorDto.getId());
-            saveContribution(contributor, musicalEntity, contributorDto.getRole());
+            saveContribution(contributor, musicalEntity, order++);
         }
     }
@@ -126,5 +113,4 @@
                 requestDto.getTitle(),
                 requestDto.getGenre(),
-                requestDto.getCover(),
                 artist
         );
@@ -135,13 +121,14 @@
 
         // add publishing artist
-        saveContribution(artist, albumMusicalEntity, MAIN_VOCAL_ROLE);
+        saveContribution(artist, albumMusicalEntity, PUBLISHING_ARTIST_ORDER);
 
-        // track artists already added to avoid duplicates
+        // track artists already added to avoid duplicates, and the next order slot at album level
         Set<Long> albumContributorIds = new HashSet<>();
         albumContributorIds.add(artist.getId());
+        int[] nextAlbumOrder = { PUBLISHING_ARTIST_ORDER + 1 };
 
         List<AlbumSongsDto> albumSongs = requestDto.getAlbumSongs();
         for (AlbumSongsDto songDto : albumSongs) {
-            createSongForAlbum(albumMusicalEntity, album, songDto, artist, albumContributorIds);
+            createSongForAlbum(albumMusicalEntity, album, songDto, artist, albumContributorIds, nextAlbumOrder);
         }
     }
@@ -150,10 +137,9 @@
     @Transactional
     protected void createSongForAlbum(MusicalEntity albumMe, Album album, AlbumSongsDto songDto,
-                                     Artist publishingArtist, Set<Long> albumContributorIds) {
+                                     Artist publishingArtist, Set<Long> albumContributorIds, int[] nextAlbumOrder) {
         MusicalEntity songMusicalEntity = MusicalEntity.builder()
                 .title(songDto.getTitle())
                 .releaseDate(albumMe.getReleaseDate())
                 .releasedBy(albumMe.getReleasedBy())
-                .cover(albumMe.getCover())
                 .genre(albumMe.getGenre())
                 .build();
@@ -166,21 +152,22 @@
         songRepository.save(song);
 
-        // add publishing artist as MAIN VOCAL to this song
-        saveContribution(publishingArtist, songMusicalEntity, MAIN_VOCAL_ROLE);
+        // add publishing artist as first contributor to this song
+        saveContribution(publishingArtist, songMusicalEntity, PUBLISHING_ARTIST_ORDER);
 
         // add song-specific contributors
         List<ArtistContributionSummaryDto> songContributors = songDto.getContributors();
         if (songContributors != null) {
+            int songOrder = PUBLISHING_ARTIST_ORDER + 1;
             for (ArtistContributionSummaryDto contributorDto : songContributors) {
                 if (contributorDto.getId() == null) continue;
-                
+
                 Artist contributor = artistService.getArtistById(contributorDto.getId());
-                
+
                 // first add to song
-                saveContribution(contributor, songMusicalEntity, contributorDto.getRole());
-                
+                saveContribution(contributor, songMusicalEntity, songOrder++);
+
                 // then add to album if not already added
                 if (!albumContributorIds.contains(contributor.getId())) {
-                    saveContribution(contributor, album.getMusicalEntities(), contributorDto.getRole());
+                    saveContribution(contributor, album.getMusicalEntities(), nextAlbumOrder[0]++);
                     albumContributorIds.add(contributor.getId());
                 }
@@ -188,21 +175,3 @@
         }
     }
-
-
-
-    private String saveCoverPhoto(MultipartFile coverPhoto) throws IOException {
-        String contentType = coverPhoto.getContentType();
-        if (contentType == null || !contentType.startsWith("image/")) {
-            throw InvalidFileException.invalidType();
-        }
-
-        if (coverPhoto.getSize() > MAX_FILE_SIZE) {
-            throw InvalidFileException.tooLarge(MAX_FILE_SIZE);
-        }
-
-        String filename = UUID.randomUUID() + "-" + coverPhoto.getOriginalFilename();
-        Path path = Paths.get("uploads/profile-pictures", filename);
-        Files.copy(coverPhoto.getInputStream(), path);
-        return filename;
-    }
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -128,5 +128,5 @@
                 p.getId(),
                 p.getName(),
-                p.getCover(),
+                null,
                 p.getCreatedBy().getNonAdminUser().getUser().getFullName(),
                 p.getCreatedBy().getNonAdminUser().getUser().getUsername(),
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/PlaylistService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/PlaylistService.java	(revision e11152577cb80a954a690e9db6b5e1e96ae67808)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/PlaylistService.java	(revision 0519e8dd2d6dfe5aba537795ba688babe562adb6)
@@ -46,5 +46,5 @@
                 playlist.getId(),
                 playlist.getName(),
-                playlist.getCover(),
+                null,
                 playlist.getCreatedBy().getNonAdminUser().getUser().getFullName(),
                 playlist.getCreatedBy().getNonAdminUser().getUser().getUsername(),
@@ -111,5 +111,5 @@
                 UserNotFoundException::new
         );
-        Playlist playlist=playlistRepository.save(new Playlist(null,playlistName,listener));
+        Playlist playlist=playlistRepository.save(new Playlist(playlistName,listener));
         if (songId!=null){
 
