diff --git a/daemon/src/audio/sound/dtmfgenerator.cpp b/daemon/src/audio/sound/dtmfgenerator.cpp
index 2865d63afd1dc7382d79017c293971824801f2dd..60274bafa5feaf44a413f2f8bd891d7b72cc2ec2 100644
--- a/daemon/src/audio/sound/dtmfgenerator.cpp
+++ b/daemon/src/audio/sound/dtmfgenerator.cpp
@@ -33,16 +33,16 @@
  *  as that of the covered work.
  */
 
-#include <math.h>
+#include <cmath>
+#include <cassert>
 
 #include "dtmfgenerator.h"
 #include "global.h"
 
-
 /*
  * Tone frequencies
  */
-const DTMFGenerator::DTMFTone DTMFGenerator::tones[NUM_TONES] = {
+const DTMFGenerator::DTMFTone DTMFGenerator::tones_[NUM_TONES] = {
     {'0', 941, 1336},
     {'1', 697, 1209},
     {'2', 697, 1336},
@@ -65,169 +65,83 @@ const DTMFGenerator::DTMFTone DTMFGenerator::tones[NUM_TONES] = {
 /*
  * Initialize the generator
  */
-DTMFGenerator::DTMFGenerator(unsigned int sampleRate) : state(), _sampleRate(sampleRate), tone("", sampleRate)
+DTMFGenerator::DTMFGenerator(unsigned int sampleRate) : state(), sampleRate_(sampleRate), tone_("", sampleRate)
 {
     state.offset = 0;
     state.sample = 0;
 
-    for (int i = 0; i < NUM_TONES; i++) {
-        samples[i] = generateSample(i);
-    }
+    for (int i = 0; i < NUM_TONES; i++)
+        toneBuffers_[i] = fillToneBuffer(i);
 }
 
 
 DTMFGenerator::~DTMFGenerator()
 {
-    for (int i = 0; i < NUM_TONES; i++) {
-        delete[] samples[i];
-        samples[i] = NULL;
-    }
+    for (int i = 0; i < NUM_TONES; i++)
+        delete[] toneBuffers_[i];
 }
 
 /*
  * Get n samples of the signal of code code
  */
-void DTMFGenerator::getSamples(SFLDataFormat* buffer, size_t n, unsigned char code) throw(DTMFException)
+void DTMFGenerator::getSamples(SFLDataFormat* buffer, size_t n, unsigned char code)
 {
-    size_t i;
-
-    if (!buffer) {
+    if (!buffer)
         throw DTMFException("Invalid parameter value");
-    }
-
-    switch (code) {
-
-        case '0':
-            state.sample = samples[0];
-            break;
-
-        case '1':
-            state.sample = samples[1];
-            break;
-
-        case '2':
-            state.sample = samples[2];
-            break;
-
-        case '3':
-            state.sample = samples[3];
-            break;
-
-        case '4':
-            state.sample = samples[4];
-            break;
-
-        case '5':
-            state.sample = samples[5];
-            break;
-
-        case '6':
-            state.sample = samples[6];
-            break;
-
-        case '7':
-            state.sample = samples[7];
-            break;
-
-        case '8':
-            state.sample = samples[8];
-            break;
-
-        case '9':
-            state.sample = samples[9];
-            break;
-
-        case 'A':
-
-        case 'a':
-            state.sample = samples[10];
-            break;
-
-        case 'B':
-
-        case 'b':
-            state.sample = samples[11];
-            break;
-
-        case 'C':
 
-        case 'c':
-            state.sample = samples[12];
-            break;
-
-        case 'D':
-
-        case 'd':
-            state.sample = samples[13];
-            break;
-
-        case '*':
-            state.sample = samples[14];
-            break;
-
-        case '#':
-            state.sample = samples[15];
-            break;
-
-        default:
-            throw DTMFException("Invalid code");
-            return;
-            break;
+    code = toupper(code);
+
+    if (code >= '0' and code <= '9')
+        state.sample = toneBuffers_[code - '0'];
+    else if (code >= 'A' and code <= 'D')
+        state.sample = toneBuffers_[code - 'A' + 10];
+    else {
+        switch (code) {
+            case '*':
+                state.sample = toneBuffers_[14];
+                break;
+
+            case '#':
+                state.sample = toneBuffers_[15];
+                break;
+
+            default:
+                throw DTMFException("Invalid code");
+                break;
+        }
     }
 
-    for (i = 0; i < n; i++) {
-        buffer[i] = state.sample[i % _sampleRate];
-    }
+    size_t i;
+    for (i = 0; i < n; ++i)
+        buffer[i] = state.sample[i % sampleRate_];
 
-    state.offset = i % _sampleRate;
+    state.offset = i % sampleRate_;
 }
 
-
 /*
  * Get next n samples (continues where previous call to
  * genSample or genNextSamples stopped
  */
-void DTMFGenerator::getNextSamples(SFLDataFormat* buffer, size_t n) throw(DTMFException)
+void DTMFGenerator::getNextSamples(SFLDataFormat* buffer, size_t n)
 {
     size_t i;
 
-    if (!buffer) {
+    if (!buffer)
         throw DTMFException("Invalid parameter");
-    }
 
-    if (state.sample == 0) {
+    if (state.sample == 0)
         throw DTMFException("DTMF generator not initialized");
-    }
 
-    for (i = 0; i < n; i++) {
-        buffer[i] = state.sample[(state.offset + i) % _sampleRate];
-    }
+    for (i = 0; i < n; i++)
+        buffer[i] = state.sample[(state.offset + i) % sampleRate_];
 
-    state.offset = (state.offset + i) % _sampleRate;
+    state.offset = (state.offset + i) % sampleRate_;
 }
 
-
-/*
- * Generate a tone sample
- */
-SFLDataFormat* DTMFGenerator::generateSample(unsigned char code) throw(DTMFException)
+SFLDataFormat* DTMFGenerator::fillToneBuffer(int index)
 {
-    SFLDataFormat* ptr;
-
-    try {
-        ptr = new SFLDataFormat[_sampleRate];
-
-        if (!ptr) {
-            throw new DTMFException("No memory left");
-            return 0;
-        }
-
-        tone.genSin(ptr, tones[code].higher, tones[code].lower,  _sampleRate);
-
-        return ptr;
-    } catch (...) {
-        throw new DTMFException("No memory left");
-        return 0;
-    }
-
+    assert(index >= 0 and index < NUM_TONES);
+    SFLDataFormat* ptr = new SFLDataFormat[sampleRate_];
+    tone_.genSin(ptr, tones_[index].higher, tones_[index].lower,  sampleRate_);
+    return ptr;
 }
diff --git a/daemon/src/audio/sound/dtmfgenerator.h b/daemon/src/audio/sound/dtmfgenerator.h
index 8eb3bfb5939d210188b52190be421cca32e675ee..dc0b1599032942e9c867e5fadf2a237d25a9e867 100644
--- a/daemon/src/audio/sound/dtmfgenerator.h
+++ b/daemon/src/audio/sound/dtmfgenerator.h
@@ -75,16 +75,16 @@ class DTMFGenerator {
         DTMFState state;
 
         /** The different kind of tones */
-        static const DTMFTone tones[NUM_TONES];
+        static const DTMFTone tones_[NUM_TONES];
 
-        /** Generated samples */
-        SFLDataFormat* samples[NUM_TONES];
+        /** Generated samples for each tone */
+        SFLDataFormat* toneBuffers_[NUM_TONES];
 
         /** Sampling rate of generated dtmf */
-        int _sampleRate;
+        int sampleRate_;
 
         /** A tone object */
-        Tone tone;
+        Tone tone_;
 
     public:
         /**
@@ -112,7 +112,7 @@ class DTMFGenerator {
          * @param n      number of sampling to get, should be lower or equal to buffer size
          * @param code   dtmf code to get sound
          */
-        void getSamples(SFLDataFormat* buffer, size_t n, unsigned char code) throw(DTMFException);
+        void getSamples(SFLDataFormat* buffer, size_t n, unsigned char code);
 
         /*
          * Get next n samples (continues where previous call to
@@ -120,16 +120,16 @@ class DTMFGenerator {
          * @param buffer a SFLDataFormat pointer to an allocated buffer
          * @param n      number of sampling to get, should be lower or equal to buffer size
          */
-        void getNextSamples(SFLDataFormat* buffer, size_t n) throw(DTMFException);
+        void getNextSamples(SFLDataFormat* buffer, size_t n);
 
     private:
 
         /**
-         * Generate samples for a specific dtmf code
-         * @param code The code
+         * Fill tone buffer for a given index of the array of tones.
+         * @param index of the tone in the array tones_
          * @return SFLDataFormat* The generated data
          */
-        SFLDataFormat* generateSample(unsigned char code) throw(DTMFException);
+        SFLDataFormat* fillToneBuffer(int index);
 };
 
 #endif // DTMFGENERATOR_H