diff --git a/jams-react-client/build_deploy_jams_client.sh b/jams-react-client/build_deploy_jams_client.sh
index cc5f14bfb5a22c4fd1d1d3a253c18c0c5159350b..de41b240d804a063972be11dff7c909c38316f97 100755
--- a/jams-react-client/build_deploy_jams_client.sh
+++ b/jams-react-client/build_deploy_jams_client.sh
@@ -3,24 +3,24 @@ WEBAPP=../jams-server/src/main/resources/webapp/
 JAMS_CLIENT=jams-client/
 JAMS=jams
 
-npm run build
+sudo npm run build
 
-rm -r $WEBAPP*
+rm -rf $WEBAPP*
 cp -r $BUILD_DIRECTORY* $WEBAPP
 
 sed -i 's/material-dashboard-react\///g' $WEBAPP"index.html"
 
 
-cd ../$JAMS
-rm -rf jams
-rm derby.log
-rm oauth.key
-rm oauth.pub
-rm config.json
+#cd ../$JAMS
+#rm -rf jams
+#rm derby.log
+#rm oauth.key
+#rm oauth.pub
+#rm config.json
 
 cd ..
-mvn clean package
+mvn clean package -DskipTests
 mvn package -DskipTests
 
 cd $JAMS
-java -jar jams-launcher.jar
\ No newline at end of file
+java -jar jams-launcher.jar
diff --git a/jams-react-client/src/api.js b/jams-react-client/src/api.js
index 47a685b137e2a8a82d23e949b2b2aad4ddbe3542..72de6e6a44e4970ef530a5e387c999f5c58373d5 100644
--- a/jams-react-client/src/api.js
+++ b/jams-react-client/src/api.js
@@ -89,7 +89,13 @@ export default function configApiCall(api_path, request_type, data, credentials)
 
         // search dataType
         if (isSearch) {
-            config['data'] = data;
+            if(request_type == 'post'){
+                config['data'] = data;
+            }
+            else {
+                config['params'] = data
+            }
+
         }
         else {
 
diff --git a/jams-react-client/src/assets/css/material-dashboard-react.css b/jams-react-client/src/assets/css/material-dashboard-react.css
index 95dc3a9a32983f4f267502354d3744407ebb1f5e..52f159f30e971ce0deffe349def3267350ae45f4 100644
--- a/jams-react-client/src/assets/css/material-dashboard-react.css
+++ b/jams-react-client/src/assets/css/material-dashboard-react.css
@@ -95,18 +95,18 @@ h3 {
 }
 
 h4 {
-  font-size: 1.3em;
+  font-size: 1em;
   line-height: 1.4em;
 }
 
 h5 {
-  font-size: 1.25em;
+  font-size: 0.9em;
   line-height: 1.4em;
   margin-bottom: 15px;
 }
 
 h6 {
-  font-size: 1em;
+  font-size: 0.5em;
   text-transform: uppercase;
   font-weight: 500;
 }
diff --git a/jams-react-client/src/assets/img/faces/christophe_villemaire.jpeg b/jams-react-client/src/assets/img/faces/christophe_villemaire.jpeg
deleted file mode 100644
index 95f8fc39ddffaa4633ac6c4c5c1ac0cfdc721de6..0000000000000000000000000000000000000000
Binary files a/jams-react-client/src/assets/img/faces/christophe_villemaire.jpeg and /dev/null differ
diff --git a/jams-react-client/src/assets/img/faces/cyrille_beraud.jpeg b/jams-react-client/src/assets/img/faces/cyrille_beraud.jpeg
deleted file mode 100644
index 355d0359ed1aff19fad6377b8cb09e0472b37831..0000000000000000000000000000000000000000
Binary files a/jams-react-client/src/assets/img/faces/cyrille_beraud.jpeg and /dev/null differ
diff --git a/jams-react-client/src/assets/img/faces/jami.png b/jams-react-client/src/assets/img/faces/jami.png
new file mode 100644
index 0000000000000000000000000000000000000000..d845c9315365725f7ef717f3c296b60cbe3cb426
Binary files /dev/null and b/jams-react-client/src/assets/img/faces/jami.png differ
diff --git a/jams-react-client/src/assets/img/faces/larbi_gharib.jpeg b/jams-react-client/src/assets/img/faces/larbi_gharib.jpeg
deleted file mode 100644
index 3f4dd38069354b7de02c2c515a62701ac3592cfc..0000000000000000000000000000000000000000
Binary files a/jams-react-client/src/assets/img/faces/larbi_gharib.jpeg and /dev/null differ
diff --git a/jams-react-client/src/assets/img/faces/marc.jpg b/jams-react-client/src/assets/img/faces/marc.jpg
deleted file mode 100644
index b84f3f064daabb1f8b2c8c38f6694d7498682b19..0000000000000000000000000000000000000000
Binary files a/jams-react-client/src/assets/img/faces/marc.jpg and /dev/null differ
diff --git a/jams-react-client/src/assets/img/faces/no-profile-picture-old-2.png b/jams-react-client/src/assets/img/faces/no-profile-picture-old-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..339c74e40f9883fe2fc43283efa7a2afe2eca60f
Binary files /dev/null and b/jams-react-client/src/assets/img/faces/no-profile-picture-old-2.png differ
diff --git a/jams-react-client/src/assets/img/faces/no-profile-picture.png b/jams-react-client/src/assets/img/faces/no-profile-picture.png
new file mode 100644
index 0000000000000000000000000000000000000000..31543b0177943a0be79a64a626b0c2fbfc7258d2
Binary files /dev/null and b/jams-react-client/src/assets/img/faces/no-profile-picture.png differ
diff --git a/jams-react-client/src/assets/jss/material-dashboard-react/components/cardAvatarStyle.js b/jams-react-client/src/assets/jss/material-dashboard-react/components/cardAvatarStyle.js
index 2be7e5a3ed3a5dde6342d10f5d100447263413e9..422418760772d0e43d7f54dbdda5fd64132ec613 100644
--- a/jams-react-client/src/assets/jss/material-dashboard-react/components/cardAvatarStyle.js
+++ b/jams-react-client/src/assets/jss/material-dashboard-react/components/cardAvatarStyle.js
@@ -8,14 +8,14 @@ const cardAvatarStyle = {
     }
   },
   cardAvatarProfile: {
-    maxWidth: "130px",
-    maxHeight: "130px",
-    margin: "-50px auto 0",
+    maxWidth: "80px",
+    maxHeight: "80px",
+    margin: "-50px 10px 0",
     borderRadius: "50%",
     overflow: "hidden",
     padding: "0",
     boxShadow:
-      "0 16px 38px -12px rgba(" +
+      "0 6px 8px -12px rgba(" +
       hexToRgb(blackColor) +
       ", 0.56), 0 4px 25px 0px rgba(" +
       hexToRgb(blackColor) +
diff --git a/jams-react-client/src/assets/jss/material-dashboard-react/components/cardStyle.js b/jams-react-client/src/assets/jss/material-dashboard-react/components/cardStyle.js
index 1e17494abbaff1bdb6c06a7e34cdcf2c62d205fe..33bc10edc1da2a93e9b44eb19f7729c1aaa880a9 100644
--- a/jams-react-client/src/assets/jss/material-dashboard-react/components/cardStyle.js
+++ b/jams-react-client/src/assets/jss/material-dashboard-react/components/cardStyle.js
@@ -3,6 +3,7 @@ import {
   whiteColor,
   hexToRgb
 } from "assets/jss/material-dashboard-react.js";
+import { grayColor } from "assets/jss/material-dashboard-react";
 
 const cardStyle = {
   card: {
@@ -19,7 +20,24 @@ const cardStyle = {
     flexDirection: "column",
     minWidth: "0",
     wordWrap: "break-word",
-    fontSize: ".875rem"
+    fontSize: ".875rem",
+    "& ul": {
+      "list-style": "none",
+      padding: 0,
+      "& li" :{
+        display: 'flex',
+        alignItems: 'center',
+        "& svg": {
+          marginRight: "10px"
+        },
+        "& img": {
+          marginRight: "10px"
+        }
+      }
+    },
+    "&:hover": {
+      boxShadow: "0 1px 4px 0 rgba(" + hexToRgb(blackColor) + ", 0.54)",
+    }
   },
   cardPlain: {
     background: "transparent",
@@ -27,7 +45,7 @@ const cardStyle = {
   },
   cardProfile: {
     marginTop: "30px",
-    textAlign: "center"
+    textAlign: "left"
   },
   cardChart: {
     "& p": {
diff --git a/jams-react-client/src/auth.js b/jams-react-client/src/auth.js
index 810ad0cdea602dcfcb1f908b36032ad163f313d4..39c82ead1b293b70efa2a7e0335202213c999501 100644
--- a/jams-react-client/src/auth.js
+++ b/jams-react-client/src/auth.js
@@ -34,9 +34,7 @@ class Auth {
             }
             cb()
         }).catch((error) => {
-            //setErrorMessage(true);
-            console.log("Error: " + error);
-            cb()
+            cb(error)
         });
     }
 
@@ -57,7 +55,13 @@ class Auth {
             }
             cb()
         }).catch((error) => {
-            console.log("Error during API request on checkAdminAccountStatus: " + error)
+            if(error.response.status == 404){
+                this.admin = true
+            }
+            else{
+                console.log("Error during API request on checkAdminAccountStatus: " + error)
+            }
+            cb()
         });
     }
 
@@ -77,15 +81,20 @@ class Auth {
     }
 
     checkLastKnowStep(cb) {
-        axios(configApiCall(api_path_get_install_lastKnownStep, 'GET', null, null)).then((response) => {
-            this.uri = response.data['uri']
+        if(this.installed){
             this.authenticated = true
+            console.log("Auth: Server is already installed")
             cb()
-        }).catch((error) => {
-            console.log("Error during API request on checkLastKnowStep: " + error);
-            this.authenticated = false
-            cb()
-        })
+        }else{
+            axios(configApiCall(api_path_get_install_lastKnownStep, 'GET', null, null)).then((response) => {
+                this.uri = response.data['uri']
+                this.authenticated = true
+                cb()
+            }).catch((error) => {
+                console.log("Error during API request on checkLastKnowStep: " + error);
+                cb()
+            })
+        }
     }
 
     hasAdmin() {
diff --git a/jams-react-client/src/components/CaSetup/CaSetup.js b/jams-react-client/src/components/CaSetup/CaSetup.js
index 09226fb70401ee700a0d2f4d907bbe4d86326029..b3190eec3636a6b806dc3568f06b8c564b3261c1 100644
--- a/jams-react-client/src/components/CaSetup/CaSetup.js
+++ b/jams-react-client/src/components/CaSetup/CaSetup.js
@@ -12,7 +12,7 @@ import axios from 'axios';
 import configApiCall from '../../api'
 import { api_path_post_install_ca } from '../../globalUrls'
 import Select from "@material-ui/core/Select";
-import buildSelectMenuItems from "../../tools";
+import * as tool from "../../tools";
 import Input from "@material-ui/core/Input";
 import Typography from "@material-ui/core/Typography";
 
@@ -51,8 +51,8 @@ export default function CaSetup(props) {
         {value: 315569260000, label: "10 years"},
     ];
 
-    const certificateOptionsItems = buildSelectMenuItems(getCertificateOptions);
-    const validityPeriodsItems = buildSelectMenuItems(validityPeriods);
+    const certificateOptionsItems = tool.buildSelectMenuItems(getCertificateOptions);
+    const validityPeriodsItems = tool.buildSelectMenuItems(validityPeriods);
     const classes = useStyles();
 
     const [commonname, setCommonName] = React.useState("");
@@ -76,7 +76,7 @@ export default function CaSetup(props) {
             props.setError(true)
             props.setErrorMessage("An unknown error occurred while installing the CA. Please try again.");
         }
-        else if (data.status == 200){
+         else if (data.status == 200){
             auth.uri = '/api/install/auth';
             history.push('/');
         }
@@ -113,13 +113,15 @@ export default function CaSetup(props) {
         let jsonData = {};
         if(certificateOpt.value == 0){
             jsonData = {
-                'commonName': commonname,
-                'organizationalUnit': organizationUnit,
-                'organization': organization,
-                'city': city,
-                'state': state,
-                'country': country,
-                'lifetime': validityPeriod.value
+                'fields': {
+                    'commonName': commonname,
+                    'organizationalUnit': organizationUnit,
+                    'organization': organization,
+                    'city': city,
+                    'state': state,
+                    'country': country,
+                    'lifetime': validityPeriod.value
+                }
             }
         }
         else if(certificateOpt.value == 1){
@@ -136,7 +138,7 @@ export default function CaSetup(props) {
             console.log(response);
         }).catch((error)=>{
             props.setError(error);
-            console.log('Error creating admin account: ' + error );
+            console.log('Error installing CA Setup: ' + error );
         })
     }
     if(certificateOpt.value == 0){
diff --git a/jams-react-client/src/components/Grid/GridItem.js b/jams-react-client/src/components/Grid/GridItem.js
index 8072e19a0c45b9c299ca638ea7224f36520e2850..f7a82de03791f8c539f29ad38719d568e89283f4 100644
--- a/jams-react-client/src/components/Grid/GridItem.js
+++ b/jams-react-client/src/components/Grid/GridItem.js
@@ -7,10 +7,7 @@ import Grid from "@material-ui/core/Grid";
 
 const styles = {
   grid: {
-    padding: "0 15px !important",
-    "&:hover": {
-      backgroundColor: "hsla(0,0%,78%,.2)",
-    }
+    padding: "0 5px !important",
   }
 };
 
diff --git a/jams-react-client/src/components/IdentityManagement/IdentityManagement.js b/jams-react-client/src/components/IdentityManagement/IdentityManagement.js
index 16816abdb16167f6cba34ac89130912af515c60c..61da28f46b27d1a0b3fe83a8378637861246d72d 100644
--- a/jams-react-client/src/components/IdentityManagement/IdentityManagement.js
+++ b/jams-react-client/src/components/IdentityManagement/IdentityManagement.js
@@ -7,7 +7,7 @@ import { makeStyles } from '@material-ui/core/styles';
 import MuiAlert from '@material-ui/lab/Alert';
 import Select from '@material-ui/core/Select';
 
-import buildSelectMenuItems from '../../tools'
+import {buildSelectMenuItems} from '../../tools'
 
 import axios from 'axios';
 import configApiCall from '../../api'
@@ -51,7 +51,7 @@ export default function IdentityManagement(props) {
         {value: 1, label: "LDAP Server"},
         {value: 2, label: "Active Directory"},
     ];
-    
+
     const directoryTypesItems = buildSelectMenuItems(directoryTypes);
 
     const classes = useStyles();
@@ -76,7 +76,7 @@ export default function IdentityManagement(props) {
 
     /**
      * LDAP storage Config
-     * 
+     *
      */
     const ldapFiltersTypes = [
         {value: 0, label: "UID"},
@@ -93,7 +93,7 @@ export default function IdentityManagement(props) {
     const handleUseStartTLSChange = (event) => {
         setUseStartTLS(event.target.value)
     }
-    
+
     const handleNameServerChange = (event) => {
         setNameServerChecked(event.target.checked)
     }
@@ -122,7 +122,7 @@ export default function IdentityManagement(props) {
             "publicNameServer": "http://ns.jami.net",
             "publicNames": nameServerChecked
         };
-    
+
         authSource['type'] = 'LOCAL';
         authSource['localAuthSettings'] = settings;
         return authSource;
@@ -150,7 +150,7 @@ export default function IdentityManagement(props) {
         settings['fieldMappings']['extensionName'] = "PhoneNumberExtension";
         settings['fieldMappings']['o'] = "Organization";
         settings['fieldMappings']['uid'] = "Username";
-      
+
         authSource['type'] = 'LDAP';
         authSource['ldapSettings'] = settings;
         return authSource;
@@ -166,7 +166,7 @@ export default function IdentityManagement(props) {
         settings['realm'] = domainName
         settings['username'] = adminUsername
         settings['password'] = password
-    
+
         settings['fieldMappings'] = {};
         settings['fieldMappings']['sAMAccountName'] = "Username"
         settings['fieldMappings']['givenName'] = "FirstName";
@@ -179,7 +179,7 @@ export default function IdentityManagement(props) {
         settings['fieldMappings']['extensionName'] = "PhoneNumberExtension";
         settings['fieldMappings']['o'] = "Organization";
         settings['fieldMappings']['uid'] = "Username";
-    
+
         authSource['type'] = 'AD';
         authSource['activeDirectorySettings'] = settings;
         return authSource;
@@ -249,7 +249,7 @@ export default function IdentityManagement(props) {
     }
 
     return (
-            
+
             <form className={classes.form} noValidate onSubmit={handleSubmit}>
                 <Typography variant="h5" gutterBottom color="primary">Identity Management</Typography>
                 <Grid container spacing={3}>
@@ -263,7 +263,7 @@ export default function IdentityManagement(props) {
                         variant="outlined"
                         children={directoryTypesItems}
                         />
-                    </Grid>                    
+                    </Grid>
                 </Grid>
                 {returnForm()}
                 <Button
diff --git a/jams-react-client/src/components/ServerParameters/ServerParameters.js b/jams-react-client/src/components/ServerParameters/ServerParameters.js
index d178aff4066a8c2d1798927e102f1f86ed081ade..87e7c6675fa862fb24c539340100b2f4fc3a94a2 100644
--- a/jams-react-client/src/components/ServerParameters/ServerParameters.js
+++ b/jams-react-client/src/components/ServerParameters/ServerParameters.js
@@ -1,4 +1,5 @@
 import React from 'react';
+import { useHistory } from 'react-router-dom';
 import Avatar from '@material-ui/core/Avatar';
 import Button from '@material-ui/core/Button';
 import CssBaseline from '@material-ui/core/CssBaseline';
@@ -17,11 +18,12 @@ import CustomPopupState from '../CustomPopupState/CustomPopupState';
 import Select from '@material-ui/core/Select';
 import Input from '@material-ui/core/Input';
 
-import buildSelectMenuItems from "../../tools";
+import * as tool from "../../tools";
 
 import axios from 'axios';
 import configApiCall from '../../api'
 import {api_path_post_install_server} from '../../globalUrls'
+import auth from 'auth';
 
 const useStyles = makeStyles((theme) => ({
     paper: {
@@ -67,12 +69,12 @@ export default function ServerParameters(props) {
         {value: 315569520000, label: "10 Years"},
     ]
 
-    const certificateRevocationTypesItems = buildSelectMenuItems(certificateRevocationTypes);
-    const deviceLifetimeTypesItems = buildSelectMenuItems(deviceLifetimeTypes);
-    const userAccountLifetimeTypesItems = buildSelectMenuItems(userAccountLifetimeTypes);
+    const certificateRevocationTypesItems = tool.buildSelectMenuItems(certificateRevocationTypes);
+    const deviceLifetimeTypesItems = tool.buildSelectMenuItems(deviceLifetimeTypes);
+    const userAccountLifetimeTypesItems = tool.buildSelectMenuItems(userAccountLifetimeTypes);
 
     const classes = useStyles();
-    //const history = useHistory();
+    const history = useHistory();
     const [error, setError] = React.useState(props.error);
     const [domain, setDomain] = React.useState("");
     const [certificateRevocation, setCertificateRevocation] = React.useState(certificateRevocationTypes[0])
@@ -81,6 +83,22 @@ export default function ServerParameters(props) {
     const [sipConfigurationTemplate, setSIPCertificateTemplate] = React.useState(null);
     const [userlifeDisabled, setUserlifeDisabled] = React.useState(false);
 
+    React.useEffect(() => {
+        if(deviceLifetime.value <= userAccountLifetime.value){
+            setUserlifeDisabled(false);
+        }
+        else{
+            setUserlifeDisabled(true);
+        }
+    }, [deviceLifetime, userAccountLifetime]);
+
+    function callBackServerParameters(){
+        auth.installed = true
+        auth.authenticated = true
+        auth.admin = true
+        history.push('/admin');
+    }
+
     function handleSubmit(e) {
         e.preventDefault();
         let jsonData = {};
@@ -88,17 +106,17 @@ export default function ServerParameters(props) {
         if(domain.match(re)){
             jsonData = {
                 'serverDomain': domain,
-                'crlLifetime': certificateRevocation,
-                'deviceLifetime': deviceLifetime,
-                'userLifetime': userAccountLifetime,
+                'crlLifetime': certificateRevocation.value,
+                'deviceLifetime': deviceLifetime.value,
+                'userLifetime': userAccountLifetime.value,
                 'sipConfig': sipConfigurationTemplate,
                 'signingAlgorithm': "SHA512WITHRSA"
             }
             axios(configApiCall(api_path_post_install_server, "POST", jsonData, null)).then((response)=>{
-                console.log(response);
+                callBackServerParameters()
             }).catch((error)=>{
                 setError(error);
-                console.log('Error creating admin account: ' + error );
+                console.log('Error installin server parameters: ' + error );
             })
         }
         else{
@@ -109,35 +127,22 @@ export default function ServerParameters(props) {
     }
 
     const handleCertificateRevocationChange = (event) => {
-        setCertificateRevocation(event.target.value)
+        setCertificateRevocation(tool.retrieveArrayElement(event.target.value,certificateRevocationTypes))
     }
 
     const handleDeviceLifetimeChange = (event) => {
-        setDeviceLifetime(event.target.value)
-        if(parseInt(deviceLifetime) <= parseInt(userAccountLifetime)){
-            setUserlifeDisabled(false);
-        }
-        else{
-            setUserlifeDisabled(true);
-        }
+        setDeviceLifetime(tool.retrieveArrayElement(event.target.value, deviceLifetimeTypes));
     }
 
     const handleUserAccountLifetimeChange = (event) => {
-        setUserAccountLifetime(event.target.value)
-        if(parseInt(deviceLifetime) <= parseInt(userAccountLifetime)){
-            setUserlifeDisabled(false);
-        }
-        else{
-            setUserlifeDisabled(true);
-        }
-
+        setUserAccountLifetime(tool.retrieveArrayElement(event.target.value, userAccountLifetimeTypes));
     }
 
+
     const handleSipConfigurationTemplateChange = (event) => {
         setSIPCertificateTemplate(event.target.files[0])
     }
 
-
     return (
         <form className={classes.form} noValidate onSubmit={handleSubmit}>
             <Typography variant="h5" gutterBottom color="primary">Server Parameters</Typography>
@@ -160,7 +165,7 @@ export default function ServerParameters(props) {
             <Select
             labelId="certificate-revocation-select-label"
             fullWidth
-            value={certificateRevocation.id}
+            value={certificateRevocation.value}
             onChange={handleCertificateRevocationChange}
             variant="outlined"
             children={certificateRevocationTypesItems}
@@ -169,7 +174,7 @@ export default function ServerParameters(props) {
             <Select
             labelId="device-lifetime-select-label"
             fullWidth
-            value={deviceLifetime.id}
+            value={deviceLifetime.value}
             onChange={handleDeviceLifetimeChange}
             variant="outlined"
             children={deviceLifetimeTypesItems}
@@ -178,9 +183,9 @@ export default function ServerParameters(props) {
             <Select
             labelId="user-account-lifetime-select-label"
             fullWidth
-            value={userAccountLifetime.id}
+            value={userAccountLifetime.value}
             onChange={handleUserAccountLifetimeChange}
-            disabled={userlifeDisabled}
+            isDisabled={userlifeDisabled}
             variant="outlined"
             children={userAccountLifetimeTypesItems}
             />
diff --git a/jams-react-client/src/configured.route.js b/jams-react-client/src/configured.route.js
index 0e10c355082a884dd0311cb70086b1745b20794f..b2e1265a455d10237c8138a7424ef541dca3d8ad 100644
--- a/jams-react-client/src/configured.route.js
+++ b/jams-react-client/src/configured.route.js
@@ -4,6 +4,7 @@ import { Route, Redirect } from 'react-router-dom'
 import auth from './auth'
 import SignUp from "layouts/SignUp";
 import SignIn from "layouts/SignIn";
+import Admin from 'layouts/Admin';
 
 export const ConfiguredRoute = ({ component: Component, ...rest }) => {
     return (
@@ -26,7 +27,13 @@ export const ConfiguredRoute = ({ component: Component, ...rest }) => {
                         }
                         
                     } else{
-                        return <SignIn />
+                        if(auth.isAuthenticated()){
+                            return <Admin />
+                        }
+                        else {
+                            return <SignIn />
+                        }
+
                     }
                 } else {
                     return <SignUp step={0}/>
diff --git a/jams-react-client/src/layouts/SignIn.js b/jams-react-client/src/layouts/SignIn.js
index a25a71f275f8d5cee8ba8966575ed86e6d6973b6..2eb818404ca8cadfc1572905dc62fb2796937e94 100644
--- a/jams-react-client/src/layouts/SignIn.js
+++ b/jams-react-client/src/layouts/SignIn.js
@@ -72,7 +72,13 @@ export default function SignIn(props) {
         auth.login(jsonData, () => {
             if(auth.authenticated && auth.access_token != ""){
                 auth.checkLastKnowStep(()=>{
-                    history.push('/');
+                    if(auth.isInstalled){
+                        history.push('/admin');
+                    }
+                    else{
+                        history.push('/');
+                    }
+
                 })
             }else{
                 setError(true)
diff --git a/jams-react-client/src/layouts/SignUp.js b/jams-react-client/src/layouts/SignUp.js
index ae0c522d5219758255f7890d9e4a76e0d4c7d9af..feba0272e77f56dd3828e8d9e15c1a568535ebcb 100644
--- a/jams-react-client/src/layouts/SignUp.js
+++ b/jams-react-client/src/layouts/SignUp.js
@@ -42,12 +42,6 @@ function Copyright() {
 }
 
 const useStyles = makeStyles((theme) => ({
-    paper: {
-        marginTop: theme.spacing(8),
-        display: 'flex',
-        flexDirection: 'column',
-        alignItems: 'center',
-    },
     avatar: {
         margin: theme.spacing(1),
         backgroundColor: theme.palette.secondary.main,
diff --git a/jams-react-client/src/tools.js b/jams-react-client/src/tools.js
index 0f0a7075fe343bceae7043c764085afc55f58aa8..3c6fe215281797df5e9e6385aab7345c79674d6b 100644
--- a/jams-react-client/src/tools.js
+++ b/jams-react-client/src/tools.js
@@ -1,11 +1,33 @@
 import React from 'react';
 import MenuItem from '@material-ui/core/MenuItem';
 
-function buildSelectMenuItems(elements) {
+export function buildSelectMenuItems(elements) {
     return elements.map((d) =>
         <MenuItem value={d.value}>{d.label}</MenuItem>
     )
 }
 
+// read file content
+export function readSingleFile(evt, fieldContents) {
+    var f = evt.target.files[0];
+    if (f) {
+        var r = new FileReader();
+        r.onload = function (e) {
+            var contents = e.target.result;
+            fieldContents=contents;
+        }
+        console.log(fieldContents);
+        r.readAsText(f);
+        return fieldContents
+    }
+}
+
+export function retrieveArrayElement(value, elements){
+    for(let i=0; i < elements.length;i++){
+        if(elements[i].value === value){
+            return elements[i];
+        }
+    }
+}
 
-export default buildSelectMenuItems;
\ No newline at end of file
+export default {buildSelectMenuItems, readSingleFile, retrieveArrayElement};
\ No newline at end of file
diff --git a/jams-react-client/src/views/Blueprints/Blueprints.js b/jams-react-client/src/views/Blueprints/Blueprints.js
index 49c5e8e8da036d7bcc37456ad5e3d685005d5c24..43996fab325d6629cdc75fca366305cfa4ecd285 100644
--- a/jams-react-client/src/views/Blueprints/Blueprints.js
+++ b/jams-react-client/src/views/Blueprints/Blueprints.js
@@ -13,8 +13,7 @@ import CardAvatar from "components/Card/CardAvatar.js";
 import CardBody from "components/Card/CardBody.js";
 import CardFooter from "components/Card/CardFooter.js";
 
-import avatar1 from "assets/img/faces/cyrille_beraud.jpeg";
-import avatar2 from "assets/img/faces/christophe_villemaire.jpeg";
+import noProfilePicture from "assets/img/faces/no-profile-picture.png";
 
 const styles = {
     cardCategoryWhite: {
@@ -46,7 +45,7 @@ export default function Blueprints() {
                     <Card profile>
                         <CardAvatar profile>
                             <a href="#pablo" onClick={e => e.preventDefault()}>
-                                <img src={avatar1} alt="..." />
+                                <img src={noProfilePicture} alt="..." />
                             </a>
                         </CardAvatar>
                         <CardBody profile>
@@ -65,7 +64,7 @@ export default function Blueprints() {
                     <Card profile>
                         <CardAvatar profile>
                             <a href="#pablo" onClick={e => e.preventDefault()}>
-                                <img src={avatar2} alt="..." />
+                                <img src={noProfilePicture} alt="..." />
                             </a>
                         </CardAvatar>
                         <CardBody profile>
diff --git a/jams-react-client/src/views/Groups/Groups.js b/jams-react-client/src/views/Groups/Groups.js
index 431766275db7531e5b2c35d32760b960374e9e3a..851a83e6872fbddb242b4e49d7f98217d3998853 100644
--- a/jams-react-client/src/views/Groups/Groups.js
+++ b/jams-react-client/src/views/Groups/Groups.js
@@ -13,8 +13,7 @@ import CardAvatar from "components/Card/CardAvatar.js";
 import CardBody from "components/Card/CardBody.js";
 import CardFooter from "components/Card/CardFooter.js";
 
-import avatar1 from "assets/img/faces/cyrille_beraud.jpeg";
-import avatar2 from "assets/img/faces/christophe_villemaire.jpeg";
+import noProfilePicture from "assets/img/faces/no-profile-picture.png";
 
 const styles = {
     cardCategoryWhite: {
@@ -46,7 +45,7 @@ export default function Groups() {
                     <Card profile>
                         <CardAvatar profile>
                             <a href="#pablo" onClick={e => e.preventDefault()}>
-                                <img src={avatar1} alt="..." />
+                                <img src={noProfilePicture} alt="..." />
                             </a>
                         </CardAvatar>
                         <CardBody profile>
@@ -65,7 +64,7 @@ export default function Groups() {
                     <Card profile>
                         <CardAvatar profile>
                             <a href="#pablo" onClick={e => e.preventDefault()}>
-                                <img src={avatar2} alt="..." />
+                                <img src={noProfilePicture} alt="..." />
                             </a>
                         </CardAvatar>
                         <CardBody profile>
diff --git a/jams-react-client/src/views/UserProfile/UserProfile.js b/jams-react-client/src/views/UserProfile/UserProfile.js
index bff7f37bf882809235081353eb01ad9b5586f9c2..12f4131a310502fa02cb6ade74d3b6130f5a7bb5 100755
--- a/jams-react-client/src/views/UserProfile/UserProfile.js
+++ b/jams-react-client/src/views/UserProfile/UserProfile.js
@@ -22,10 +22,7 @@ import Tab from '@material-ui/core/Tab';
 import Typography from '@material-ui/core/Typography';
 import Box from '@material-ui/core/Box';
 
-import avatar from "assets/img/faces/cyrille_beraud.jpeg";
-
-import avatar1 from "assets/img/faces/larbi_gharib.jpeg";
-import avatar2 from "assets/img/faces/christophe_villemaire.jpeg";
+import noProfilePicture from "assets/img/faces/no-profile-picture.png";
 
 import {
   infoColor
@@ -229,7 +226,7 @@ export default function UserProfile() {
             <Card profile>
               <CardAvatar profile>
                 <a href="#pablo" onClick={e => e.preventDefault()}>
-                  <img src={avatar} alt="..." />
+                  <img src={noProfilePicture} alt="..." />
                 </a>
               </CardAvatar>
               <CardBody profile>
@@ -274,7 +271,7 @@ export default function UserProfile() {
             <Card profile>
               <CardAvatar profile>
                 <a href="#pablo" onClick={e => e.preventDefault()}>
-                  <img src={avatar1} alt="..." />
+                  <img src={noProfilePicture} alt="..." />
                 </a>
               </CardAvatar>
               <CardBody profile>
@@ -293,7 +290,7 @@ export default function UserProfile() {
             <Card profile>
               <CardAvatar profile>
                 <a href="#pablo" onClick={e => e.preventDefault()}>
-                  <img src={avatar2} alt="..." />
+                  <img src={noProfilePicture} alt="..." />
                 </a>
               </CardAvatar>
               <CardBody profile>
diff --git a/jams-react-client/src/views/Users/Users.js b/jams-react-client/src/views/Users/Users.js
index dd055a29801d1e1745d9bdf7e9dc5a7b00365b8b..bf2a4d0e0e61bcf6a745d80f42a8d5972d8ba973 100644
--- a/jams-react-client/src/views/Users/Users.js
+++ b/jams-react-client/src/views/Users/Users.js
@@ -14,16 +14,21 @@ import CardAvatar from "components/Card/CardAvatar.js";
 import CardBody from "components/Card/CardBody.js";
 import CardFooter from "components/Card/CardFooter.js";
 import UserProfile from "views/UserProfile/UserProfile.js"
+import PersonIcon from '@material-ui/icons/Person';
+import PermIdentityIcon from '@material-ui/icons/PermIdentity';
+import PhoneOutlinedIcon from '@material-ui/icons/PhoneOutlined';
+import BusinessOutlinedIcon from '@material-ui/icons/BusinessOutlined';
 
-import ajaxApiCall from "api.js";
-
-import { api_path_post_auth_login, api_path_get_user_directory_search } from "globalUrls";
+import MailOutlineIcon from '@material-ui/icons/MailOutline';
+import axios from "axios";
+import configApiCall from "api.js";
+import { api_path_get_user_directory_search } from "globalUrls";
 
 import AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';
 import KeyboardReturnIcon from '@material-ui/icons/KeyboardReturn';
 
-import avatar1 from "assets/img/faces/cyrille_beraud.jpeg";
-import avatar2 from "assets/img/faces/christophe_villemaire.jpeg";
+import jami from "assets/img/faces/jami.png";
+import noProfilePicture from "assets/img/faces/no-profile-picture.png";
 
 const styles = {
     cardCategoryWhite: {
@@ -48,11 +53,16 @@ const useStyles = makeStyles(styles);
 
 export default function Users() {
     const classes = useStyles();
-
+    const [users, setUsers] = React.useState([])
 
     useEffect(() => {
-
-    });
+        axios(configApiCall(api_path_get_user_directory_search, 'GET', {"queryString":"*"}, null)).then((response)=>{
+            setUsers(response.data)
+        }   
+        ).catch((error) =>{
+            console.log(error);
+        });
+    }, []);
 
     const [selectedProfile, setSelectedProfile] = useState(false);
 
@@ -65,6 +75,15 @@ export default function Users() {
         setSelectedProfile(false);
     }
 
+    function dataURLtoFile(dataurl, filename) {
+        var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
+            bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
+        while(n--){
+            u8arr[n] = bstr.charCodeAt(n);
+        }
+        return new File([u8arr], filename, {type:mime});
+    }
+
     if (selectedProfile) {
         return (
             <div>
@@ -77,43 +96,31 @@ export default function Users() {
     } else {
         return (
             <div>
-                <Button variant="contained" color="primary" href="#contained-buttons">
-                    <AddCircleOutlineIcon /> Create user
-                </Button>
-                <br></br><br></br>
                 <GridContainer>
-                    <GridItem xs={12} sm={12} md={2}>
-                        <a href="#" onClick={redirectToUserProfile}>
-                            <Card profile>
-                                <CardAvatar profile>
-                                    <img src={avatar1} alt="..." />
-                                </CardAvatar>
-                                <CardBody profile>
-                                    <h6 className={classes.cardCategory}>CEO</h6>
-                                    <h4 className={classes.cardTitle}>Cyrille Béraud</h4>
-                                    <p className={classes.description}>
-                                        13 devices
-                                </p>
-                                </CardBody>
-                            </Card>
-                        </a>
-                    </GridItem>
-                    <GridItem xs={12} sm={12} md={2}>
-                        <a href="#" onClick={redirectToUserProfile}>
-                            <Card profile>
-                                <CardAvatar profile>
-                                    <img src={avatar2} alt="..." />
-                                </CardAvatar>
-                                <CardBody profile>
-                                    <h6 className={classes.cardCategory}>CEO</h6>
-                                    <h4 className={classes.cardTitle}>Christophe Villemer</h4>
-                                    <p className={classes.description}>
-                                        10 devices
-                                </p>
-                                </CardBody>
-                            </Card>
-                        </a>
+                    <GridItem xs={12} sm={12} md={12}>
+                        <Button variant="contained" color="primary" href="#contained-buttons">
+                        <AddCircleOutlineIcon /> Create user
+                        </Button>
                     </GridItem>
+                    {
+                    users.map(user => 
+                    <GridItem xs={12} sm={12} md={2} key={user.username}>
+                            <a href="#" onClick={redirectToUserProfile}>
+                                <Card profile>
+                                    <CardBody profile>
+                                        <CardAvatar profile>
+                                            <img src={user.profilePicture ? ('data:image/png;base64, ' + user.profilePicture) : noProfilePicture} alt="..." />
+                                        </CardAvatar>
+                                        <h4 className={classes.cardTitle}>{user.firstName} {user.lastName}</h4>    
+                                        <ul>
+                                            <li><img src={jami} width="20" alt="Jami" /> {user.username}</li>
+                                            <li><BusinessOutlinedIcon fontSize='small' /> {user.organization ? user.organization : 'No organization'}</li>
+                                        </ul>
+                                    </CardBody>
+                                </Card>
+                            </a>
+                    </GridItem>)
+                    }
                 </GridContainer>
             </div>
         );