Index: client_app/src/components/item_components/internship_component.js
===================================================================
--- client_app/src/components/item_components/internship_component.js	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ client_app/src/components/item_components/internship_component.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -1,4 +1,5 @@
 import React from 'react';
 import {Header, List, Segment, Button} from 'semantic-ui-react';
+import {Link} from "react-router-dom";
 
 const Internships = (props) => {
@@ -6,5 +7,11 @@
         <Segment>
             <Header as="h3">{props.item.title}</Header>
-            {props.item.type!=="USER" ? <Button primary>Edit</Button> : <span> </span>}
+            {props.item.type!=="USER" ? <Button primary as={Link} to={{
+                pathname: "/edit/internship",
+                state: {
+                    index: props.index,
+                    item: props.item
+                }
+            }}>Edit</Button> : <span> </span>}
             <Segment>{props.item.description}</Segment>
             <Segment>
Index: client_app/src/components/item_components/job_component.js
===================================================================
--- client_app/src/components/item_components/job_component.js	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ client_app/src/components/item_components/job_component.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -7,10 +7,9 @@
         <Segment>
             <Header as="h3">{props.item.title}</Header>
-            {props.item.type!=="USER" ? <Button primary as={Link} to={{
+            {props.item.accountType!=="USER" ? <Button primary as={Link} to={{
                 pathname: "/edit/job",
                 state: {
-                    jobId: props.item.id,
-                    accId: props.item.accId,
-                    type: props.item.type
+                    index: props.index,
+                    item: props.item
                 }
             }}>Edit</Button> : <span> </span>}
Index: client_app/src/components/item_components/project_component.js
===================================================================
--- client_app/src/components/item_components/project_component.js	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ client_app/src/components/item_components/project_component.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -1,4 +1,5 @@
 import React from 'react';
 import {Header, List, Segment, Button} from 'semantic-ui-react';
+import {Link} from "react-router-dom";
 
 const Projects = (props) => {
@@ -7,5 +8,11 @@
         <Segment>
             <Header as="h3">{props.item.title}</Header>
-            {props.item.type!=="USER" ? <Button primary>Edit</Button> : <span> </span>}
+            {props.item.type!=="USER" ? <Button primary as={Link} to={{
+                pathname: "/edit/project",
+                state: {
+                    index: props.index,
+                    item: props.item
+                }
+            }}>Edit</Button> : <span> </span>}
             <Segment>{props.item.description}</Segment>
             <Segment>
Index: client_app/src/components/main/App.js
===================================================================
--- client_app/src/components/main/App.js	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ client_app/src/components/main/App.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -24,5 +24,7 @@
 import InternshipRegister from "../work_register/internship_register";
 import ProjectRegister from "../work_register/project_register";
-import EditJob from "../work_edit/test";
+import EditJob from "../work_edit/edit_job";
+import EditInternship from "../work_edit/edit_internship";
+import EditProject from "../work_edit/edit_project";
 
 class App extends Component{
@@ -63,6 +65,6 @@
                       <Route path={"/register/project"} render={() => <ProjectRegister accountId={this.state.currentUser.id} type={this.state.currentUser.type} updateProjects={this.updateProjects} />}/>
                       <Route path={"/edit/job"} render={(props) => <EditJob {...props}  editJob={this.editJob}/>} />
-                      {/*<Route path={"/edit/internship"} render={(props) => <EditInternship {...props}  editJob={this.editInternship}/>} />*/}
-                      {/*<Route path={"/edit/project"} render={(props) => <EditProject {...props}  editJob={this.editProject}/>} />*/}
+                      <Route path={"/edit/internship"} render={(props) => <EditInternship {...props}  editInternship={this.editInternship}/>} />
+                      <Route path={"/edit/project"} render={(props) => <EditProject {...props}  editProject={this.editProject}/>} />
                       <Route path={"/logout"} render={() => <Redirect to={"/login"}/>}/>
                       <Route path={"/"} render={() => <Redirect to={"/login"}/>}/>
@@ -121,8 +123,11 @@
 
     editJob = (job, index) => {
+      let jobs = this.state.currentUser.jobs;
+      jobs[index] = job;
+
       this.setState(prevState => ({
           currentUser:{
               ...prevState.currentUser,
-              jobs: Object.assign([],this.state.jobs,{[index]: job})
+              jobs: jobs
           }
       }))
@@ -130,8 +135,11 @@
 
     editInternship = (internship, index) => {
+        let interns = this.state.currentUser.internships;
+        interns[index] = internship;
+
         this.setState(prevState => ({
             currentUser:{
                 ...prevState.currentUser,
-                internships: Object.assign([],this.state.jobs,{[index]: internship})
+                internships: interns
             }
         }))
@@ -139,8 +147,11 @@
 
     editProject = (project, index) => {
+        let proj = this.state.currentUser.projects;
+        proj[index] = project;
+
         this.setState(prevState => ({
             currentUser:{
                 ...prevState.currentUser,
-                projects: Object.assign([],this.state.jobs,{[index]: project})
+                projects: proj
             }
         }))
Index: client_app/src/components/work_edit/edit_internship.js
===================================================================
--- client_app/src/components/work_edit/edit_internship.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
+++ client_app/src/components/work_edit/edit_internship.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -0,0 +1,97 @@
+import React,{Component} from 'react';
+import {Button, Container, Dropdown, Form, Label} from "semantic-ui-react";
+import {Redirect} from "react-router-dom";
+import WorkEdit from "../../repository/edit_work_repo";
+
+class EditInternship extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            id: props.location.state.item.id,
+            index: props.location.state.index,
+            title: props.location.state.item.title,
+            description: props.location.state.item.description,
+            salary: props.location.state.item.salary,
+            openSpots: props.location.state.item.openSpots,
+            accountId: props.location.state.item.accountId,
+            accountType: props.location.state.item.accountType,
+            success: false,
+            error: false,
+        }
+
+        this.attemptInternshipEdit = this.attemptInternshipEdit.bind(this);
+    }
+
+    handleCheck = (e, {value}) => {
+        console.log(e.target.name);
+        this.setState({
+            ...this.state,
+            [e.target.name]: value
+        })
+    }
+
+    attemptInternshipEdit(){
+        WorkEdit.internshipEdit(
+            this.state.id,
+            this.state.title,
+            this.state.description,
+            this.state.accountId,
+            this.state.salary,
+            this.state.openSpots
+        ).then(res => {
+            console.log(res.data);
+            if(res.data.error===null){
+                this.props.editInternship(res.data, this.state.index);
+                this.setState({
+                    success: true,
+                    error: null
+                })
+            }else{
+                this.setState({
+                    success: false,
+                    error: res.data.error
+                })
+            }
+        }).catch(err => {
+            this.setState({
+                error: "Error editing job!",
+                success: null
+            })
+        });
+    }
+
+    render(){
+        if(this.state.accountId==null || this.state.accountType==="USER" || this.state.accountType==="TEAM"){
+            return(
+                <Redirect to={"/login"}/>
+            );
+        }
+
+        if(this.state.success===true){
+            if(this.state.accountType==="COMPANY"){
+                return(
+                    <Redirect to={"/company/internships"}/>
+                );
+            }
+        }
+
+        return(
+            <Container>
+                <h1 style={{color: "red"}}>{this.state.error}</h1>
+                <Form onSubmit={this.attemptInternshipEdit}>
+                    <Form.Input id="title" name="title" type='text' value={this.state.title} required fluid label='Title'
+                                placeholder='Enter title...' onChange={this.handleCheck}/>
+                    <Form.Input id="description" name="description" value={this.state.description} type='text' required fluid label='Description'
+                                placeholder='Enter description...' onChange={this.handleCheck}/>
+                    <Form.Input id="salary" name="salary" type='number' value={this.state.salary} required fluid label='Salary'
+                                placeholder='Enter salary...' onChange={this.handleCheck}/>
+                    <Form.Input id="openSpots" name="openSpots" type='openSpots' value={this.state.openSpots} required fluid label='Open Spots'
+                                placeholder='Enter open spots...' onChange={this.handleCheck}/>
+                    <Button type="submit">Edit</Button>
+                </Form>
+            </Container>
+        );
+    }
+}
+
+export default EditInternship;
Index: client_app/src/components/work_edit/edit_job.js
===================================================================
--- client_app/src/components/work_edit/edit_job.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
+++ client_app/src/components/work_edit/edit_job.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -0,0 +1,95 @@
+import React,{Component} from 'react';
+import {Button, Container, Dropdown, Form, Label} from "semantic-ui-react";
+import {Redirect} from "react-router-dom";
+import WorkEdit from "../../repository/edit_work_repo";
+
+class EditJob extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            id: props.location.state.item.id,
+            index: props.location.state.index,
+            title: props.location.state.item.title,
+            description: props.location.state.item.description,
+            salary: props.location.state.item.salary,
+            accountId: props.location.state.item.accountId,
+            accountType: props.location.state.item.accountType,
+            success: false,
+            error: false,
+        }
+
+        this.attemptJobEdit = this.attemptJobEdit.bind(this);
+    }
+
+    handleCheck = (e, {value}) => {
+        this.setState({
+            ...this.state,
+            [e.target.name]: value
+        })
+    }
+
+    attemptJobEdit(){
+        WorkEdit.jobEdit(
+            this.state.id,
+            this.state.title,
+            this.state.description,
+            this.state.accountId,
+            this.state.salary
+        ).then(res => {
+            if(res.data.error===null){
+                this.props.editJob(res.data, this.state.index);
+                this.setState({
+                    success: true,
+                    error: null
+                })
+            }else{
+                this.setState({
+                    success: false,
+                    error: res.data.error
+                })
+            }
+        }).catch(err => {
+            this.setState({
+                error: "Error editing job!",
+                success: null
+            })
+        });
+    }
+
+    render(){
+        if(this.state.accountId==null || this.state.accountType==="USER"){
+            return(
+                <Redirect to={"/login"}/>
+            );
+        }
+
+        if(this.state.success===true){
+            if(this.state.accountType==="COMPANY"){
+                return(
+                    <Redirect to={"/company/jobs"}/>
+                );
+            }else{
+                return(
+                    <Redirect to={"/team/jobs"}/>
+                );
+            }
+        }
+
+        return(
+            <Container>
+                <h1 style={{color: "red"}}>{this.state.error}</h1>
+                <Form onSubmit={this.attemptJobEdit}>
+                    <Form.Input id="title" name="title" type='text' value={this.state.title} required fluid label='Title'
+                                placeholder='Enter title...' onChange={this.handleCheck}/>
+                    <Form.Input id="description" name="description" value={this.state.description} type='text' required fluid label='Description'
+                                placeholder='Enter description...' onChange={this.handleCheck}/>
+                    <Form.Input id="salary" name="salary" type='number' value={this.state.salary} required fluid label='Salary'
+                                placeholder='Enter salary...' onChange={this.handleCheck}/>
+                    <Button type="submit">Edit</Button>
+                </Form>
+            </Container>
+        );
+    }
+}
+
+export default EditJob;
Index: client_app/src/components/work_edit/edit_project.js
===================================================================
--- client_app/src/components/work_edit/edit_project.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
+++ client_app/src/components/work_edit/edit_project.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -0,0 +1,91 @@
+import React,{Component} from 'react';
+import {Button, Container, Dropdown, Form, Label} from "semantic-ui-react";
+import {Redirect} from "react-router-dom";
+import WorkEdit from "../../repository/edit_work_repo";
+
+class EditProject extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            id: props.location.state.item.id,
+            index: props.location.state.index,
+            title: props.location.state.item.title,
+            description: props.location.state.item.description,
+            salary: props.location.state.item.salary,
+            accountId: props.location.state.item.accountId,
+            accountType: props.location.state.item.accountType,
+            success: false,
+            error: false,
+        }
+
+        this.attemptProjectEdit = this.attemptProjectEdit.bind(this);
+    }
+
+    handleCheck = (e, {value}) => {
+        this.setState({
+            ...this.state,
+            [e.target.name]: value
+        })
+    }
+
+    attemptProjectEdit(){
+        WorkEdit.projectEdit(
+            this.state.id,
+            this.state.title,
+            this.state.description,
+            this.state.accountId,
+            this.state.salary
+        ).then(res => {
+            if(res.data.error===null){
+                this.props.editProject(res.data, this.state.index);
+                this.setState({
+                    success: true,
+                    error: null
+                })
+            }else{
+                this.setState({
+                    success: false,
+                    error: res.data.error
+                })
+            }
+        }).catch(err => {
+            this.setState({
+                error: "Error editing job!",
+                success: null
+            })
+        });
+    }
+
+    render(){
+        if(this.state.accountId==null || this.state.accountType==="USER" || this.state.accountType==="COMPANY"){
+            return(
+                <Redirect to={"/login"}/>
+            );
+        }
+
+        if(this.state.success===true){
+            if(this.state.accountType==="TEAM"){
+                return(
+                    <Redirect to={"/team/projects"}/>
+                );
+            }
+        }
+
+        return(
+            <Container>
+                <h1 style={{color: "red"}}>{this.state.error}</h1>
+                <Form onSubmit={this.attemptProjectEdit}>
+                    <Form.Input id="title" name="title" type='text' value={this.state.title} required fluid label='Title'
+                                placeholder='Enter title...' onChange={this.handleCheck}/>
+                    <Form.Input id="description" name="description" value={this.state.description} type='text' required fluid label='Description'
+                                placeholder='Enter description...' onChange={this.handleCheck}/>
+                    <Form.Input id="salary" name="salary" type='number' value={this.state.salary} required fluid label='Salary'
+                                placeholder='Enter salary...' onChange={this.handleCheck}/>
+                    <Button type="submit">Edit</Button>
+                </Form>
+            </Container>
+        );
+    }
+}
+
+export default EditProject;
Index: client_app/src/repository/edit_work_repo.js
===================================================================
--- client_app/src/repository/edit_work_repo.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
+++ client_app/src/repository/edit_work_repo.js	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -0,0 +1,31 @@
+import axios from '../custom_axios/axios';
+
+const WorkEdit = {
+    jobEdit: (jobId, title, description, accId, salary) => {
+        return axios.post("/edit/work/job/" + jobId, {
+            "title": title,
+            "description": description,
+            "accountId": accId,
+            "salary": salary
+        });
+    },
+    projectEdit: (projectId, title, description, accId, salary) => {
+        return axios.post("/edit/work/project/" + projectId, {
+            "title": title,
+            "description": description,
+            "accountId": accId,
+            "salary": salary
+        });
+    },
+    internshipEdit: (internshipId, title, description, accId, salary, openSpots) => {
+        return axios.post("/edit/work/internship/" + internshipId, {
+            "title": title,
+            "description": description,
+            "accountId": accId,
+            "salary": salary,
+            "openSpots": openSpots
+        });
+    }
+}
+
+export default WorkEdit;
Index: src/main/java/it/finki/tinki/model/dto/edit/work/InternshipEditDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/edit/work/InternshipEditDTO.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
+++ src/main/java/it/finki/tinki/model/dto/edit/work/InternshipEditDTO.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -0,0 +1,8 @@
+package it.finki.tinki.model.dto.edit.work;
+
+import lombok.Data;
+
+@Data
+public class InternshipEditDTO extends WorkEditDTO{
+    int openSpots;
+}
Index: src/main/java/it/finki/tinki/model/dto/edit/work/WorkEditDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/edit/work/WorkEditDTO.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
+++ src/main/java/it/finki/tinki/model/dto/edit/work/WorkEditDTO.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -0,0 +1,11 @@
+package it.finki.tinki.model.dto.edit.work;
+
+import lombok.Data;
+
+@Data
+public class WorkEditDTO {
+    String title;
+    String description;
+    Long accountId;
+    int salary;
+}
Index: src/main/java/it/finki/tinki/model/dto/response/work/WorkResponseDTO.java
===================================================================
--- src/main/java/it/finki/tinki/model/dto/response/work/WorkResponseDTO.java	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ src/main/java/it/finki/tinki/model/dto/response/work/WorkResponseDTO.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -13,4 +13,5 @@
     String accountEmail;
     String accountName;
+    Long accountId;
     AccountType accountType;
     String error;
@@ -28,4 +29,5 @@
         this.description = description;
         this.salary = salary;
+        this.accountId = account.getId();
         this.accountEmail = account.getEmail();
         this.accountName = account.getName();
Index: src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ src/main/java/it/finki/tinki/service/impl/WorkServiceImpl.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -131,4 +131,5 @@
         j.setDescription(description);
         j.setSalary(salary);
+        j.setOpenSpots(openSpots);
 
         return this.internshipRepository.save(j);
Index: src/main/java/it/finki/tinki/web/controller/WorkEditController.java
===================================================================
--- src/main/java/it/finki/tinki/web/controller/WorkEditController.java	(revision ed3f5c40ee574173f3926bd65ca1169d6fe4b27f)
+++ src/main/java/it/finki/tinki/web/controller/WorkEditController.java	(revision 6729ba51f1105d56935c5cae90757ade1cac2082)
@@ -4,4 +4,6 @@
 import it.finki.tinki.model.Work.Job;
 import it.finki.tinki.model.Work.Project;
+import it.finki.tinki.model.dto.edit.work.InternshipEditDTO;
+import it.finki.tinki.model.dto.edit.work.WorkEditDTO;
 import it.finki.tinki.model.dto.register.work.InternshipRegisterDTO;
 import it.finki.tinki.model.dto.register.work.JobRegisterDTO;
@@ -29,55 +31,49 @@
 
     @PostMapping("/job/{id}")
-    public Map<String, String> editJob(@PathVariable Long id,
-                                       @RequestBody JobRegisterDTO body){
+    public JobResponseDTO editJob(@PathVariable Long id,
+                                  @RequestBody WorkEditDTO body){
 
-        Map<String, String> response = new HashMap<>();
+        Job j = this.workService.getJobById(id);
 
-        if(body.getAccountId().equals(this.workService.getJobById(id).getAccount().getId())) {
+        if(body.getAccountId().equals(j.getAccount().getId())) {
             Job k = this.workService.editJob(id, body.getTitle(), body.getDescription(), body.getSalary());
             if(k!=null){
-                response.put("success", "Job edited successfully!");
-                return response;
+                return new JobResponseDTO(k);
             }
         }
 
-        response.put("error", "Internship edit failed!");
-        return response;
+        return new JobResponseDTO();
     }
 
     @PostMapping("/internship/{id}")
-    public Map<String, String> editInternship(@PathVariable Long id,
-                                                @RequestBody InternshipRegisterDTO body){
+    public InternshipResponseDTO editInternship(@PathVariable Long id,
+                                                @RequestBody InternshipEditDTO body){
 
-        Map<String, String> response = new HashMap<>();
+        Internship i = this.workService.getInternshipById(id);
 
-        if(body.getAccountId().equals(this.workService.getInternshipById(id).getAccount().getId())){
+        if(body.getAccountId().equals(i.getAccount().getId())){
             Internship k = this.workService.editInternship(id, body.getTitle(), body.getDescription(), body.getSalary(), body.getOpenSpots());
             if(k!=null){
-                response.put("success", "Internship edited successfully!");
-                return response;
+                return new InternshipResponseDTO(k);
             }
         }
 
-        response.put("error", "Internship edit failed!");
-        return response;
+        return new InternshipResponseDTO();
     }
 
     @PostMapping("/project/{id}")
-    public Map<String, String> editProject(@PathVariable Long id,
-                                          @RequestBody ProjectRegisterDTO body){
+    public ProjectResponseDTO editProject(@PathVariable Long id,
+                                          @RequestBody WorkEditDTO body){
 
-        Map<String, String> response = new HashMap<>();
+        Project p = this.workService.getProjectById(id);
 
-        if(body.getAccountId().equals(this.workService.getProjectById(id).getAccount().getId())) {
+        if(body.getAccountId().equals(p.getAccount().getId())) {
             Project k = this.workService.editProject(id, body.getTitle(), body.getDescription(), body.getSalary());
             if(k!=null){
-                response.put("success", "Project edited successfully!");
-                return response;
+                return new ProjectResponseDTO(k);
             }
         }
 
-        response.put("error", "Project edit failed!");
-        return response;
+        return new ProjectResponseDTO();
     }
 }
