diff --git a/opentech/apply/users/urls.py b/opentech/apply/users/urls.py
index dd1ea0b17faaa2bbcf0bbafe3bd09caaa813e835..76e5050bf609c612278e21afceb5e2db07b4d86a 100644
--- a/opentech/apply/users/urls.py
+++ b/opentech/apply/users/urls.py
@@ -22,6 +22,16 @@ urlpatterns = [
     # Log out
     url(r'^logout/$', auth_views.LogoutView.as_view(next_page='/'), name='logout'),
 
+    # Password change
+    url(
+        r'^password/$',
+        auth_views.PasswordChangeView.as_view(
+            template_name="users/change_password.html",
+            success_url=reverse_lazy('users:account')
+        ),
+        name='password_change',
+    ),
+
     # Password reset
     url(r'^reset/$', auth_views.PasswordResetView.as_view(
         template_name='users/password_reset/form.html',
diff --git a/opentech/apply/users/views.py b/opentech/apply/users/views.py
index 004fa0aa64e8e2ca9f5d80ae2dd6d72e7620f227..4ffcd7a58173a0735a541fc2ea92cd0ecae100a5 100644
--- a/opentech/apply/users/views.py
+++ b/opentech/apply/users/views.py
@@ -1,8 +1,12 @@
 from django.contrib.auth.decorators import login_required
-from django.template.response import TemplateResponse
+from django.shortcuts import render
 
+from wagtail.wagtailadmin.views.account import password_management_enabled
 
 @login_required(login_url='/user/login')
 def account(request):
     "Account page placeholder view"
-    return TemplateResponse(request, 'users/account.html', {})
+
+    return render(request, 'users/account.html', {
+        'show_change_password': password_management_enabled() and request.user.has_usable_password(),
+    })
diff --git a/opentech/users/templates/users/account.html b/opentech/users/templates/users/account.html
index 76ce008a2256604f79007d0cdfadcf3a2044954f..725d615316bb18d3700f3dc45ed61a22253c7ad1 100644
--- a/opentech/users/templates/users/account.html
+++ b/opentech/users/templates/users/account.html
@@ -1,7 +1,12 @@
 {% extends 'base.html' %}
+{% load i18n %}
 
 {% block title %}Account{% endblock %}
 
 {% block content %}
 <h2>Welcome {{ user }}</h2>
+
+{% if show_change_password %}
+    <a href="{% url 'users:password_change' %}">{% trans "Change password" %}</a>
+{% endif %}
 {% endblock %}
diff --git a/opentech/users/templates/users/change_password.html b/opentech/users/templates/users/change_password.html
new file mode 100644
index 0000000000000000000000000000000000000000..efde07945c4e191b54424e3b0ee5a9e3da9826b1
--- /dev/null
+++ b/opentech/users/templates/users/change_password.html
@@ -0,0 +1,36 @@
+{% extends 'base.html' %}
+{% load i18n %}
+
+{% block title %}{% trans "Change password" %}{% endblock %}
+
+
+{% block content %}
+    {% if form.non_field_errors %}
+        <div class="messages">
+            <ul>
+                {% for error in form.non_field_errors %}
+                <li class="error">{{ error }}</li>
+                {% endfor %}
+            </ul>
+        </div>
+    {% endif %}
+
+    {% if form.errors %}
+        <div class="messages">
+            {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+
+        </div>
+    {% endif %}
+
+    <form action="{% url 'users:password_change' %}" method="POST" novalidate>
+        {% csrf_token %}
+
+        {% for field in form %}
+         {{ field.errors }}
+         {{ field.label_tag }}
+         {{ field }}
+        {% endfor %}
+
+        <button type="submit">{% trans 'Reset password' %}</button>
+    </form>
+{% endblock %}