diff --git a/client/src/app/account/account.component.html b/client/src/app/account/account.component.html
new file mode 100644
index 000000000..ad8f690bd
--- /dev/null
+++ b/client/src/app/account/account.component.html
@@ -0,0 +1,27 @@
+
Account
+
+{{ information }}
+{{ error }}
+
+
diff --git a/client/src/app/account/account.component.ts b/client/src/app/account/account.component.ts
new file mode 100644
index 000000000..5c42103f8
--- /dev/null
+++ b/client/src/app/account/account.component.ts
@@ -0,0 +1,45 @@
+import { Control, ControlGroup, Validators } from '@angular/common';
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+
+import { AccountService } from './account.service';
+
+@Component({
+ selector: 'my-account',
+ template: require('./account.component.html'),
+ providers: [ AccountService ]
+})
+
+export class AccountComponent implements OnInit {
+ changePasswordForm: ControlGroup;
+ information: string = null;
+ error: string = null;
+
+ constructor(
+ private accountService: AccountService,
+ private router: Router
+ ) {}
+
+ ngOnInit() {
+ this.changePasswordForm = new ControlGroup({
+ newPassword: new Control('', Validators.compose([ Validators.required, Validators.minLength(6) ])),
+ newConfirmedPassword: new Control('', Validators.compose([ Validators.required, Validators.minLength(6) ])),
+ });
+ }
+
+ changePassword(newPassword: string, newConfirmedPassword: string) {
+ this.information = null;
+ this.error = null;
+
+ if (newPassword !== newConfirmedPassword) {
+ this.error = 'The new password and the confirmed password do not correspond.';
+ return;
+ }
+
+ this.accountService.changePassword(newPassword).subscribe(
+ ok => this.information = 'Password updated.',
+
+ err => this.error = err
+ );
+ }
+}
diff --git a/client/src/app/account/account.routes.ts b/client/src/app/account/account.routes.ts
new file mode 100644
index 000000000..e348c6ebe
--- /dev/null
+++ b/client/src/app/account/account.routes.ts
@@ -0,0 +1,5 @@
+import { AccountComponent } from './account.component';
+
+export const AccountRoutes = [
+ { path: 'account', component: AccountComponent }
+];
diff --git a/client/src/app/account/account.service.ts b/client/src/app/account/account.service.ts
new file mode 100644
index 000000000..19b4e0624
--- /dev/null
+++ b/client/src/app/account/account.service.ts
@@ -0,0 +1,19 @@
+import { Injectable } from '@angular/core';
+
+import { AuthHttp, AuthService } from '../shared';
+
+@Injectable()
+export class AccountService {
+ private static BASE_USERS_URL = '/api/v1/users/';
+
+ constructor(private authHttp: AuthHttp, private authService: AuthService) { }
+
+ changePassword(newPassword: string) {
+ const url = AccountService.BASE_USERS_URL + this.authService.getUser().id;
+ const body = {
+ password: newPassword
+ };
+
+ return this.authHttp.put(url, body);
+ }
+}
diff --git a/client/src/app/account/index.ts b/client/src/app/account/index.ts
new file mode 100644
index 000000000..7445003fd
--- /dev/null
+++ b/client/src/app/account/index.ts
@@ -0,0 +1,2 @@
+export * from './account.component';
+export * from './account.routes';
diff --git a/client/src/app/app.component.html b/client/src/app/app.component.html
index f2acffea4..ea4b31421 100644
--- a/client/src/app/app.component.html
+++ b/client/src/app/app.component.html
@@ -18,9 +18,20 @@