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..9c651ae
--- /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..7d33ab6 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/Network.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
@@ -41,7 +41,7 @@ using Banshee.Configuration;
 namespace Banshee.Networking
 {
     public delegate void NetworkStateChangedHandler(object o, NetworkStateChangedArgs args);
-    
+
     public class NetworkStateChangedArgs : EventArgs
     {
         public bool Connected;
@@ -62,7 +62,7 @@ namespace Banshee.Networking
     {
         public event NetworkStateChangedHandler StateChanged;
         
-        private NetworkManager nm_manager;
+        private INetworkAvailabilityService manager;
         private State current_state;
         private bool disable_internet_access = false;
         
@@ -71,11 +71,11 @@ namespace Banshee.Networking
             InstallPreferences ();
             
             try {
-                ConnectToNetworkManager();
+                ConnectToManager();
             } catch(Exception) {
-                nm_manager = null;
+                manager = null;
                 Log.Warning(
-                    Catalog.GetString("Cannot connect to NetworkManager"),
+                    Catalog.GetString("Cannot connect to NetworkManager or Wicd"),
                     Catalog.GetString("An available, working network connection will be assumed"),
                     false);
             }
@@ -86,11 +86,18 @@ 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..902d9ef 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,12 @@ namespace Banshee.Networking
         public State State {
             get { return manager.state(); }
         }
+
+        public static bool ManagerPresent {
+            get {
+                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..969cf9b
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs
@@ -0,0 +1,115 @@
+//
+// Wicd.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
+    {
+        private enum WicdCodes : uint {
+            NotConnected = 0,
+            Connecting,
+            Wired,
+            Wireless,
+            Suspended
+        }
+
+        private const string BusName = "org.wicd.daemon";
+        private const string ObjectPath = "/org/wicd/daemon";
+
+        private 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 {
+            get {
+                return Bus.System.NameHasOwner (BusName);
+            }
+        }
+
+        State GetTranslatedCode (uint wicdCode)
+        {
+            switch (wicdCode) {
+                case (uint)WicdCodes.NotConnected:
+                    return State.Disconnected;
+                case (uint)WicdCodes.Connecting:
+                    return State.Connecting;
+                case (uint)WicdCodes.Wireless:
+                case (uint)WicdCodes.Wired:
+                    return State.Connected;
+                case (uint)WicdCodes.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 \
