@Override
  public void play() {

    if (mPlayerEngineListener.onTrackStart() == false) {
      return; // apparently sth prevents us from playing tracks
    }

    // check if there is anything to play
    if (mPlaylist != null) {

      // check if media player is initialized
      if (mCurrentMediaPlayer == null) {
        mCurrentMediaPlayer = build(mPlaylist.getSelectedTrack());
      }

      // check if current media player is set to our song
      if (mCurrentMediaPlayer != null
          && mCurrentMediaPlayer.playlistEntry != mPlaylist.getSelectedTrack()) {
        cleanUp(); // this will do the cleanup job
        mCurrentMediaPlayer = build(mPlaylist.getSelectedTrack());
      }

      // check if there is any player instance, if not, abort further execution
      if (mCurrentMediaPlayer == null) return;

      // check if current media player is not still buffering
      if (!mCurrentMediaPlayer.preparing) {

        // prevent double-press
        if (!mCurrentMediaPlayer.isPlaying()) {
          // i guess this mean we can play the song
          Log.i(
              JamendoApplication.TAG,
              "Player [playing] " + mCurrentMediaPlayer.playlistEntry.getTrack().getName());

          // starting timer
          mHandler.removeCallbacks(mUpdateTimeTask);
          mHandler.postDelayed(mUpdateTimeTask, 1000);

          // Actual equalizer
          Equalizer equalizer = JamendoApplication.getInstance().getMyEqualizer();

          // Mantain the settings of the equalizer for the new media
          Equalizer newEqualizer = new Equalizer(0, mCurrentMediaPlayer.getAudioSessionId());
          if (equalizer != null) {
            newEqualizer.setProperties(equalizer.getProperties());
          }

          // Enable equalizer before media starts
          JamendoApplication.getInstance().setMyEqualizer(newEqualizer);
          JamendoApplication.getInstance().getMyEqualizer().setEnabled(true);
          mCurrentMediaPlayer.start();
        }
      } else {
        // tell the mediaplayer to play the song as soon as it ends preparing
        mCurrentMediaPlayer.playAfterPrepare = true;
      }
    }

    // Change application media
    JamendoApplication.getInstance().setMyCurrentMedia(mCurrentMediaPlayer);
  }