diff --git a/src/App/App.csproj b/src/App/App.csproj
index f5bb98ce8..28a436e74 100644
--- a/src/App/App.csproj
+++ b/src/App/App.csproj
@@ -34,6 +34,9 @@
LockPage.xaml
+
+ TwoFactorPage.xaml
+
RegisterPage.xaml
diff --git a/src/App/Pages/Accounts/TwoFactorPage.xaml b/src/App/Pages/Accounts/TwoFactorPage.xaml
new file mode 100644
index 000000000..e9b5cd6e0
--- /dev/null
+++ b/src/App/Pages/Accounts/TwoFactorPage.xaml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/App/Pages/Accounts/TwoFactorPage.xaml.cs b/src/App/Pages/Accounts/TwoFactorPage.xaml.cs
new file mode 100644
index 000000000..edd5a4597
--- /dev/null
+++ b/src/App/Pages/Accounts/TwoFactorPage.xaml.cs
@@ -0,0 +1,39 @@
+using System;
+using Xamarin.Forms;
+
+namespace Bit.App.Pages
+{
+ public partial class TwoFactorPage : BaseContentPage
+ {
+ private TwoFactorPageViewModel _vm;
+
+ public TwoFactorPage()
+ {
+ InitializeComponent();
+ _vm = BindingContext as TwoFactorPageViewModel;
+ _vm.Page = this;
+ }
+
+ protected override async void OnAppearing()
+ {
+ base.OnAppearing();
+ await _vm.InitAsync();
+ }
+
+ private void Continue_Clicked(object sender, EventArgs e)
+ {
+ if(DoOnce())
+ {
+
+ }
+ }
+
+ private void Methods_Clicked(object sender, EventArgs e)
+ {
+ if(DoOnce())
+ {
+
+ }
+ }
+ }
+}
diff --git a/src/App/Pages/Accounts/TwoFactorPageViewModel.cs b/src/App/Pages/Accounts/TwoFactorPageViewModel.cs
new file mode 100644
index 000000000..f9812c296
--- /dev/null
+++ b/src/App/Pages/Accounts/TwoFactorPageViewModel.cs
@@ -0,0 +1,44 @@
+using Bit.App.Abstractions;
+using Bit.App.Resources;
+using Bit.Core.Abstractions;
+using Bit.Core.Exceptions;
+using Bit.Core.Utilities;
+using System.Threading.Tasks;
+using Xamarin.Forms;
+
+namespace Bit.App.Pages
+{
+ public class TwoFactorPageViewModel : BaseViewModel
+ {
+ private readonly IDeviceActionService _deviceActionService;
+ private readonly IAuthService _authService;
+ private readonly ISyncService _syncService;
+ private readonly IStorageService _storageService;
+
+ private string _email;
+
+ public TwoFactorPageViewModel()
+ {
+ _deviceActionService = ServiceContainer.Resolve("deviceActionService");
+ _authService = ServiceContainer.Resolve("authService");
+ _syncService = ServiceContainer.Resolve("syncService");
+ _storageService = ServiceContainer.Resolve("storageService");
+ }
+
+ public string Email
+ {
+ get => _email;
+ set => SetProperty(ref _email, value);
+ }
+
+ public async Task InitAsync()
+ {
+
+ }
+
+ public async Task SubmitAsync()
+ {
+
+ }
+ }
+}