diff --git a/packages/component-faraday-ui/src/AuthorCard.js b/packages/component-faraday-ui/src/AuthorCard.js
index 2ace7fa985268bb535cdeff598a1a5ac7a030433..36f74f2d439a408fe6024014e11d409564fec1d4 100644
--- a/packages/component-faraday-ui/src/AuthorCard.js
+++ b/packages/component-faraday-ui/src/AuthorCard.js
@@ -4,14 +4,7 @@ import styled from 'styled-components'
 import { th } from '@pubsweet/ui-toolkit'
 import { required } from 'xpub-validators'
 import { reduxForm, Field } from 'redux-form'
-import {
-  Menu,
-  H3,
-  ValidatedField,
-  TextField,
-  Checkbox,
-  Spinner,
-} from '@pubsweet/ui'
+import { H3, ValidatedField, TextField, Checkbox, Spinner } from '@pubsweet/ui'
 import {
   compose,
   withState,
@@ -20,7 +13,7 @@ import {
   setDisplayName,
 } from 'recompose'
 
-import { withCountries } from 'pubsweet-component-faraday-ui'
+import { MenuCountry } from 'pubsweet-component-faraday-ui'
 import { Tag, Label, Row, Item, PersonInfo, IconButton, OpenModal } from './'
 import { validators } from './helpers'
 
@@ -129,7 +122,6 @@ const AuthorTitle = ({
 
 // #region AuthorEdit
 const AuthorEdit = ({
-  countries,
   author,
   editMode,
   listIndex,
@@ -196,7 +188,7 @@ const AuthorEdit = ({
         <Label required>Country</Label>
         <ValidatedField
           component={input => (
-            <Menu {...input} options={countries} placeholder="Please select" />
+            <MenuCountry {...input} placeholder="Please select" />
           )}
           data-test-id="author-card-country"
           name="country"
@@ -208,7 +200,6 @@ const AuthorEdit = ({
 // #endregion
 
 const EnhancedAuthorEdit = compose(
-  withCountries,
   withProps(({ author }) => ({
     initialValues: author,
   })),
diff --git a/packages/component-faraday-ui/src/InviteReviewers.js b/packages/component-faraday-ui/src/InviteReviewers.js
index 7c93ebb316f9a1d7a10c664548a6ee94c6864cdd..7f07b70cba1b4e7944aea14142d5bcd1632a1fad 100644
--- a/packages/component-faraday-ui/src/InviteReviewers.js
+++ b/packages/component-faraday-ui/src/InviteReviewers.js
@@ -5,7 +5,9 @@ import { reduxForm } from 'redux-form'
 import { th } from '@pubsweet/ui-toolkit'
 import { required } from 'xpub-validators'
 import { withModal } from 'pubsweet-component-modal/src/components'
-import { Button, H4, Menu, TextField, ValidatedField } from '@pubsweet/ui'
+import { Button, H4, TextField, ValidatedField } from '@pubsweet/ui'
+
+import { MenuCountry } from 'pubsweet-component-faraday-ui'
 
 import {
   Row,
@@ -15,10 +17,9 @@ import {
   ItemOverrideAlert,
   withFetching,
   validators,
-  withCountries,
 } from '../'
 
-const InviteReviewers = ({ countries, handleSubmit, reset }) => (
+const InviteReviewers = ({ handleSubmit, reset }) => (
   <Root>
     <Row justify="space-between" mb={2}>
       <H4>Invite reviewer</H4>
@@ -82,7 +83,9 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
       <ItemOverrideAlert vertical>
         <Label required>Country</Label>
         <ValidatedField
-          component={input => <Menu options={countries} {...input} />}
+          component={input => (
+            <MenuCountry {...input} placeholder="Please select" />
+          )}
           name="country"
           validate={[required]}
         />
@@ -93,7 +96,6 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
 
 export default compose(
   withFetching,
-  withCountries,
   withModal(({ isFetching, modalKey }) => ({
     modalKey,
     isFetching,
diff --git a/packages/component-faraday-ui/src/MenuCountry.js b/packages/component-faraday-ui/src/MenuCountry.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ca9f618bb2612ebdf04dea4a5c0e781ba2a39ad
--- /dev/null
+++ b/packages/component-faraday-ui/src/MenuCountry.js
@@ -0,0 +1,81 @@
+import React from 'react'
+import { Menu } from '@pubsweet/ui'
+import { startsWith, toLower, get } from 'lodash'
+import { compose, withState, withHandlers } from 'recompose'
+import styled from 'styled-components'
+import { th } from '@pubsweet/ui-toolkit'
+
+import { withCountries } from 'pubsweet-component-faraday-ui'
+
+const filteredCountries = (countries, userInput) =>
+  countries.filter(o => startsWith(toLower(o.label), toLower(userInput)))
+
+const firstFilteredCountry = props =>
+  filteredCountries(props.countries, props.userInput)[0]
+
+const CustomOpener = ({
+  selected,
+  userInput,
+  toggleMenu,
+  placeholder,
+  optionLabel,
+  onChange,
+  onEnter,
+}) => (
+  <Input
+    onChange={onChange}
+    onClick={toggleMenu}
+    onKeyUp={onEnter}
+    placeholder={selected ? optionLabel(selected) : placeholder}
+    value={userInput}
+  />
+)
+
+const MenuCountry = ({ countries = [], ...input }) => (
+  <Menu
+    {...input}
+    options={filteredCountries(countries, input.userInput)}
+    placeholder="Please select"
+    renderOpener={CustomOpener}
+  />
+)
+
+const enhance = compose(
+  withCountries,
+  withState('userInput', 'updateUserInput', ''),
+  withHandlers({
+    onChange: ({ updateUserInput, onChange }) => value => {
+      // this value is an input DOM event while typing and a dropdown value when
+      // selected
+      if (typeof value === 'string') {
+        onChange(value)
+      }
+      updateUserInput(get(value, 'target.value', ''))
+    },
+    onEnter: props => event => {
+      if (event.which === 13) {
+        props.onChange(firstFilteredCountry(props).value)
+        props.updateUserInput(firstFilteredCountry(props).label)
+      }
+    },
+  }),
+)
+
+export default enhance(MenuCountry)
+
+const Input = styled.input`
+  width: 100%;
+  height: calc(${th('gridUnit')} * 4);
+  border: ${th('accordion.border')};
+  border-radius: ${th('borderRadius')};
+  padding: 0 ${th('gridUnit')};
+  ::placeholder {
+    color: ${th('colorText')};
+    opacity: 1;
+    font-family: ${th('fontWriting')};
+  }
+  :focus {
+    border-color: ${th('action.colorActive')}
+    outline: none;
+  }
+`
diff --git a/packages/component-faraday-ui/src/UserProfile.js b/packages/component-faraday-ui/src/UserProfile.js
index 292c04822b7ee0bdbcfb2662a12a91bb961cc8ca..e1bdc2074f60d3a1810ab5e1f595b1289b564c00 100644
--- a/packages/component-faraday-ui/src/UserProfile.js
+++ b/packages/component-faraday-ui/src/UserProfile.js
@@ -7,7 +7,7 @@ import { th } from '@pubsweet/ui-toolkit'
 import { required as requiredValidator } from 'xpub-validators'
 import { compose, withStateHandlers, withProps } from 'recompose'
 import { H3, Spinner, ValidatedField, TextField, Menu } from '@pubsweet/ui'
-import { withCountries } from 'pubsweet-component-faraday-ui'
+import { withCountries, MenuCountry } from 'pubsweet-component-faraday-ui'
 
 import {
   Row,
@@ -179,7 +179,9 @@ const EditUserProfile = compose(
           <Item ml={1} vertical>
             <Label required>Country</Label>
             <ValidatedField
-              component={input => <Menu {...input} options={countries} />}
+              component={input => (
+                <MenuCountry {...input} placeholder="Please select" />
+              )}
               name="country"
               validate={[requiredValidator]}
             />
diff --git a/packages/component-faraday-ui/src/index.js b/packages/component-faraday-ui/src/index.js
index a99b60e4c1b2e18f15810beb84255aecd4ad4260..011e5d99b9e41cd5d5ea442ca4a82d368305b900 100644
--- a/packages/component-faraday-ui/src/index.js
+++ b/packages/component-faraday-ui/src/index.js
@@ -48,6 +48,7 @@ export { default as WizardFiles } from './WizardFiles'
 export { default as TextTooltip } from './TextTooltip'
 export { default as EditorialReportCard } from './EditorialReportCard'
 export { default as ReviewerReportAuthor } from './ReviewerReportAuthor'
+export { default as MenuCountry } from './MenuCountry'
 
 export { SubmitRevision } from './submissionRevision'
 
diff --git a/packages/component-faraday-ui/src/modals/FormModal.js b/packages/component-faraday-ui/src/modals/FormModal.js
index e9adb3b78c837287a61182aefc121b1851bbad5d..e798227aac61a7a99b16813a0f56deec6fc3b117 100644
--- a/packages/component-faraday-ui/src/modals/FormModal.js
+++ b/packages/component-faraday-ui/src/modals/FormModal.js
@@ -19,12 +19,13 @@ import {
   Text,
   Item,
   Label,
+  MenuCountry,
   IconButton,
   RowOverrideAlert,
   ItemOverrideAlert,
 } from 'pubsweet-component-faraday-ui'
 
-const AddUserForm = ({ roles, countries, titles }) => (
+const AddUserForm = ({ roles, titles }) => (
   <Fragment>
     <Row alignItems="baseline" mb={1} mt={1}>
       <Item mr={1} vertical>
@@ -72,7 +73,7 @@ const AddUserForm = ({ roles, countries, titles }) => (
         <Label>Country</Label>
         <ValidatedField
           component={input => (
-            <Menu options={countries} {...input} placeholder="Please select" />
+            <MenuCountry {...input} placeholder="Please select" />
           )}
           name="country"
         />
@@ -88,7 +89,7 @@ const AddUserForm = ({ roles, countries, titles }) => (
   </Fragment>
 )
 
-const EditForm = ({ titles, countries }) => (
+const EditForm = ({ titles }) => (
   <Fragment>
     <Row alignItems="center" mb={2} mt={1}>
       <Item mr={1} vertical>
@@ -115,7 +116,7 @@ const EditForm = ({ titles, countries }) => (
         <Label>Country</Label>
         <ValidatedField
           component={input => (
-            <Menu options={countries} {...input} placeholder="Please select" />
+            <MenuCountry {...input} placeholder="Please select" />
           )}
           name="country"
         />
@@ -186,7 +187,6 @@ const FormModal = ({
   onClose,
   subtitle,
   onConfirm,
-  countries,
   modalError,
   isFetching,
   handleSubmit,
@@ -198,9 +198,9 @@ const FormModal = ({
     <H2>{title}</H2>
     {edit && <Text secondary>{user.email}</Text>}
     {edit ? (
-      <EditForm countries={countries} titles={titles} />
+      <EditForm titles={titles} />
     ) : (
-      <AddUserForm countries={countries} roles={roles} titles={titles} />
+      <AddUserForm roles={roles} titles={titles} />
     )}
     {modalError && (
       <Row mb={1}>
diff --git a/packages/components-faraday/src/components/Admin/AddUser.js b/packages/components-faraday/src/components/Admin/AddUser.js
index 572e42f0755c5f0ae873b190c0d6864b1889139e..7fd409d679850f3e7418baa28af3f82bc6f361cc 100644
--- a/packages/components-faraday/src/components/Admin/AddUser.js
+++ b/packages/components-faraday/src/components/Admin/AddUser.js
@@ -9,7 +9,6 @@ import {
   IconButton,
   withRoles,
   withFetching,
-  withCountries,
 } from 'pubsweet-component-faraday-ui'
 
 const AddUser = ({ edit, journal, handleSubmit, ...rest }) => (
@@ -32,6 +31,4 @@ const AddUser = ({ edit, journal, handleSubmit, ...rest }) => (
   </OpenModal>
 )
 
-export default compose(withJournal, withCountries, withRoles, withFetching)(
-  AddUser,
-)
+export default compose(withJournal, withRoles, withFetching)(AddUser)
diff --git a/packages/components-faraday/src/components/SignUp/SignUpStep0.js b/packages/components-faraday/src/components/SignUp/SignUpStep0.js
index 4cb4f094d06d1585a6a814e4cf1fda0af3b3d9bf..2baf1131f0e20c0cc42b149e0fdab343f7585cbf 100644
--- a/packages/components-faraday/src/components/SignUp/SignUpStep0.js
+++ b/packages/components-faraday/src/components/SignUp/SignUpStep0.js
@@ -11,8 +11,8 @@ import {
   Item,
   Label,
   ActionLink,
+  MenuCountry,
   ItemOverrideAlert,
-  withCountries,
 } from 'pubsweet-component-faraday-ui'
 
 const AgreeCheckbox = ({ value, onChange }) => (
@@ -27,14 +27,7 @@ const AgreeCheckbox = ({ value, onChange }) => (
   </Row>
 )
 
-const Step0 = ({
-  type,
-  error,
-  journal,
-  countries,
-  handleSubmit,
-  initialValues,
-}) =>
+const Step0 = ({ type, error, journal, handleSubmit, initialValues }) =>
   !isUndefined(initialValues) ? (
     <Fragment>
       <Row mb={2} mt={3}>
@@ -75,11 +68,7 @@ const Step0 = ({
           <Label required>Country</Label>
           <ValidatedField
             component={input => (
-              <Menu
-                {...input}
-                options={countries}
-                placeholder="Please select"
-              />
+              <MenuCountry {...input} placeholder="Please select" />
             )}
             name="country"
             validate={[requiredValidator]}
@@ -142,7 +131,6 @@ const Step0 = ({
   )
 
 export default compose(
-  withCountries,
   reduxForm({
     form: 'signUpInvitation',
     destroyOnUnmount: false,