diff --git a/app/app.js b/app/app.js
index 03597a268478f7cacbb2bf01c2cf25f89823327e..1074fd94707c61d0e247faf78c0c15d478ef684b 100644
--- a/app/app.js
+++ b/app/app.js
@@ -6,8 +6,8 @@ import { createBrowserHistory } from 'history'
 import Root from './Root'
 import theme from './theme'
 
-import { JournalProvider } from './components/xpub-journal'
-import { XpubProvider } from './components/xpub-with-context'
+import { JournalProvider } from './components/xpub-journal/src'
+import { XpubProvider } from './components/xpub-with-context/src'
 
 import * as journal from '../config/journal'
 import routes from './routes'
diff --git a/app/components/AdminPage.js b/app/components/AdminPage.js
index e5b275977e4ca9e4d08720b8d3140435643bce1a..870c4be6d8aa84fb54f88736502432c0e5637035 100644
--- a/app/components/AdminPage.js
+++ b/app/components/AdminPage.js
@@ -13,8 +13,8 @@ import {
 import { JournalContext } from './xpub-journal/src'
 import { XpubContext } from './xpub-with-context/src'
 
-import UsersManager from '../components/component-users-manager'
-import Manuscripts from '../components/component-manuscripts'
+import UsersManager from '../components/component-users-manager/src/UsersManager'
+import Manuscripts from '../components/component-manuscripts/src/Manuscripts'
 import Dashboard from '../components/component-dashboard/src/components/Dashboard'
 import SubmitPage from '../components/component-submit/src/components/SubmitPage'
 import ManuscriptPage from '../components/component-manuscript/src/components/ManuscriptPage'
diff --git a/app/components/component-dashboard/src/components/Reviews.js b/app/components/component-dashboard/src/components/Reviews.js
index ea24946941be15da7ddbe5242bc22baa9bda2be6..c53d7a1f0506401d442fa6e6fac7a1e3be2a6ab6 100644
--- a/app/components/component-dashboard/src/components/Reviews.js
+++ b/app/components/component-dashboard/src/components/Reviews.js
@@ -3,7 +3,7 @@ import styled from 'styled-components'
 import { sumBy } from 'lodash'
 import { Badge } from '@pubsweet/ui'
 import { th } from '@pubsweet/ui-toolkit'
-import { JournalContext } from '../../../xpub-journal'
+import { JournalContext } from '../../../xpub-journal/src'
 
 const Root = styled.div`
   display: inline-flex;
diff --git a/app/components/component-review/src/components/decision/DecisionForm.js b/app/components/component-review/src/components/decision/DecisionForm.js
index b70b7f3682836669671d10164a72fcfec7262016..727250a78b5c210d843044f169cbfa9ef394a933 100644
--- a/app/components/component-review/src/components/decision/DecisionForm.js
+++ b/app/components/component-review/src/components/decision/DecisionForm.js
@@ -2,8 +2,6 @@ import React, { useContext } from 'react'
 import { NoteEditor } from 'xpub-edit'
 import { cloneDeep, omit } from 'lodash'
 import { FieldArray, Field } from 'formik'
-import { JournalContext } from 'xpub-journal'
-import { required } from 'xpub-validators'
 import {
   Button,
   Flexbox,
@@ -11,6 +9,8 @@ import {
   UploadButton,
   UploadingFile,
 } from '@pubsweet/ui'
+import { JournalContext } from '../../../../xpub-journal/src'
+import { required } from '../../../../xpub-validators/src'
 
 import {
   getCommentFiles,
diff --git a/app/components/component-review/src/components/decision/DecisionReview.js b/app/components/component-review/src/components/decision/DecisionReview.js
index d87a3d62c77dcbe43920e72a788d0188571e9137..994e989f6f04343e3b841263cda4559bb3b11db4 100644
--- a/app/components/component-review/src/components/decision/DecisionReview.js
+++ b/app/components/component-review/src/components/decision/DecisionReview.js
@@ -1,9 +1,9 @@
 import React, { useContext } from 'react'
 import styled from 'styled-components'
 import { compose, withState, withHandlers } from 'recompose'
-import { JournalContext } from 'xpub-journal'
 import { Button } from '@pubsweet/ui'
 import { th } from '@pubsweet/ui-toolkit'
+import { JournalContext } from '../../../../xpub-journal/src'
 import Review from '../review/Review'
 
 const ToggleReview = ({ open, toggle }) => (
diff --git a/app/components/component-review/src/components/review/ReviewForm.js b/app/components/component-review/src/components/review/ReviewForm.js
index 9febfa9b5822f688285bbdd6efc257417066d8ff..006bf2dbef454c685e951e185facc6e5a2628746 100644
--- a/app/components/component-review/src/components/review/ReviewForm.js
+++ b/app/components/component-review/src/components/review/ReviewForm.js
@@ -10,7 +10,7 @@ import {
   UploadingFile,
 } from '@pubsweet/ui'
 
-import { JournalContext } from 'xpub-journal'
+import { JournalContext } from '../../../../xpub-journal/src'
 import { getCommentFiles, stripHtml, createComments } from './util'
 import {
   AdminSection,
diff --git a/app/components/component-submit/src/components/UploadManuscript.js b/app/components/component-submit/src/components/UploadManuscript.js
index d4cd66792423b19d013490ed8379f901d65cd2eb..cdb5e7e0bed5cceb05818b51c8313b0736ebd587 100644
--- a/app/components/component-submit/src/components/UploadManuscript.js
+++ b/app/components/component-submit/src/components/UploadManuscript.js
@@ -3,7 +3,7 @@ import styled, { keyframes, withTheme } from 'styled-components'
 import { Icon, Action } from '@pubsweet/ui'
 import { th } from '@pubsweet/ui-toolkit'
 import Dropzone from 'react-dropzone'
-import { XpubContext } from '../../../xpub-with-context'
+import { XpubContext } from '../../../xpub-with-context/src'
 import upload from '../upload'
 
 const StyledDropzone = styled(({ disableUpload, ...props }) => (
diff --git a/app/components/component-submit/src/components/molecules/Accordion.js b/app/components/component-submit/src/components/molecules/Accordion.js
index fbb85ac9303177c2d3178bc66a8952826d14e2fd..3206bfc51d077a92c7f0ca6df8a012132cff0ffe 100644
--- a/app/components/component-submit/src/components/molecules/Accordion.js
+++ b/app/components/component-submit/src/components/molecules/Accordion.js
@@ -1,9 +1,9 @@
 import React from 'react'
 import styled from 'styled-components'
 import { compose, withState, withHandlers } from 'recompose'
-import { JournalContext } from 'xpub-journal'
 import { Button } from '@pubsweet/ui'
 import { th } from '@pubsweet/ui-toolkit'
+import { JournalContext } from '../../../../xpub-journal/src'
 
 const Root = styled.div``
 
diff --git a/app/routes.js b/app/routes.js
index ac455bdf69d3d384d13584c093ee041c1a8361df..0cc488d3d43c637fa061a219c279e2b5f3a1e6df 100644
--- a/app/routes.js
+++ b/app/routes.js
@@ -1,7 +1,7 @@
 import React from 'react'
 import { Route, Switch } from 'react-router-dom'
 
-import Login from './components/component-login'
+import Login from './components/component-login/src'
 
 import AdminPage from './components/AdminPage'
 
diff --git a/config/components.json b/config/components.json
index 3ae87580757d0df7bdcf511097fc31a531ac248b..0d4c1e745a60e8e5bc705e9e01ac5be50f0a2fc9 100644
--- a/config/components.json
+++ b/config/components.json
@@ -1,14 +1,14 @@
 [
-  "./server/model-team",
-  "./server/model-user",
+  "./server/model-team/src",
+  "./server/model-user/src",
   "./server/model-manuscript/src/",
   "./server/model-file/src/",
   "./server/component-xpub-review-backend/src/",
   "./server/model-review/src/",
   "./server/formbuilder/src/",
   "@pubsweet/job-xsweet",
-  "./server/model-channel",
-  "./server/model-message",
+  "./server/model-channel/src",
+  "./server/model-message/src",
   "./server/profile-upload",
   "./server/auth-orcid"
 ]