diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java
index 8929fa2a1..1060c13c3 100644
--- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java
+++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java
@@ -2,18 +2,15 @@
 
 import com.google.web.bindery.event.shared.EventBus;
 import edu.stanford.bmir.protege.web.client.app.ApplicationEnvironmentManager;
-import edu.stanford.bmir.protege.web.client.dispatch.DispatchErrorMessageDisplay;
-import edu.stanford.bmir.protege.web.client.dispatch.DispatchServiceCallbackWithProgressDisplay;
-import edu.stanford.bmir.protege.web.client.dispatch.DispatchServiceManager;
-import edu.stanford.bmir.protege.web.client.dispatch.ProgressDisplay;
+import edu.stanford.bmir.protege.web.client.dispatch.*;
 import edu.stanford.bmir.protege.web.client.library.msgbox.MessageBox;
 import edu.stanford.bmir.protege.web.client.projectmanager.ProjectCreatedEvent;
 import edu.stanford.bmir.protege.web.client.upload.FileUploader;
 import edu.stanford.bmir.protege.web.client.user.LoggedInUserManager;
 import edu.stanford.bmir.protege.web.client.uuid.UuidV4;
 import edu.stanford.bmir.protege.web.shared.csv.DocumentId;
-import edu.stanford.bmir.protege.web.shared.dispatch.actions.GetUserInfoAction;
-import edu.stanford.bmir.protege.web.shared.dispatch.actions.GetUserInfoResult;
+import edu.stanford.bmir.protege.web.shared.dispatch.actions.*;
+import edu.stanford.bmir.protege.web.shared.icd.*;
 import edu.stanford.bmir.protege.web.shared.permissions.PermissionDeniedException;
 import edu.stanford.bmir.protege.web.shared.project.*;
 
@@ -80,6 +77,7 @@ public CreateNewProjectView getView() {
     public void start() {
         view.clear();
         view.setFileUploadEnabled(loggedInUserManager.isAllowedApplicationAction(UPLOAD_PROJECT));
+        view.setFileSourceTypeOptions();
     }
 
     private boolean validate() {
@@ -98,28 +96,91 @@ public void validateAndCreateProject(ProjectCreatedHandler handler) {
 
 
     private void submitCreateProjectRequest(ProjectCreatedHandler handler) {
-        if (view.isFileUploadSpecified()) {
+        String fileSourceType = view.getFileSourceType();
+        if (fileSourceType.equals("owl") && view.isFileUploadSpecified()) {
             uploadSourcesAndCreateProject(handler);
-        }
-        else {
+        } else if (fileSourceType.equals("backup") && view.isFileUploadSpecified()) {
+            uploadProjectBackupAndCreateProjectFromBackup(handler);
+        } else {
             createEmptyProject(handler);
         }
     }
 
     private void createEmptyProject(ProjectCreatedHandler projectCreatedHandler) {
         NewProjectSettings newProjectSettings = NewProjectSettings.get(loggedInUserManager.getLoggedInUserId(),
-                                                                       view.getProjectName(),
-                                                                       view.getProjectLanguage(),
-                                                                       view.getProjectDescription());
+                view.getProjectName(),
+                view.getProjectLanguage(),
+                view.getProjectDescription());
         submitCreateNewProjectRequest(newProjectSettings, projectCreatedHandler);
     }
 
+    private void uploadProjectBackupAndCreateProjectFromBackup(@Nonnull ProjectCreatedHandler projectCreatedHandler) {
+        checkNotNull(projectCreatedHandler);
+        progressDisplay.displayProgress("Uploading file", "Uploading file.  Please wait.");
+        dispatchServiceManager.execute(new GetUserInfoAction(),
+                info -> createProjectFromProjectBackupForUser(info, projectCreatedHandler));
+    }
+
+    private void createProjectFromProjectBackupForUser(GetUserInfoResult userInfo,
+                                                       ProjectCreatedHandler projectCreatedHandler) {
+        String fileUploadElementId = view.getFileUploadElementId();
+        FileUploader fileUploader = new FileUploader(applicationEnvironmentManager.getAppEnvVariables().getFileUploadUrl());
+        fileUploader.uploadFile(fileUploadElementId,
+                userInfo.getToken(),
+                fileSubmissionId -> handleProjectBackupFilesSubmissionSuccess(projectCreatedHandler, fileSubmissionId),
+                this::handleFileSubmissionError);
+    }
+
+    private void handleProjectBackupFilesSubmissionSuccess(ProjectCreatedHandler projectCreatedHandler, String fileSubmissionId) {
+        progressDisplay.hideProgress();
+        handleCreateNewProjectFromProjectBackup(projectCreatedHandler,
+                new DocumentId(fileSubmissionId));
+    }
+
+    private void handleCreateNewProjectFromProjectBackup(ProjectCreatedHandler projectCreatedHandler, DocumentId documentId) {
+        NewProjectSettings newProjectSettings = NewProjectSettings.get(loggedInUserManager.getLoggedInUserId(),
+                view.getProjectName(),
+                view.getProjectLanguage(),
+                view.getProjectDescription(),
+                documentId);
+        submitCreateNewProjectFromProjectBackupRequest(newProjectSettings, projectCreatedHandler);
+    }
+
+    private void submitCreateNewProjectFromProjectBackupRequest(NewProjectSettings newProjectSettings, ProjectCreatedHandler projectCreatedHandler) {
+        String uuid = UuidV4.uuidv4();
+        ProjectId newProjectId = ProjectId.get(uuid);
+        dispatchServiceManager.execute(new CreateNewProjectFromProjectBackupAction(newProjectId, newProjectSettings),
+                new DispatchServiceCallbackWithProgressDisplay<CreateNewProjectFromProjectBackupResult>(
+                        errorDisplay,
+                        progressDisplay) {
+                    @Override
+                    public String getProgressDisplayTitle() {
+                        return "Creating project";
+                    }
+
+                    @Override
+                    public String getProgressDisplayMessage() {
+                        return "Please wait.";
+                    }
+
+                    @Override
+                    public void handleSuccess(CreateNewProjectFromProjectBackupResult result) {
+                        handleProjectCreationSuccess(projectCreatedHandler, result.getProjectDetails());
+                    }
+
+                    @Override
+                    public void handleExecutionException(Throwable cause) {
+                        handleProjectCreationException(cause);
+                    }
+                });
+    }
+
 
     private void uploadSourcesAndCreateProject(@Nonnull ProjectCreatedHandler projectCreatedHandler) {
         checkNotNull(projectCreatedHandler);
         progressDisplay.displayProgress("Uploading file", "Uploading file.  Please wait.");
         dispatchServiceManager.execute(new GetUserInfoAction(),
-                                       info -> createProjectForUser(info, projectCreatedHandler));
+                info -> createProjectForUser(info, projectCreatedHandler));
     }
 
     private void createProjectForUser(GetUserInfoResult userInfo,
@@ -128,9 +189,9 @@ private void createProjectForUser(GetUserInfoResult userInfo,
         String fileUploadElementId = view.getFileUploadElementId();
         FileUploader fileUploader = new FileUploader(applicationEnvironmentManager.getAppEnvVariables().getFileUploadUrl());
         fileUploader.uploadFile(fileUploadElementId,
-                                userInfo.getToken(),
-                                fileSubmissionId -> handleFileSubmissionSuccess(projectCreatedHandler, fileSubmissionId),
-                                this::handleFileSubmissionError);
+                userInfo.getToken(),
+                fileSubmissionId -> handleFileSubmissionSuccess(projectCreatedHandler, fileSubmissionId),
+                this::handleFileSubmissionError);
     }
 
     private void handleFileSubmissionError(int errorCode) {
@@ -142,15 +203,15 @@ private void handleFileSubmissionSuccess(CreateNewProjectPresenter.ProjectCreate
                                              String fileSubmissionId) {
         progressDisplay.hideProgress();
         handleCreateNewProjectFromUploadedSources(projectCreatedHandler,
-                                                  new DocumentId(fileSubmissionId));
+                new DocumentId(fileSubmissionId));
     }
 
     private void handleCreateNewProjectFromUploadedSources(ProjectCreatedHandler projectCreatedHandler, DocumentId documentId) {
         NewProjectSettings newProjectSettings = NewProjectSettings.get(loggedInUserManager.getLoggedInUserId(),
-                                                                       view.getProjectName(),
-                                                                       view.getProjectLanguage(),
-                                                                       view.getProjectDescription(),
-                                                                       documentId);
+                view.getProjectName(),
+                view.getProjectLanguage(),
+                view.getProjectDescription(),
+                documentId);
         submitCreateNewProjectRequest(newProjectSettings, projectCreatedHandler);
     }
 
@@ -159,46 +220,51 @@ private void submitCreateNewProjectRequest(@Nonnull NewProjectSettings newProjec
         String uuid = UuidV4.uuidv4();
         ProjectId newProjectId = ProjectId.get(uuid);
         dispatchServiceManager.execute(new CreateNewProjectAction(newProjectId, newProjectSettings),
-                                       new DispatchServiceCallbackWithProgressDisplay<CreateNewProjectResult>(
-                                               errorDisplay,
-                                               progressDisplay) {
-                                           @Override
-                                           public String getProgressDisplayTitle() {
-                                               return "Creating project";
-                                           }
-
-                                           @Override
-                                           public String getProgressDisplayMessage() {
-                                               return "Please wait.";
-                                           }
-
-                                           @Override
-                                           public void handleSuccess(CreateNewProjectResult result) {
-                                               projectCreatedHandler.handleProjectCreated();
-                                               eventBus.fireEvent(new ProjectCreatedEvent(result.getProjectDetails()));
-                                           }
-
-                                           @Override
-                                           public void handleExecutionException(Throwable cause) {
-                                               if (cause instanceof PermissionDeniedException) {
-                                                   messageBox.showMessage(
-                                                           "You do not have permission to create new projects");
-                                               }
-                                               else if (cause instanceof ProjectAlreadyRegisteredException) {
-                                                   ProjectAlreadyRegisteredException ex = (ProjectAlreadyRegisteredException) cause;
-                                                   String projectName = ex.getProjectId().getId();
-                                                   messageBox.showMessage("The project name " + projectName + " is already registered.  Please try a different name.");
-                                               }
-                                               else if (cause instanceof ProjectDocumentExistsException) {
-                                                   ProjectDocumentExistsException ex = (ProjectDocumentExistsException) cause;
-                                                   String projectName = ex.getProjectId().getId();
-                                                   messageBox.showMessage(
-                                                           "There is already a non-empty project on the server with the id " + projectName + ".  This project has NOT been overwritten.  Please contact the administrator to resolve this issue.");
-                                               }
-                                               else {
-                                                   messageBox.showMessage(cause.getMessage());
-                                               }
-                                           }
-                                       });
-    }
-}
+                new DispatchServiceCallbackWithProgressDisplay<CreateNewProjectResult>(
+                        errorDisplay,
+                        progressDisplay) {
+                    @Override
+                    public String getProgressDisplayTitle() {
+                        return "Creating project";
+                    }
+
+                    @Override
+                    public String getProgressDisplayMessage() {
+                        return "Please wait.";
+                    }
+
+                    @Override
+                    public void handleSuccess(CreateNewProjectResult result) {
+                        handleProjectCreationSuccess(projectCreatedHandler, result.getProjectDetails());
+                    }
+
+                    @Override
+                    public void handleExecutionException(Throwable cause) {
+                        handleProjectCreationException(cause);
+                    }
+                });
+    }
+
+    private void handleProjectCreationSuccess(ProjectCreatedHandler projectCreatedHandler, ProjectDetails projectDetails) {
+        projectCreatedHandler.handleProjectCreated();
+        eventBus.fireEvent(new ProjectCreatedEvent(projectDetails));
+    }
+
+    private void handleProjectCreationException(Throwable cause) {
+        if (cause instanceof PermissionDeniedException) {
+            messageBox.showMessage(
+                    "You do not have permission to create new projects");
+        } else if (cause instanceof ProjectAlreadyRegisteredException) {
+            ProjectAlreadyRegisteredException ex = (ProjectAlreadyRegisteredException) cause;
+            String projectName = ex.getProjectId().getId();
+            messageBox.showMessage("The project name " + projectName + " is already registered.  Please try a different name.");
+        } else if (cause instanceof ProjectDocumentExistsException) {
+            ProjectDocumentExistsException ex = (ProjectDocumentExistsException) cause;
+            String projectName = ex.getProjectId().getId();
+            messageBox.showMessage(
+                    "There is already a non-empty project on the server with the id " + projectName + ".  This project has NOT been overwritten.  Please contact the administrator to resolve this issue.");
+        } else {
+            messageBox.showMessage(cause.getMessage());
+        }
+    }
+}
\ No newline at end of file
diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java
index f6e1cbfe0..86f1aa827 100644
--- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java
+++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java
@@ -75,4 +75,8 @@ public interface CreateNewProjectView extends HasInitialFocusable, IsWidget {
 
     @Nonnull
     String getFileUploadElementId();
+
+    String getFileSourceType();
+
+    void setFileSourceTypeOptions();
 }
diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java
index 3750b3278..0be201b8b 100644
--- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java
+++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java
@@ -50,6 +50,9 @@ interface CreateNewProjectViewImplUiBinder extends UiBinder<HTMLPanel, CreateNew
     @Nonnull
     private final MessageBox messageBox;
 
+    @UiField
+    ListBox fileSourceType;
+
     private HandlerRegistration submitCompleteHandlerRegistraion = () -> {};
 
 
@@ -138,4 +141,18 @@ protected void onAttach() {
         projectNameField.setFocus(true);
         fileUpload.getElement().setId(FILE_UPLOAD_ID);
     }
+
+    @Override
+    public String getFileSourceType() {
+        int selectedIndex = fileSourceType.getSelectedIndex();
+        return selectedIndex >= 0 ? fileSourceType.getValue(selectedIndex) : "";
+    }
+
+    @Override
+    public void setFileSourceTypeOptions() {
+        fileSourceType.clear();
+        fileSourceType.addItem("OWL file", "owl");
+        fileSourceType.addItem("Backup files", "backup");
+        fileSourceType.setSelectedIndex(0); // Default to the first option
+    }
 }
\ No newline at end of file
diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml
index 710055e3b..2d937e4b3 100644
--- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml
+++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml
@@ -4,15 +4,18 @@
     <ui:with field="wp" type="edu.stanford.bmir.protege.web.resources.WebProtegeClientBundle"/>
     <ui:with field="msg" type="edu.stanford.bmir.protege.web.client.Messages"/>
     <ui:style>
-        .main {
 
-        }
         .formField {
         }
+
         .uploadContainer {
             padding-top: 10px;
             padding-bottom: 10px;
+            display: flex;
+            align-items: center;
+            gap: 10px;
         }
+
         .helpText {
             max-width: 480px;
         }
@@ -23,23 +26,34 @@
             <g:TextBox ui:field="projectNameField" addStyleNames="{style.formField}"/>
         </div>
         <div class="{wp.style.formGroup}">
-            <g:Label text="{msg.projectSettings_language}"  addStyleNames="{wp.style.formLabel}"/>
+            <g:Label text="{msg.projectSettings_language}" addStyleNames="{wp.style.formLabel}"/>
             <primitive:DefaultLanguageEditor ui:field="projectLanguageField" addStyleNames="{style.formField}"/>
-            <label class="{wp.style.formHelpText} {style.helpText}"><ui:safehtml from="{msg.projectSettings_language_helpText}"/></label>
+            <label class="{wp.style.formHelpText} {style.helpText}">
+                <ui:safehtml from="{msg.projectSettings_language_helpText}"/>
+            </label>
         </div>
         <div class="{wp.style.formGroup}">
-            <g:Label text="{msg.projectSettings_description}"  addStyleNames="{wp.style.formLabel}"/>
+            <g:Label text="{msg.projectSettings_description}" addStyleNames="{wp.style.formLabel}"/>
             <g:TextArea ui:field="projectDescriptionField" addStyleNames="{style.formField}" visibleLines="5"/>
         </div>
         <g:HTMLPanel ui:field="fileUploadArea" addStyleNames="{wp.style.formGroup}">
             <g:Label text="Create from existing sources" addStyleNames="{wp.style.formLabel}"/>
             <g:HTMLPanel addStyleNames="{style.uploadContainer}">
+                <g:HTMLPanel>
+                    <g:ListBox ui:field="fileSourceType">
+                        <g:item value="owl">OWL file</g:item>
+                        <g:item value="backup">Backup files</g:item>
+                    </g:ListBox>
+                </g:HTMLPanel>
                 <g:FormPanel ui:field="formPanel">
                     <g:FileUpload ui:field="fileUpload"/>
                 </g:FormPanel>
             </g:HTMLPanel>
-            <label class="{wp.style.formHelpText} {style.helpText}"><ui:safehtml from="{msg.projectSettings_owl_import_helpText}"/></label>
+            <label class="{wp.style.formHelpText} {style.helpText}">
+                <ui:safehtml from="{msg.projectSettings_owl_import_helpText}"/>
+            </label>
         </g:HTMLPanel>
 
+
     </g:HTMLPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java
index a5261b61f..bfd2e063a 100644
--- a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java
+++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java
@@ -21,7 +21,7 @@
 import edu.stanford.bmir.protege.web.shared.form.*;
 import edu.stanford.bmir.protege.web.shared.frame.*;
 import edu.stanford.bmir.protege.web.shared.hierarchy.*;
-import edu.stanford.bmir.protege.web.shared.icd.GetClassAncestorsAction;
+import edu.stanford.bmir.protege.web.shared.icd.*;
 import edu.stanford.bmir.protege.web.shared.individuals.GetIndividualsAction;
 import edu.stanford.bmir.protege.web.shared.individuals.GetIndividualsPageContainingIndividualAction;
 import edu.stanford.bmir.protege.web.shared.issues.*;
@@ -241,7 +241,8 @@
         @Type(value = UpdateLogicalDefinitionAction.class),
         @Type(value = GetEntityLogicalDefinitionAction.class),
         @Type(value = TranslateEventListAction.class),
-        @Type(value = SetNamedHierarchiesAction.class)
+        @Type(value = SetNamedHierarchiesAction.class),
+        @Type(value = CreateNewProjectFromProjectBackupAction.class)
 })
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
 public interface Action<R extends Result> extends IsSerializable {
diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java
index bcb71ff37..bbf8d6ffa 100644
--- a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java
+++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java
@@ -14,7 +14,7 @@
 import edu.stanford.bmir.protege.web.shared.form.*;
 import edu.stanford.bmir.protege.web.shared.frame.*;
 import edu.stanford.bmir.protege.web.shared.hierarchy.*;
-import edu.stanford.bmir.protege.web.shared.icd.GetClassAncestorsResult;
+import edu.stanford.bmir.protege.web.shared.icd.*;
 import edu.stanford.bmir.protege.web.shared.individuals.*;
 import edu.stanford.bmir.protege.web.shared.issues.*;
 import edu.stanford.bmir.protege.web.shared.itemlist.*;
@@ -221,6 +221,7 @@
         @JsonSubTypes.Type(UpdateLogicalDefinitionResult.class),
         @JsonSubTypes.Type(GetUserInfoResult.class),
         @JsonSubTypes.Type(SetNamedHierarchiesResult.class),
+        @JsonSubTypes.Type(CreateNewProjectFromProjectBackupResult.class),
 })
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
 public interface Result extends IsSerializable {
diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java
index 5dd2e39e6..b949f75cb 100644
--- a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java
+++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java
@@ -623,6 +623,8 @@ public class RpcWhiteList implements IsSerializable, Action, Result {
     GetEntityLogicalDefinitionResult _GetEntityLogicalDefinitionResult;
     SetNamedHierarchiesAction _SetNamedHierarchiesAction;
     SetNamedHierarchiesResult _SetNamedHierarchiesResult;
+    CreateNewProjectFromProjectBackupResult _CreateNewProjectFromProjectBackupResult;
+    CreateNewProjectFromProjectBackupAction _CreateNewProjectFromProjectBackupAction;
 
     public RpcWhiteList() {
     }
diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupAction.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupAction.java
new file mode 100644
index 000000000..c36a38217
--- /dev/null
+++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupAction.java
@@ -0,0 +1,62 @@
+package edu.stanford.bmir.protege.web.shared.icd;
+
+import com.fasterxml.jackson.annotation.*;
+import com.google.common.base.Objects;
+import edu.stanford.bmir.protege.web.shared.dispatch.Action;
+import edu.stanford.bmir.protege.web.shared.project.*;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+@JsonTypeName("webprotege.projects.CreateNewProjectFromProjectBackup")
+public class CreateNewProjectFromProjectBackupAction implements Action<CreateNewProjectFromProjectBackupResult> {
+    private ProjectId newProjectId;
+
+    private NewProjectSettings newProjectSettings;
+
+    /**
+     * For serialization purposes only
+     */
+    private CreateNewProjectFromProjectBackupAction() {
+    }
+
+    @JsonCreator
+    public CreateNewProjectFromProjectBackupAction(@JsonProperty("newProjectId") ProjectId newProjectId,
+                                  @JsonProperty("newProjectSettings") NewProjectSettings newProjectSettings) {
+        this.newProjectId = newProjectId;
+        this.newProjectSettings = checkNotNull(newProjectSettings);
+    }
+
+    public ProjectId getNewProjectId() {
+        return newProjectId;
+    }
+
+    public NewProjectSettings getNewProjectSettings() {
+        return newProjectSettings;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(newProjectId, newProjectSettings);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CreateNewProjectFromProjectBackupAction)) {
+            return false;
+        }
+        CreateNewProjectFromProjectBackupAction other = (CreateNewProjectFromProjectBackupAction) obj;
+        return this.newProjectId.equals(other.newProjectId) && this.newProjectSettings.equals(other.newProjectSettings);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper("CreateNewProjectFromProjectBackupAction")
+                .addValue(newProjectId)
+                .addValue(newProjectSettings)
+                .toString();
+    }
+}
diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupResult.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupResult.java
new file mode 100644
index 000000000..4da51f88d
--- /dev/null
+++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupResult.java
@@ -0,0 +1,54 @@
+package edu.stanford.bmir.protege.web.shared.icd;
+
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.google.common.base.Objects;
+import edu.stanford.bmir.protege.web.shared.dispatch.Result;
+import edu.stanford.bmir.protege.web.shared.project.*;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+@JsonTypeName("webprotege.projects.CreateNewProjectFromProjectBackup")
+public class CreateNewProjectFromProjectBackupResult implements Result {
+
+    private ProjectDetails projectDetails;
+
+    /**
+     * For serialization purposes only
+     */
+    private CreateNewProjectFromProjectBackupResult() {
+    }
+
+    public CreateNewProjectFromProjectBackupResult(ProjectDetails projectDetails) {
+        this.projectDetails = checkNotNull(projectDetails);
+    }
+
+    public ProjectDetails getProjectDetails() {
+        return projectDetails;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(projectDetails);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof CreateNewProjectFromProjectBackupResult)) {
+            return false;
+        }
+        CreateNewProjectFromProjectBackupResult other = (CreateNewProjectFromProjectBackupResult) obj;
+        return this.projectDetails.equals(other.projectDetails);
+    }
+
+
+    @Override
+    public String toString() {
+        return toStringHelper("CreateNewProjectFromProjectBackupResult")
+                .addValue(projectDetails)
+                .toString();
+    }
+}