diff --git a/pom.xml b/pom.xml
index f6dc910c7601aa3a945154d907469bb300c3cdf2..8918ed114d46acd8061f9bdbfb6317165afaf4c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,6 +47,17 @@
 			<artifactId>log4j-core</artifactId>
 			<version>${log4j.version}</version>
 		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client -->
+		<dependency>
+		    <groupId>org.apache.cxf</groupId>
+		    <artifactId>cxf-rt-rs-client</artifactId>
+		    <version>4.0.0</version>
+		</dependency>
+		<dependency>
+	        <groupId>com.fasterxml.jackson.jakarta.rs</groupId>
+	        <artifactId>jackson-jakarta-rs-json-provider</artifactId>
+	        <version>2.14.2</version>
+	    </dependency>
 	</dependencies>
 	<build>
 		<plugins>
diff --git a/src/main/java/java2/lab12/client/Course.java b/src/main/java/java2/lab12/client/Course.java
index 09ccc10cd6037aa3efd47f2d646cb1a3542942be..691d09f7da65dc1c03384848c457f26c251f156f 100644
--- a/src/main/java/java2/lab12/client/Course.java
+++ b/src/main/java/java2/lab12/client/Course.java
@@ -1,9 +1,11 @@
 package java2.lab12.client;
 
+import jakarta.xml.bind.annotation.XmlRootElement;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@XmlRootElement
 @ToString
 public class Course {
 
diff --git a/src/main/java/java2/lab12/client/CourseClient.java b/src/main/java/java2/lab12/client/CourseClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..dcdf4234f9b513b3303709811d58d501e1e8d175
--- /dev/null
+++ b/src/main/java/java2/lab12/client/CourseClient.java
@@ -0,0 +1,30 @@
+package java2.lab12.client;
+
+import java.util.List;
+
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+public interface CourseClient {
+	
+	@GET
+	@Path("/courses")
+	@Produces(MediaType.APPLICATION_JSON)
+	List<Course> getAll();
+	
+	
+	@PUT
+	@Path("/course")
+	@Consumes(MediaType.APPLICATION_JSON)
+	void update(Course course);
+	
+	@POST
+	@Path("/course")
+	@Consumes(MediaType.APPLICATION_JSON)
+	Long create(Course course);
+}
diff --git a/src/main/java/java2/lab12/client/TableViewSample.java b/src/main/java/java2/lab12/client/TableViewSample.java
index cbb1718e833b99465dc2f0567b098a41ca9dd271..13af0c6d092c952a2657562be0da57ba48a4baea 100644
--- a/src/main/java/java2/lab12/client/TableViewSample.java
+++ b/src/main/java/java2/lab12/client/TableViewSample.java
@@ -2,6 +2,12 @@ package java2.lab12.client;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
+
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.jakarta.rs.json.JacksonXmlBindJsonProvider;
 
 import javafx.application.Application;
 import javafx.beans.property.ReadOnlyObjectWrapper;
@@ -190,18 +196,25 @@ public class TableViewSample extends Application {
 	}
 
 	private Collection<Course> getCourses() {
-		return Collections.emptyList();
+		return getClient().getAll();
 	}
 
 	private void createCourse(Course course) {
-		// TODO
+		getClient().create(course);
 	}
 
 	private void updateCourse(Course course) {
-		// TODO
+		getClient().update(course);
 	}
 
 	private void removeCourse(Course course) {
 		// TODO
 	}
+	
+	private CourseClient getClient() {
+		return JAXRSClientFactory.create("http://localhost:8080", CourseClient.class,
+				Collections.singletonList(new JacksonXmlBindJsonProvider().disable(SerializationFeature.WRAP_ROOT_VALUE)
+						.disable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)),
+				new HashMap<>(), true);
+	}
 }
\ No newline at end of file