diff --git a/packages/components-faraday/src/components/SignUp/ReviewerAgree.js b/packages/components-faraday/src/components/SignUp/ReviewerAgree.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e35309c5b862028c3818e41949f0c3d460255a3
--- /dev/null
+++ b/packages/components-faraday/src/components/SignUp/ReviewerAgree.js
@@ -0,0 +1,131 @@
+import React from 'react'
+import { get } from 'lodash'
+import { connect } from 'react-redux'
+import { reduxForm, SubmissionError } from 'redux-form'
+import { push } from 'react-router-redux'
+import { required, minChars } from 'xpub-validators'
+import { compose, withState, lifecycle } from 'recompose'
+import { loginUser } from 'pubsweet-component-login/actions'
+import { Button, ValidatedField, TextField } from '@pubsweet/ui'
+
+import {
+  Row,
+  Err,
+  Title,
+  Label,
+  Email,
+  RowItem,
+  Subtitle,
+  RootContainer,
+  FormContainer,
+} from './FormItems'
+import { reviewerDecision, setReviewerPassword } from '../../redux/reviewers'
+
+const agreeText = `You have been invited to review a manuscript on the Hindawi platform. Please set a password and proceed to the manuscript.`
+const declineText = `You have decline to work on a manuscript.`
+
+const min8Chars = minChars(8)
+const ReviewerSignUp = ({
+  searchParams: { agree },
+  handleSubmit,
+  error,
+  reviewer,
+}) => (
+  <RootContainer>
+    <Title>Hindawi Invitation</Title>
+    <Subtitle>{agree ? agreeText : declineText}</Subtitle>
+    <Email>{reviewer.email}</Email>
+    {agree && (
+      <FormContainer onSubmit={handleSubmit}>
+        <Row>
+          <RowItem>
+            <Label> Password </Label>
+            <ValidatedField
+              component={input => <TextField {...input} type="password" />}
+              name="password"
+              validate={[required, min8Chars]}
+            />
+          </RowItem>
+        </Row>
+        {error && (
+          <Row>
+            <RowItem>
+              <Err>Token expired or Something went wrong.</Err>
+            </RowItem>
+          </Row>
+        )}
+        <Row>
+          <Button primary type="submit">
+            CONFIRM
+          </Button>
+        </Row>
+      </FormContainer>
+    )}
+  </RootContainer>
+)
+
+export default compose(
+  withState('searchParams', 'setParams', { agree: true }),
+  withState('reviewer', 'setReviewer', {}),
+  connect(null, { push, loginUser, setReviewerPassword, reviewerDecision }),
+  lifecycle({
+    componentDidMount() {
+      //   const { setParams, location, setReviewer, reviewerDecision } = this.props
+      //   const {
+      //     agree,
+      //     collectionId,
+      //     invitationId,
+      //     fragmentId,
+      //     ...reviewerBody
+      //   } = parseSearchParams(location.search)
+      //   setParams(v => ({
+      //     agree: agree === 'true',
+      //     collectionId,
+      //     invitationId,
+      //     fragmentId,
+      //   }))
+      //   if (agree === 'true') {
+      //     setReviewer(reviewerBody)
+      //   } else {
+      //     reviewerDecision(invitationId, collectionId, false)
+      //   }
+      // console.log('rev sign up mounted?', this.props)
+    },
+  }),
+  reduxForm({
+    form: 'invite-reviewer',
+    onSubmit: (
+      { password },
+      dispatch,
+      {
+        push,
+        loginUser,
+        searchParams,
+        reviewer,
+        location,
+        setReviewerPassword,
+      },
+    ) => {
+      const { collectionId, fragmentId, agree, invitationId } = searchParams
+      return setReviewerPassword({
+        ...reviewer,
+        password,
+      })
+        .then(() => {
+          loginUser(
+            { username: reviewer.email, password },
+            `/projects/${collectionId}/versions/${fragmentId}/details?agree=${agree}&invitationId=${invitationId}`,
+          )
+        })
+        .catch(error => {
+          const err = get(error, 'response')
+          if (err) {
+            const errorMessage = get(JSON.parse(err), 'error')
+            throw new SubmissionError({
+              _error: errorMessage || 'Something went wrong',
+            })
+          }
+        })
+    },
+  }),
+)(ReviewerSignUp)
diff --git a/packages/components-faraday/src/components/SignUp/ReviewerDecline.js b/packages/components-faraday/src/components/SignUp/ReviewerDecline.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf49edaf31d6cbb31e5f748219b8fd8911acc46d
--- /dev/null
+++ b/packages/components-faraday/src/components/SignUp/ReviewerDecline.js
@@ -0,0 +1,5 @@
+import React from 'react'
+
+const ReviewerDecline = props => <div>I decline</div>
+
+export default ReviewerDecline
diff --git a/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js b/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js
index 514f3fb3a2f36695cae3c2dfceebbd40e0f7872f..671d99d58832bff7eded4b4ce256f1f9c61c82a3 100644
--- a/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js
+++ b/packages/components-faraday/src/components/SignUp/ReviewerSignUp.js
@@ -1,132 +1,28 @@
 import React from 'react'
-import { get } from 'lodash'
-import { connect } from 'react-redux'
-import { reduxForm, SubmissionError } from 'redux-form'
-import { push } from 'react-router-redux'
-import { required, minChars } from 'xpub-validators'
-import { compose, withState, lifecycle } from 'recompose'
-import { loginUser } from 'pubsweet-component-login/actions'
-import { Button, ValidatedField, TextField } from '@pubsweet/ui'
+import { Route } from 'react-router-dom'
+import { AuthenticatedComponent } from 'pubsweet-client'
 
-import {
-  Row,
-  Err,
-  Title,
-  Label,
-  Email,
-  RowItem,
-  Subtitle,
-  RootContainer,
-  FormContainer,
-} from './FormItems'
+import { ReviewerAgree, ReviewerDecline } from './'
 import { parseSearchParams } from './utils'
-import { reviewerDecision, setReviewerPassword } from '../../redux/reviewers'
 
-const agreeText = `You have been invited to review a manuscript on the Hindawi platform. Please set a password and proceed to the manuscript.`
-const declineText = `You have decline to work on a manuscript.`
-
-const min8Chars = minChars(8)
-const ReviewerSignUp = ({
-  searchParams: { agree },
-  handleSubmit,
-  error,
-  reviewer,
-}) => (
-  <RootContainer>
-    <Title>Hindawi Invitation</Title>
-    <Subtitle>{agree ? agreeText : declineText}</Subtitle>
-    <Email>{reviewer.email}</Email>
-    {agree && (
-      <FormContainer onSubmit={handleSubmit}>
-        <Row>
-          <RowItem>
-            <Label> Password </Label>
-            <ValidatedField
-              component={input => <TextField {...input} type="password" />}
-              name="password"
-              validate={[required, min8Chars]}
-            />
-          </RowItem>
-        </Row>
-        {error && (
-          <Row>
-            <RowItem>
-              <Err>Token expired or Something went wrong.</Err>
-            </RowItem>
-          </Row>
-        )}
-        <Row>
-          <Button primary type="submit">
-            CONFIRM
-          </Button>
-        </Row>
-      </FormContainer>
+const PrivateRoute = ({ component: Component, ...rest }) => (
+  <Route
+    {...rest}
+    render={props => (
+      <AuthenticatedComponent>
+        <Component {...props} />
+      </AuthenticatedComponent>
     )}
-  </RootContainer>
+  />
 )
 
-export default compose(
-  withState('searchParams', 'setParams', { agree: true }),
-  withState('reviewer', 'setReviewer', {}),
-  connect(null, { push, loginUser, setReviewerPassword, reviewerDecision }),
-  lifecycle({
-    componentDidMount() {
-      const { setParams, location, setReviewer, reviewerDecision } = this.props
-      const {
-        agree,
-        collectionId,
-        invitationId,
-        fragmentId,
-        ...reviewerBody
-      } = parseSearchParams(location.search)
-      setParams(v => ({
-        agree: agree === 'true',
-        collectionId,
-        invitationId,
-        fragmentId,
-      }))
+const ReviewerSignUp = ({ location }) => {
+  const { agree } = parseSearchParams(location.search)
+  return agree === 'true' ? (
+    <PrivateRoute component={ReviewerAgree} />
+  ) : (
+    <Route component={ReviewerDecline} />
+  )
+}
 
-      if (agree === 'true') {
-        setReviewer(reviewerBody)
-      } else {
-        reviewerDecision(invitationId, collectionId, false)
-      }
-    },
-  }),
-  reduxForm({
-    form: 'invite-reviewer',
-    onSubmit: (
-      { password },
-      dispatch,
-      {
-        push,
-        loginUser,
-        searchParams,
-        reviewer,
-        location,
-        setReviewerPassword,
-      },
-    ) => {
-      const { collectionId, fragmentId, agree, invitationId } = searchParams
-      return setReviewerPassword({
-        ...reviewer,
-        password,
-      })
-        .then(() => {
-          loginUser(
-            { username: reviewer.email, password },
-            `/projects/${collectionId}/versions/${fragmentId}/details?agree=${agree}&invitationId=${invitationId}`,
-          )
-        })
-        .catch(error => {
-          const err = get(error, 'response')
-          if (err) {
-            const errorMessage = get(JSON.parse(err), 'error')
-            throw new SubmissionError({
-              _error: errorMessage || 'Something went wrong',
-            })
-          }
-        })
-    },
-  }),
-)(ReviewerSignUp)
+export default ReviewerSignUp
diff --git a/packages/components-faraday/src/components/SignUp/index.js b/packages/components-faraday/src/components/SignUp/index.js
index 5b2d1d8aa27b7722db809bbf8e64aa4ae73c4ac3..21a5cd8e67d2630a46ae338afa7d6d297179544b 100644
--- a/packages/components-faraday/src/components/SignUp/index.js
+++ b/packages/components-faraday/src/components/SignUp/index.js
@@ -1,2 +1,4 @@
+export { default as ReviewerAgree } from './ReviewerAgree'
 export { default as ReviewerSignUp } from './ReviewerSignUp'
+export { default as ReviewerDecline } from './ReviewerDecline'
 export { default as SignUpInvitationPage } from './SignUpInvitationPage'