diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js
index 9e6901962c6b3354581bd38491048c64bc70331a..846162a5a74c59411ae398e66c1319c1dbbcd671 100644
--- a/app/assets/javascripts/dispatcher.js
+++ b/app/assets/javascripts/dispatcher.js
@@ -126,6 +126,7 @@
           new UsersSelect();
           break;
         case 'projects:project_members:index':
+          new MemberExpirationDate();
           new ProjectMembers();
           new UsersSelect();
           break;
diff --git a/app/assets/javascripts/member_expiration_date.js b/app/assets/javascripts/member_expiration_date.js
new file mode 100644
index 0000000000000000000000000000000000000000..fdcf3b115b7ca94285267325ae55c0778684fd0b
--- /dev/null
+++ b/app/assets/javascripts/member_expiration_date.js
@@ -0,0 +1,32 @@
+(function() {
+  // Add datepickers to all `js-access-expiration-date` elements. If those elements are
+  // children of an element with the `clearable-input` class, and have a sibling
+  // `js-clear-input` element, then show that element when there is a value in the
+  // datepicker, and make clicking on that element clear the field.
+  //
+  this.MemberExpirationDate = function() {
+    $('.js-access-expiration-date').each(function(i, element) {
+      var expirationDateInput = $(element);
+
+      function toggleClearInput() {
+        expirationDateInput.parent().toggleClass('has-value', !!expirationDateInput.val());
+      }
+
+      expirationDateInput.datepicker({
+        dateFormat: 'yy-mm-dd',
+        minDate: 1,
+        onSelect: toggleClearInput
+      });
+
+      expirationDateInput.on('blur', toggleClearInput);
+
+      toggleClearInput();
+
+      expirationDateInput.next('.js-clear-input').on('click', function(event) {
+        event.preventDefault();
+        expirationDateInput.datepicker('setDate', null);
+        toggleClearInput();
+      });
+    });
+  };
+}).call(this);
diff --git a/app/assets/javascripts/project_members.js b/app/assets/javascripts/project_members.js
index 8171fa8d533520399c50c5ff55adef434decb0f0..78f7b48bc7d726d043ea51a09c27bd04c79b17ba 100644
--- a/app/assets/javascripts/project_members.js
+++ b/app/assets/javascripts/project_members.js
@@ -4,17 +4,7 @@
       $('li.project_member').bind('ajax:success', function() {
         return $(this).fadeOut();
       });
-
-      $('.js-project-members-page').on('focus', '.js-access-expiration-date', function() {
-        $(this).datepicker({
-          dateFormat: 'yy-mm-dd',
-          minDate: 1
-        });
-      });
     }
-
     return ProjectMembers;
-
   })();
-
 }).call(this);
diff --git a/app/views/projects/project_members/_new_project_member.html.haml b/app/views/projects/project_members/_new_project_member.html.haml
index 0545ed07d624f3dd0b1ff9d074d91bbacc9759f9..96d05c7fd655b810d1ba39701c1a9e440c8ce0dc 100644
--- a/app/views/projects/project_members/_new_project_member.html.haml
+++ b/app/views/projects/project_members/_new_project_member.html.haml
@@ -15,11 +15,11 @@
         %strong= link_to "here", help_page_path("user/permissions"), class: "vlink"
 
   .form-group
-    = label_tag :expires_at, 'Access expiration date', class: 'control-label'
+    = f.label :expires_at, 'Access expiration date', class: 'control-label'
     .col-sm-10
-      = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Select access expiration date'
-      .help-block
-        Leave it empty if you do not want this user's access to expire.
+      .clearable-input
+        = text_field_tag :expires_at, nil, class: 'form-control js-access-expiration-date', placeholder: 'Select access expiration date'
+        %i.clear-icon.js-clear-input
 
   .form-actions
     = f.submit 'Add users to project', class: "btn btn-create"
diff --git a/app/views/shared/members/_member.html.haml b/app/views/shared/members/_member.html.haml
index 7dde9442e24e7a58047fa59af05f499dc5fc98c1..c959c41b221a4bea26f85ce1bd8a7973b9faa0c2 100644
--- a/app/views/shared/members/_member.html.haml
+++ b/app/views/shared/members/_member.html.haml
@@ -77,11 +77,17 @@
   - if show_roles
     .edit-member.hide.js-toggle-content
       %br
-      = form_for member, remote: true do |f|
-        .prepend-top-10
-          = f.select :access_level, options_for_select(member.class.access_level_roles, member.access_level), {}, class: 'form-control'
+      = form_for member, remote: true, html: { class: 'form-horizontal' }  do |f|
+        .form-group
+          = label_tag :expires_at, 'Project access', class: 'control-label'
+          .col-sm-10
+            = f.select :access_level, options_for_select(member.class.access_level_roles, member.access_level), {}, class: 'form-control'
         - if member.is_a?(ProjectMember)
-          .prepend-top-10
-            = f.text_field :expires_at, class: 'form-control js-access-expiration-date', placeholder: 'Access expiration date', id: "member_expires_at_#{member.id}"
+          .form-group
+            = label_tag :expires_at, 'Access expiration date', class: 'control-label'
+            .col-sm-10
+              .clearable-input
+                = f.text_field :expires_at, class: 'form-control js-access-expiration-date', placeholder: 'Select access expiration date', id: "member_expires_at_#{member.id}"
+                %i.clear-icon.js-clear-input
         .prepend-top-10
           = f.submit 'Save', class: 'btn btn-save btn-sm'