Index: client_app/src/components/account_edit/company_edit.js
===================================================================
--- client_app/src/components/account_edit/company_edit.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
+++ client_app/src/components/account_edit/company_edit.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -0,0 +1,95 @@
+import React from 'react';
+import 'semantic-ui-react';
+import {Button, Container, Form} from "semantic-ui-react";
+import { Redirect } from 'react-router-dom';
+import UserRegister from "../../repository/register_repo";
+import {Component} from "react/cjs/react.production.min";
+import AccountEdit from "../../repository/edit_account_repo";
+
+class EditCompany extends Component  {
+    constructor(props){
+        super(props);
+        this.state = {
+            email: "",
+            password: "",
+            name:"",
+            members: "",
+            city: "",
+            street: "",
+            error: null,
+            success: null
+        }
+        this.attemptCompanyEdit = this.attemptCompanyEdit.bind(this);
+    }
+
+    handleCheck = (e, {value}) => {
+        this.setState({
+            ...this.state,
+            [e.target.name]: value
+        })
+    }
+
+    attemptCompanyEdit = () => {
+        AccountEdit.companyEdit(
+            this.state.email,
+            this.state.password,
+            this.state.name,
+            this.state.country
+            ,this.state.city,
+            this.state.street
+        ).then(res =>{
+            if(res.data.success!=null){
+                this.setState({
+                    success: res.data.success,
+                    error: null
+                })
+                this.props.message(this.state.success);
+            }else{
+                this.setState({
+                    error: res.data.error,
+                    success: null
+                })
+            }
+        }).catch(err => {
+            this.setState({
+                error: "Company already exists!",
+                success: null
+            })
+        })
+    }
+
+    componentDidMount(){
+        this.props.message(null);
+    }
+
+    render() {
+        if(this.state.success!=null){
+            return(
+                <Redirect to={"/login"}/>
+            );
+        }
+
+        return (
+            <Container>
+                <h1 style={{color: "red"}}>{this.state.error}</h1>
+                <Form onSubmit={this.attemptCompanyRegister}>
+                    <Form.Input id="email" name="email" type='email' required fluid label='E-mail'
+                                placeholder='Enter e-mail.' onChange={this.handleCheck}/>
+                    <Form.Input id="password" name="password" type='password' required fluid label='Password'
+                                placeholder='Enter password.' onChange={this.handleCheck}/>
+                    <Form.Input id="name" name="name" type='text' required fluid label='Name'
+                                placeholder='Enter company name.' onChange={this.handleCheck}/>
+                    <Form.Input id="country" name="country" type='text' required fluid label='Country'
+                                placeholder='Enter your country.' onChange={this.handleCheck}/>
+                    <Form.Input id="city" name="city" type='text' required fluid label='City'
+                                placeholder='Enter your city.' onChange={this.handleCheck}/>
+                    <Form.Input id="street" name="street" type='text' required fluid label='Street'
+                                placeholder='Enter address street.' onChange={this.handleCheck}/>
+                    <Form.Field control={Button}>Register</Form.Field>
+                </Form>
+            </Container>
+        );
+    }
+}
+
+export default EditCompany;
Index: client_app/src/components/account_edit/user_edit.js
===================================================================
--- client_app/src/components/account_edit/user_edit.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
+++ client_app/src/components/account_edit/user_edit.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -0,0 +1,150 @@
+import React from 'react';
+import 'semantic-ui-react';
+import {Button, Container, Dropdown, Form, Label} from "semantic-ui-react";
+import { Redirect } from 'react-router-dom';
+import SkillFetch from "../../repository/skill_repo";
+import {Component} from "react/cjs/react.production.min";
+import AccountEdit from "../../repository/edit_account_repo";
+
+class EditUser extends Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            email: props.oldUser.email,
+            name: props.oldUser.name,
+            surname: props.oldUser.surname,
+            retainedSkills: props.oldUser.retained,
+            skillsToLearn: props.oldUser.toLearn,
+            type: props.oldUser.type,
+            error: null,
+            success: null,
+            sortedOptions:[],
+            id: props.oldUser.id,
+            oldEmail: props.oldUser.email,
+            toLearn: [],
+            retained: []
+        }
+        this.attemptEdit = this.attemptEdit.bind(this);
+    }
+
+    handleCheck = (e, {value}) => {
+        this.setState({
+            ...this.state,
+            [e.target.name]: value
+        })
+    }
+
+    setKnown = (e, {value}) =>{
+        this.setState({
+            retained: value
+        })
+    }
+
+    setToKnow = (e, {value}) =>{
+        this.setState({
+            toLearn: value
+        })
+    }
+
+    setIds = () => {
+        let k = [];
+        let m = [];
+
+        this.state.skillsToLearn.forEach(item => {
+            k.push(item.id);
+        })
+
+        this.state.retainedSkills.forEach(item=>{
+            m.push(item.id);
+        })
+
+        this.setState({
+            toLearn: k,
+            retained: m
+        })
+    }
+
+    attemptEdit(){
+        AccountEdit.userEdit(
+            this.state.id,
+            this.state.oldEmail,
+            this.state.email,
+            this.state.name,
+            this.state.surname,
+            this.state.retained,
+            this.state.toLearn
+        ).then(res => {
+            this.setState({
+                success: true,
+                error: null
+            })
+            this.props.updateUser(res.data);
+        }).catch(err => {
+            this.setState({
+                success: null,
+                error: "Error editing user.",
+            })
+        });
+    }
+
+    render() {
+        if(this.state.success!=null){
+            return(
+                <Redirect to={"/profile"}/>
+            );
+        }
+
+        if(this.state.type!=="USER"){
+            return(
+                <Redirect to={"/profile"}/>
+            );
+        }
+
+        return (
+            <Container>
+                <h1 style={{color: "red"}}>{this.state.error}</h1>
+                <Form onSubmit={this.attemptEdit}>
+                    <Form.Input id="email" name="email" type='email' required fluid label='E-mail'
+                                placeholder='Enter e-mail.' value={this.state.email} onChange={this.handleCheck}/>
+                    <Form.Input id="name" name="name" type='text' required fluid label='Name'
+                                placeholder='Enter name.' value={this.state.name} onChange={this.handleCheck}/>
+                    <Form.Input id="surname" name="surname" type='text' required fluid label='Surname'
+                                placeholder='Enter surname.' value={this.state.surname} onChange={this.handleCheck}/>
+                    <Label>Select skills you know:</Label>
+                    <Dropdown placeholder="Skills you know..." fluid multiple selection value={this.state.retained} options={this.state.sortedOptions} onChange={this.setKnown}/>
+                    <br/>
+                    <Label>Select skills you want to know:</Label>
+                    <Dropdown placeholder="Skills you want to learn..." fluid multiple value={this.state.toLearn} selection options={this.state.sortedOptions} onChange={this.setToKnow}/>
+                    <br/>
+                    <Button primary type="submit">Edit</Button>
+                </Form>
+            </Container>
+        );
+    }
+
+    componentDidMount(){
+        this.props.message(null);
+
+        SkillFetch.fetchAll().then((data) =>{
+            let sorted = [];
+            data.data.forEach(item => {
+                let obj = {
+                    key: item.id,
+                    text: item.name,
+                    value: item.id
+                }
+                sorted.push(obj);
+            });
+
+            this.setState({
+                sortedOptions: sorted
+            })
+        });
+
+        this.setIds();
+    }
+
+
+}
+
+export default EditUser;
Index: client_app/src/components/filter/search.js
===================================================================
--- client_app/src/components/filter/search.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
+++ client_app/src/components/filter/search.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -0,0 +1,122 @@
+import React, { useEffect, useState } from 'react';
+import { Button, Checkbox, Container, Form } from "semantic-ui-react";
+import { Redirect } from 'react-router-dom';
+import Jobs from "../item_components/job_component";
+import JobSearch from "../../repository/search_repo";
+import Internships from "../item_components/internship_component";
+
+const Search = (props) => {
+    const [formData, updateData] = useState({
+        text: "",
+        type: "0",
+        items: [],
+        searchedType: "0"
+    })
+
+    const handleCheck = (e, {value}) => {
+        updateData({
+            ...formData,
+            [e.target.name]: value
+        })
+    }
+
+    useEffect(() => {
+        updateData({
+            ...formData,
+            text: "",
+            type: "0"
+        })
+    }, [formData.items]);
+
+    const onFormSubmit = (e) =>{
+        e.preventDefault();
+        updateData({
+            ...formData,
+            searchedType: formData.type
+        })
+
+        if(formData.type==="0"){
+            JobSearch.job(formData.text).then(res => {
+                updateData({
+                    items: res.data
+                });
+            })
+        }else if(formData.type==="1"){
+            JobSearch.internship(formData.text).then(res => {
+                updateData({
+                    items: res.data
+                });
+            })
+        }else{
+            JobSearch.project(formData.text).then(res => {
+                updateData({
+                    items: res.data
+                });
+            })
+        }
+    }
+
+    if(props.loggedIn){
+        return(
+            <Container>
+                <Form onSubmit={onFormSubmit}>
+                    <Form.Input id="text" name="text" type="text" value={formData.text} fluid label='Enter keyword:' placeholder='Keyword...' onChange={handleCheck} />
+                    <Form.Field
+                        control={Checkbox}
+                        radio
+                        label='Job'
+                        id="0"
+                        name="type"
+                        value="0"
+                        checked={formData.type === "0"}
+                        onChange={handleCheck}
+                    />
+                    <Form.Field
+                        control={Checkbox}
+                        radio
+                        label='Internship'
+                        id="1"
+                        name="type"
+                        value="1"
+                        checked={formData.type === "1"}
+                        onChange={handleCheck}
+                    />
+                    <Form.Field
+                        control={Checkbox}
+                        radio
+                        label='Project'
+                        id="2"
+                        name="type"
+                        value="2"
+                        checked={formData.type === "2"}
+                        onChange={handleCheck}
+                    />
+                    <Form.Field control={Button}>Search</Form.Field>
+                </Form>
+
+                {formData.items.map(item => {
+                    return  (item.skillsTrained && <Internships
+                            title={item.title}
+                            description={item.description}
+                            accountName={item.accountName}
+                            accountEmail={item.accountEmail}
+                            skills={item.skillsTrained}
+                    />) || (<Jobs
+                        title={item.title}
+                        description={item.description}
+                        accountName={item.accountName}
+                        accountEmail={item.accountEmail}
+                        skills={item.skillsRequired}
+                    />)
+                })}
+            </Container>
+        );
+    }
+
+    return(
+        <Redirect to={"/profile"}/>
+    );
+
+}
+
+export default Search;
Index: client_app/src/components/main/App.js
===================================================================
--- client_app/src/components/main/App.js	(revision df3a3952e4e6392e41aaf48c8ea528bedfa619aa)
+++ client_app/src/components/main/App.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -17,4 +17,7 @@
 import RegisterCompany from "../register/register_company_form";
 import RegisterTeam from "../register/register_team_form";
+import Search from "../filter/search";
+import EditUser from "../account_edit/user_edit";
+import EditCompany from "../account_edit/company_edit";
 
 class App extends Component{
@@ -30,5 +33,5 @@
   }
 
-  render(){
+    render(){
           return(
               <Router>
@@ -47,4 +50,7 @@
                       <Route path={"/register/company"} render={() => <RegisterCompany message={this.setSuccess} />}/>
                       <Route path={"/register/team"} render={() => <RegisterTeam message={this.setSuccess}/>}/>
+                      <Route path={"/user/search"} render={() => <Search loggedIn={this.state.logged}/>}/>
+                      <Route path={"/user/edit"} render={() => <EditUser oldUser={this.state.currentUser} updateUser={this.updateUser} message={this.setSuccess}/>}/>
+                      <Route path={"/company/edit"} render={() => <EditCompany oldUser={this.state.currentUser} updateUser={this.updateUser} message={this.setSuccess}/>}/>
                       <Route path={"/logout"} render={() => <Redirect to={"/login"}/>}/>
                       <Route path={"/"} render={() => <Redirect to={"/login"}/>}/>
@@ -62,4 +68,10 @@
   }
 
+  updateUser = (user) =>{
+      this.setState({
+          currentUser: user
+      })
+  }
+
   setSuccess = (message) => {
       this.setState({
@@ -70,5 +82,4 @@
   attemptLogin = (email, password, type) => {
       UserLogin.login(email, password, type).then((res) =>{
-          console.log(res.data);
           if(res.data.email==null){
               this.setState({
Index: client_app/src/components/profiles/company_profile.js
===================================================================
--- client_app/src/components/profiles/company_profile.js	(revision df3a3952e4e6392e41aaf48c8ea528bedfa619aa)
+++ client_app/src/components/profiles/company_profile.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -10,5 +10,5 @@
             <h2>E-mail: {props.data.email}</h2>
             <h3>Address: {props.data.address.country} {props.data.address.city} {props.data.address.street}</h3>
-            <Button primary as={Link} to={"/profile/edit"}>Edit</Button>
+            <Button primary as={Link} to={"/company/edit"}>Edit</Button>
         </Container>
     );
Index: client_app/src/components/profiles/team_profile.js
===================================================================
--- client_app/src/components/profiles/team_profile.js	(revision df3a3952e4e6392e41aaf48c8ea528bedfa619aa)
+++ client_app/src/components/profiles/team_profile.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -10,5 +10,5 @@
             <h2>E-mail: {props.data.email}</h2>
             <h3>Members: {props.data.members}</h3>
-            <Button primary as={Link} to={"/profile/edit"}>Edit</Button>
+            <Button primary as={Link} to={"/team/edit"}>Edit</Button>
         </Container>
     );
Index: client_app/src/components/register/register_company_form.js
===================================================================
--- client_app/src/components/register/register_company_form.js	(revision df3a3952e4e6392e41aaf48c8ea528bedfa619aa)
+++ client_app/src/components/register/register_company_form.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -13,5 +13,5 @@
             password: "",
             name:"",
-            members: "",
+            country: "",
             city: "",
             street: "",
@@ -34,6 +34,6 @@
             this.state.password,
             this.state.name,
-            this.state.country
-            ,this.state.city,
+            this.state.country,
+            this.state.city,
             this.state.street
         ).then(res =>{
@@ -52,5 +52,5 @@
         }).catch(err => {
             this.setState({
-                error: "Company already exists!",
+                error: "User already exists!",
                 success: null
             })
@@ -58,35 +58,31 @@
     }
 
-    componentDidMount(){
-        this.props.message(null);
-    }
-
     render() {
-        if(this.state.success!=null){
-            return(
+        if (this.state.success != null) {
+            return (
                 <Redirect to={"/login"}/>
             );
         }
 
-            return (
-                <Container>
-                    <h1 style={{color: "red"}}>{this.state.error}</h1>
-                    <Form onSubmit={this.attemptCompanyRegister}>
-                        <Form.Input id="email" name="email" type='email' required fluid label='E-mail'
-                                    placeholder='Enter e-mail.' onChange={this.handleCheck}/>
-                        <Form.Input id="password" name="password" type='password' required fluid label='Password'
-                                    placeholder='Enter password.' onChange={this.handleCheck}/>
-                        <Form.Input id="name" name="name" type='text' required fluid label='Name'
-                                    placeholder='Enter company name.' onChange={this.handleCheck}/>
-                        <Form.Input id="country" name="country" type='text' required fluid label='Country'
-                                    placeholder='Enter your country.' onChange={this.handleCheck}/>
-                        <Form.Input id="city" name="city" type='text' required fluid label='City'
-                                    placeholder='Enter your city.' onChange={this.handleCheck}/>
-                        <Form.Input id="street" name="street" type='text' required fluid label='Street'
-                                    placeholder='Enter address street.' onChange={this.handleCheck}/>
-                        <Form.Field control={Button}>Register</Form.Field>
-                    </Form>
-                </Container>
-            );
+        return (
+            <Container>
+                <h1 style={{color: "red"}}>{this.state.error}</h1>
+                <Form onSubmit={this.attemptCompanyRegister}>
+                    <Form.Input id="email" name="email" type='email' required fluid label='E-mail'
+                                placeholder='Enter e-mail.' onChange={this.handleCheck}/>
+                    <Form.Input id="password" name="password" type='password' required fluid label='Password'
+                                placeholder='Enter password.' onChange={this.handleCheck}/>
+                    <Form.Input id="name" name="name" type='text' required fluid label='Name'
+                                placeholder='Enter company name.' onChange={this.handleCheck}/>
+                    <Form.Input id="country" name="country" type='text' required fluid label='Country'
+                                placeholder='Enter your country.' onChange={this.handleCheck}/>
+                    <Form.Input id="city" name="city" type='text' required fluid label='City'
+                                placeholder='Enter your city.' onChange={this.handleCheck}/>
+                    <Form.Input id="street" name="street" type='text' required fluid label='Street'
+                                placeholder='Enter address street.' onChange={this.handleCheck}/>
+                    <Form.Field control={Button}>Register</Form.Field>
+                </Form>
+            </Container>
+        );
     }
 }
Index: client_app/src/repository/edit_account_repo.js
===================================================================
--- client_app/src/repository/edit_account_repo.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
+++ client_app/src/repository/edit_account_repo.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -0,0 +1,31 @@
+import axios from '../custom_axios/axios';
+
+const AccountEdit = {
+    userEdit: (id, email, newEmail, name, surname, retainedSkills, skillsToLearn) => {
+        return axios.post("/edit/account/user/" + id + "/" + email, {
+            "email": newEmail,
+            "name": name,
+            "surname": surname,
+            "retainedSkills": retainedSkills,
+            "skillsToLearn": skillsToLearn
+        });
+    },
+    companyEdit: (id, email, newEmail, name, country, city, street) => {
+        return axios.post("/edit/account/company/" + id + "/" + email, {
+            "email": newEmail,
+            "name": name,
+            "country": country,
+            "city": city,
+            "street": street
+        });
+    },
+    teamEdit: (id, email, newEmail, name, members) => {
+        return axios.post("/edit/account/team/" + id + "/" + email, {
+            "email": newEmail,
+            "name": name,
+            "members": members
+        });
+    }
+}
+
+export default AccountEdit;
Index: client_app/src/repository/search_repo.js
===================================================================
--- client_app/src/repository/search_repo.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
+++ client_app/src/repository/search_repo.js	(revision 580ba1ab8df82124b40e77fad2161d9ab6bbc7a4)
@@ -0,0 +1,27 @@
+import axios from '../custom_axios/axios';
+
+const JobSearch = {
+    job: (text) => {
+        return axios.get("/search/job", {
+            params: {
+                "text": text
+            }
+        });
+    },
+    internship: (text) => {
+        return axios.get("/search/internship", {
+            params: {
+                "text": text
+            }
+        });
+    },
+    project: (text) => {
+        return axios.get("/search/project", {
+            params: {
+                "text": text
+            }
+        });
+    },
+}
+
+export default JobSearch;
