Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/ArtistContributionDTO.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -11,4 +11,5 @@
     private Long musicalEntityId;
     private String title;
+    private String genre;
     private String role;
     private String entityType;
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/NonAdminUserDTO.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -18,4 +18,5 @@
     private Long followers;
     private Long following;
+    private Boolean isFollowedByCurrentUser;
 
 
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 c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/ArtistContributionRepository.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -13,7 +13,7 @@
 public interface ArtistContributionRepository extends JpaRepository<ArtistContribution, ArtistContributionId> {
 
-    @Query("SELECT ac.musicalEntity.id,ac.musicalEntity.title,ac.role, "+
-        "CASE WHEN s.id IS NOT NULL THEN 'Song' "+
-        "WHEN a.id IS NOT NULL THEN 'Album' "+
+    @Query("SELECT ac.musicalEntity.id,ac.musicalEntity.title,ac.musicalEntity.genre,ac.role, "+
+        "CASE WHEN s.id IS NOT NULL THEN 'SONG' "+
+        "WHEN a.id IS NOT NULL THEN 'ALBUM' "+
         "ELSE 'Unknown' END "+
         "FROM ArtistContribution ac "+
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/FollowRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/FollowRepository.java	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/FollowRepository.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -2,4 +2,6 @@
 
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -16,3 +18,8 @@
     long countByFollowerId(Long userId);
 
+    @Query("SELECT CASE WHEN COUNT (f)>0 THEN  true ELSE false END " +
+            "FROM Follow f "+
+            "WHERE f.followee.id=:selectedUserId AND f.follower.id=:currentUserId")
+    boolean isFollowing(@Param("currentUserId") Long currentUSerId,@Param("selectedUserId")Long selectedUserId);
+
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ArtistService.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -23,5 +23,5 @@
 
         return results.stream()
-        .map(row->new ArtistContributionDTO((Long)row[0], (String)row[1], (String)row[2], (String)row[3]))
+        .map(row->new ArtistContributionDTO((Long)row[0], (String)row[1], (String)row[2],(String)row[3], (String)row[4]))
         .collect(Collectors.toList());
     }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -1,4 +1,6 @@
 package com.ukim.finki.develop.finkwave.service;
 
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
@@ -98,4 +100,18 @@
     }
 
+    public Long getCurrentUserID(){
+        Authentication authentication= SecurityContextHolder.getContext().getAuthentication();
+        if (authentication == null || !authentication.isAuthenticated()) {
+            throw new RuntimeException("User not authenticated");
+        }
+
+        String username=authentication.getName();
+
+
+        return userRepository.findByUsername(username).map(User::getId)
+                .orElseThrow(()->new RuntimeException("User not found"));
+    }
+
+
     private User createNonAdminUser(AuthRequestDto authRequestDto) throws IOException {
         User.UserBuilder userBuilder = User.builder()
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 c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -1,15 +1,11 @@
 package com.ukim.finki.develop.finkwave.service;
 
-import com.ukim.finki.develop.finkwave.model.Artist;
-import com.ukim.finki.develop.finkwave.model.Listener;
-import com.ukim.finki.develop.finkwave.model.NonAdminUser;
-import com.ukim.finki.develop.finkwave.model.Playlist;
+import com.ukim.finki.develop.finkwave.model.*;
 import com.ukim.finki.develop.finkwave.model.dto.*;
-import com.ukim.finki.develop.finkwave.repository.ArtistRepository;
-import com.ukim.finki.develop.finkwave.repository.FollowRepository;
-import com.ukim.finki.develop.finkwave.repository.ListenerRepository;
-import com.ukim.finki.develop.finkwave.repository.NonAdminUserRepository;
+import com.ukim.finki.develop.finkwave.repository.*;
 import com.ukim.finki.develop.finkwave.service.mappers.NonAdminUserMapper;
 import lombok.AllArgsConstructor;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,4 +23,5 @@
     private final ListenerService listenerService;
     private final FollowRepository followRepository;
+    private final AuthService authService;
 
     @Transactional(readOnly = true)
@@ -44,11 +41,22 @@
         Long followers=followRepository.countByFolloweeId(id);
         Long following=followRepository.countByFollowerId(id);
+        Long currentUserId= authService.getCurrentUserID();
+
+        boolean isFollowedByCurrentUser=false;
+        if (currentUserId != null) {
+            isFollowedByCurrentUser = followRepository.isFollowing(currentUserId, id);
+        }
+        NonAdminUserDTO dto;
     
         if (artistRepository.existsById(id)) {
-            return getArtistProfile(id,followers,following);
+             dto=getArtistProfile(id, followers, following);
+             dto.setIsFollowedByCurrentUser(isFollowedByCurrentUser);
+             return dto;
         }
       
         if (listenerRepository.existsById(id)) {
-            return getListenerProfile(id,followers,following);
+            dto=getListenerProfile(id, followers, following);
+            dto.setIsFollowedByCurrentUser(isFollowedByCurrentUser);
+            return dto;
         }
         
@@ -59,9 +67,9 @@
         Artist artist = artistRepository.findByIdWithUser(artistId)
             .orElseThrow(() -> new RuntimeException("Artist not found with id: " + artistId));
-        
-      
+
+
         ArtistMusicalEntitiesDTO entitiesDTO = new ArtistMusicalEntitiesDTO();
         entitiesDTO.setContributions(artistService.getArtistContributions(artistId));
-        
+
         return mapper.toArtistDTO(artist, entitiesDTO,followers,following);
     }
@@ -70,6 +78,6 @@
         Listener listener = listenerRepository.findByIdWithUser(listenerId)
             .orElseThrow(() -> new RuntimeException("Listener not found with id: " + listenerId));
-        
-        
+
+
         ListenerLikesDTO likesDTO = listenerService.getLikedEntities(listenerId);
         List<PlaylistDTO>playlists=listenerService.getPlaylistsCreatedByUser(listenerId).stream()
@@ -80,5 +88,5 @@
                         p.getCreatedBy().getNonAdminUser().getUser().getFullName()
                 )).toList();
-        
+
         return mapper.toListenerDTO(listener, likesDTO,followers,following,playlists);
     }
@@ -86,4 +94,10 @@
 
     public List<NonAdminUserDTO>searchUsers(String name){
+
+        List<NonAdminUser>nonAdminUsers=nonAdminUserRepository.searchByName(name);
+        if (nonAdminUsers.isEmpty()){
+            throw new RuntimeException("No user found");
+        }
+
         return nonAdminUserRepository.searchByName(name).stream()
                 .map(user -> {
@@ -96,4 +110,6 @@
     }
 
+
+
     private String determineType(Long id) {
         if (artistRepository.existsById(id)) {
Index: frontend/src/components/userProfile/AllUsersHelper.tsx
===================================================================
--- frontend/src/components/userProfile/AllUsersHelper.tsx	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ frontend/src/components/userProfile/AllUsersHelper.tsx	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -1,5 +1,5 @@
 import React, { useEffect, useState } from "react";
 import { useNavigate } from "react-router-dom";
-
+import axiosInstance from "../../api/axiosInstance";
 interface User {
   id: number;
@@ -16,7 +16,6 @@
   useEffect(() => {
     const fetchUsers = async () => {
-      const response = await fetch("http://localhost:8080/users/all");
-      const data = await response.json();
-      setUsers(data);
+      const response = axiosInstance.get("/users/all");
+      setUsers((await response).data);
     };
     fetchUsers();
@@ -30,17 +29,23 @@
     e.preventDefault();
     try {
-      const response = await fetch(
-        `http://localhost:8080/users/search?name=${searchedUser}`,
-      );
-      if (!response.ok) throw new Error("Search failed");
-
-      const data = await response.json();
-      setUsers(data);
+      const response = await axiosInstance.get(`/users/search`, {
+        params: { name: searchedUser },
+      });
+      setUsers(response.data);
     } catch (err: any) {
-      setError(err.message);
+      const errorMessage = err.response?.data?.error || "Search failed";
+      setError(errorMessage);
     }
   };
 
   if (users.length == 0) return <div className="p-6">Loading...</div>;
+  if (error) {
+    return (
+      <div className="p-6 bg-red-50 border border-red-200 text-red-700 rounded-lg">
+        <h2 className="font-bold">Error</h2>
+        <p>{error}</p>
+      </div>
+    );
+  }
 
   return (
Index: frontend/src/components/userProfile/ArtistView.tsx
===================================================================
--- frontend/src/components/userProfile/ArtistView.tsx	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ frontend/src/components/userProfile/ArtistView.tsx	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -1,11 +1,5 @@
 import { useNavigate } from "react-router-dom";
 import { Music, Disc3, Mic2 } from "lucide-react";
-
-interface ArtistContributionDTO {
-  musicalEntityId: number;
-  title: string;
-  role: string;
-  entityType: string;
-}
+import type { ArtistContributionDTO } from "../../types";
 
 interface ArtistViewProps {
@@ -16,6 +10,6 @@
   const navigate = useNavigate();
 
-  const albums = contributions.filter((c) => c.entityType === "Album");
-  const songs = contributions.filter((c) => c.entityType === "Song");
+  const albums = contributions.filter((c) => c.entityType === "ALBUM");
+  const songs = contributions.filter((c) => c.entityType === "SONG");
 
   const getRoleColor = (role: string) => {
@@ -31,5 +25,4 @@
   return (
     <div className="mt-8">
-      {/* Albums Section */}
       {albums.length > 0 && (
         <div className="mb-12">
@@ -91,5 +84,5 @@
                   </h3>
                   <div className="flex items-center gap-2 mt-1">
-                    <Mic2 className="w-4 h-4 text-gray-400" />
+                    {song.genre}
                   </div>
                 </div>
Index: frontend/src/components/userProfile/UserDetailView.tsx
===================================================================
--- frontend/src/components/userProfile/UserDetailView.tsx	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ frontend/src/components/userProfile/UserDetailView.tsx	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -3,25 +3,8 @@
 import ArtistView from "./ArtistView";
 import ListenerView from "./ListenerView";
-
-interface MusicalEntityDTO {
-  id: number;
-  title: string;
-  genre: string;
-  type: string;
-}
-
-interface ArtistContributionDTO {
-  musicalEntityId: number;
-  title: string;
-  role: string;
-  entityType: string;
-}
-
-interface Playlist {
-  id: number;
-  name: string;
-  cover: string;
-  creatorName: string;
-}
+import axiosInstance from "../../api/axiosInstance";
+import type { ArtistContributionDTO } from "../../types";
+import type { MusicalEntityDTO } from "../../types";
+import type { Playlist } from "../../types";
 
 interface User {
@@ -32,4 +15,5 @@
   followers: number;
   following: number;
+  isFollowedByCurrentUser: boolean;
 
   musicalEntities?: {
@@ -45,4 +29,5 @@
 
 const UserDetail = () => {
+  // user refers to the selected user NOT to the user from context
   const { userId } = useParams();
   const navigate = useNavigate();
@@ -54,15 +39,11 @@
       setError(null);
       try {
-        const response = await fetch(`http://localhost:8080/users/${userId}`);
+        const response = await axiosInstance.get(`/users/${userId}`);
 
-        if (!response.ok) {
-          const errorData = await response.json();
-          throw new Error(errorData.error || "Failed to fetch user");
-        }
-
-        const data = await response.json();
-        setUser(data);
+        setUser(response.data);
       } catch (err: any) {
-        setError(err.message);
+        const errorMessage =
+          err.response?.data?.error || "Failed to fetch user";
+        setError(errorMessage);
       }
     };
@@ -115,6 +96,6 @@
             </div>
 
-            <button className="px-6 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors font-medium">
-              Follow
+            <button className="px-6 py-2 bg-blue-500 hover:bg-blue-600 text-white font-semibold rounded-lg shadow-md transition-colors duration-200 cursor-pointer">
+              {user.isFollowedByCurrentUser ? "Unfollow" : "Follow"}
             </button>
           </div>
Index: frontend/src/types.ts
===================================================================
--- frontend/src/types.ts	(revision c6e1892c2e4666227c2711399296c880cdbd00fe)
+++ frontend/src/types.ts	(revision 0f71490112c86ba2e2d18bbf12dac1b42e534433)
@@ -1,7 +1,28 @@
 export interface User {
-	username: string;
-	fullName: string;
-	email?: string;
-	profilePhoto?: string | null;
-	role?: "ADMIN" | "NONADMIN";
+  username: string;
+  fullName: string;
+  email?: string;
+  profilePhoto?: string | null;
+  role?: "ADMIN" | "NONADMIN";
 }
+
+export interface ArtistContributionDTO {
+  musicalEntityId: number;
+  title: string;
+  genre: string;
+  role: string;
+  entityType: string;
+}
+export interface MusicalEntityDTO {
+  id: number;
+  title: string;
+  genre: string;
+  type: string;
+}
+
+export interface Playlist {
+  id: number;
+  name: string;
+  cover: string;
+  creatorName: string;
+}
