diff --git a/src/citra/config.cpp b/src/citra/config.cpp
index 1d5e9c7176..03a0ce6063 100644
--- a/src/citra/config.cpp
+++ b/src/citra/config.cpp
@@ -55,9 +55,14 @@ void Config::ReadControls() {
     Settings::values.pad_sright_key = glfw_config->GetInteger("Controls", "pad_sright", GLFW_KEY_RIGHT);
 }
 
+void Config::ReadData() {
+    Settings::values.use_virtual_sd = glfw_config->GetBoolean("Data Storage", "use_virtual_sd", true);
+}
+
 void Config::Reload() {
     LoadINI(glfw_config, glfw_config_loc.c_str(), DefaultINI::glfw_config_file);
     ReadControls();
+    ReadData();
 }
 
 Config::~Config() {
diff --git a/src/citra/config.h b/src/citra/config.h
index de0570b426..c4fac2459c 100644
--- a/src/citra/config.h
+++ b/src/citra/config.h
@@ -16,6 +16,7 @@ class Config {
 
     bool LoadINI(INIReader* config, const char* location, const std::string& default_contents="", bool retry=true);
     void ReadControls();
+    void ReadData();
 public:
     Config();
     ~Config();
diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h
index 11b985e1b0..e7e45f4a96 100644
--- a/src/citra/default_ini.h
+++ b/src/citra/default_ini.h
@@ -25,6 +25,9 @@ pad_sup =
 pad_sdown =
 pad_sleft =
 pad_sright =
+
+[Data Storage]
+use_virtual_sd =
 )";
 
 }
diff --git a/src/citra_qt/config.cpp b/src/citra_qt/config.cpp
index 1b116edc50..0c4f75a96d 100644
--- a/src/citra_qt/config.cpp
+++ b/src/citra_qt/config.cpp
@@ -64,12 +64,26 @@ void Config::SaveControls() {
     qt_config->endGroup();
 }
 
+void Config::ReadData() {
+    qt_config->beginGroup("Data Storage");
+    Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool();
+    qt_config->endGroup();
+}
+
+void Config::SaveData() {
+    qt_config->beginGroup("Data Storage");
+    qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd);
+    qt_config->endGroup();
+}
+
 void Config::Reload() {
     ReadControls();
+    ReadData();
 }
 
 void Config::Save() {
     SaveControls();
+    SaveData();
 }
 
 Config::~Config() {
diff --git a/src/citra_qt/config.h b/src/citra_qt/config.h
index ae390be6b0..74c9ff11dd 100644
--- a/src/citra_qt/config.h
+++ b/src/citra_qt/config.h
@@ -14,6 +14,9 @@ class Config {
 
     void ReadControls();
     void SaveControls();
+
+    void ReadData();
+    void SaveData();
 public:
     Config();
     ~Config();
diff --git a/src/core/file_sys/archive_sdmc.cpp b/src/core/file_sys/archive_sdmc.cpp
index 213923c025..0b647f7d09 100644
--- a/src/core/file_sys/archive_sdmc.cpp
+++ b/src/core/file_sys/archive_sdmc.cpp
@@ -10,6 +10,7 @@
 #include "core/file_sys/archive_sdmc.h"
 #include "core/file_sys/directory_sdmc.h"
 #include "core/file_sys/file_sdmc.h"
+#include "core/settings.h"
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 // FileSys namespace
@@ -29,8 +30,13 @@ Archive_SDMC::~Archive_SDMC() {
  * @return true if it initialized successfully
  */
 bool Archive_SDMC::Initialize() {
-    if (!FileUtil::IsDirectory(mount_point)) {
-        WARN_LOG(FILESYS, "Directory %s not found, disabling SDMC.", mount_point.c_str());
+    if (!Settings::values.use_virtual_sd) {
+        WARN_LOG(FILESYS, "SDMC disabled by config.");
+        return false;
+    }
+
+    if (!FileUtil::CreateFullPath(mount_point)) {
+        WARN_LOG(FILESYS, "Unable to create SDMC path.");
         return false;
     }
 
diff --git a/src/core/settings.h b/src/core/settings.h
index a84c3d4b6e..d586e2ef4f 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -24,6 +24,8 @@ struct Values {
     int pad_sdown_key;
     int pad_sleft_key;
     int pad_sright_key;
+
+    bool use_virtual_sd;
 } extern values;
 
 }