diff --git a/src/citra_qt/debugger/callstack.cpp b/src/citra_qt/debugger/callstack.cpp
index 895851be3f52896b571fef9311ea651f36dc15cc..a9ec2f7fee99b09093eb889f2c4a6b2c5c20985e 100644
--- a/src/citra_qt/debugger/callstack.cpp
+++ b/src/citra_qt/debugger/callstack.cpp
@@ -27,10 +27,10 @@ void CallstackWidget::OnCPUStepped()
     ARM_Interface* app_core = Core::g_app_core;
 
     u32 sp = app_core->GetReg(13); //stack pointer
-    u32 addr, ret_addr, call_addr, func_addr;
+    u32 ret_addr, call_addr, func_addr;
 
     int counter = 0;
-    for (int addr = 0x10000000; addr >= sp; addr -= 4)
+    for (u32 addr = 0x10000000; addr >= sp; addr -= 4)
     {
         ret_addr = Memory::Read32(addr);
         call_addr = ret_addr - 4; //get call address???
diff --git a/src/citra_qt/debugger/graphics_framebuffer.cpp b/src/citra_qt/debugger/graphics_framebuffer.cpp
index ac47f298d704fdee77f82fe35b3e61c71eef5bb6..61b61ef6d058caff536970802e913456898c1595 100644
--- a/src/citra_qt/debugger/graphics_framebuffer.cpp
+++ b/src/citra_qt/debugger/graphics_framebuffer.cpp
@@ -224,8 +224,8 @@ void GraphicsFramebufferWidget::OnUpdate()
     {
         QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32);
         u32* color_buffer = (u32*)Memory::GetPointer(framebuffer_address);
-        for (int y = 0; y < framebuffer_height; ++y) {
-            for (int x = 0; x < framebuffer_width; ++x) {
+        for (unsigned y = 0; y < framebuffer_height; ++y) {
+            for (unsigned x = 0; x < framebuffer_width; ++x) {
                 u32 value = *(color_buffer + x + y * framebuffer_width);
 
                 decoded_image.setPixel(x, y, qRgba((value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF, 255/*value >> 24*/));
@@ -239,8 +239,8 @@ void GraphicsFramebufferWidget::OnUpdate()
     {
         QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32);
         u8* color_buffer = Memory::GetPointer(framebuffer_address);
-        for (int y = 0; y < framebuffer_height; ++y) {
-            for (int x = 0; x < framebuffer_width; ++x) {
+        for (unsigned y = 0; y < framebuffer_height; ++y) {
+            for (unsigned x = 0; x < framebuffer_width; ++x) {
                 u8* pixel_pointer = color_buffer + x * 3 + y * 3 * framebuffer_width;
 
                 decoded_image.setPixel(x, y, qRgba(pixel_pointer[0], pixel_pointer[1], pixel_pointer[2], 255/*value >> 24*/));
@@ -254,8 +254,8 @@ void GraphicsFramebufferWidget::OnUpdate()
     {
         QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32);
         u32* color_buffer = (u32*)Memory::GetPointer(framebuffer_address);
-        for (int y = 0; y < framebuffer_height; ++y) {
-            for (int x = 0; x < framebuffer_width; ++x) {
+        for (unsigned y = 0; y < framebuffer_height; ++y) {
+            for (unsigned x = 0; x < framebuffer_width; ++x) {
                 u16 value = *(u16*)(((u8*)color_buffer) + x * 2 + y * framebuffer_width * 2);
                 u8 r = (value >> 11) & 0x1F;
                 u8 g = (value >> 6) & 0x1F;
diff --git a/src/citra_qt/util/spinbox.cpp b/src/citra_qt/util/spinbox.cpp
index 9672168f5a4ba53edadeb76f2d60c23e77edda2d..24ea3a96706b2f2f9fb47c21ac7ed4fee5ea52ad 100644
--- a/src/citra_qt/util/spinbox.cpp
+++ b/src/citra_qt/util/spinbox.cpp
@@ -238,7 +238,7 @@ QValidator::State CSpinBox::validate(QString& input, int& pos) const
     if (!prefix.isEmpty() && input.left(prefix.length()) != prefix)
         return QValidator::Invalid;
 
-    unsigned strpos = prefix.length();
+    int strpos = prefix.length();
 
     // Empty "numbers" allowed as intermediate values
     if (strpos >= input.length() - HasSign() - suffix.length())
diff --git a/src/core/file_sys/archive_backend.h b/src/core/file_sys/archive_backend.h
index 18c3148840a96b2475cae3c3a6126f6b268d67b0..d7959b2ca17f11d14ce26e6d6ebac34c505e51b0 100644
--- a/src/core/file_sys/archive_backend.h
+++ b/src/core/file_sys/archive_backend.h
@@ -143,7 +143,16 @@ public:
             case Char:
                 return std::vector<u8>(string.begin(), string.end());
             case Wchar:
-                return std::vector<u8>(u16str.begin(), u16str.end());
+            {
+                // use two u8 for each character of u16str
+                std::vector<u8> to_return(u16str.size() * 2);
+                for (size_t i = 0; i < u16str.size(); ++i) {
+                    u16 tmp_char = u16str.at(i);
+                    to_return[i*2] = (tmp_char & 0xFF00) >> 8;
+                    to_return[i*2 + 1] = (tmp_char & 0x00FF);
+                }
+                return to_return;
+            }
             case Empty:
                 return {};
             default:
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp
index 6f56da8a9677e6aaf2187c226ab5c6792760f99c..f955d1957e5108afebbf4b6e483c8093df1a06ec 100644
--- a/src/core/hle/kernel/semaphore.cpp
+++ b/src/core/hle/kernel/semaphore.cpp
@@ -20,8 +20,8 @@ public:
     static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Semaphore; }
     Kernel::HandleType GetHandleType() const override { return Kernel::HandleType::Semaphore; }
 
-    u32 max_count;                              ///< Maximum number of simultaneous holders the semaphore can have
-    u32 available_count;                        ///< Number of free slots left in the semaphore
+    s32 max_count;                              ///< Maximum number of simultaneous holders the semaphore can have
+    s32 available_count;                        ///< Number of free slots left in the semaphore
     std::queue<Handle> waiting_threads;         ///< Threads that are waiting for the semaphore
     std::string name;                           ///< Name of semaphore (optional)
 
@@ -49,8 +49,8 @@ public:
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-ResultCode CreateSemaphore(Handle* handle, u32 initial_count, 
-    u32 max_count, const std::string& name) {
+ResultCode CreateSemaphore(Handle* handle, s32 initial_count, 
+    s32 max_count, const std::string& name) {
 
     if (initial_count > max_count)
         return ResultCode(ErrorDescription::InvalidCombination, ErrorModule::Kernel,
diff --git a/src/core/hle/kernel/semaphore.h b/src/core/hle/kernel/semaphore.h
index f0075fdb818e8523ab38295142e9d0558fb10f4e..ad474b875e13bb7a0929b0b035e75816d37068f4 100644
--- a/src/core/hle/kernel/semaphore.h
+++ b/src/core/hle/kernel/semaphore.h
@@ -18,7 +18,7 @@ namespace Kernel {
  * @param name Optional name of semaphore
  * @return ResultCode of the error
  */
-ResultCode CreateSemaphore(Handle* handle, u32 initial_count, u32 max_count, const std::string& name = "Unknown");
+ResultCode CreateSemaphore(Handle* handle, s32 initial_count, s32 max_count, const std::string& name = "Unknown");
 
 /**
  * Releases a certain number of slots from a semaphore.
diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp
index 0437e53749dc7e7d307a0871f214edd1f964eede..3d84fc5da3b116e00868c9f6127210f75dcc9d55 100644
--- a/src/core/loader/3dsx.cpp
+++ b/src/core/loader/3dsx.cpp
@@ -223,9 +223,7 @@ int THREEDSXReader::Load3DSXFile(const std::string& filename, u32 base_addr)
         LOG_INFO(Loader, "Loading 3DSX file %s...", filename.c_str());
         FileUtil::IOFile file(filename, "rb");
         if (file.IsOpen()) {
-
-            THREEDSXReader reader;
-            reader.Load3DSXFile(filename, 0x00100000);
+            THREEDSXReader::Load3DSXFile(filename, 0x00100000);
             Kernel::LoadExec(0x00100000);
         } else {
             return ResultStatus::Error;
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index e2caeeb8f245c2996ca0dc0cb477ec80fb01dd12..e20d7adb7f10f8059407d83990f88001da2c38a0 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -240,14 +240,14 @@ MathUtil::Rectangle<unsigned> RendererOpenGL::GetViewportExtent() {
     MathUtil::Rectangle<unsigned> viewport_extent;
     if (window_aspect_ratio > emulation_aspect_ratio) {
         // Window is narrower than the emulation content => apply borders to the top and bottom
-        unsigned viewport_height = std::round(emulation_aspect_ratio * framebuffer_width);
+        unsigned viewport_height = static_cast<unsigned>(std::round(emulation_aspect_ratio * framebuffer_width));
         viewport_extent.left = 0;
         viewport_extent.top = (framebuffer_height - viewport_height) / 2;
         viewport_extent.right = viewport_extent.left + framebuffer_width;
         viewport_extent.bottom = viewport_extent.top + viewport_height;
     } else {
         // Otherwise, apply borders to the left and right sides of the window.
-        unsigned viewport_width = std::round(framebuffer_height / emulation_aspect_ratio);
+        unsigned viewport_width = static_cast<unsigned>(std::round(framebuffer_height / emulation_aspect_ratio));
         viewport_extent.left = (framebuffer_width - viewport_width) / 2;
         viewport_extent.top = 0;
         viewport_extent.right = viewport_extent.left + viewport_width;