diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
index cfa8a878f4..6e421ed102 100644
--- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
+++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
@@ -51,6 +51,14 @@
..\thirdparty\StyleCop.dll
+
+ ..\thirdparty\MaxMind.GeoIP2.dll
+ False
+
+
+ ..\thirdparty\Mono.Nat.dll
+ False
+
@@ -436,14 +444,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -459,7 +482,6 @@
-
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ConnectionLogic.cs
similarity index 98%
rename from OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/ConnectionLogic.cs
index 1ba3940c1f..9035ffbce1 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ConnectionLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/ConnectionLogic.cs
@@ -9,11 +9,10 @@
#endregion
using System;
-using OpenRA.Mods.Common.Widgets;
using OpenRA.Network;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class ConnectionLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/DirectConnectLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/DirectConnectLogic.cs
similarity index 96%
rename from OpenRA.Mods.RA/Widgets/Logic/DirectConnectLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/DirectConnectLogic.cs
index d6cc8c14aa..51c255d6e9 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/DirectConnectLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/DirectConnectLogic.cs
@@ -11,7 +11,7 @@
using System;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class DirectConnectLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameChatLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameChatLogic.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/IngameChatLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameChatLogic.cs
index 704984964c..4bc1aec5d3 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/IngameChatLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameChatLogic.cs
@@ -16,7 +16,7 @@ using OpenRA.Mods.Common.Traits;
using OpenRA.Network;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class IngameChatLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/ClientTooltipLogic.cs
similarity index 98%
rename from OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Lobby/ClientTooltipLogic.cs
index 6ead10eb7d..18badf3370 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ClientTooltipLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/ClientTooltipLogic.cs
@@ -13,7 +13,7 @@ using System.Net;
using OpenRA.Network;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class ClientTooltipLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/KickClientLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/KickClientLogic.cs
similarity index 96%
rename from OpenRA.Mods.RA/Widgets/Logic/KickClientLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Lobby/KickClientLogic.cs
index 482ae0ab30..36a637d056 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/KickClientLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/KickClientLogic.cs
@@ -11,7 +11,7 @@
using System;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
class KickClientLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/KickSpectatorsLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/KickSpectatorsLogic.cs
similarity index 95%
rename from OpenRA.Mods.RA/Widgets/Logic/KickSpectatorsLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Lobby/KickSpectatorsLogic.cs
index 0646bd94a7..28a467d928 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/KickSpectatorsLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/KickSpectatorsLogic.cs
@@ -11,7 +11,7 @@
using System;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
class KickSpectatorsLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs
index 88cc50aace..0607b62057 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs
@@ -15,12 +15,11 @@ using System.Linq;
using System.Threading;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
-using OpenRA.Mods.Common.Widgets;
using OpenRA.Network;
using OpenRA.Traits;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class LobbyLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyMapPreviewLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/LobbyMapPreviewLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs
index 863487af85..16a4c587be 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/LobbyMapPreviewLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyMapPreviewLogic.cs
@@ -11,7 +11,7 @@
using OpenRA.Network;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class LobbyMapPreviewLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs
rename to OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs
index e92258d2eb..b275c59f67 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/LobbyUtils.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyUtils.cs
@@ -14,13 +14,12 @@ using System.Drawing;
using System.Linq;
using System.Net;
using OpenRA.Graphics;
-using OpenRA.Mods.Common.Widgets;
using OpenRA.Network;
using OpenRA.Primitives;
using OpenRA.Traits;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public static class LobbyUtils
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs
index da238a729a..81abaab183 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/MapChooserLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/MapChooserLogic.cs
@@ -14,7 +14,7 @@ using System.Linq;
using OpenRA.Primitives;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class MapChooserLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ReplayBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/ReplayBrowserLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs
index e9e31b0f26..840c92b21b 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ReplayBrowserLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs
@@ -17,7 +17,7 @@ using OpenRA.Mods.Common.Widgets;
using OpenRA.Primitives;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class ReplayBrowserLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ServerBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ServerBrowserLogic.cs
similarity index 99%
rename from OpenRA.Mods.RA/Widgets/Logic/ServerBrowserLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/ServerBrowserLogic.cs
index e8fa944948..3586c548d9 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ServerBrowserLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/ServerBrowserLogic.cs
@@ -18,7 +18,7 @@ using OpenRA.Network;
using OpenRA.Server;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class ServerBrowserLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ServerCreationLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs
similarity index 98%
rename from OpenRA.Mods.RA/Widgets/Logic/ServerCreationLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs
index 374c70f792..7fbacbb377 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ServerCreationLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/ServerCreationLogic.cs
@@ -12,7 +12,7 @@ using System;
using System.Net;
using OpenRA.Widgets;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
public class ServerCreationLogic
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/TabCompletionLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/TabCompletionLogic.cs
similarity index 95%
rename from OpenRA.Mods.RA/Widgets/Logic/TabCompletionLogic.cs
rename to OpenRA.Mods.Common/Widgets/Logic/TabCompletionLogic.cs
index f61c1ae666..0589daea61 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/TabCompletionLogic.cs
+++ b/OpenRA.Mods.Common/Widgets/Logic/TabCompletionLogic.cs
@@ -12,9 +12,9 @@ using System;
using System.Collections.Generic;
using System.Linq;
-namespace OpenRA.Mods.RA.Widgets.Logic
+namespace OpenRA.Mods.Common.Widgets.Logic
{
- class TabCompletionLogic
+ public class TabCompletionLogic
{
IList candidates = new List();
int currentCandidateIndex = 0;
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index b9fddd9f5a..8ac872a86a 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -60,18 +60,10 @@
-
- ..\thirdparty\Mono.Nat.dll
- False
-
..\thirdparty\ICSharpCode.SharpZipLib.dll
False
-
- ..\thirdparty\MaxMind.GeoIP2.dll
- False
-
..\thirdparty\Eluant.dll
False
@@ -124,7 +116,6 @@
-
@@ -142,31 +133,19 @@
-
-
+
-
-
-
-
-
-
-
-
-
-
-
@@ -178,7 +157,6 @@
-
@@ -192,7 +170,6 @@
-
diff --git a/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/Ingame/DiplomacyLogic.cs
similarity index 98%
rename from OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs
rename to OpenRA.Mods.RA/Widgets/Logic/Ingame/DiplomacyLogic.cs
index 3c3e90c32e..b393316898 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/DiplomacyLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/Ingame/DiplomacyLogic.cs
@@ -10,6 +10,7 @@
using System;
using System.Linq;
+using OpenRA.Mods.Common.Widgets.Logic;
using OpenRA.Network;
using OpenRA.Traits;
using OpenRA.Widgets;
diff --git a/OpenRA.Mods.RA/Widgets/Logic/MainMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MainMenuLogic.cs
index 55dccd38e4..8a4e0f794b 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/MainMenuLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/MainMenuLogic.cs
@@ -15,6 +15,7 @@ using System.IO;
using System.Linq;
using System.Net;
using System.Text;
+using OpenRA.Mods.Common.Widgets.Logic;
using OpenRA.Widgets;
namespace OpenRA.Mods.RA.Widgets.Logic
diff --git a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs
index 5aaefe18f9..f20fd64340 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/ObserverStatsLogic.cs
@@ -15,6 +15,7 @@ using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
using OpenRA.Mods.Common.Widgets;
+using OpenRA.Mods.Common.Widgets.Logic;
using OpenRA.Mods.RA.Traits;
using OpenRA.Network;
using OpenRA.Traits;