diff --git a/Banshee.sln b/Banshee.sln
index 553b513..3bf49a1 100644
--- a/Banshee.sln
+++ b/Banshee.sln
@@ -62,6 +62,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.Osx", "src\Backends
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.GStreamerSharp", "src\Backends\Banshee.GStreamerSharp\Banshee.GStreamerSharp.csproj", "{BA67DA42-F0DA-4D64-BD8B-22F30C727BAB}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.UPower", "src\Backends\Banshee.UPower\Banshee.UPower.csproj", "{3C377337-8E6B-4327-860B-A43197B145C0}"
+EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Banshee.Windows", "src\Backends\Banshee.Windows\Banshee.Windows.csproj", "{9AA07695-3EF9-45CE-849E-A0AB9A1F4006}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Dap", "Dap", "{057215DF-2773-4B42-8B8A-64F2CF7764F2}"
@@ -261,6 +263,15 @@ Global
 		{3B855EBC-8E55-48DF-816B-B241BE45EBD8}.Release|x86.ActiveCfg = Debug|Any CPU
 		{3B855EBC-8E55-48DF-816B-B241BE45EBD8}.Release|x86.Build.0 = Debug|Any CPU
 		{3B855EBC-8E55-48DF-816B-B241BE45EBD8}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Debug|x86.Build.0 = Debug|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Release|x86.ActiveCfg = Release|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Release|x86.Build.0 = Release|Any CPU
+		{3C377337-8E6B-4327-860B-A43197B145C0}.Windows|Any CPU.ActiveCfg = Debug|Any CPU
 		{46AD1892-C5D3-4696-BA40-FBF7F4CE2B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{46AD1892-C5D3-4696-BA40-FBF7F4CE2B39}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{46AD1892-C5D3-4696-BA40-FBF7F4CE2B39}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
@@ -508,6 +519,7 @@ Global
 		{46C02D13-5ED4-4A14-9ACF-125B1E4B6EB5} = {A03B194F-F644-4E95-A602-87200029240D}
 		{379034DF-F34D-409B-8DE9-097BE78E37C8} = {A03B194F-F644-4E95-A602-87200029240D}
 		{BA67DA42-F0DA-4D64-BD8B-22F30C727BAB} = {A03B194F-F644-4E95-A602-87200029240D}
+		{3C377337-8E6B-4327-860B-A43197B145C0} = {A03B194F-F644-4E95-A602-87200029240D}
 		{9AA07695-3EF9-45CE-849E-A0AB9A1F4006} = {A03B194F-F644-4E95-A602-87200029240D}
 		{BC2E94DF-7A82-461E-BE7C-60E41ADC3562} = {057215DF-2773-4B42-8B8A-64F2CF7764F2}
 		{6B73E278-23FB-4A59-9B44-AB7F0212B936} = {057215DF-2773-4B42-8B8A-64F2CF7764F2}
diff --git a/build/AddinXmlStringExtractor.cs b/build/AddinXmlStringExtractor.cs
index f6473ca..7ca6d42 100644
--- a/build/AddinXmlStringExtractor.cs
+++ b/build/AddinXmlStringExtractor.cs
@@ -24,7 +24,8 @@ internal static class AddinXmlStringCatalog
         paths.Sort ();
 
         var blacklist = new string [] { "GStreamer", "Gnome", "Osx", "Unix", "MeeGo", "Gio", "NowPlaying",
-            "Hal", "src/Core", "Banshee.Dap/", "RemoteAudio", "Sample", "SqlDebugConsole", "Template", "Windows" };
+            "Hal", "src/Core", "Banshee.Dap/", "RemoteAudio", "Sample", "SqlDebugConsole", "Template", "Windows",
+            "UPower" };
 
         foreach (var path in paths) {
             if (blacklist.Any (path.Contains))
diff --git a/build/build.environment.mk b/build/build.environment.mk
index 177764b..58ee287 100644
--- a/build/build.environment.mk
+++ b/build/build.environment.mk
@@ -175,6 +175,7 @@ REF_BACKEND_UNIX = $(LINK_BANSHEE_CORE_DEPS) $(LINK_MONO_POSIX)
 REF_BACKEND_HAL = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_DBUS)
 REF_BACKEND_OSX = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_BANSHEE_THICKCLIENT_DEPS) $(MONOMAC_LIBS)
 REF_BACKEND_BNPX11 = $(LINK_EXTENSION_NOWPLAYING_DEPS)
+REF_BACKEND_UPOWER = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_DBUS)
 
 # Cute hack to replace a space with something
 colon:= :
diff --git a/configure.ac b/configure.ac
index 92dc9c0..34fd1b3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -330,6 +330,7 @@ src/Backends/Banshee.Unix/Makefile
 src/Backends/Banshee.Osx/Makefile
 src/Backends/Banshee.NowPlaying.X11/Makefile
 src/Backends/Banshee.NowPlaying.X11/libbnpx11/Makefile
+src/Backends/Banshee.UPower/Makefile
 
 src/Libraries/Makefile
 src/Libraries/Lastfm/Makefile
@@ -431,6 +432,7 @@ ${PACKAGE}-${VERSION}
     GIO Backend:           ${enable_gio} (glib >= 2.22, gtk-sharp-beans, and gio-sharp)
     GIO Hardware:          ${enable_gio_hardware} (gudev-sharp, gkeyfile-sharp)
     HAL Hardware (legacy): ${enable_hal}
+    UPower Backend:        yes
     Library Watcher:       ${HAVE_MONO_2_4_3} (Mono >= 2.4.3)
     Podcasts:              ${enable_podcast}
     Gapless playback:      ${ENABLE_GAPLESS} (gstreamer-plugins-base > 0.10.25.2)
diff --git a/src/Backends/Banshee.UPower/Banshee.Power.UPower/PowerManager.cs b/src/Backends/Banshee.UPower/Banshee.Power.UPower/PowerManager.cs
new file mode 100644
index 0000000..528d979
--- /dev/null
+++ b/src/Backends/Banshee.UPower/Banshee.Power.UPower/PowerManager.cs
@@ -0,0 +1,105 @@
+// 
+// PowerManager.cs
+// 
+// Author:
+//   Alex Launi <alex.launi@canonical.com>
+// 
+// Copyright 2011 Alex Launi
+// 
+// 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 Hyena;
+
+using Banshee.Power;
+using UPower;
+
+namespace Banshee.Power.UPower
+{
+    public class PowerManager : IPowerManager
+    {
+        private Client client;
+
+        public PowerManager ()
+        {
+            client = new Client ();
+
+            client.Changed += OnChanged;
+            client.Resuming += OnResuming;
+            client.Sleeping += OnSleeping;
+        }
+
+#region IDisposable
+        public void Dispose ()
+        {
+            client.Changed -= OnChanged;
+            client.Resuming -= OnResuming;
+            client.Sleeping -= OnSleeping;
+        }
+#endregion
+
+#region IPowerManager
+        public event EventHandler Changed;
+        public event EventHandler Resuming;
+        public event EventHandler Sleeping;
+
+        public bool HasLid {
+            get { return client.LidIsPresent; }
+        }
+
+        public bool LidClosed {
+            get { return client.LidIsClosed; }
+        }
+
+        public bool OnBattery {
+            get { return client.OnBattery; }
+        }
+
+        public bool OnLowBattery {
+            get { return client.OnLowBattery; }
+        }
+#endregion
+
+        void OnChanged (object sender, EventArgs e)
+        {
+            EventHandler handler = Changed;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        void OnResuming (object sender, EventArgs e)
+        {
+            EventHandler handler = Resuming;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        void OnSleeping (object sender, EventArgs e)
+        {
+            EventHandler handler = Sleeping;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+    }
+}
+
diff --git a/src/Backends/Banshee.UPower/Banshee.UPower.addin.xml b/src/Backends/Banshee.UPower/Banshee.UPower.addin.xml
new file mode 100644
index 0000000..bb72e5d
--- /dev/null
+++ b/src/Backends/Banshee.UPower/Banshee.UPower.addin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Addin 
+    id="Banshee.UPower"
+    version="1.0"
+    compatVersion="1.0"
+    copyright="© 2011 Alex Launi Licensed under the MIT X11 license."
+    category="required:Backends"
+    description="UPower power backend for delivering on-battery, suspend, and resume information."
+    defaultEnabled="true">
+
+  <Dependencies>
+    <Addin id="Banshee.Core" version="1.0"/>
+    <Addin id="Banshee.Services" version="1.0"/>
+  </Dependencies>
+  
+  <Extension path="/Banshee/Platform/Power">
+    <IOProvider class="Banshee.Power.UPower.PowerManager" id="Banshee.Power.UPower" />
+  </Extension>
+</Addin>
+
diff --git a/src/Backends/Banshee.UPower/Banshee.UPower.csproj b/src/Backends/Banshee.UPower/Banshee.UPower.csproj
new file mode 100644
index 0000000..ae05386
--- /dev/null
+++ b/src/Backends/Banshee.UPower/Banshee.UPower.csproj
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{3C377337-8E6B-4327-860B-A43197B145C0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>Banshee.UPower</RootNamespace>
+    <AssemblyName>Banshee.UPower</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <ReleaseVersion>1.3</ReleaseVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug</OutputPath>
+    <DefineConstants>DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Release</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <ConsolePause>false</ConsolePause>
+  </PropertyGroup>
+  <ItemGroup>
+    <Folder Include="Banshee.Power.UPower\" />
+    <Folder Include="UPower\" />
+    <Folder Include="Banshee.Power.UPower\" />
+    <Folder Include="Banshee.Power.UPower\" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Core\Banshee.Core\Banshee.Core.csproj">
+      <Project>{2ADB831A-A050-47D0-B6B9-9C19D60233BB}</Project>
+      <Name>Banshee.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Core\Banshee.Services\Banshee.Services.csproj">
+      <Project>{B28354F0-BA87-44E8-989F-B864A3C7C09F}</Project>
+      <Name>Banshee.Services</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="NDesk.DBus.GLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6716e4f9b2ed099">
+      <Package>ndesk-dbus-glib-1.0</Package>
+    </Reference>
+    <Reference Include="NDesk.DBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f6716e4f9b2ed099">
+      <Package>ndesk-dbus-1.0</Package>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="Hyena, Version=1.9.0.0, Culture=neutral">
+      <Package>banshee-1-hyena</Package>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Banshee.Power.UPower\PowerManager.cs" />
+    <Compile Include="UPower\Client.cs" />
+    <Compile Include="UPower\Proxies.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Banshee.UPower.addin.xml">
+      <LogicalName>Banshee.UPower.addin.xml</LogicalName>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/src/Backends/Banshee.UPower/Makefile.am b/src/Backends/Banshee.UPower/Makefile.am
new file mode 100644
index 0000000..ed6e0aa
--- /dev/null
+++ b/src/Backends/Banshee.UPower/Makefile.am
@@ -0,0 +1,11 @@
+ASSEMBLY = Banshee.UPower
+TARGET = library
+LINK = $(REF_BACKEND_UPOWER)
+INSTALL_DIR = $(BACKENDS_INSTALL_DIR)
+
+SOURCES =  \
+	Banshee.Power.UPower/PowerManager.cs \
+	UPower/Client.cs \
+	UPower/Proxies.cs
+
+RESOURCES = Banshee.UPower.addin.xml
diff --git a/src/Backends/Banshee.UPower/UPower/Client.cs b/src/Backends/Banshee.UPower/UPower/Client.cs
new file mode 100644
index 0000000..40543bb
--- /dev/null
+++ b/src/Backends/Banshee.UPower/UPower/Client.cs
@@ -0,0 +1,128 @@
+// 
+// Client.cs
+// 
+// Author:
+//   Alex Launi <alex.launi@canonical.com>
+// 
+// Copyright 2011 Alex Launi
+// 
+// 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.Collections.Generic;
+
+using Hyena;
+using NDesk.DBus;
+using org.freedesktop.DBus;
+
+namespace UPower
+{
+    public class Client
+    {
+        private IUPowerProxy client;
+        private IUPowerPropertiesProxy properties;
+
+        const string UPowerBusName = "org.freedesktop.UPower";
+        const string UPowerObjectPathName = "/org/freedesktop/UPower";
+        const string UPowerIFaceName = "org.freedesktop.UPower";
+
+        public Client ()
+        {
+            // Make sure upower is running and try to start the service if it's not. It should be though.
+            if (!Bus.System.NameHasOwner (UPowerBusName)) {
+                StartReply reply = Bus.System.StartServiceByName (UPowerBusName);
+                if (reply != StartReply.Success && reply != StartReply.AlreadyRunning) {
+                    throw new ApplicationException (String.Format ("Could not start {0}", UPowerBusName));
+                }
+            }
+
+            client = Bus.System.GetObject<IUPowerProxy> (UPowerBusName, new ObjectPath (UPowerObjectPathName));
+            properties = Bus.System.GetObject<IUPowerPropertiesProxy> (UPowerBusName, new ObjectPath (UPowerObjectPathName));
+
+            if (client == null || properties == null) {
+                throw new ApplicationException (String.Format ("The {0} object could not be found on {1}.", UPowerObjectPathName,
+                    UPowerBusName));
+            }
+
+            client.Changed += HandleClientChanged;
+            client.Resuming += HandleClientResuming;
+            client.Sleeping += HandleClientSleeping;
+        }
+
+        public event EventHandler Changed;
+        public event EventHandler Resuming;
+        public event EventHandler Sleeping;
+
+        public bool LidIsClosed {
+            get { return Get ("LidIsClosed"); }
+        }
+
+        public bool LidIsPresent {
+            get { return Get ("LidIsPresent"); }
+        }
+
+        public bool OnBattery {
+            get { return Get ("OnBattery"); }
+        }
+
+        public bool OnLowBattery {
+            get { return Get ("OnLowBattery"); }
+        }
+
+        void HandleClientChanged (object sender, EventArgs e)
+        {
+            EventHandler handler = Changed;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        void HandleClientResuming (object sender, EventArgs e)
+        {
+            EventHandler handler = Resuming;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        void HandleClientSleeping (object sender, EventArgs e)
+        {
+            EventHandler handler = Sleeping;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        bool Get (string property)
+        {
+            bool val;
+            object ret = properties.Get (UPowerIFaceName, property);
+
+            try {
+                val = (bool) ret;
+            } catch (InvalidCastException e) {
+                Log.Exception (String.Format ("{0} on {1} did not return a boolean", property, UPowerIFaceName), e);
+                return false;
+            }
+
+            return val;
+        }
+    }
+}
+
diff --git a/src/Backends/Banshee.UPower/UPower/Proxies.cs b/src/Backends/Banshee.UPower/UPower/Proxies.cs
new file mode 100644
index 0000000..26a96eb
--- /dev/null
+++ b/src/Backends/Banshee.UPower/UPower/Proxies.cs
@@ -0,0 +1,50 @@
+// 
+// Proxies.cs
+// 
+// Author:
+//   Alex Launi <alex.launi@canonical.com>
+// 
+// Copyright 2011 Alex Launi
+// 
+// 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.Collections.Generic;
+
+using NDesk.DBus;
+
+namespace UPower
+{
+    [Interface ("org.freedesktop.UPower")]
+    internal interface IUPowerProxy
+    {
+        event EventHandler Changed;
+        event EventHandler Resuming;
+        event EventHandler Sleeping;
+    }
+
+    [Interface ("org.freedesktop.DBus.Properties")]
+    internal interface IUPowerPropertiesProxy
+    {
+        object Get (string iface, string property);
+        IDictionary<string, object> GetAll (string iface);
+        void Set (string iface, string property, object val);
+    }
+}
+
diff --git a/src/Backends/Makefile.am b/src/Backends/Makefile.am
index c0d5c41..80cb48b 100644
--- a/src/Backends/Makefile.am
+++ b/src/Backends/Makefile.am
@@ -6,7 +6,8 @@ SUBDIRS = \
 	Banshee.Hal \
 	Banshee.Unix \
 	Banshee.NowPlaying.X11 \
-	Banshee.Osx
+	Banshee.Osx \
+	Banshee.UPower
 
 MAINTAINERCLEANFILES = Makefile.in
 
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
index 91162bb..8df8668 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
@@ -74,6 +74,8 @@ namespace Banshee.MediaEngine
         public virtual void Close (bool fullShutdown)
         {
             if (fullShutdown) {
+                ServiceManager.PowerMananger.Resuming -= OnPowerManangerResuming;
+                ServiceManager.PowerMananger.Sleeping -= OnPowerManangerSleeping;
                 Reset ();
             } else {
                 OnStateChanged (idle_state);
diff --git a/src/Core/Banshee.Services/Banshee.Power/IPowerManager.cs b/src/Core/Banshee.Services/Banshee.Power/IPowerManager.cs
new file mode 100644
index 0000000..80cff4f
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Power/IPowerManager.cs
@@ -0,0 +1,42 @@
+// 
+// IPowerManager.cs
+// 
+// Author:
+//   Alex Launi <alex.launi@canonical.com>
+// 
+// Copyright 2011 Alex Launi
+// 
+// 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.Power
+{
+    public interface IPowerManager : IDisposable
+    {
+        bool HasLid { get; }
+        bool LidClosed { get; }
+        bool OnBattery { get; }
+        bool OnLowBattery { get; }
+
+        event EventHandler Changed;
+        event EventHandler Resuming;
+        event EventHandler Sleeping;
+    }
+}
\ No newline at end of file
diff --git a/src/Core/Banshee.Services/Banshee.Power/PowerManager.cs b/src/Core/Banshee.Services/Banshee.Power/PowerManager.cs
new file mode 100644
index 0000000..60bff11
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Power/PowerManager.cs
@@ -0,0 +1,126 @@
+// 
+// PowerManager.cs
+// 
+// Author:
+//   Alex Launi <alex.launi@canonical.com>
+// 
+// Copyright 2011 Alex Launi
+// 
+// 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.Collections.Generic;
+
+using Mono.Addins;
+using Hyena;
+
+using Banshee.ServiceStack;
+
+namespace Banshee.Power
+{
+    public sealed class PowerManager : IService, IPowerManager, IDisposable
+    {
+        private IPowerManager manager;
+
+        public PowerManager ()
+        {
+            TypeExtensionNode node = AddinManager.GetExtensionNode ("/Banshee/Platform/PowerManager") as TypeExtensionNode;
+            try {
+                manager = (IPowerManager) node.CreateInstance (typeof (IPowerManager));
+                Log.DebugFormat ("Loaded PowerManager backend: {0}", node.Id);
+            } catch (Exception e) {
+                Log.Exception ("PowerManager extension failed to load", e);
+            }
+
+            if (manager == null) {
+                throw new Exception ("No power management service could be loaded. Power management will be disabled");
+            }
+
+            manager.Changed += OnManagerChanged;
+            manager.Resuming += OnManagerResuming;
+            manager.Sleeping += OnManagerSleeping;
+        }
+
+        public void Dispose ()
+        {
+            if (manager == null) {
+                return;
+            }
+
+            manager.Changed -= OnManagerChanged;
+            manager.Resuming -= OnManagerResuming;
+            manager.Sleeping -= OnManagerSleeping;
+            manager.Dispose ();
+            manager = null;
+        }
+
+#region IPowerManager
+
+        public event EventHandler Changed;
+        public event EventHandler Sleeping;
+        public event EventHandler Resuming;
+
+        public bool HasLid {
+            get { return manager.HasLid; }
+        }
+
+        public bool LidClosed {
+            get { return manager.LidClosed; }
+        }
+
+        public bool OnBattery {
+            get { return manager.OnBattery; }
+        }
+
+        public bool OnLowBattery {
+            get { return manager.OnLowBattery; }
+        }
+#endregion
+
+        void OnManagerChanged (object sender, EventArgs e)
+        {
+            EventHandler handler = Changed;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        void OnManagerResuming (object sender, EventArgs e)
+        {
+            EventHandler handler = Resuming;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+        void OnManagerSleeping (object sender, EventArgs e)
+        {
+            EventHandler handler = Sleeping;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
+#region IService
+        string IService.ServiceName {
+            get { return "PowerManager"; }
+        }
+#endregion
+    }
+}
\ No newline at end of file
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
index 374897c..d4900e0 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/ServiceManager.cs
@@ -43,6 +43,7 @@ using Banshee.MediaEngine;
 using Banshee.PlaybackController;
 using Banshee.Library;
 using Banshee.Hardware;
+using Banshee.Power;
 
 namespace Banshee.ServiceStack
 {
@@ -443,5 +444,9 @@ namespace Banshee.ServiceStack
         public static HardwareManager HardwareManager {
             get { return Get<HardwareManager> (); }
         }
+
+        public static PowerManager PowerMananger {
+            get { return Get<PowerManager> (); }
+        }
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index b766ad7..fdd19cc 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -322,6 +322,8 @@
     <Compile Include="Banshee.Hardware\UsbPortInfo.cs" />
     <Compile Include="Banshee.MediaEngine\Tests.cs" />
     <Compile Include="Banshee.Sources\Tests.cs" />
+    <Compile Include="Banshee.Power\IPowerManager.cs" />
+    <Compile Include="Banshee.Power\PowerManager.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.Services.addin.xml">
@@ -349,4 +351,7 @@
     </MonoDevelop>
     <VisualStudio />
   </ProjectExtensions>
+  <ItemGroup>
+    <Folder Include="Banshee.Power\" />
+  </ItemGroup>
 </Project>
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index 0de4ae2..650e475 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -158,6 +158,8 @@ SOURCES =  \
 	Banshee.Playlists.Formats/PlsPlaylistFormat.cs \
 	Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs \
 	Banshee.Playlists.Formats/XspfPlaylistFormat.cs \
+	Banshee.Power/IPowerManager.cs \
+	Banshee.Power/PowerManager.cs \
 	Banshee.Preferences/Collection.cs \
 	Banshee.Preferences/Page.cs \
 	Banshee.Preferences/Preference.cs \
diff --git a/src/Hyena b/src/Hyena
index 507573f..dd5de09 160000
--- a/src/Hyena
+++ b/src/Hyena
@@ -1 +1 @@
-Subproject commit 507573f2b0b1a462df491bb236bba9a3e86e2869
+Subproject commit dd5de0988e14e0da67441044dea339eb7ac3a615
