--- /dev/null
+#ifndef MAFWGSTRENDERERVOLUME_H
+#define MAFWGSTRENDERERVOLUME_H
+
+#include <QObject>
+
+class DBusConnection;
+class DBusMessage;
+class DBusPendingCall;
+class DBusMessageIter;
+class DBusPendingCall;
+
+/**
+ * Provides volume setting, getting and listening functionality using
+ * PulseAudioMainVolume DBus API.
+ */
+class MafwGstRendererVolume : public QObject
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructor
+ */
+ MafwGstRendererVolume();
+ ~MafwGstRendererVolume();
+
+ /**
+ * Get the volume level. Initial volume level is always got via volumeChanged signal.
+ * Before that signal returns always 0.
+ * @return The current volume level. Value is between 0 to 99.
+ */
+ uint getVolume();
+
+ /**
+ * Set the volume level to pulse audio.
+ * @note Volume setting happens asynchronously
+ * and may wait until dbus connection to pulse audio is ready.
+ * @param The volume level to be set. Valid value range is between 0 to 99.
+ * @return true on success.
+ */
+ bool setVolume (uint value);
+
+Q_SIGNALS:
+ /**
+ * Signal telling that volume level has been changed.
+ */
+ void volumeChanged(uint newLevel);
+
+private Q_SLOTS:
+ /** Makes p2p dbus connection to pulse audio. */
+ void connectToPulseAudio();
+
+private:
+ /**
+ * Starts to listen signal from PulseAudioMainVolume DBus API
+ */
+ void listenVolumeSignals();
+
+ /**
+ * Get the step configuration asynchronously from PulseAudioMainVolume
+ */
+ void getRestoreEntryForMediaRole();
+
+ /**
+ * Catch signals from PulseAudioMainVolume telling that volume step configuration has been changed
+ */
+ static void handleIncomingMessages( DBusConnection* conn,
+ DBusMessage* message,
+ MafwGstRendererVolume* self);
+
+ /**
+ * Catch reply callback for step configuration request from PulseAudioMainVolume.
+ */
+ static void getEntryReply(DBusPendingCall *pending, MafwGstRendererVolume *self);
+
+ static void volumeReply(DBusPendingCall *pending, MafwGstRendererVolume *self);
+
+ bool readVolumeFromStruct(DBusMessageIter *iterator);
+
+private:
+ /** The current volume step, values are between 0, used maximum volume level */
+ uint m_currentVolume;
+
+ /** The volume step which is pending to be set. */
+ uint m_pendingVolumeValue;
+
+ /** The dbus connection object */
+ DBusConnection* m_dbusConnection;
+
+ QString m_objectPath;
+
+ /** The pending call. */
+ DBusPendingCall* m_pendingCall;
+
+
+};
+
+#endif // MAFWGSTRENDERERVOLUME_H