public UserPicturePanel(final String id, final User usr) {
    super(id);
    this.user = usr;

    // Form for uploading profile images
    fileUploadForm = new Form<>("fileUploadForm");
    fileUploadForm.setOutputMarkupId(true);

    // User image
    userPhoto =
        new NonCachingImage("userImage", user.getProfilePicture(User.PictureDimensions.Large));
    userPhoto.setOutputMarkupId(true);
    fileUploadForm.add(userPhoto);
    uploadField = new FileUploadField("fileUploadField");
    fileUploadForm.add(uploadField.setOutputMarkupId(true));
    fileUploadForm.setMaxSize(Bytes.kilobytes(MAX_SIZE));
    fileUploadForm.add(new Label("max", Model.of(Bytes.kilobytes(MAX_SIZE))));
    fileUploadForm.add(
        new AjaxSubmitLink("submit") {

          private static final long serialVersionUID = 1L;

          @Override
          protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            // Check whether an image has been provided to be uploaded
            FileUpload fileUpload = uploadField.getFileUpload();

            if (fileUpload != null) {
              try {
                uploadHelper.processUserFileUpload(fileUpload, user);
                userPhoto.setImageResource(user.getProfilePicture(User.PictureDimensions.Large));
                uploadField.clearInput();
                target.add(uploadField);
                target.add(userPhoto);
              } catch (IOException e) {
                getPage().error(e.getLocalizedMessage());
                target.add(((BasePage) getPage()).getFeedbackPanel());
              }
            }
          }
        });

    fileUploadForm.add(
        new AjaxSubmitLink("clear") {

          @Override
          protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            uploadHelper.removeUserPictures(user);
            target.add(userPhoto);
          }
        });
    fileUploadForm.add(new UploadProgressBar("progress", fileUploadForm, uploadField));
    add(fileUploadForm);

    fileUploadForm.add(
        new AjaxSubmitLink("uploadGravatar") {

          /** */
          private static final long serialVersionUID = 1L;

          @Override
          protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            // Attempt to download image from gravatar
            try {
              byte[] rawImage = gv.download(user.getMail());
              if (rawImage != null) {
                uploadHelper.processUserFileUpload(rawImage, user);
                userPhoto.setImageResource(user.getProfilePicture(User.PictureDimensions.Large));
                uploadField.clearInput();
                target.add(uploadField);
                target.add(userPhoto);
              }
            } catch (IOException e) {
              uploadHelper.removeUserPictures(user);
              target.add(userPhoto);
            }
          }
        });
  }