TSharedPtr<SDockTab> FDocumentTracker::OpenNewTab(TSharedPtr<FTabPayload> InPayload, EOpenDocumentCause InOpenCause)
{
	ensure(InOpenCause == ForceOpenNewDocument ||InOpenCause == OpenNewDocument || InOpenCause == RestorePreviousDocument);

	TSharedPtr<FDocumentTabFactory> Factory = FindSupportingFactory(InPayload.ToSharedRef());

	TSharedPtr<SDockTab> NewTab;

	if(Factory.IsValid())
	{
		TSharedPtr<FAssetEditorToolkit> HostingApp = HostingAppPtr.Pin();
		FWorkflowTabSpawnInfo SpawnInfo;
		SpawnInfo.Payload = InPayload;

		NewTab = Factory->SpawnBlankTab();

		TSharedPtr<FTabInfo> NewTabInfo = MakeShareable( new FTabInfo(NewTab.ToSharedRef(), Factory) );
		SpawnedTabs.Add( NewTabInfo );
		NewTabInfo->AddTabHistory(Factory->CreateTabHistoryNode(InPayload));

		if (InOpenCause == ForceOpenNewDocument  || InOpenCause == OpenNewDocument)
		{
			TabManager->InsertNewDocumentTab( "Document", FTabManager::ESearchPreference::RequireClosedTab, NewTab.ToSharedRef() );
		}
		else if (InOpenCause == RestorePreviousDocument)
		{
			TabManager->RestoreDocumentTab( "Document", FTabManager::ESearchPreference::RequireClosedTab, NewTab.ToSharedRef() );
		}
	}

	return NewTab;
}