diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 6cda987ec7..5bfb3b93dd 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -172,6 +172,7 @@
+
@@ -409,6 +410,7 @@
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index 395a4174dd..26a7ff1a15 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -493,6 +493,9 @@
HLE\Libraries
+
+ Dialog
+
@@ -906,6 +909,9 @@
HLE\Libraries
+
+ Dialog
+
diff --git a/Core/Dialog/PSPGamedataInstallDialog.cpp b/Core/Dialog/PSPGamedataInstallDialog.cpp
new file mode 100644
index 0000000000..3aee969b85
--- /dev/null
+++ b/Core/Dialog/PSPGamedataInstallDialog.cpp
@@ -0,0 +1,61 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#include "PSPGamedataInstallDialog.h"
+#include "ChunkFile.h"
+#include "../Core/MemMap.h"
+
+PSPGamedataInstallDialog::PSPGamedataInstallDialog() {
+}
+
+PSPGamedataInstallDialog::~PSPGamedataInstallDialog() {
+}
+
+int PSPGamedataInstallDialog::Init(u32 paramAddr)
+{
+ // Already running
+ if (status != SCE_UTILITY_STATUS_NONE && status != SCE_UTILITY_STATUS_SHUTDOWN)
+ return SCE_ERROR_UTILITY_INVALID_STATUS;
+
+ int size = Memory::Read_U32(paramAddr);
+ memset(&request, 0, sizeof(request));
+ // Only copy the right size to support different request format
+ Memory::Memcpy(&request, paramAddr, size);
+
+ status = SCE_UTILITY_STATUS_INITIALIZE;
+
+ return 0;
+}
+
+int PSPGamedataInstallDialog::Abort()
+{
+ return PSPDialog::Shutdown();
+}
+
+int PSPGamedataInstallDialog::Shutdown(bool force)
+{
+ if (status != SCE_UTILITY_STATUS_FINISHED && !force)
+ return SCE_ERROR_UTILITY_INVALID_STATUS;
+
+ return PSPDialog::Shutdown();
+}
+
+void PSPGamedataInstallDialog::DoState(PointerWrap &p) {
+ PSPDialog::DoState(p);
+ p.Do(request);
+ p.DoMarker("PSPGamedataInstallDialog");
+}
\ No newline at end of file
diff --git a/Core/Dialog/PSPGamedataInstallDialog.h b/Core/Dialog/PSPGamedataInstallDialog.h
new file mode 100644
index 0000000000..d236f1693e
--- /dev/null
+++ b/Core/Dialog/PSPGamedataInstallDialog.h
@@ -0,0 +1,54 @@
+// Copyright (c) 2012- PPSSPP Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0 or later versions.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official git repository and contact information can be found at
+// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
+
+#pragma once
+
+#include "Core/Dialog/PSPDialog.h"
+
+struct SceUtilityGamedataInstallParam
+{
+ pspUtilityDialogCommon common;
+ u32 unknown1;
+ char gameName[13];
+ char ignore1[3];
+ char dataName[20];
+ char gamedataParamsGameTitle[128];
+ char gamedataParamsDataTitle[128];
+ char gamedataParamsData[1024];
+ u8 unknown2;
+ char ignore2[7];
+ u32 unknownResult1;
+ u32 unknownResult2;
+ char ignore[48];
+};
+
+class PSPGamedataInstallDialog: public PSPDialog {
+public:
+ PSPGamedataInstallDialog();
+ virtual ~PSPGamedataInstallDialog();
+
+ virtual int Init(u32 paramAddr);
+ //virtual int Update();
+ virtual int Shutdown(bool force = false);
+ virtual void DoState(PointerWrap &p);
+
+ int Abort();
+
+
+private:
+ SceUtilityGamedataInstallParam request;
+};
\ No newline at end of file