diff --git a/src/Core/Banshee.Services/Banshee.Networking/INetworkAvailabilityService.cs b/src/Core/Banshee.Services/Banshee.Networking/INetworkAvailabilityService.cs
new file mode 100644
index 0000000..b2f5ae8
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Networking/INetworkAvailabilityService.cs
@@ -0,0 +1,36 @@
+// 
+// INetworkAvailabilityService.cs
+//  
+// Author:
+//       Jérémie "Garuma" Laval <jeremie.laval@gmail.com>
+// 
+// Copyright (c) 2009 Jérémie "Garuma" Laval
+// 
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+// 
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Banshee.Networking
+{
+    public interface INetworkAvailabilityService
+    {
+        State State { get; }
+        event StateChangeHandler StateChange;
+    }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Networking/Network.cs b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
index 6b41fdc..9e483f8 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/Network.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
@@ -46,23 +46,23 @@ namespace Banshee.Networking
     {
         public bool Connected;
     }
-
+    
     public class NetworkUnavailableException : ApplicationException
     {
         public NetworkUnavailableException() : base(Catalog.GetString("There is no available network connection"))
         {
         }
-
+        
         public NetworkUnavailableException(string message) : base(message)
         {
         }
     }
-
+    
     public class Network : IService, IRegisterOnDemandService, IDisposable
     {
         public event NetworkStateChangedHandler StateChanged;
         
-        private NetworkManager nm_manager;
+        private INetworkAvailabilityService manager;
         private State current_state;
         private bool disable_internet_access = false;
         
@@ -71,13 +71,13 @@ namespace Banshee.Networking
             InstallPreferences ();
             
             try {
-                ConnectToNetworkManager();
+                ConnectToManager();
             } catch(Exception) {
-                nm_manager = null;
+                manager = null;
                 Log.Warning(
-                    Catalog.GetString("Cannot connect to NetworkManager"),
-                    Catalog.GetString("An available, working network connection will be assumed"),
-                    false);
+                            Catalog.GetString("Cannot connect to NetworkManager"),
+                            Catalog.GetString("An available, working network connection will be assumed"),
+                            false);
             }
         }
         
@@ -85,12 +85,19 @@ namespace Banshee.Networking
         {
             UninstallPreferences ();
         }
-
-        private void ConnectToNetworkManager()
+        
+        private void ConnectToManager()
         {
-            nm_manager = new NetworkManager();
-            nm_manager.StateChange += OnNetworkManagerEvent;
-            current_state = nm_manager.State;
+            if (NetworkManager.ManagerPresent ()) {
+                manager = new NetworkManager ();
+            } else if (Wicd.ManagerPresent ()) {
+                manager = new Wicd ();
+            } else {
+                throw new NetworkUnavailableException ("None of NetworkManager or Wicd were discovered");
+            }
+
+            manager.StateChange += OnNetworkManagerEvent;
+            current_state = manager.State;
         }
         
         private void OnNetworkManagerEvent(State new_state)
@@ -126,11 +133,11 @@ namespace Banshee.Networking
         }
         
         public bool Connected {
-            get { return disable_internet_access ? false : (nm_manager == null ? true : current_state == State.Connected); }
+            get { return disable_internet_access ? false : (manager == null ? true : current_state == State.Connected); }
         }
         
-        public NetworkManager Manager {
-            get { return nm_manager; }
+        public INetworkAvailabilityService Manager {
+            get { return manager; }
         }
         
 #region Offline Preference
diff --git a/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs b/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
index 9d6b558..665234b 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
@@ -51,7 +51,7 @@ namespace Banshee.Networking
     
     public delegate void StateChangeHandler(State state);
     
-    public class NetworkManager
+    public class NetworkManager : INetworkAvailabilityService
     {
         private const string BusName = "org.freedesktop.NetworkManager";
         private const string ObjectPath = "/org/freedesktop/NetworkManager";
@@ -62,7 +62,7 @@ namespace Banshee.Networking
 
         public NetworkManager()
         {
-            if(!Bus.System.NameHasOwner(BusName)) {
+            if(!ManagerPresent ()) {
                 throw new ApplicationException(String.Format("Name {0} has no owner", BusName));
             }
 
@@ -81,6 +81,11 @@ namespace Banshee.Networking
         public State State {
             get { return manager.state(); }
         }
+
+        public static bool ManagerPresent ()
+        {
+            return Bus.System.NameHasOwner(BusName);
+        }
     }
 }
 
diff --git a/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs b/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs
new file mode 100644
index 0000000..a80bce1
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs
@@ -0,0 +1,112 @@
+//
+// NetworkManager.cs
+//
+// Author:
+//   Jérémie Laval <jeremie.laval@gmail.com>
+//
+// Copyright (c) 2009 Jérémie "Garuma" Laval
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+using NDesk.DBus;
+
+namespace Banshee.Networking
+{
+    internal struct StatusStruct
+    {
+        public uint Code;
+        public string[] Foo;
+    }
+
+    [Interface("org.wicd.daemon")]
+    internal interface IWicd
+    {
+        event StateChangeInternalHandler StatusChanged;
+        StatusStruct GetConnectionStatus ();
+    }
+
+    public delegate void StateChangeInternalHandler (uint code, object[] foo);
+
+    public class Wicd : INetworkAvailabilityService
+    {
+        const uint NOT_CONNECTED = 0;
+        const uint CONNECTING    = 1;
+        const uint WIRELESS      = 2;
+        const uint WIRED         = 3;
+        const uint SUSPENDED     = 4;
+
+        const string BusName = "org.wicd.daemon";
+        const string ObjectPath = "/org/wicd/daemon";
+
+        IWicd manager;
+
+        public event StateChangeHandler StateChange;
+
+        public Wicd ()
+        {
+            if (!ManagerPresent ()) {
+                throw new ApplicationException(String.Format ("Name {0} has no owner", BusName));
+            }
+
+            manager = Bus.System.GetObject<IWicd> (BusName, new ObjectPath(ObjectPath));
+            manager.StatusChanged += OnStateChange;
+        }
+
+        private void OnStateChange (uint code, object[] foo)
+        {
+            StateChangeHandler handler = StateChange;
+            if (handler != null) {
+                handler(GetTranslatedCode (code));
+            }
+        }
+
+        public State State {
+            get {
+                return GetTranslatedCode (manager.GetConnectionStatus ().Code);
+            }
+        }
+
+        public static bool ManagerPresent ()
+        {
+            return Bus.System.NameHasOwner (BusName);
+        }
+
+        State GetTranslatedCode (uint wicdCode)
+        {
+            switch (wicdCode) {
+            case NOT_CONNECTED:
+                return State.Disconnected;
+            case CONNECTING:
+                return State.Connecting;
+            case WIRELESS:
+            case WIRED:
+                return State.Connected;
+            case SUSPENDED:
+                return State.Asleep;
+            default:
+                return State.Unknown;
+            }
+        }
+    }
+}
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index c36d426..1a9acc8 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -120,6 +120,8 @@ SOURCES =  \
 	Banshee.Metadata/SaveTrackMetadataService.cs \
 	Banshee.Networking/Network.cs \
 	Banshee.Networking/NetworkManager.cs \
+	Banshee.Networking/Wicd.cs \
+	Banshee.Networking/INetworkAvailabilityService.cs \
 	Banshee.PlatformServices/IScreensaverManager.cs \
 	Banshee.PlatformServices/ScreensaverManager.cs \
 	Banshee.PlaybackController/IBasicPlaybackController.cs \
