[vdr-plugin-skinnopacity] 01/03: Imported Upstream version 1.1.3

Tobias Grimm tiber-guest at moszumanska.debian.org
Tue Feb 10 18:07:27 UTC 2015


This is an automated email from the git hooks/post-receive script.

tiber-guest pushed a commit to branch master
in repository vdr-plugin-skinnopacity.

commit 1abe8bb668ca60566d7a73c42b70445acb125199
Author: etobi <git at e-tobi.net>
Date:   Tue Feb 10 19:03:02 2015 +0100

    Imported Upstream version 1.1.3
---
 HISTORY                                            |  248 +++++
 Makefile                                           |   24 +-
 README                                             |  194 +++-
 conf/theme-anthra.conf                             |   31 +
 conf/theme-darkredNG.conf                          |    6 +
 conf/theme-default.conf                            |    5 +
 conf/theme-iceblue.conf                            |    2 +
 conf/theme-light.conf                              |   39 +
 config.c                                           |  641 ++++++-----
 config.h                                           |  384 ++++---
 detailview.c                                       | 1130 ++++++++++++++++++++
 detailview.h                                       |  161 +++
 displaychannel.c                                   |  647 +++--------
 displaychannel.h                                   |   60 +-
 displaychannelview.c                               |  843 +++++++++++++++
 displaychannelview.h                               |   69 ++
 displaymenu.c                                      |  282 +++--
 displaymenu.h                                      |   13 +-
 displaymenuview.c                                  |  795 +++++++-------
 displaymenuview.h                                  |   79 +-
 displaymessage.c                                   |   77 +-
 displaymessage.h                                   |   12 +-
 displayreplay.c                                    |  506 ++++++---
 displayreplay.h                                    |   37 +-
 displaytracks.c                                    |  135 ++-
 displaytracks.h                                    |   12 +-
 displayvolume.c                                    |  109 +-
 displayvolume.h                                    |   16 +-
 fontmanager.c                                      |  135 +++
 fontmanager.h                                      |   67 ++
 geometrymanager.c                                  |  227 ++++
 geometrymanager.h                                  |  115 ++
 helpers.c                                          |  143 ++-
 helpers.h                                          |   24 +
 icons/alternative/vdrlogo_gen2vdr.png              |  Bin 22710 -> 20059 bytes
 icons/anthra/extraIcons/Applikationen.png          |  Bin 0 -> 2073 bytes
 icons/anthra/extraIcons/Audio.png                  |  Bin 0 -> 2674 bytes
 .../extraIcons/Aufnahmen-Liste aktualisieren.png   |  Bin 0 -> 3550 bytes
 icons/anthra/extraIcons/Dienstprogramme.png        |  Bin 0 -> 1581 bytes
 icons/anthra/extraIcons/FireFox.png                |  Bin 0 -> 3359 bytes
 icons/anthra/extraIcons/Info.png                   |  Bin 0 -> 2138 bytes
 icons/anthra/extraIcons/Internet.png               |  Bin 0 -> 3801 bytes
 icons/anthra/extraIcons/Medien.png                 |  Bin 0 -> 3009 bytes
 icons/anthra/extraIcons/Rechner neu starten.png    |  Bin 0 -> 2886 bytes
 icons/anthra/extraIcons/Remote wakeup.png          |  Bin 0 -> 859 bytes
 icons/anthra/extraIcons/Server pausieren.png       |  Bin 0 -> 2281 bytes
 icons/anthra/extraIcons/Spiele.png                 |  Bin 0 -> 2993 bytes
 icons/anthra/extraIcons/System herunterfahren.png  |  Bin 0 -> 2713 bytes
 icons/anthra/extraIcons/System.png                 |  Bin 0 -> 3227 bytes
 icons/anthra/extraIcons/Tools.png                  |  Bin 0 -> 2355 bytes
 icons/anthra/extraIcons/Tunderbird.png             |  Bin 0 -> 3544 bytes
 .../USB Massenspeicher sicher entfernen.png        |  Bin 0 -> 2019 bytes
 icons/anthra/extraIcons/VDR neu starten.png        |  Bin 0 -> 2577 bytes
 icons/anthra/extraIcons/Video.png                  |  Bin 0 -> 2276 bytes
 icons/anthra/extraIcons/Web.png                    |  Bin 0 -> 3930 bytes
 icons/anthra/extraIcons/XBMC.png                   |  Bin 0 -> 3336 bytes
 icons/anthra/extraIcons/Xterm.png                  |  Bin 0 -> 1575 bytes
 icons/anthra/extraIcons/audiovideo.png             |  Bin 0 -> 2765 bytes
 icons/anthra/extraIcons/markad_status.png          |  Bin 0 -> 2865 bytes
 icons/anthra/extraIcons/schneiden_abbrechen.png    |  Bin 0 -> 3420 bytes
 icons/anthra/extraIcons/tux.png                    |  Bin 0 -> 3852 bytes
 icons/anthra/extraIcons/usb.png                    |  Bin 0 -> 1438 bytes
 icons/anthra/extraIcons/vdrlogo.png                |  Bin 0 -> 12796 bytes
 icons/anthra/extraIcons/yaicon_blue.png            |  Bin 0 -> 1931 bytes
 icons/anthra/menuIcons/CAM.png                     |  Bin 0 -> 1619 bytes
 icons/anthra/menuIcons/Channels.png                |  Bin 0 -> 3561 bytes
 icons/anthra/menuIcons/Commands.png                |  Bin 0 -> 2428 bytes
 icons/anthra/menuIcons/DVB.png                     |  Bin 0 -> 2758 bytes
 icons/anthra/menuIcons/EPG.png                     |  Bin 0 -> 2874 bytes
 icons/anthra/menuIcons/LNB.png                     |  Bin 0 -> 3739 bytes
 icons/anthra/menuIcons/Miscellaneous.png           |  Bin 0 -> 1576 bytes
 icons/anthra/menuIcons/OSD.png                     |  Bin 0 -> 1577 bytes
 icons/anthra/menuIcons/Plugins.png                 |  Bin 0 -> 2230 bytes
 icons/anthra/menuIcons/Recording.png               |  Bin 0 -> 1115 bytes
 icons/anthra/menuIcons/Recordings.png              |  Bin 0 -> 3640 bytes
 icons/anthra/menuIcons/Replay.png                  |  Bin 0 -> 1059 bytes
 icons/anthra/menuIcons/Restart.png                 |  Bin 0 -> 2577 bytes
 icons/anthra/menuIcons/Schedule.png                |  Bin 0 -> 2056 bytes
 icons/anthra/menuIcons/Setup.png                   |  Bin 0 -> 3179 bytes
 icons/anthra/menuIcons/StopRecording.png           |  Bin 0 -> 547 bytes
 icons/anthra/menuIcons/StopReplay.png              |  Bin 0 -> 1595 bytes
 icons/anthra/menuIcons/Timers.png                  |  Bin 0 -> 4113 bytes
 icons/anthra/pluginIcons/arghdirector.png          |  Bin 0 -> 1824 bytes
 icons/anthra/pluginIcons/autostart.png             |  Bin 0 -> 3320 bytes
 icons/anthra/pluginIcons/avahi4vdr.png             |  Bin 0 -> 3734 bytes
 icons/anthra/pluginIcons/avards.png                |  Bin 0 -> 665 bytes
 icons/anthra/pluginIcons/block.png                 |  Bin 0 -> 1341 bytes
 icons/anthra/pluginIcons/burn.png                  |  Bin 0 -> 4233 bytes
 icons/anthra/pluginIcons/cdplayer.png              |  Bin 0 -> 2258 bytes
 icons/anthra/pluginIcons/chanman.png               |  Bin 0 -> 3224 bytes
 icons/anthra/pluginIcons/check.png                 |  Bin 0 -> 2141 bytes
 icons/anthra/pluginIcons/conflictcheckonly.png     |  Bin 0 -> 3050 bytes
 icons/anthra/pluginIcons/ddci.png                  |  Bin 0 -> 2876 bytes
 icons/anthra/pluginIcons/devstatus.png             |  Bin 0 -> 3159 bytes
 icons/anthra/pluginIcons/dummydevice.png           |  Bin 0 -> 2035 bytes
 icons/anthra/pluginIcons/duplicates.png            |  Bin 0 -> 2485 bytes
 icons/anthra/pluginIcons/dvbapi.png                |  Bin 0 -> 2869 bytes
 icons/anthra/pluginIcons/dvbhddevice.png           |  Bin 0 -> 3175 bytes
 icons/anthra/pluginIcons/dvbsddevice.png           |  Bin 0 -> 3588 bytes
 icons/anthra/pluginIcons/dynamite.png              |  Bin 0 -> 3973 bytes
 icons/anthra/pluginIcons/eepg.png                  |  Bin 0 -> 3590 bytes
 icons/anthra/pluginIcons/epg2vdr.png               |  Bin 0 -> 4051 bytes
 icons/anthra/pluginIcons/epgsearch.png             |  Bin 0 -> 3228 bytes
 icons/anthra/pluginIcons/epgsearchonly.png         |  Bin 0 -> 2983 bytes
 icons/anthra/pluginIcons/epgsync.png               |  Bin 0 -> 3518 bytes
 icons/anthra/pluginIcons/externalplayer.png        |  Bin 0 -> 2449 bytes
 icons/anthra/pluginIcons/extrecmenu.png            |  Bin 0 -> 2323 bytes
 icons/anthra/pluginIcons/favorites.png             |  Bin 0 -> 1375 bytes
 icons/anthra/pluginIcons/femon.png                 |  Bin 0 -> 3331 bytes
 icons/anthra/pluginIcons/fepg.png                  |  Bin 0 -> 2406 bytes
 icons/anthra/pluginIcons/filebrowser.png           |  Bin 0 -> 1463 bytes
 icons/anthra/pluginIcons/fritzbox.png              |  Bin 0 -> 1931 bytes
 icons/anthra/pluginIcons/graphlcd.png              |  Bin 0 -> 1421 bytes
 icons/anthra/pluginIcons/graphtft.png              |  Bin 0 -> 1421 bytes
 icons/anthra/pluginIcons/image.png                 |  Bin 0 -> 2559 bytes
 icons/anthra/pluginIcons/imonlcd.png               |  Bin 0 -> 1421 bytes
 icons/anthra/pluginIcons/iptv.png                  |  Bin 0 -> 2774 bytes
 icons/anthra/pluginIcons/lcdproc.png               |  Bin 0 -> 1421 bytes
 icons/anthra/pluginIcons/mailbox.png               |  Bin 0 -> 1904 bytes
 icons/anthra/pluginIcons/makemkv.png               |  Bin 0 -> 1941 bytes
 icons/anthra/pluginIcons/markad.png                |  Bin 0 -> 2865 bytes
 icons/anthra/pluginIcons/mlist.png                 |  Bin 0 -> 2505 bytes
 icons/anthra/pluginIcons/music.png                 |  Bin 0 -> 2674 bytes
 icons/anthra/pluginIcons/noepg.png                 |  Bin 0 -> 3355 bytes
 icons/anthra/pluginIcons/nordlichtsepg.png         |  Bin 0 -> 2643 bytes
 icons/anthra/pluginIcons/osdteletext.png           |  Bin 0 -> 1591 bytes
 icons/anthra/pluginIcons/peer.png                  |  Bin 0 -> 4175 bytes
 icons/anthra/pluginIcons/pin.png                   |  Bin 0 -> 1680 bytes
 icons/anthra/pluginIcons/play.png                  |  Bin 0 -> 1059 bytes
 icons/anthra/pluginIcons/pvrinput.png              |  Bin 0 -> 1976 bytes
 icons/anthra/pluginIcons/quickepgsearch.png        |  Bin 0 -> 4781 bytes
 icons/anthra/pluginIcons/radio.png                 |  Bin 0 -> 2016 bytes
 icons/anthra/pluginIcons/remote.png                |  Bin 0 -> 3807 bytes
 icons/anthra/pluginIcons/remotetimers.png          |  Bin 0 -> 4372 bytes
 icons/anthra/pluginIcons/rssreader.png             |  Bin 0 -> 2620 bytes
 icons/anthra/pluginIcons/sc.png                    |  Bin 0 -> 2208 bytes
 icons/anthra/pluginIcons/scraper2vdr.png           |  Bin 0 -> 2726 bytes
 icons/anthra/pluginIcons/screenshot.png            |  Bin 0 -> 2526 bytes
 icons/anthra/pluginIcons/seduatmo.png              |  Bin 0 -> 2024 bytes
 icons/anthra/pluginIcons/skyselectfeeds.png        |  Bin 0 -> 2852 bytes
 icons/anthra/pluginIcons/sleeptimer.png            |  Bin 0 -> 4694 bytes
 icons/anthra/pluginIcons/softhddevice.png          |  Bin 0 -> 2410 bytes
 icons/anthra/pluginIcons/squeezebox.png            |  Bin 0 -> 2672 bytes
 icons/anthra/pluginIcons/streamdev-server.png      |  Bin 0 -> 2821 bytes
 icons/anthra/pluginIcons/systeminfo.png            |  Bin 0 -> 1709 bytes
 icons/anthra/pluginIcons/targavfd.png              |  Bin 0 -> 1421 bytes
 icons/anthra/pluginIcons/trayopenng.png            |  Bin 0 -> 1077 bytes
 icons/anthra/pluginIcons/tvguide.png               |  Bin 0 -> 2129 bytes
 icons/anthra/pluginIcons/tvm2vdr.png               |  Bin 0 -> 2622 bytes
 icons/anthra/pluginIcons/tvscraper.png             |  Bin 0 -> 2726 bytes
 icons/anthra/pluginIcons/undelete.png              |  Bin 0 -> 2947 bytes
 icons/anthra/pluginIcons/vdrboblight.png           |  Bin 0 -> 2024 bytes
 icons/anthra/pluginIcons/weatherhd.png             |  Bin 0 -> 1726 bytes
 icons/anthra/pluginIcons/weatherng.png             |  Bin 0 -> 1726 bytes
 icons/anthra/pluginIcons/xmltv2vdr.png             |  Bin 0 -> 2985 bytes
 icons/anthra/pluginIcons/yaepghg.png               |  Bin 0 -> 2129 bytes
 icons/anthra/skinElements/buttonblue.png           |  Bin 0 -> 9765 bytes
 icons/anthra/skinElements/buttongreen.png          |  Bin 0 -> 9766 bytes
 icons/anthra/skinElements/buttonred.png            |  Bin 0 -> 9765 bytes
 icons/anthra/skinElements/buttonyellow.png         |  Bin 0 -> 9768 bytes
 icons/anthra/skinElements/channellogoback.png      |  Bin 0 -> 60959 bytes
 icons/anthra/skinElements/displaychannelback.png   |  Bin 0 -> 99428 bytes
 .../skinElements/displaychannelback_right.png      |  Bin 0 -> 99428 bytes
 icons/anthra/skinElements/displaychanneltop.png    |  Bin 0 -> 2980 bytes
 .../skinElements/displaychanneltop_right.png       |  Bin 0 -> 3045 bytes
 icons/anthra/skinElements/displayreplayback.png    |  Bin 0 -> 312209 bytes
 icons/anthra/skinElements/displayreplaytop.png     |  Bin 0 -> 2658 bytes
 icons/anthra/skinElements/displayvolume.png        |  Bin 0 -> 45870 bytes
 icons/anthra/skinElements/header_mirroredtop.png   |  Bin 0 -> 991 bytes
 icons/anthra/skinElements/headerback.png           |  Bin 0 -> 68584 bytes
 icons/anthra/skinElements/headerback_mirrored.png  |  Bin 0 -> 68584 bytes
 icons/anthra/skinElements/headertop.png            |  Bin 0 -> 992 bytes
 icons/anthra/skinElements/menubutton.png           |  Bin 0 -> 30993 bytes
 icons/anthra/skinElements/menubuttonactive.png     |  Bin 0 -> 15360 bytes
 icons/anthra/skinElements/menubuttondefault.png    |  Bin 0 -> 54705 bytes
 .../skinElements/menubuttondefaultactive.png       |  Bin 0 -> 15587 bytes
 icons/anthra/skinElements/menubuttontop.png        |  Bin 0 -> 504 bytes
 icons/anthra/skinElements/messageError.png         |  Bin 0 -> 95360 bytes
 icons/anthra/skinElements/messageInfo.png          |  Bin 0 -> 95360 bytes
 icons/anthra/skinElements/messageStatus.png        |  Bin 0 -> 95360 bytes
 icons/anthra/skinElements/messageWarning.png       |  Bin 0 -> 95363 bytes
 icons/anthra/skinElements/scrollbar.png            |  Bin 0 -> 7692 bytes
 icons/anthra/skinIcons/Channelseparator.png        |  Bin 0 -> 28822 bytes
 icons/anthra/skinIcons/DiskUsage.png               |  Bin 0 -> 2763 bytes
 icons/anthra/skinIcons/Thumbs.db                   |  Bin 0 -> 119296 bytes
 icons/anthra/skinIcons/ac3.png                     |  Bin 0 -> 2684 bytes
 icons/anthra/skinIcons/activetimer.png             |  Bin 0 -> 1731 bytes
 icons/anthra/skinIcons/activetimersmall.png        |  Bin 0 -> 833 bytes
 icons/anthra/skinIcons/arrowLeftChannelSep.png     |  Bin 0 -> 6904 bytes
 icons/anthra/skinIcons/arrowRightChannelSep.png    |  Bin 0 -> 6570 bytes
 icons/anthra/skinIcons/channeldelimiter.png        |  Bin 0 -> 3615 bytes
 icons/anthra/skinIcons/crypted.png                 |  Bin 0 -> 609 bytes
 icons/anthra/skinIcons/daydelimiter.png            |  Bin 0 -> 2785 bytes
 icons/anthra/skinIcons/defaultPoster.png           |  Bin 0 -> 1600 bytes
 icons/anthra/skinIcons/discpercent.png             |  Bin 0 -> 2539 bytes
 icons/anthra/skinIcons/dolbyoff.png                |  Bin 0 -> 964 bytes
 icons/anthra/skinIcons/dolbyon.png                 |  Bin 0 -> 954 bytes
 icons/anthra/skinIcons/encrypted.png               |  Bin 0 -> 957 bytes
 icons/anthra/skinIcons/fta.png                     |  Bin 0 -> 800 bytes
 icons/anthra/skinIcons/fwd.png                     |  Bin 0 -> 9157 bytes
 icons/anthra/skinIcons/fwdInactive.png             |  Bin 0 -> 8586 bytes
 icons/anthra/skinIcons/fwdx1.png                   |  Bin 0 -> 9870 bytes
 icons/anthra/skinIcons/fwdx2.png                   |  Bin 0 -> 10413 bytes
 icons/anthra/skinIcons/fwdx3.png                   |  Bin 0 -> 10936 bytes
 icons/anthra/skinIcons/hd1080i.png                 |  Bin 0 -> 1487 bytes
 icons/anthra/skinIcons/hd1080i_rec.png             |  Bin 0 -> 1487 bytes
 icons/anthra/skinIcons/hd720p.png                  |  Bin 0 -> 1480 bytes
 icons/anthra/skinIcons/hd720p_rec.png              |  Bin 0 -> 1480 bytes
 icons/anthra/skinIcons/newrecording.png            |  Bin 0 -> 2815 bytes
 icons/anthra/skinIcons/pause.png                   |  Bin 0 -> 4628 bytes
 icons/anthra/skinIcons/pauseInactive.png           |  Bin 0 -> 5744 bytes
 icons/anthra/skinIcons/play.png                    |  Bin 0 -> 7094 bytes
 icons/anthra/skinIcons/playInactive.png            |  Bin 0 -> 6750 bytes
 icons/anthra/skinIcons/radio.png                   |  Bin 0 -> 1385 bytes
 icons/anthra/skinIcons/recfolder.png               |  Bin 0 -> 2000 bytes
 icons/anthra/skinIcons/recoff.png                  |  Bin 0 -> 2530 bytes
 icons/anthra/skinIcons/recon.png                   |  Bin 0 -> 2763 bytes
 icons/anthra/skinIcons/recordingcutted.png         |  Bin 0 -> 2007 bytes
 icons/anthra/skinIcons/recordingdatetime.png       |  Bin 0 -> 1349 bytes
 icons/anthra/skinIcons/rew.png                     |  Bin 0 -> 8967 bytes
 icons/anthra/skinIcons/rewInactive.png             |  Bin 0 -> 8162 bytes
 icons/anthra/skinIcons/rewx1.png                   |  Bin 0 -> 9684 bytes
 icons/anthra/skinIcons/rewx2.png                   |  Bin 0 -> 10261 bytes
 icons/anthra/skinIcons/rewx3.png                   |  Bin 0 -> 10771 bytes
 icons/anthra/skinIcons/sd576i.png                  |  Bin 0 -> 1502 bytes
 icons/anthra/skinIcons/sd576i_rec.png              |  Bin 0 -> 1502 bytes
 icons/anthra/skinIcons/stereo.png                  |  Bin 0 -> 4433 bytes
 icons/anthra/skinIcons/stereooff.png               |  Bin 0 -> 1045 bytes
 icons/anthra/skinIcons/stereoon.png                |  Bin 0 -> 729 bytes
 icons/anthra/skinIcons/timerActive.png             |  Bin 0 -> 3297 bytes
 icons/anthra/skinIcons/timerInactive.png           |  Bin 0 -> 1524 bytes
 icons/anthra/skinIcons/timerRecording.png          |  Bin 0 -> 528 bytes
 icons/anthra/skinIcons/tracks.png                  |  Bin 0 -> 2674 bytes
 icons/anthra/skinIcons/txtoff.png                  |  Bin 0 -> 377 bytes
 icons/anthra/skinIcons/txton.png                   |  Bin 0 -> 382 bytes
 icons/anthra/skinIcons/vdrlogo.png                 |  Bin 0 -> 10352 bytes
 icons/darkblue/skinElements/channellogoback.png    |  Bin 0 -> 19740 bytes
 icons/darkgrey/menuIcons/CAM.png                   |  Bin 0 -> 14978 bytes
 icons/darkgrey/menuIcons/Channels.png              |  Bin 0 -> 17490 bytes
 icons/darkgrey/menuIcons/Commands.png              |  Bin 0 -> 9202 bytes
 icons/darkgrey/menuIcons/DVB.png                   |  Bin 0 -> 11451 bytes
 icons/darkgrey/menuIcons/EPG.png                   |  Bin 0 -> 10813 bytes
 icons/darkgrey/menuIcons/LNB.png                   |  Bin 0 -> 12980 bytes
 icons/darkgrey/menuIcons/Miscellaneous.png         |  Bin 0 -> 17547 bytes
 icons/darkgrey/menuIcons/OSD.png                   |  Bin 0 -> 9950 bytes
 icons/darkgrey/menuIcons/Plugins.png               |  Bin 0 -> 10477 bytes
 icons/darkgrey/menuIcons/Recording.png             |  Bin 0 -> 15970 bytes
 icons/darkgrey/menuIcons/Recordings.png            |  Bin 0 -> 17160 bytes
 icons/darkgrey/menuIcons/Replay.png                |  Bin 0 -> 16421 bytes
 icons/darkgrey/menuIcons/Restart.png               |  Bin 0 -> 14220 bytes
 icons/darkgrey/menuIcons/Schedule.png              |  Bin 0 -> 17960 bytes
 icons/darkgrey/menuIcons/Setup.png                 |  Bin 0 -> 11397 bytes
 icons/darkgrey/menuIcons/StopRecording.png         |  Bin 0 -> 15751 bytes
 icons/darkgrey/menuIcons/StopReplay.png            |  Bin 0 -> 17031 bytes
 icons/darkgrey/menuIcons/Timers.png                |  Bin 0 -> 18281 bytes
 icons/darkgrey/pluginIcons/admin.png               |  Bin 0 -> 14214 bytes
 icons/darkgrey/pluginIcons/arghdirector.png        |  Bin 0 -> 13258 bytes
 icons/darkgrey/pluginIcons/autostart.png           |  Bin 0 -> 14948 bytes
 icons/darkgrey/pluginIcons/avahi4vdr.png           |  Bin 0 -> 16148 bytes
 icons/darkgrey/pluginIcons/avards.png              |  Bin 0 -> 11803 bytes
 icons/darkgrey/pluginIcons/block.png               |  Bin 0 -> 15920 bytes
 icons/darkgrey/pluginIcons/burn.png                |  Bin 0 -> 16975 bytes
 icons/darkgrey/pluginIcons/cdplayer.png            |  Bin 0 -> 17059 bytes
 icons/darkgrey/pluginIcons/chanman.png             |  Bin 0 -> 17043 bytes
 icons/darkgrey/pluginIcons/ddci.png                |  Bin 0 -> 18312 bytes
 icons/darkgrey/pluginIcons/devstatus.png           |  Bin 0 -> 17169 bytes
 icons/darkgrey/pluginIcons/dummydevice.png         |  Bin 0 -> 14142 bytes
 icons/darkgrey/pluginIcons/duplicates.png          |  Bin 0 -> 14087 bytes
 icons/darkgrey/pluginIcons/dvbapi.png              |  Bin 0 -> 16072 bytes
 icons/darkgrey/pluginIcons/dvbhddevice.png         |  Bin 0 -> 16276 bytes
 icons/darkgrey/pluginIcons/dvbsddevice.png         |  Bin 0 -> 16814 bytes
 icons/darkgrey/pluginIcons/dynamite.png            |  Bin 0 -> 13995 bytes
 icons/darkgrey/pluginIcons/eepg.png                |  Bin 0 -> 15850 bytes
 icons/darkgrey/pluginIcons/epgfixer.png            |  Bin 0 -> 16128 bytes
 icons/darkgrey/pluginIcons/epgsearch.png           |  Bin 0 -> 16976 bytes
 icons/darkgrey/pluginIcons/epgsync.png             |  Bin 0 -> 16558 bytes
 icons/darkgrey/pluginIcons/externalplayer.png      |  Bin 0 -> 14320 bytes
 icons/darkgrey/pluginIcons/favorites.png           |  Bin 0 -> 13944 bytes
 icons/darkgrey/pluginIcons/femon.png               |  Bin 0 -> 14907 bytes
 icons/darkgrey/pluginIcons/fepg.png                |  Bin 0 -> 16253 bytes
 icons/darkgrey/pluginIcons/filebrowser.png         |  Bin 0 -> 16413 bytes
 icons/darkgrey/pluginIcons/fritzbox.png            |  Bin 0 -> 17878 bytes
 icons/darkgrey/pluginIcons/graphlcd.png            |  Bin 0 -> 15829 bytes
 icons/darkgrey/pluginIcons/graphtft.png            |  Bin 0 -> 14207 bytes
 icons/darkgrey/pluginIcons/image.png               |  Bin 0 -> 17498 bytes
 icons/darkgrey/pluginIcons/imonlcd.png             |  Bin 0 -> 15014 bytes
 icons/darkgrey/pluginIcons/iptv.png                |  Bin 0 -> 16047 bytes
 icons/darkgrey/pluginIcons/lcdproc.png             |  Bin 0 -> 16084 bytes
 icons/darkgrey/pluginIcons/markad.png              |  Bin 0 -> 13382 bytes
 icons/darkgrey/pluginIcons/mlist.png               |  Bin 0 -> 18093 bytes
 icons/darkgrey/pluginIcons/noepg.png               |  Bin 0 -> 18127 bytes
 icons/darkgrey/pluginIcons/osdteletext.png         |  Bin 0 -> 14259 bytes
 icons/darkgrey/pluginIcons/remote.png              |  Bin 0 -> 14916 bytes
 icons/darkgrey/pluginIcons/remotetimers.png        |  Bin 0 -> 17555 bytes
 icons/darkgrey/pluginIcons/rssreader.png           |  Bin 0 -> 14557 bytes
 icons/darkgrey/pluginIcons/sc.png                  |  Bin 0 -> 16870 bytes
 icons/darkgrey/pluginIcons/screenshot.png          |  Bin 0 -> 15226 bytes
 icons/darkgrey/pluginIcons/seduatmo.png            |  Bin 0 -> 11780 bytes
 icons/darkgrey/pluginIcons/sleeptimer.png          |  Bin 0 -> 14521 bytes
 icons/darkgrey/pluginIcons/softhddevice.png        |  Bin 0 -> 16013 bytes
 icons/darkgrey/pluginIcons/streamdev.png           |  Bin 0 -> 15991 bytes
 icons/darkgrey/pluginIcons/systeminfo.png          |  Bin 0 -> 17621 bytes
 icons/darkgrey/pluginIcons/targavfd.png            |  Bin 0 -> 16041 bytes
 icons/darkgrey/pluginIcons/trayopenng.png          |  Bin 0 -> 13102 bytes
 icons/darkgrey/pluginIcons/tvguide.png             |  Bin 0 -> 18299 bytes
 icons/darkgrey/pluginIcons/undelete.png            |  Bin 0 -> 17030 bytes
 icons/darkgrey/pluginIcons/weatherng.png           |  Bin 0 -> 15967 bytes
 icons/darkgrey/skinElements/channellogoback.png    |  Bin 0 -> 37758 bytes
 icons/darkgrey/skinIcons/Channelseparator.png      |  Bin 0 -> 28668 bytes
 icons/darkgrey/skinIcons/DiskUsage.png             |  Bin 0 -> 16360 bytes
 icons/darkgrey/skinIcons/activetimer.png           |  Bin 0 -> 6437 bytes
 icons/darkgrey/skinIcons/activetimersmall.png      |  Bin 0 -> 3328 bytes
 icons/darkgrey/skinIcons/arrowLeftChannelSep.png   |  Bin 0 -> 1768 bytes
 icons/darkgrey/skinIcons/arrowRightChannelSep.png  |  Bin 0 -> 1855 bytes
 icons/darkgrey/skinIcons/daydelimiter.png          |  Bin 0 -> 20612 bytes
 icons/darkgrey/skinIcons/encrypted.png             |  Bin 0 -> 4368 bytes
 icons/{ => darkgrey}/skinIcons/fwd.png             |  Bin 18838 -> 16191 bytes
 icons/darkgrey/skinIcons/fwdx1.png                 |  Bin 0 -> 16234 bytes
 icons/darkgrey/skinIcons/fwdx2.png                 |  Bin 0 -> 16374 bytes
 icons/darkgrey/skinIcons/fwdx3.png                 |  Bin 0 -> 16548 bytes
 icons/{ => darkgrey}/skinIcons/pause.png           |  Bin 15668 -> 13021 bytes
 icons/{ => darkgrey}/skinIcons/play.png            |  Bin 17112 -> 14465 bytes
 icons/darkgrey/skinIcons/recordingcutted.png       |  Bin 0 -> 4764 bytes
 icons/darkgrey/skinIcons/recordingdatetime.png     |  Bin 0 -> 7344 bytes
 icons/darkgrey/skinIcons/recordingfolder.png       |  Bin 0 -> 14387 bytes
 icons/{ => darkgrey}/skinIcons/rew.png             |  Bin 18552 -> 15905 bytes
 icons/darkgrey/skinIcons/rewx1.png                 |  Bin 0 -> 15930 bytes
 icons/darkgrey/skinIcons/rewx2.png                 |  Bin 0 -> 16086 bytes
 icons/darkgrey/skinIcons/rewx3.png                 |  Bin 0 -> 16269 bytes
 icons/darkgrey/skinIcons/timerActive.png           |  Bin 0 -> 38752 bytes
 icons/darkgrey/skinIcons/timerInactive.png         |  Bin 0 -> 49777 bytes
 icons/darkgrey/skinIcons/tracks.png                |  Bin 0 -> 19101 bytes
 icons/darkgrey/skinIcons/vdrlogo.png               |  Bin 0 -> 11727 bytes
 icons/darkred/menuIcons/Commands.png               |  Bin 14725 -> 9202 bytes
 icons/darkred/menuIcons/Setup.png                  |  Bin 16531 -> 11397 bytes
 icons/darkred/pluginIcons/admin.png                |  Bin 18722 -> 14214 bytes
 icons/darkred/pluginIcons/dvbhddevice.png          |  Bin 0 -> 16276 bytes
 icons/darkred/pluginIcons/dvbsddevice.png          |  Bin 0 -> 16814 bytes
 icons/darkred/pluginIcons/graphtft.png             |  Bin 0 -> 14207 bytes
 icons/darkred/pluginIcons/nordlichtsepg.png        |  Bin 0 -> 16904 bytes
 icons/darkred/pluginIcons/undelete.png             |  Bin 0 -> 17030 bytes
 icons/darkred/pluginIcons/weatherng.png            |  Bin 0 -> 15967 bytes
 icons/darkred/skinElements/channellogoback.png     |  Bin 0 -> 20750 bytes
 icons/darkred/skinIcons/Channelseparator.png       |  Bin 13541 -> 7595 bytes
 icons/darkred/skinIcons/DiskUsage.png              |  Bin 20123 -> 16360 bytes
 icons/darkred/skinIcons/arrowLeftChannelSep.png    |  Bin 0 -> 1764 bytes
 icons/darkred/skinIcons/arrowRightChannelSep.png   |  Bin 0 -> 1802 bytes
 icons/darkred/skinIcons/channelsymbols.png         |  Bin 6674 -> 4049 bytes
 .../{channelsymbols.png => channelsymbols1.png}    |  Bin
 icons/darkred/skinIcons/crypted.png                |  Bin 0 -> 2778 bytes
 icons/darkred/skinIcons/daydelimiter.png           |  Bin 18885 -> 14122 bytes
 icons/darkred/skinIcons/dolbyoff.png               |  Bin 0 -> 2347 bytes
 icons/darkred/skinIcons/dolbyon.png                |  Bin 0 -> 2730 bytes
 icons/darkred/skinIcons/fta.png                    |  Bin 0 -> 2345 bytes
 icons/darkred/skinIcons/fwdx1.png                  |  Bin 0 -> 15152 bytes
 icons/darkred/skinIcons/fwdx2.png                  |  Bin 0 -> 15360 bytes
 icons/darkred/skinIcons/fwdx3.png                  |  Bin 0 -> 15648 bytes
 icons/darkred/skinIcons/hd1080i.png                |  Bin 5147 -> 3313 bytes
 icons/darkred/skinIcons/hd1080i_rec.png            |  Bin 0 -> 3328 bytes
 icons/darkred/skinIcons/hd720p.png                 |  Bin 5173 -> 3248 bytes
 icons/darkred/skinIcons/hd720p_rec.png             |  Bin 0 -> 3237 bytes
 icons/darkred/skinIcons/recoff.png                 |  Bin 0 -> 2246 bytes
 icons/darkred/skinIcons/recon.png                  |  Bin 0 -> 2508 bytes
 icons/darkred/skinIcons/rewx1.png                  |  Bin 0 -> 15188 bytes
 icons/darkred/skinIcons/rewx2.png                  |  Bin 0 -> 15403 bytes
 icons/darkred/skinIcons/rewx3.png                  |  Bin 0 -> 15662 bytes
 icons/darkred/skinIcons/sd576i.png                 |  Bin 5768 -> 3390 bytes
 icons/darkred/skinIcons/sd576i_rec.png             |  Bin 0 -> 3390 bytes
 icons/darkred/skinIcons/stereooff.png              |  Bin 0 -> 2558 bytes
 icons/darkred/skinIcons/stereoon.png               |  Bin 0 -> 3062 bytes
 icons/darkred/skinIcons/tracks.png                 |  Bin 21616 -> 19101 bytes
 icons/darkred/skinIcons/txtoff.png                 |  Bin 0 -> 2021 bytes
 icons/darkred/skinIcons/txton.png                  |  Bin 0 -> 2218 bytes
 icons/darkred/skinIcons/vdrlogo.png                |  Bin 13461 -> 12959 bytes
 icons/darkredNG/extraIcons/Applikationen.png       |  Bin 0 -> 2073 bytes
 icons/darkredNG/extraIcons/Audio.png               |  Bin 0 -> 2674 bytes
 .../extraIcons/Aufnahmen-Liste aktualisieren.png   |  Bin 0 -> 3550 bytes
 icons/darkredNG/extraIcons/Dienstprogramme.png     |  Bin 0 -> 1581 bytes
 icons/darkredNG/extraIcons/FireFox.png             |  Bin 0 -> 3359 bytes
 icons/darkredNG/extraIcons/Info.png                |  Bin 0 -> 2138 bytes
 icons/darkredNG/extraIcons/Internet.png            |  Bin 0 -> 3801 bytes
 icons/darkredNG/extraIcons/Medien.png              |  Bin 0 -> 3009 bytes
 icons/darkredNG/extraIcons/Rechner neu starten.png |  Bin 0 -> 2886 bytes
 icons/darkredNG/extraIcons/Remote wakeup.png       |  Bin 0 -> 859 bytes
 icons/darkredNG/extraIcons/Spiele.png              |  Bin 0 -> 2993 bytes
 .../darkredNG/extraIcons/System herunterfahren.png |  Bin 0 -> 2713 bytes
 icons/darkredNG/extraIcons/System.png              |  Bin 0 -> 3227 bytes
 icons/darkredNG/extraIcons/Tools.png               |  Bin 0 -> 2355 bytes
 icons/darkredNG/extraIcons/Tunderbird.png          |  Bin 0 -> 3544 bytes
 .../USB Massenspeicher sicher entfernen.png        |  Bin 0 -> 2019 bytes
 icons/darkredNG/extraIcons/VDR neu starten.png     |  Bin 0 -> 2577 bytes
 icons/darkredNG/extraIcons/Video.png               |  Bin 0 -> 2276 bytes
 icons/darkredNG/extraIcons/Web.png                 |  Bin 0 -> 3930 bytes
 icons/darkredNG/extraIcons/XBMC.png                |  Bin 0 -> 3336 bytes
 icons/darkredNG/extraIcons/Xterm.png               |  Bin 0 -> 1575 bytes
 icons/darkredNG/extraIcons/audiovideo.png          |  Bin 0 -> 2765 bytes
 icons/darkredNG/extraIcons/markad_status.png       |  Bin 0 -> 2865 bytes
 icons/darkredNG/extraIcons/schneiden_abbrechen.png |  Bin 0 -> 3420 bytes
 icons/darkredNG/extraIcons/tux.png                 |  Bin 0 -> 3852 bytes
 icons/darkredNG/extraIcons/usb.png                 |  Bin 0 -> 1438 bytes
 icons/darkredNG/extraIcons/vdrlogo.png             |  Bin 0 -> 12796 bytes
 icons/darkredNG/extraIcons/yaicon_blue.png         |  Bin 0 -> 1931 bytes
 icons/darkredNG/menuIcons/CAM.png                  |  Bin 0 -> 1619 bytes
 icons/darkredNG/menuIcons/Channels.png             |  Bin 0 -> 3561 bytes
 icons/darkredNG/menuIcons/Commands.png             |  Bin 0 -> 2428 bytes
 icons/darkredNG/menuIcons/DVB.png                  |  Bin 0 -> 2758 bytes
 icons/darkredNG/menuIcons/EPG.png                  |  Bin 0 -> 2874 bytes
 icons/darkredNG/menuIcons/LNB.png                  |  Bin 0 -> 3739 bytes
 icons/darkredNG/menuIcons/Miscellaneous.png        |  Bin 0 -> 1576 bytes
 icons/darkredNG/menuIcons/OSD.png                  |  Bin 0 -> 1577 bytes
 icons/darkredNG/menuIcons/Plugins.png              |  Bin 0 -> 2230 bytes
 icons/darkredNG/menuIcons/Recording.png            |  Bin 0 -> 1115 bytes
 icons/darkredNG/menuIcons/Recordings.png           |  Bin 0 -> 3640 bytes
 icons/darkredNG/menuIcons/Replay.png               |  Bin 0 -> 1059 bytes
 icons/darkredNG/menuIcons/Restart.png              |  Bin 0 -> 2577 bytes
 icons/darkredNG/menuIcons/Schedule.png             |  Bin 0 -> 2056 bytes
 icons/darkredNG/menuIcons/Setup.png                |  Bin 0 -> 3179 bytes
 icons/darkredNG/menuIcons/StopRecording.png        |  Bin 0 -> 547 bytes
 icons/darkredNG/menuIcons/StopReplay.png           |  Bin 0 -> 1595 bytes
 icons/darkredNG/menuIcons/Timers.png               |  Bin 0 -> 4113 bytes
 icons/darkredNG/pluginIcons/admin.png              |  Bin 0 -> 2355 bytes
 icons/darkredNG/pluginIcons/arghdirector.png       |  Bin 0 -> 1824 bytes
 icons/darkredNG/pluginIcons/autostart.png          |  Bin 0 -> 3320 bytes
 icons/darkredNG/pluginIcons/avahi4vdr.png          |  Bin 0 -> 3734 bytes
 icons/darkredNG/pluginIcons/avards.png             |  Bin 0 -> 665 bytes
 icons/darkredNG/pluginIcons/block.png              |  Bin 0 -> 1341 bytes
 icons/darkredNG/pluginIcons/burn.png               |  Bin 0 -> 4233 bytes
 icons/darkredNG/pluginIcons/cdplayer.png           |  Bin 0 -> 2258 bytes
 icons/darkredNG/pluginIcons/chanman.png            |  Bin 0 -> 3224 bytes
 icons/darkredNG/pluginIcons/check.png              |  Bin 0 -> 2141 bytes
 icons/darkredNG/pluginIcons/conflictcheckonly.png  |  Bin 0 -> 3050 bytes
 icons/darkredNG/pluginIcons/ddci.png               |  Bin 0 -> 2876 bytes
 icons/darkredNG/pluginIcons/devstatus.png          |  Bin 0 -> 3159 bytes
 icons/darkredNG/pluginIcons/dummydevice.png        |  Bin 0 -> 2035 bytes
 icons/darkredNG/pluginIcons/duplicates.png         |  Bin 0 -> 2485 bytes
 icons/darkredNG/pluginIcons/dvbapi.png             |  Bin 0 -> 2869 bytes
 icons/darkredNG/pluginIcons/dvbhddevice.png        |  Bin 0 -> 3175 bytes
 icons/darkredNG/pluginIcons/dvbsddevice.png        |  Bin 0 -> 3588 bytes
 icons/darkredNG/pluginIcons/dynamite.png           |  Bin 0 -> 3973 bytes
 icons/darkredNG/pluginIcons/eepg.png               |  Bin 0 -> 3590 bytes
 icons/darkredNG/pluginIcons/epg2vdr.png            |  Bin 0 -> 4051 bytes
 icons/darkredNG/pluginIcons/epgsearch.png          |  Bin 0 -> 3228 bytes
 icons/darkredNG/pluginIcons/epgsearchonly.png      |  Bin 0 -> 2983 bytes
 icons/darkredNG/pluginIcons/epgsync.png            |  Bin 0 -> 3518 bytes
 icons/darkredNG/pluginIcons/externalplayer.png     |  Bin 0 -> 2449 bytes
 icons/darkredNG/pluginIcons/extrecmenu.png         |  Bin 0 -> 2323 bytes
 icons/darkredNG/pluginIcons/favorites.png          |  Bin 0 -> 1375 bytes
 icons/darkredNG/pluginIcons/femon.png              |  Bin 0 -> 3331 bytes
 icons/darkredNG/pluginIcons/fepg.png               |  Bin 0 -> 2406 bytes
 icons/darkredNG/pluginIcons/filebrowser.png        |  Bin 0 -> 1463 bytes
 icons/darkredNG/pluginIcons/fritzbox.png           |  Bin 0 -> 1931 bytes
 icons/darkredNG/pluginIcons/graphlcd.png           |  Bin 0 -> 1421 bytes
 icons/darkredNG/pluginIcons/graphtft.png           |  Bin 0 -> 1421 bytes
 icons/darkredNG/pluginIcons/image.png              |  Bin 0 -> 2559 bytes
 icons/darkredNG/pluginIcons/imonlcd.png            |  Bin 0 -> 1421 bytes
 icons/darkredNG/pluginIcons/iptv.png               |  Bin 0 -> 2774 bytes
 icons/darkredNG/pluginIcons/lcdproc.png            |  Bin 0 -> 1421 bytes
 icons/darkredNG/pluginIcons/mailbox.png            |  Bin 0 -> 1904 bytes
 icons/darkredNG/pluginIcons/makemkv.png            |  Bin 0 -> 1941 bytes
 icons/darkredNG/pluginIcons/markad.png             |  Bin 0 -> 2865 bytes
 icons/darkredNG/pluginIcons/mlist.png              |  Bin 0 -> 2505 bytes
 icons/darkredNG/pluginIcons/music.png              |  Bin 0 -> 2674 bytes
 icons/darkredNG/pluginIcons/noepg.png              |  Bin 0 -> 3355 bytes
 icons/darkredNG/pluginIcons/nordlichtsepg.png      |  Bin 0 -> 2643 bytes
 icons/darkredNG/pluginIcons/osdteletext.png        |  Bin 0 -> 1591 bytes
 icons/darkredNG/pluginIcons/peer.png               |  Bin 0 -> 4175 bytes
 icons/darkredNG/pluginIcons/play.png               |  Bin 0 -> 1059 bytes
 icons/darkredNG/pluginIcons/pvrinput.png           |  Bin 0 -> 1976 bytes
 icons/darkredNG/pluginIcons/quickepgsearch.png     |  Bin 0 -> 4781 bytes
 icons/darkredNG/pluginIcons/radio.png              |  Bin 0 -> 2016 bytes
 icons/darkredNG/pluginIcons/remote.png             |  Bin 0 -> 3807 bytes
 icons/darkredNG/pluginIcons/remotetimers.png       |  Bin 0 -> 4372 bytes
 icons/darkredNG/pluginIcons/rssreader.png          |  Bin 0 -> 2620 bytes
 icons/darkredNG/pluginIcons/sc.png                 |  Bin 0 -> 2208 bytes
 icons/darkredNG/pluginIcons/screenshot.png         |  Bin 0 -> 2526 bytes
 icons/darkredNG/pluginIcons/seduatmo.png           |  Bin 0 -> 2024 bytes
 icons/darkredNG/pluginIcons/skyselectfeeds.png     |  Bin 0 -> 2852 bytes
 icons/darkredNG/pluginIcons/sleeptimer.png         |  Bin 0 -> 4694 bytes
 icons/darkredNG/pluginIcons/softhddevice.png       |  Bin 0 -> 2410 bytes
 icons/darkredNG/pluginIcons/streamdev-server.png   |  Bin 0 -> 2821 bytes
 icons/darkredNG/pluginIcons/systeminfo.png         |  Bin 0 -> 1709 bytes
 icons/darkredNG/pluginIcons/targavfd.png           |  Bin 0 -> 1421 bytes
 icons/darkredNG/pluginIcons/trayopenng.png         |  Bin 0 -> 1077 bytes
 icons/darkredNG/pluginIcons/tvguide.png            |  Bin 0 -> 2129 bytes
 icons/darkredNG/pluginIcons/tvm2vdr.png            |  Bin 0 -> 2622 bytes
 icons/darkredNG/pluginIcons/tvscraper.png          |  Bin 0 -> 2726 bytes
 icons/darkredNG/pluginIcons/undelete.png           |  Bin 0 -> 2947 bytes
 icons/darkredNG/pluginIcons/weatherng.png          |  Bin 0 -> 1726 bytes
 icons/darkredNG/pluginIcons/xmltv2vdr.png          |  Bin 0 -> 2985 bytes
 icons/darkredNG/pluginIcons/yaepghg.png            |  Bin 0 -> 2129 bytes
 icons/darkredNG/skinElements/buttonblue.png        |  Bin 0 -> 13646 bytes
 icons/darkredNG/skinElements/buttongreen.png       |  Bin 0 -> 13983 bytes
 icons/darkredNG/skinElements/buttonred.png         |  Bin 0 -> 12620 bytes
 icons/darkredNG/skinElements/buttonyellow.png      |  Bin 0 -> 13701 bytes
 icons/darkredNG/skinElements/channellogoback.png   |  Bin 0 -> 35765 bytes
 .../darkredNG/skinElements/displaychannelback.png  |  Bin 0 -> 294017 bytes
 .../skinElements/displaychannelback_right.png      |  Bin 0 -> 290737 bytes
 icons/darkredNG/skinElements/displaychanneltop.png |  Bin 0 -> 101277 bytes
 .../skinElements/displaychanneltop_right.png       |  Bin 0 -> 102937 bytes
 icons/darkredNG/skinElements/displayreplayback.png |  Bin 0 -> 293482 bytes
 icons/darkredNG/skinElements/displayvolume.png     |  Bin 0 -> 55712 bytes
 .../darkredNG/skinElements/header_mirroredback.png |  Bin 0 -> 90195 bytes
 .../darkredNG/skinElements/header_mirroredtop.png  |  Bin 0 -> 40519 bytes
 icons/darkredNG/skinElements/headerback.png        |  Bin 0 -> 90159 bytes
 icons/darkredNG/skinElements/headertop.png         |  Bin 0 -> 40302 bytes
 icons/darkredNG/skinElements/menubutton.png        |  Bin 0 -> 38893 bytes
 icons/darkredNG/skinElements/menubuttonactive.png  |  Bin 0 -> 7365 bytes
 icons/darkredNG/skinElements/menubuttondefault.png |  Bin 0 -> 57696 bytes
 .../skinElements/menubuttondefaultactive.png       |  Bin 0 -> 56948 bytes
 icons/darkredNG/skinElements/messageError.png      |  Bin 0 -> 105535 bytes
 icons/darkredNG/skinElements/messageInfo.png       |  Bin 0 -> 111664 bytes
 icons/darkredNG/skinElements/messageStatus.png     |  Bin 0 -> 115980 bytes
 icons/darkredNG/skinElements/messageWarning.png    |  Bin 0 -> 110952 bytes
 icons/darkredNG/skinElements/scrollbar.png         |  Bin 0 -> 12553 bytes
 icons/darkredNG/skinIcons/Channelseparator.png     |  Bin 0 -> 37855 bytes
 icons/darkredNG/skinIcons/DiskUsage.png            |  Bin 0 -> 2835 bytes
 icons/darkredNG/skinIcons/ac3.png                  |  Bin 0 -> 2684 bytes
 icons/darkredNG/skinIcons/activetimer.png          |  Bin 0 -> 1731 bytes
 icons/darkredNG/skinIcons/activetimersmall.png     |  Bin 0 -> 833 bytes
 icons/darkredNG/skinIcons/arrowLeftChannelSep.png  |  Bin 0 -> 9782 bytes
 icons/darkredNG/skinIcons/arrowRightChannelSep.png |  Bin 0 -> 10540 bytes
 icons/darkredNG/skinIcons/channeldelimiter.png     |  Bin 0 -> 4688 bytes
 icons/darkredNG/skinIcons/crypted.png              |  Bin 0 -> 4409 bytes
 icons/darkredNG/skinIcons/daydelimiter.png         |  Bin 0 -> 2785 bytes
 icons/darkredNG/skinIcons/defaultPoster.png        |  Bin 0 -> 1586 bytes
 icons/darkredNG/skinIcons/discpercent.png          |  Bin 0 -> 3369 bytes
 icons/darkredNG/skinIcons/dolbyoff - Kopie.png     |  Bin 0 -> 1791 bytes
 icons/darkredNG/skinIcons/dolbyoff.png             |  Bin 0 -> 4142 bytes
 icons/darkredNG/skinIcons/dolbyon.png              |  Bin 0 -> 4547 bytes
 icons/darkredNG/skinIcons/encrypted.png            |  Bin 0 -> 957 bytes
 icons/darkredNG/skinIcons/fta - Kopie.png          |  Bin 0 -> 1641 bytes
 icons/darkredNG/skinIcons/fta.png                  |  Bin 0 -> 4081 bytes
 icons/darkredNG/skinIcons/fwd.png                  |  Bin 0 -> 12210 bytes
 icons/darkredNG/skinIcons/fwdInactive.png          |  Bin 0 -> 12656 bytes
 icons/darkredNG/skinIcons/fwdx1.png                |  Bin 0 -> 13911 bytes
 icons/darkredNG/skinIcons/fwdx2.png                |  Bin 0 -> 14268 bytes
 icons/darkredNG/skinIcons/fwdx3.png                |  Bin 0 -> 14752 bytes
 icons/darkredNG/skinIcons/hd1080i.png              |  Bin 0 -> 3313 bytes
 icons/darkredNG/skinIcons/hd1080i_rec.png          |  Bin 0 -> 3328 bytes
 icons/darkredNG/skinIcons/hd720p.png               |  Bin 0 -> 3248 bytes
 icons/darkredNG/skinIcons/hd720p_rec.png           |  Bin 0 -> 3237 bytes
 icons/darkredNG/skinIcons/newrecording.png         |  Bin 0 -> 2815 bytes
 icons/darkredNG/skinIcons/pause.png                |  Bin 0 -> 6316 bytes
 icons/darkredNG/skinIcons/pauseInactive.png        |  Bin 0 -> 6329 bytes
 icons/darkredNG/skinIcons/play.png                 |  Bin 0 -> 10119 bytes
 icons/darkredNG/skinIcons/playInactive.png         |  Bin 0 -> 10871 bytes
 icons/darkredNG/skinIcons/radio.png                |  Bin 0 -> 2188 bytes
 icons/darkredNG/skinIcons/recfolder.png            |  Bin 0 -> 2423 bytes
 icons/darkredNG/skinIcons/recoff.png               |  Bin 0 -> 4036 bytes
 icons/darkredNG/skinIcons/recon.png                |  Bin 0 -> 4322 bytes
 icons/darkredNG/skinIcons/recordingcutted.png      |  Bin 0 -> 2007 bytes
 icons/darkredNG/skinIcons/recordingdatetime.png    |  Bin 0 -> 1349 bytes
 icons/darkredNG/skinIcons/rew.png                  |  Bin 0 -> 11793 bytes
 icons/darkredNG/skinIcons/rewInactive.png          |  Bin 0 -> 13211 bytes
 icons/darkredNG/skinIcons/rewx1.png                |  Bin 0 -> 13221 bytes
 icons/darkredNG/skinIcons/rewx2.png                |  Bin 0 -> 13842 bytes
 icons/darkredNG/skinIcons/rewx3.png                |  Bin 0 -> 14562 bytes
 icons/darkredNG/skinIcons/sd576i.png               |  Bin 0 -> 3390 bytes
 icons/darkredNG/skinIcons/sd576i_rec.png           |  Bin 0 -> 3390 bytes
 icons/darkredNG/skinIcons/stereo.png               |  Bin 0 -> 4433 bytes
 icons/darkredNG/skinIcons/stereooff.png            |  Bin 0 -> 4224 bytes
 icons/darkredNG/skinIcons/stereoon.png             |  Bin 0 -> 4606 bytes
 icons/darkredNG/skinIcons/timerActive.png          |  Bin 0 -> 3297 bytes
 icons/darkredNG/skinIcons/timerInactive.png        |  Bin 0 -> 1527 bytes
 icons/darkredNG/skinIcons/timerRecording.png       |  Bin 0 -> 531 bytes
 icons/darkredNG/skinIcons/tracks.png               |  Bin 0 -> 2674 bytes
 icons/darkredNG/skinIcons/txtoff.png               |  Bin 0 -> 3783 bytes
 icons/darkredNG/skinIcons/txton.png                |  Bin 0 -> 4012 bytes
 icons/darkredNG/skinIcons/vdrlogo.png              |  Bin 0 -> 12123 bytes
 icons/default/extraIcons/Applikationen.png         |  Bin 0 -> 2073 bytes
 icons/default/extraIcons/Audio.png                 |  Bin 0 -> 2674 bytes
 .../extraIcons/Aufnahmen-Liste aktualisieren.png   |  Bin 0 -> 3550 bytes
 icons/default/extraIcons/Dienstprogramme.png       |  Bin 0 -> 1581 bytes
 icons/default/extraIcons/FireFox.png               |  Bin 0 -> 3359 bytes
 icons/default/extraIcons/Info.png                  |  Bin 0 -> 2138 bytes
 icons/default/extraIcons/Internet.png              |  Bin 0 -> 3801 bytes
 icons/default/extraIcons/Medien.png                |  Bin 0 -> 3009 bytes
 icons/default/extraIcons/Rechner neu starten.png   |  Bin 0 -> 2886 bytes
 icons/default/extraIcons/Remote wakeup.png         |  Bin 0 -> 859 bytes
 icons/default/extraIcons/Spiele.png                |  Bin 0 -> 2993 bytes
 icons/default/extraIcons/System herunterfahren.png |  Bin 0 -> 2713 bytes
 icons/default/extraIcons/System.png                |  Bin 0 -> 3227 bytes
 icons/default/extraIcons/Tools.png                 |  Bin 0 -> 2355 bytes
 icons/default/extraIcons/Tunderbird.png            |  Bin 0 -> 3544 bytes
 .../USB Massenspeicher sicher entfernen.png        |  Bin 0 -> 2019 bytes
 icons/default/extraIcons/VDR neu starten.png       |  Bin 0 -> 2577 bytes
 icons/default/extraIcons/Video.png                 |  Bin 0 -> 2276 bytes
 icons/default/extraIcons/Web.png                   |  Bin 0 -> 3930 bytes
 icons/default/extraIcons/XBMC.png                  |  Bin 0 -> 3336 bytes
 icons/default/extraIcons/Xterm.png                 |  Bin 0 -> 1575 bytes
 icons/default/extraIcons/audiovideo.png            |  Bin 0 -> 2765 bytes
 icons/default/extraIcons/markad_status.png         |  Bin 0 -> 2865 bytes
 icons/default/extraIcons/schneiden_abbrechen.png   |  Bin 0 -> 3420 bytes
 icons/default/extraIcons/tux.png                   |  Bin 0 -> 3852 bytes
 icons/default/extraIcons/usb.png                   |  Bin 0 -> 1438 bytes
 icons/default/extraIcons/vdrlogo.png               |  Bin 0 -> 12796 bytes
 icons/default/extraIcons/yaicon_blue.png           |  Bin 0 -> 1931 bytes
 icons/default/menuIcons/CAM.png                    |  Bin 0 -> 1619 bytes
 icons/default/menuIcons/Channels.png               |  Bin 20699 -> 3561 bytes
 icons/default/menuIcons/Commands.png               |  Bin 17893 -> 2428 bytes
 icons/default/menuIcons/DVB.png                    |  Bin 0 -> 2758 bytes
 icons/default/menuIcons/EPG.png                    |  Bin 0 -> 2874 bytes
 icons/default/menuIcons/LNB.png                    |  Bin 0 -> 3739 bytes
 icons/default/menuIcons/Miscellaneous.png          |  Bin 0 -> 1576 bytes
 icons/default/menuIcons/OSD.png                    |  Bin 0 -> 1577 bytes
 icons/default/menuIcons/Plugins.png                |  Bin 0 -> 2230 bytes
 icons/default/menuIcons/Recording.png              |  Bin 0 -> 1115 bytes
 icons/default/menuIcons/Recordings.png             |  Bin 22050 -> 3640 bytes
 icons/default/menuIcons/Replay.png                 |  Bin 0 -> 1059 bytes
 icons/default/menuIcons/Restart.png                |  Bin 0 -> 2577 bytes
 icons/default/menuIcons/Schedule.png               |  Bin 21843 -> 2056 bytes
 icons/default/menuIcons/Setup.png                  |  Bin 20218 -> 3179 bytes
 icons/default/menuIcons/StopRecording.png          |  Bin 0 -> 547 bytes
 icons/default/menuIcons/StopReplay.png             |  Bin 0 -> 1595 bytes
 icons/default/menuIcons/Timers.png                 |  Bin 21615 -> 4113 bytes
 icons/default/pluginIcons/admin.png                |  Bin 23314 -> 2355 bytes
 icons/default/pluginIcons/arghdirector.png         |  Bin 0 -> 1824 bytes
 icons/default/pluginIcons/autostart.png            |  Bin 0 -> 3320 bytes
 icons/default/pluginIcons/avahi4vdr.png            |  Bin 0 -> 3734 bytes
 icons/default/pluginIcons/avards.png               |  Bin 0 -> 665 bytes
 icons/default/pluginIcons/block.png                |  Bin 0 -> 1341 bytes
 icons/default/pluginIcons/burn.png                 |  Bin 0 -> 4233 bytes
 icons/default/pluginIcons/cdplayer.png             |  Bin 0 -> 2258 bytes
 icons/default/pluginIcons/chanman.png              |  Bin 0 -> 3224 bytes
 icons/default/pluginIcons/check.png                |  Bin 0 -> 2141 bytes
 icons/default/pluginIcons/conflictcheckonly.png    |  Bin 0 -> 3050 bytes
 icons/default/pluginIcons/ddci.png                 |  Bin 0 -> 2876 bytes
 icons/default/pluginIcons/devstatus.png            |  Bin 0 -> 3159 bytes
 icons/default/pluginIcons/dummydevice.png          |  Bin 0 -> 2035 bytes
 icons/default/pluginIcons/duplicates.png           |  Bin 0 -> 2485 bytes
 icons/default/pluginIcons/dvbapi.png               |  Bin 0 -> 2869 bytes
 icons/default/pluginIcons/dvbhddevice.png          |  Bin 0 -> 3175 bytes
 icons/default/pluginIcons/dvbsddevice.png          |  Bin 0 -> 3588 bytes
 icons/default/pluginIcons/dynamite.png             |  Bin 0 -> 3973 bytes
 icons/default/pluginIcons/eepg.png                 |  Bin 0 -> 3590 bytes
 icons/default/pluginIcons/epg2vdr.png              |  Bin 0 -> 4051 bytes
 icons/default/pluginIcons/epgsearch.png            |  Bin 0 -> 3228 bytes
 icons/default/pluginIcons/epgsearchonly.png        |  Bin 0 -> 2983 bytes
 icons/default/pluginIcons/epgsync.png              |  Bin 0 -> 3518 bytes
 icons/default/pluginIcons/externalplayer.png       |  Bin 0 -> 2449 bytes
 icons/default/pluginIcons/extrecmenu.png           |  Bin 0 -> 2323 bytes
 icons/default/pluginIcons/favorites.png            |  Bin 0 -> 1375 bytes
 icons/default/pluginIcons/femon.png                |  Bin 0 -> 3331 bytes
 icons/default/pluginIcons/fepg.png                 |  Bin 0 -> 2406 bytes
 icons/default/pluginIcons/filebrowser.png          |  Bin 0 -> 1463 bytes
 icons/default/pluginIcons/fritzbox.png             |  Bin 0 -> 1931 bytes
 icons/default/pluginIcons/graphlcd.png             |  Bin 0 -> 1421 bytes
 icons/default/pluginIcons/graphtft.png             |  Bin 0 -> 1421 bytes
 icons/default/pluginIcons/image.png                |  Bin 0 -> 2559 bytes
 icons/default/pluginIcons/imonlcd.png              |  Bin 0 -> 1421 bytes
 icons/default/pluginIcons/iptv.png                 |  Bin 0 -> 2774 bytes
 icons/default/pluginIcons/lcdproc.png              |  Bin 0 -> 1421 bytes
 icons/default/pluginIcons/mailbox.png              |  Bin 0 -> 1904 bytes
 icons/default/pluginIcons/makemkv.png              |  Bin 0 -> 1941 bytes
 icons/default/pluginIcons/markad.png               |  Bin 0 -> 2865 bytes
 icons/default/pluginIcons/mlist.png                |  Bin 0 -> 2505 bytes
 icons/default/pluginIcons/music.png                |  Bin 0 -> 2674 bytes
 icons/default/pluginIcons/noepg.png                |  Bin 0 -> 3355 bytes
 icons/default/pluginIcons/nordlichtsepg.png        |  Bin 0 -> 2643 bytes
 icons/default/pluginIcons/osdteletext.png          |  Bin 14735 -> 1591 bytes
 icons/default/pluginIcons/peer.png                 |  Bin 0 -> 4175 bytes
 icons/default/pluginIcons/play.png                 |  Bin 0 -> 1059 bytes
 icons/default/pluginIcons/pvrinput.png             |  Bin 0 -> 1976 bytes
 icons/default/pluginIcons/quickepgsearch.png       |  Bin 0 -> 4781 bytes
 icons/default/pluginIcons/radio.png                |  Bin 0 -> 2016 bytes
 icons/default/pluginIcons/remote.png               |  Bin 0 -> 3807 bytes
 icons/default/pluginIcons/remotetimers.png         |  Bin 0 -> 4372 bytes
 icons/default/pluginIcons/rssreader.png            |  Bin 0 -> 2620 bytes
 icons/default/pluginIcons/sc.png                   |  Bin 0 -> 2208 bytes
 icons/default/pluginIcons/screenshot.png           |  Bin 0 -> 2526 bytes
 icons/default/pluginIcons/seduatmo.png             |  Bin 0 -> 2024 bytes
 icons/default/pluginIcons/skyselectfeeds.png       |  Bin 0 -> 2852 bytes
 icons/default/pluginIcons/sleeptimer.png           |  Bin 0 -> 4694 bytes
 icons/default/pluginIcons/softhddevice.png         |  Bin 0 -> 2410 bytes
 icons/default/pluginIcons/streamdev-server.png     |  Bin 0 -> 2821 bytes
 icons/default/pluginIcons/systeminfo.png           |  Bin 0 -> 1709 bytes
 icons/default/pluginIcons/targavfd.png             |  Bin 0 -> 1421 bytes
 icons/default/pluginIcons/trayopenng.png           |  Bin 0 -> 1077 bytes
 icons/default/pluginIcons/tvguide.png              |  Bin 22966 -> 2129 bytes
 icons/default/pluginIcons/tvm2vdr.png              |  Bin 0 -> 2622 bytes
 icons/default/pluginIcons/tvscraper.png            |  Bin 0 -> 2726 bytes
 icons/default/pluginIcons/undelete.png             |  Bin 0 -> 2947 bytes
 icons/default/pluginIcons/weatherng.png            |  Bin 0 -> 1726 bytes
 icons/default/pluginIcons/xmltv2vdr.png            |  Bin 0 -> 2985 bytes
 icons/default/pluginIcons/yaepghg.png              |  Bin 0 -> 2129 bytes
 icons/default/skinElements/buttonblue.png          |  Bin 0 -> 13973 bytes
 icons/default/skinElements/buttongreen.png         |  Bin 0 -> 14537 bytes
 icons/default/skinElements/buttonred.png           |  Bin 0 -> 13011 bytes
 icons/default/skinElements/buttonyellow.png        |  Bin 0 -> 13919 bytes
 icons/default/skinElements/channellogoback.png     |  Bin 0 -> 35436 bytes
 icons/default/skinElements/displaychannelback.png  |  Bin 0 -> 324403 bytes
 .../skinElements/displaychannelback_right.png      |  Bin 0 -> 321190 bytes
 icons/default/skinElements/displaychanneltop.png   |  Bin 0 -> 8987 bytes
 .../skinElements/displaychanneltop_right.png       |  Bin 0 -> 9959 bytes
 icons/default/skinElements/displayreplayback.png   |  Bin 0 -> 321112 bytes
 icons/default/skinElements/displayreplaytop.png    |  Bin 0 -> 4881 bytes
 icons/default/skinElements/displayvolume.png       |  Bin 0 -> 58704 bytes
 icons/default/skinElements/header_mirroredtop.png  |  Bin 0 -> 5449 bytes
 icons/default/skinElements/headertop.png           |  Bin 0 -> 5295 bytes
 icons/default/skinElements/menubutton.png          |  Bin 0 -> 9360 bytes
 icons/default/skinElements/menubuttonactive.png    |  Bin 0 -> 11656 bytes
 icons/default/skinElements/menubuttondefault.png   |  Bin 0 -> 60910 bytes
 .../skinElements/menubuttondefaultactive.png       |  Bin 0 -> 64422 bytes
 icons/default/skinElements/menubuttontop.png       |  Bin 0 -> 3772 bytes
 icons/default/skinElements/messageError.png        |  Bin 0 -> 114302 bytes
 icons/default/skinElements/messageInfo.png         |  Bin 0 -> 120782 bytes
 icons/default/skinElements/messageStatus.png       |  Bin 0 -> 120430 bytes
 icons/default/skinElements/messageWarning.png      |  Bin 0 -> 116747 bytes
 icons/default/skinElements/scrollbar.png           |  Bin 0 -> 11893 bytes
 icons/default/skinIcons/Channelseparator.png       |  Bin 0 -> 36555 bytes
 icons/default/skinIcons/DiskUsage.png              |  Bin 0 -> 4404 bytes
 icons/default/skinIcons/ac3.png                    |  Bin 0 -> 2684 bytes
 icons/default/skinIcons/activetimer.png            |  Bin 0 -> 1731 bytes
 icons/default/skinIcons/activetimersmall.png       |  Bin 0 -> 833 bytes
 icons/default/skinIcons/arrowLeftChannelSep.png    |  Bin 0 -> 11625 bytes
 icons/default/skinIcons/arrowRightChannelSep.png   |  Bin 0 -> 10951 bytes
 icons/default/skinIcons/channeldelimiter.png       |  Bin 0 -> 4688 bytes
 icons/default/skinIcons/crypted.png                |  Bin 0 -> 721 bytes
 icons/default/skinIcons/daydelimiter.png           |  Bin 0 -> 2785 bytes
 icons/default/skinIcons/defaultPoster.png          |  Bin 0 -> 1586 bytes
 icons/default/skinIcons/discpercent.png            |  Bin 0 -> 3369 bytes
 icons/default/skinIcons/dolbyoff.png               |  Bin 0 -> 1791 bytes
 icons/default/skinIcons/dolbyon.png                |  Bin 0 -> 1792 bytes
 icons/default/skinIcons/encrypted.png              |  Bin 0 -> 957 bytes
 icons/default/skinIcons/fta.png                    |  Bin 0 -> 1641 bytes
 icons/default/skinIcons/fwd.png                    |  Bin 0 -> 11503 bytes
 icons/default/skinIcons/fwdInactive.png            |  Bin 0 -> 12656 bytes
 icons/default/skinIcons/fwdx1.png                  |  Bin 0 -> 13093 bytes
 icons/default/skinIcons/fwdx2.png                  |  Bin 0 -> 13094 bytes
 icons/default/skinIcons/fwdx3.png                  |  Bin 0 -> 13010 bytes
 icons/default/skinIcons/hd1080i.png                |  Bin 0 -> 2259 bytes
 icons/default/skinIcons/hd1080i_rec.png            |  Bin 0 -> 2259 bytes
 icons/default/skinIcons/hd720p.png                 |  Bin 0 -> 2299 bytes
 icons/default/skinIcons/hd720p_rec.png             |  Bin 0 -> 2299 bytes
 icons/default/skinIcons/newrecording.png           |  Bin 0 -> 2815 bytes
 icons/default/skinIcons/pause.png                  |  Bin 0 -> 4959 bytes
 icons/default/skinIcons/pauseInactive.png          |  Bin 0 -> 6329 bytes
 icons/default/skinIcons/play.png                   |  Bin 0 -> 10550 bytes
 icons/default/skinIcons/playInactive.png           |  Bin 0 -> 10871 bytes
 icons/default/skinIcons/radio.png                  |  Bin 0 -> 2188 bytes
 icons/default/skinIcons/recfolder.png              |  Bin 0 -> 2423 bytes
 icons/default/skinIcons/recoff.png                 |  Bin 0 -> 2543 bytes
 icons/default/skinIcons/recon.png                  |  Bin 0 -> 2776 bytes
 icons/default/skinIcons/recordingcutted.png        |  Bin 0 -> 2007 bytes
 icons/default/skinIcons/recordingdatetime.png      |  Bin 0 -> 1349 bytes
 icons/default/skinIcons/rew.png                    |  Bin 0 -> 12275 bytes
 icons/default/skinIcons/rewInactive.png            |  Bin 0 -> 13211 bytes
 icons/default/skinIcons/rewx1.png                  |  Bin 0 -> 13588 bytes
 icons/default/skinIcons/rewx2.png                  |  Bin 0 -> 13660 bytes
 icons/default/skinIcons/rewx3.png                  |  Bin 0 -> 13970 bytes
 icons/default/skinIcons/sd576i.png                 |  Bin 0 -> 2363 bytes
 icons/default/skinIcons/sd576i_rec.png             |  Bin 0 -> 2363 bytes
 icons/default/skinIcons/stereo.png                 |  Bin 0 -> 4433 bytes
 icons/default/skinIcons/stereooff.png              |  Bin 0 -> 1944 bytes
 icons/default/skinIcons/stereoon.png               |  Bin 0 -> 1609 bytes
 icons/default/skinIcons/timerActive.png            |  Bin 0 -> 3297 bytes
 icons/default/skinIcons/timerInactive.png          |  Bin 0 -> 1527 bytes
 icons/default/skinIcons/timerRecording.png         |  Bin 0 -> 531 bytes
 icons/default/skinIcons/tracks.png                 |  Bin 0 -> 2674 bytes
 icons/default/skinIcons/txtoff.png                 |  Bin 0 -> 1216 bytes
 icons/default/skinIcons/txton.png                  |  Bin 0 -> 1214 bytes
 icons/default/skinIcons/vdrlogo.png                |  Bin 13595 -> 12123 bytes
 ...ieren.png => Aufnahmen-Liste aktualisieren.png} |  Bin
 ...ner_neu_starten.png => Rechner neu starten.png} |  Bin
 ...png => USB Massenspeicher sicher entfernen.png} |  Bin
 .../{VDR_neu_starten.png => VDR neu starten.png}   |  Bin
 icons/extraIcons/{xbmc.png => XBMC.png}            |  Bin
 icons/extraIcons/{xterm.png => Xterm.png}          |  Bin
 .../extraIcons/{AudioVideo.png => audiovideo.png}  |  Bin
 icons/green/menuIcons/Commands.png                 |  Bin 19176 -> 16525 bytes
 icons/green/menuIcons/Setup.png                    |  Bin 22272 -> 19621 bytes
 icons/green/pluginIcons/admin.png                  |  Bin 24309 -> 21658 bytes
 icons/green/skinElements/channellogoback.png       |  Bin 0 -> 16556 bytes
 icons/green/skinIcons/Channelseparator.png         |  Bin 0 -> 19300 bytes
 icons/green/skinIcons/DiskUsage.png                |  Bin 24797 -> 22164 bytes
 icons/green/skinIcons/arrowLeftChannelSep.png      |  Bin 0 -> 1797 bytes
 icons/green/skinIcons/arrowRightChannelSep.png     |  Bin 0 -> 1845 bytes
 icons/green/skinIcons/daydelimiter.png             |  Bin 24430 -> 21779 bytes
 icons/green/skinIcons/fwd.png                      |  Bin 20142 -> 17491 bytes
 icons/green/skinIcons/fwdx1.png                    |  Bin 0 -> 17514 bytes
 icons/green/skinIcons/fwdx2.png                    |  Bin 0 -> 17657 bytes
 icons/green/skinIcons/fwdx3.png                    |  Bin 0 -> 17831 bytes
 icons/green/skinIcons/pause.png                    |  Bin 17060 -> 14409 bytes
 icons/green/skinIcons/play.png                     |  Bin 18711 -> 16060 bytes
 icons/green/skinIcons/rew.png                      |  Bin 20000 -> 17349 bytes
 icons/green/skinIcons/rewx1.png                    |  Bin 0 -> 17341 bytes
 icons/green/skinIcons/rewx2.png                    |  Bin 0 -> 17470 bytes
 icons/green/skinIcons/rewx3.png                    |  Bin 0 -> 17642 bytes
 icons/green/skinIcons/tracks.png                   |  Bin 29986 -> 27353 bytes
 icons/green/skinIcons/vdrlogo.png                  |  Bin 0 -> 13023 bytes
 icons/iceblue/extraIcons/Applikationen.png         |  Bin 0 -> 9372 bytes
 icons/iceblue/extraIcons/Audio.png                 |  Bin 0 -> 10244 bytes
 .../extraIcons/Aufnahmen-Liste aktualisieren.png   |  Bin 0 -> 9707 bytes
 icons/iceblue/extraIcons/Dienstprogramme.png       |  Bin 0 -> 8383 bytes
 icons/iceblue/extraIcons/FireFox.png               |  Bin 0 -> 11172 bytes
 icons/iceblue/extraIcons/Info.png                  |  Bin 0 -> 8781 bytes
 icons/iceblue/extraIcons/Internet.png              |  Bin 0 -> 10529 bytes
 icons/iceblue/extraIcons/Medien.png                |  Bin 0 -> 10883 bytes
 icons/iceblue/extraIcons/Rechner neu starten.png   |  Bin 0 -> 8835 bytes
 icons/iceblue/extraIcons/Remote wakeup.png         |  Bin 0 -> 8676 bytes
 icons/iceblue/extraIcons/Spiele.png                |  Bin 0 -> 9439 bytes
 icons/iceblue/extraIcons/System herunterfahren.png |  Bin 0 -> 8754 bytes
 icons/iceblue/extraIcons/System.png                |  Bin 0 -> 9788 bytes
 icons/iceblue/extraIcons/Tools.png                 |  Bin 0 -> 9496 bytes
 icons/iceblue/extraIcons/Tunderbird.png            |  Bin 0 -> 10264 bytes
 .../USB Massenspeicher sicher entfernen.png        |  Bin 0 -> 8862 bytes
 icons/iceblue/extraIcons/VDR neu starten.png       |  Bin 0 -> 8832 bytes
 icons/iceblue/extraIcons/Video.png                 |  Bin 0 -> 9617 bytes
 icons/iceblue/extraIcons/Web.png                   |  Bin 0 -> 9452 bytes
 icons/iceblue/extraIcons/XBMC.png                  |  Bin 0 -> 8840 bytes
 icons/iceblue/extraIcons/Xterm.png                 |  Bin 0 -> 9032 bytes
 icons/iceblue/extraIcons/audiovideo.png            |  Bin 0 -> 9771 bytes
 icons/iceblue/extraIcons/markad_status.png         |  Bin 0 -> 8761 bytes
 icons/iceblue/extraIcons/schneiden_abbrechen.png   |  Bin 0 -> 8814 bytes
 icons/iceblue/extraIcons/tux.png                   |  Bin 0 -> 8594 bytes
 icons/iceblue/extraIcons/usb.png                   |  Bin 0 -> 8378 bytes
 icons/iceblue/extraIcons/vdrlogo.png               |  Bin 0 -> 9494 bytes
 icons/iceblue/extraIcons/yaicon_blue.png           |  Bin 0 -> 7553 bytes
 icons/iceblue/menuIcons/CAM.png                    |  Bin 0 -> 9258 bytes
 icons/iceblue/menuIcons/Channels.png               |  Bin 0 -> 9648 bytes
 icons/iceblue/menuIcons/Commands.png               |  Bin 0 -> 7827 bytes
 icons/iceblue/menuIcons/DVB.png                    |  Bin 0 -> 7486 bytes
 icons/iceblue/menuIcons/EPG.png                    |  Bin 0 -> 10148 bytes
 icons/iceblue/menuIcons/LNB.png                    |  Bin 0 -> 8259 bytes
 icons/iceblue/menuIcons/Miscellaneous.png          |  Bin 0 -> 11142 bytes
 icons/iceblue/menuIcons/OSD.png                    |  Bin 0 -> 9821 bytes
 icons/iceblue/menuIcons/Plugins.png                |  Bin 0 -> 8921 bytes
 icons/iceblue/menuIcons/Recording.png              |  Bin 0 -> 10028 bytes
 icons/iceblue/menuIcons/Recordings.png             |  Bin 0 -> 10526 bytes
 icons/iceblue/menuIcons/Replay.png                 |  Bin 0 -> 9994 bytes
 icons/iceblue/menuIcons/Restart.png                |  Bin 0 -> 8835 bytes
 icons/iceblue/menuIcons/Schedule.png               |  Bin 0 -> 9793 bytes
 icons/iceblue/menuIcons/Setup.png                  |  Bin 0 -> 9788 bytes
 icons/iceblue/menuIcons/StopRecording.png          |  Bin 0 -> 8308 bytes
 icons/iceblue/menuIcons/StopReplay.png             |  Bin 0 -> 8268 bytes
 icons/iceblue/menuIcons/Timers.png                 |  Bin 0 -> 9962 bytes
 icons/iceblue/pluginIcons/arghdirector.png         |  Bin 0 -> 8964 bytes
 icons/iceblue/pluginIcons/autostart.png            |  Bin 0 -> 8778 bytes
 icons/iceblue/pluginIcons/avahi4vdr.png            |  Bin 0 -> 9106 bytes
 icons/iceblue/pluginIcons/avards.png               |  Bin 0 -> 7100 bytes
 icons/iceblue/pluginIcons/block.png                |  Bin 0 -> 9813 bytes
 icons/iceblue/pluginIcons/burn.png                 |  Bin 0 -> 9192 bytes
 icons/iceblue/pluginIcons/cdplayer.png             |  Bin 0 -> 8993 bytes
 icons/iceblue/pluginIcons/chanman.png              |  Bin 0 -> 9970 bytes
 icons/iceblue/pluginIcons/check.png                |  Bin 0 -> 9377 bytes
 icons/iceblue/pluginIcons/conflictcheckonly.png    |  Bin 0 -> 9592 bytes
 icons/iceblue/pluginIcons/ddci.png                 |  Bin 0 -> 9857 bytes
 icons/iceblue/pluginIcons/devstatus.png            |  Bin 0 -> 9840 bytes
 icons/iceblue/pluginIcons/ding1.png                |  Bin 0 -> 9586 bytes
 icons/iceblue/pluginIcons/dummydevice.png          |  Bin 0 -> 7581 bytes
 icons/iceblue/pluginIcons/duplicates.png           |  Bin 0 -> 9375 bytes
 icons/iceblue/pluginIcons/dvbhddevice.png          |  Bin 0 -> 9843 bytes
 icons/iceblue/pluginIcons/dvbsddevice.png          |  Bin 0 -> 10254 bytes
 icons/iceblue/pluginIcons/dynamite.png             |  Bin 0 -> 9881 bytes
 icons/iceblue/pluginIcons/eepg.png                 |  Bin 0 -> 9605 bytes
 icons/iceblue/pluginIcons/epgsearch.png            |  Bin 0 -> 10044 bytes
 icons/iceblue/pluginIcons/epgsearchonly.png        |  Bin 0 -> 8984 bytes
 icons/iceblue/pluginIcons/epgsync.png              |  Bin 0 -> 9588 bytes
 icons/iceblue/pluginIcons/externalplayer.png       |  Bin 0 -> 8759 bytes
 icons/iceblue/pluginIcons/extrecmenu.png           |  Bin 0 -> 9786 bytes
 icons/iceblue/pluginIcons/favorites.png            |  Bin 0 -> 9585 bytes
 icons/iceblue/pluginIcons/femon.png                |  Bin 0 -> 9708 bytes
 icons/iceblue/pluginIcons/fepg.png                 |  Bin 0 -> 11472 bytes
 icons/iceblue/pluginIcons/filebrowser.png          |  Bin 0 -> 9513 bytes
 icons/iceblue/pluginIcons/fritzbox.png             |  Bin 0 -> 10477 bytes
 icons/iceblue/pluginIcons/graphlcd.png             |  Bin 0 -> 8924 bytes
 icons/iceblue/pluginIcons/graphtft.png             |  Bin 0 -> 8594 bytes
 icons/iceblue/pluginIcons/image.png                |  Bin 0 -> 10949 bytes
 icons/iceblue/pluginIcons/imonlcd.png              |  Bin 0 -> 9977 bytes
 icons/iceblue/pluginIcons/iptv.png                 |  Bin 0 -> 10145 bytes
 icons/iceblue/pluginIcons/lcdproc.png              |  Bin 0 -> 9793 bytes
 icons/iceblue/pluginIcons/mailbox.png              |  Bin 0 -> 9122 bytes
 icons/iceblue/pluginIcons/markad.png               |  Bin 0 -> 8761 bytes
 icons/iceblue/pluginIcons/mlist.png                |  Bin 0 -> 10433 bytes
 icons/iceblue/pluginIcons/music.png                |  Bin 0 -> 10574 bytes
 icons/iceblue/pluginIcons/noepg3.png               |  Bin 0 -> 9934 bytes
 icons/iceblue/pluginIcons/osdteletext.png          |  Bin 0 -> 7355 bytes
 icons/iceblue/pluginIcons/pvrinput.png             |  Bin 0 -> 8992 bytes
 icons/iceblue/pluginIcons/quickepgsearch.png       |  Bin 0 -> 9985 bytes
 icons/iceblue/pluginIcons/radio.png                |  Bin 0 -> 9213 bytes
 icons/iceblue/pluginIcons/remote.png               |  Bin 0 -> 8811 bytes
 icons/iceblue/pluginIcons/remotetimers.png         |  Bin 0 -> 10352 bytes
 icons/iceblue/pluginIcons/rssreader.png            |  Bin 0 -> 8608 bytes
 icons/iceblue/pluginIcons/sc.png                   |  Bin 0 -> 10771 bytes
 icons/iceblue/pluginIcons/screenshot.png           |  Bin 0 -> 9281 bytes
 icons/iceblue/pluginIcons/seduatmo.png             |  Bin 0 -> 7751 bytes
 icons/iceblue/pluginIcons/skyselect.png            |  Bin 0 -> 7929 bytes
 icons/iceblue/pluginIcons/sleeptimer.png           |  Bin 0 -> 9462 bytes
 icons/iceblue/pluginIcons/softhddevice.png         |  Bin 0 -> 9512 bytes
 icons/iceblue/pluginIcons/streamdev-server.png     |  Bin 0 -> 9470 bytes
 icons/iceblue/pluginIcons/systeminfo.png           |  Bin 0 -> 10486 bytes
 icons/iceblue/pluginIcons/targavfd.png             |  Bin 0 -> 10224 bytes
 icons/iceblue/pluginIcons/trayopenng.png           |  Bin 0 -> 7626 bytes
 icons/iceblue/pluginIcons/tvguide.png              |  Bin 0 -> 10176 bytes
 icons/iceblue/pluginIcons/tvm2vdr.png              |  Bin 0 -> 8093 bytes
 icons/iceblue/pluginIcons/undelete.png             |  Bin 0 -> 11150 bytes
 icons/iceblue/pluginIcons/weatherng.png            |  Bin 0 -> 7850 bytes
 icons/iceblue/pluginIcons/xml2vdr.png              |  Bin 0 -> 9214 bytes
 icons/iceblue/skinIcons/Channelseparator.png       |  Bin 0 -> 9430 bytes
 icons/iceblue/skinIcons/DiskUsage.png              |  Bin 0 -> 21325 bytes
 icons/iceblue/skinIcons/ac3.png                    |  Bin 0 -> 7710 bytes
 icons/iceblue/skinIcons/activetimer.png            |  Bin 0 -> 5224 bytes
 icons/iceblue/skinIcons/activetimersmall.png       |  Bin 0 -> 2621 bytes
 .../skinIcons/channelsymbols.png                   |  Bin
 icons/iceblue/skinIcons/daydelimiter.png           |  Bin 0 -> 13494 bytes
 icons/iceblue/skinIcons/encrypted.png              |  Bin 0 -> 4002 bytes
 icons/{ => iceblue}/skinIcons/fwd.png              |  Bin 18838 -> 16191 bytes
 icons/iceblue/skinIcons/fwdInactive.png            |  Bin 0 -> 8735 bytes
 icons/iceblue/skinIcons/newrecording.png           |  Bin 0 -> 2978 bytes
 icons/{ => iceblue}/skinIcons/pause.png            |  Bin 15668 -> 13021 bytes
 icons/iceblue/skinIcons/pauseInactive.png          |  Bin 0 -> 6507 bytes
 icons/{ => iceblue}/skinIcons/play.png             |  Bin 17112 -> 14465 bytes
 icons/iceblue/skinIcons/playInactive.png           |  Bin 0 -> 7409 bytes
 icons/iceblue/skinIcons/recordingcutted.png        |  Bin 0 -> 4764 bytes
 icons/iceblue/skinIcons/recordingdatetime.png      |  Bin 0 -> 7344 bytes
 icons/iceblue/skinIcons/recordingfolder.png        |  Bin 0 -> 14387 bytes
 icons/{ => iceblue}/skinIcons/rew.png              |  Bin 18552 -> 15905 bytes
 icons/iceblue/skinIcons/rewInactive.png            |  Bin 0 -> 8484 bytes
 icons/iceblue/skinIcons/signal.png                 |  Bin 0 -> 2436 bytes
 icons/iceblue/skinIcons/stereo.png                 |  Bin 0 -> 13955 bytes
 icons/iceblue/skinIcons/timerActive.png            |  Bin 0 -> 35529 bytes
 icons/iceblue/skinIcons/timerInactive.png          |  Bin 0 -> 52583 bytes
 icons/{ => iceblue}/skinIcons/timerRecording.png   |  Bin 7320 -> 7296 bytes
 icons/iceblue/skinIcons/tracks.png                 |  Bin 0 -> 18164 bytes
 icons/iceblue/skinIcons/vdrlogo.png                |  Bin 0 -> 11813 bytes
 icons/iceblue/skinIcons/yavdrlogo.png              |  Bin 0 -> 8249 bytes
 icons/light/menuIcons/Channels.png                 |  Bin 0 -> 3385 bytes
 icons/light/menuIcons/Commands.png                 |  Bin 0 -> 3915 bytes
 icons/light/menuIcons/Recordings.png               |  Bin 0 -> 2604 bytes
 icons/light/menuIcons/Schedule.png                 |  Bin 0 -> 3468 bytes
 icons/light/menuIcons/Setup.png                    |  Bin 0 -> 5201 bytes
 icons/light/menuIcons/Timers.png                   |  Bin 0 -> 4265 bytes
 icons/light/skinIcons/Channelseparator.png         |  Bin 0 -> 4889 bytes
 icons/light/skinIcons/DiskUsage.png                |  Bin 0 -> 5085 bytes
 icons/light/skinIcons/ac3.png                      |  Bin 0 -> 4000 bytes
 icons/light/skinIcons/activetimer.png              |  Bin 0 -> 1939 bytes
 icons/light/skinIcons/activetimersmall.png         |  Bin 0 -> 1010 bytes
 icons/light/skinIcons/arrowLeftChannelSep.png      |  Bin 0 -> 1559 bytes
 icons/light/skinIcons/arrowRightChannelSep.png     |  Bin 0 -> 1621 bytes
 icons/light/skinIcons/channeldelimiter.png         |  Bin 0 -> 3236 bytes
 icons/light/skinIcons/channelsymbols.png           |  Bin 0 -> 2903 bytes
 icons/light/skinIcons/crypted.png                  |  Bin 0 -> 721 bytes
 icons/light/skinIcons/encrypted.png                |  Bin 0 -> 1307 bytes
 icons/light/skinIcons/fta.png                      |  Bin 0 -> 1641 bytes
 icons/light/skinIcons/fwd.png                      |  Bin 0 -> 9618 bytes
 icons/light/skinIcons/fwdInactive.png              |  Bin 0 -> 8735 bytes
 icons/light/skinIcons/fwdx1.png                    |  Bin 0 -> 9650 bytes
 icons/light/skinIcons/fwdx2.png                    |  Bin 0 -> 9731 bytes
 icons/light/skinIcons/fwdx3.png                    |  Bin 0 -> 9871 bytes
 icons/light/skinIcons/hd1080i.png                  |  Bin 0 -> 2259 bytes
 icons/light/skinIcons/hd1080i_rec.png              |  Bin 0 -> 2259 bytes
 icons/light/skinIcons/hd720p.png                   |  Bin 0 -> 2299 bytes
 icons/light/skinIcons/hd720p_rec.png               |  Bin 0 -> 2299 bytes
 icons/light/skinIcons/newrecording.png             |  Bin 0 -> 1436 bytes
 icons/light/skinIcons/pause.png                    |  Bin 0 -> 7858 bytes
 icons/light/skinIcons/pauseInactive.png            |  Bin 0 -> 6507 bytes
 icons/light/skinIcons/play.png                     |  Bin 0 -> 8776 bytes
 icons/light/skinIcons/playInactive.png             |  Bin 0 -> 7409 bytes
 icons/light/skinIcons/recfolder.png                |  Bin 0 -> 2489 bytes
 icons/light/skinIcons/recoff.png                   |  Bin 0 -> 4024 bytes
 icons/light/skinIcons/recon.png                    |  Bin 0 -> 4194 bytes
 icons/light/skinIcons/recordingcutted.png          |  Bin 0 -> 1733 bytes
 icons/light/skinIcons/recordingdatetime.png        |  Bin 0 -> 1188 bytes
 icons/light/skinIcons/rew.png                      |  Bin 0 -> 9672 bytes
 icons/light/skinIcons/rewInactive.png              |  Bin 0 -> 8484 bytes
 icons/light/skinIcons/rewx1.png                    |  Bin 0 -> 9647 bytes
 icons/light/skinIcons/rewx2.png                    |  Bin 0 -> 9735 bytes
 icons/light/skinIcons/rewx3.png                    |  Bin 0 -> 9823 bytes
 icons/light/skinIcons/rss.png                      |  Bin 0 -> 3214 bytes
 icons/light/skinIcons/sd576i.png                   |  Bin 0 -> 2363 bytes
 icons/light/skinIcons/sd576i_rec.png               |  Bin 0 -> 2363 bytes
 icons/light/skinIcons/stereo.png                   |  Bin 0 -> 4793 bytes
 icons/light/skinIcons/stereooff.png                |  Bin 0 -> 1944 bytes
 icons/light/skinIcons/stereoon.png                 |  Bin 0 -> 1609 bytes
 icons/light/skinIcons/timerActive.png              |  Bin 0 -> 3210 bytes
 icons/light/skinIcons/timerInactive.png            |  Bin 0 -> 4192 bytes
 icons/light/skinIcons/timerRecording.png           |  Bin 0 -> 2469 bytes
 icons/light/skinIcons/tracks.png                   |  Bin 0 -> 1267 bytes
 icons/light/skinIcons/txtoff.png                   |  Bin 0 -> 1216 bytes
 icons/light/skinIcons/txton.png                    |  Bin 0 -> 1214 bytes
 icons/light/skinIcons/vdrlogo.png                  |  Bin 0 -> 485 bytes
 icons/pluginIcons/Thumbs.db                        |  Bin 260096 -> 0 bytes
 icons/pluginIcons/dvbhddevice.png                  |  Bin 0 -> 20367 bytes
 icons/pluginIcons/dvbsddevice.png                  |  Bin 0 -> 21356 bytes
 icons/pluginIcons/graphtft.png                     |  Bin 0 -> 16637 bytes
 icons/pluginIcons/nordlichtsepg.png                |  Bin 0 -> 17857 bytes
 icons/pluginIcons/undelete.png                     |  Bin 0 -> 22452 bytes
 icons/pluginIcons/weatherng.png                    |  Bin 0 -> 18203 bytes
 icons/skinIcons/Channelseparator.png               |  Bin 15388 -> 28668 bytes
 icons/skinIcons/DiskUsage.png                      |  Bin 24156 -> 21325 bytes
 icons/skinIcons/arrowLeftChannelSep.png            |  Bin 0 -> 1768 bytes
 icons/skinIcons/arrowRightChannelSep.png           |  Bin 0 -> 1855 bytes
 icons/skinIcons/channeldelimiter.png               |  Bin 0 -> 23999 bytes
 icons/skinIcons/crypted.png                        |  Bin 0 -> 4580 bytes
 icons/skinIcons/daydelimiter.png                   |  Bin 23206 -> 20612 bytes
 icons/skinIcons/defaultPoster.png                  |  Bin 0 -> 6224 bytes
 icons/skinIcons/discpercent.png                    |  Bin 2996 -> 3369 bytes
 icons/skinIcons/dolbyoff.png                       |  Bin 0 -> 2776 bytes
 icons/skinIcons/dolbyon.png                        |  Bin 0 -> 3004 bytes
 icons/skinIcons/fta.png                            |  Bin 0 -> 3679 bytes
 icons/skinIcons/fwd.png                            |  Bin 18838 -> 16191 bytes
 icons/skinIcons/fwdInactive.png                    |  Bin 13549 -> 8735 bytes
 icons/skinIcons/fwdx1.png                          |  Bin 0 -> 16234 bytes
 icons/skinIcons/fwdx2.png                          |  Bin 0 -> 16374 bytes
 icons/skinIcons/fwdx3.png                          |  Bin 0 -> 16548 bytes
 icons/skinIcons/hd1080i.png                        |  Bin 6268 -> 2252 bytes
 icons/skinIcons/hd1080i_rec.png                    |  Bin 0 -> 2252 bytes
 icons/skinIcons/hd720p.png                         |  Bin 6105 -> 2265 bytes
 icons/skinIcons/hd720p_rec.png                     |  Bin 0 -> 2265 bytes
 icons/skinIcons/pause.png                          |  Bin 15668 -> 13021 bytes
 icons/skinIcons/pauseInactive.png                  |  Bin 11793 -> 6507 bytes
 icons/skinIcons/play.png                           |  Bin 17112 -> 14465 bytes
 icons/skinIcons/playInactive.png                   |  Bin 12415 -> 7409 bytes
 icons/skinIcons/radio.png                          |  Bin 6506 -> 2274 bytes
 icons/skinIcons/recfolder.png                      |  Bin 0 -> 16364 bytes
 icons/skinIcons/recoff.png                         |  Bin 0 -> 4451 bytes
 icons/skinIcons/recon.png                          |  Bin 0 -> 6307 bytes
 icons/skinIcons/rew.png                            |  Bin 18552 -> 15905 bytes
 icons/skinIcons/rewInactive.png                    |  Bin 13451 -> 8484 bytes
 icons/skinIcons/rewx1.png                          |  Bin 0 -> 15930 bytes
 icons/skinIcons/rewx2.png                          |  Bin 0 -> 16086 bytes
 icons/skinIcons/rewx3.png                          |  Bin 0 -> 16269 bytes
 icons/skinIcons/sd576i.png                         |  Bin 6717 -> 2384 bytes
 icons/skinIcons/sd576i_rec.png                     |  Bin 0 -> 2384 bytes
 icons/skinIcons/stereooff.png                      |  Bin 0 -> 3697 bytes
 icons/skinIcons/stereoon.png                       |  Bin 0 -> 4151 bytes
 icons/skinIcons/timerRecording.png                 |  Bin 7320 -> 7296 bytes
 icons/skinIcons/tracks.png                         |  Bin 29537 -> 26636 bytes
 icons/skinIcons/txtoff.png                         |  Bin 0 -> 3180 bytes
 icons/skinIcons/txton.png                          |  Bin 0 -> 4283 bytes
 icons/skinIcons/vdrlogo.png                        |  Bin 13206 -> 11727 bytes
 imagecache.c                                       |  679 ++++++++++++
 imagecache.h                                       |  113 ++
 imageloader.c                                      |  214 ++--
 imageloader.h                                      |   19 +-
 imagemagickwrapper.c                               |  162 +++
 imagemagickwrapper.h                               |   28 +
 imagescaler.c                                      |  149 +++
 imagescaler.h                                      |   97 ++
 logoconverter/backgrounds/bg1.png                  |  Bin 0 -> 20140 bytes
 logoconverter/backgrounds/bg2.png                  |  Bin 0 -> 20750 bytes
 logoconverter/backgrounds/bg3.png                  |  Bin 0 -> 19740 bytes
 logoconverter/backgrounds/bg4.png                  |  Bin 0 -> 16556 bytes
 logoconverter/backgrounds/fg1.png                  |  Bin 0 -> 37758 bytes
 logoconverter/backgrounds/fg2.png                  |  Bin 0 -> 34711 bytes
 logoconverter/backgrounds/fg3.png                  |  Bin 0 -> 28053 bytes
 logoconverter/backgrounds/fg4.png                  |  Bin 0 -> 19010 bytes
 logoconverter/make_background.sh                   |   33 +
 menudetailview.c                                   |  733 ++++---------
 menudetailview.h                                   |  117 +-
 menuitem.c                                         | 1093 +++++++++++++------
 menuitem.h                                         |   76 +-
 nopacity.c                                         |  199 +---
 nopacity.h                                         |   10 +-
 po/ca_ES.po                                        |  702 ++++++++++++
 po/de_DE.po                                        |  424 ++++++--
 po/it_IT.po                                        |  418 ++++++--
 po/sk_SK.po                                        |  584 ++++++----
 screenResSetup/skinnopacity-hdready.txt            |  143 +++
 screenResSetup/skinnopacity-sd.txt                 |  144 +++
 services/remotetimers.h                            |    2 +-
 services/scraper2vdr.h                             |  196 ++++
 setup.c                                            |  565 +++++-----
 setup.h                                            |   40 +-
 skinnopacity.c                                     |   81 +-
 textwindow.c                                       |  439 +++++++-
 textwindow.h                                       |   41 +-
 themes/nOpacity-anthra.theme                       |   97 ++
 themes/nOpacity-blue.theme                         |   90 ++
 themes/nOpacity-darkblue.theme                     |   53 +-
 themes/nOpacity-darkgrey.theme                     |   90 ++
 themes/nOpacity-darkred.theme                      |   69 +-
 ...city-darkred.theme => nOpacity-darkredNG.theme} |   55 +-
 themes/nOpacity-default.theme                      |   90 ++
 themes/nOpacity-green.theme                        |   52 +-
 themes/nOpacity-iceblue.theme                      |   90 ++
 themes/nOpacity-light.theme                        |   90 ++
 timers.c                                           |  392 ++++---
 timers.h                                           |   83 +-
 1079 files changed, 11748 insertions(+), 4272 deletions(-)

diff --git a/HISTORY b/HISTORY
index b67dddd..2ed2537 100644
--- a/HISTORY
+++ b/HISTORY
@@ -186,3 +186,251 @@ Version 0.1.1
   to avoid nasty font pixelation effect
 - changed tracks display to fixed track item height
 - changed stereo and ac3 icons in tracks display
+- Added RSS Feed support
+- Fixed crash on initial startup with xine plugin as output device
+- Fixed crash / hang if menu is opened with small screen size
+- Background of ChannelDisplay configurable also to cover channel logo
+- Added standalone RSS Feed
+- check for Slash at end of startup path parameters
+- changed scaling of EPG info window font size
+- Added and changed some icons
+
+Version 0.1.2
+- changed some color settings and icons in theme darkred
+- added option "auto" for video scaling: with this option the video window
+  is resized when the detailed EPG Window is displayed in Schedules and
+  Recordings menu to be completely visible.
+- Added Channel Number in narrow Timer menu
+- Added display of next Schedules in Channel Menu in separate Info Window. 
+  The Number of displayed Schedules can be configured in Plugin Channels 
+  Menu Setup.
+- Display of disc status in main menu configurable: either remaining recording 
+  time in hours or free disc space in GB is displayed
+- Fixed a bug that slow motion trick speed during recording replay was not 
+  displayed
+- Added previous and next Channel Group in Channel Display
+- Introduced "plain" style without any blending effects configurable by
+  dedicated theme color
+- Added theme "iceblue" based on the introduced plain display style
+- Fixed display of recording duration in recordings menu when a cut is
+  running in the background
+- Additional information in channels menu configurable: choice between
+  transponder information and current schedule
+- Added optional dedicated status icons in channel display
+- Added optional display of channel source information in channel display
+- Fixed a bug if switching to a invalid channel
+
+Version 0.1.3
+- Added TVScraper support, if TVScraper is used scraped images are
+  displayed in various EPG views
+
+Version 0.1.4
+- changed service interface for tvscraper
+- fixed an possible uninitialised variable in recordings menu
+- fixed a bug that epg info is not displayed in schedules menu if fade
+  in is set to zero
+- fixed a bug that poster or banner is not displayed in displayChannel
+  if fade in is set to zero
+- Added setup option in detailed EPG view and in detailed recordings view 
+  to select if additional EPG pictures are shown if tvscraper media 
+  is available
+- Added Deadlock Patch
+- Changed default Channelseparator Icon (closes Bug 1412)
+- Display correct recording date even if recording info is empty (closes Bug 1448)
+- Added option to display plain channels and EPG information without time in
+  channels menu (closes Feature 1377)
+- Added name of search timer which created recording in detailed recording
+  information (closes Feature 1401)
+- Added channel number in display of reruns in detailed EPG view 
+  (closes Feature 1402)
+- Changed display of trick speed in displayReplay (closes Feature 1433)
+- Improved display of channel separators (closes tickets 1477 and 1482)
+- Added REC Icon in displayChannel for current and next event (closes
+  Feature 1403)
+- Display stereo symbol in displayChannel if at least one mpeg track 
+  is available (and not two, closes Feature 1404)
+- Added script and background images to create fancy channel logos with
+  theme dependend background
+- searching channel logos first in <logopath>/theme, then in 
+  <defaltlogopath>/theme, then in <logopath> and finally in <defaultlogopath>
+  to allow theme dependend channel logos
+- if no channel logo is found for channel name, the ChannelID is used to allow
+  logos for (feed) channels with changing names. Analog to the channel name
+  the ChannelID is also converted to lower case letters.
+- added exemplarily setup options for SD and HDReady
+- introduced dedicated theme font colors for different message types and 
+  different buttons (closes Feature 1462)
+- dedicated theme colors in display channel for current event, current event
+  info, next evet and next event info (closes Feature 1466)
+- dedicated theme colors for timer backgrounds in main menu (closes Feature
+  1463)
+- dedicated theme colors for RSS Feed (closes Feature 1485)
+- added event length in header in detailed EPG and recording view (closes
+  Feature 1469)
+- added separate configurable border around detailed epg view and detailed
+  recording view
+- new "fullscreen" display mode in narrow schedules and recordings view. If
+  fullscreen mode is configured in plugin setup, the right area next to the
+  list of events /recordings is completely used to display immeditately the
+  detailed information of the selected event / recording.
+- added some rounded corners (if activated in setup) for posters and banners
+- added rounded corners for message display
+- fixed issue with gradient display for newer imagemagick versions
+- added setup option to display poster or fanart in channel display
+- possibility to set manual poster for recordings. This manual poster has to
+  be named as "cover_vdr.jpg" and has to be placed directly in the recording
+  folder. For series it is also possible to place a common poster for all
+  series in a folder two or three directories above the actual recording
+  folders. If a manual poster is found, all tvscraper information is ignored.
+- changed narrow recordings menu style
+- improved function to float text around poster in textwindow
+- fixed nasty font pixelation with non blending themes for timer display in
+  main menu
+- optimized some theme colors in displaychannel and displaymessage
+- display of channel logo in main menu timer display configurable
+- fixed a bug that progress bar is too long for too long schedules
+- if background color and blending color in displayChannel and displayReplay
+  are the same, no blending effect is shown
+- updated slovak translation
+- Added cache for images and fonts
+- Changed and added some color definitions
+- Added theme "Keep it light" (thanks @Saman for providing the theme)
+- Added additional configurable channel logo cache
+- Fixed a bug that running instant recording is not displayed in 
+  displayChannel
+- Configurable Menu Item Scroll Mode: "Carriage Return" or "Forward and
+  Back again"
+- channel logo cache is built with channelID as key (not with channelNumber
+  anymore)
+- Removed RSS Feed support completely, maybe this will get a standalone
+  plugin in the future
+- Implemented theme dependend configuration. Each theme has now it's own
+  configuration. Default configurations for each theme can be set in the
+  appropriate conf/theme-themename.conf file. This file has to be placed 
+  in <PLGCONFDIR>/themeconfigs. With that each theme can be shipped with
+  its individual settings and the plugin settings can be changed 
+  individually for each theme without affecting other themes.
+- All skin background and button elements can now be individual PNGs. For
+  that the config value displayType has to be set to the value 2 in the
+  theme specific configuration.
+- Added new Theme "freestyle" with individual graphics for the different
+  skin elements.
+- Rewriting and cleanup of displayChannel:
+  - separated drawing code in dedicated class
+  - removed "simple" status icon bar, now only graphical icons are supported
+  - changed screen resolution icon to same height but 3 times larger width
+    as other status icons.
+  - status icons scale to size of footer height
+  - fixed bug that progress bar sometimes was not displayed when switching
+  - adapted the status icons for the different themes
+    the channel
+- Cleaned up pixmaps in menuitems
+- Avoided font pixelation on default menu items
+- Searching for epgimages named eventID.jpg and eventID_0.jpg in detailed
+  epg view
+- Fixed clearing pixmap in displaychannel if no epg is available
+- Changed display of channel groups in displaychannel
+- Added configurable transparency for channeldisplay background
+- Added background with dedicated theme color for status icons in 
+  displaychannel
+- Added background with dedicated theme color for channel logos in menus
+- Improved Display of Poster or Banner in displaychannel
+- implemented cDisplayChannel::SetMessage()
+- display not selectable menu elements with dedicated font color
+- changed way of calculating number of menu items in narrow menus. This
+  value is not calculated by icon sizes anymore, these values are now
+  configurable via plugin setup menu. The number of menu items in 
+  schedules menu also sets the number of menu items in channels and
+  timers menu.
+- improved display of text progress bar in wide menus
+- changed header icons to scale automatically
+- Added Setup Option to generate log messages when trying to load
+  pictures (VDR Menu -> Common Settings)
+- Added complete date for events longer than one day in the future 
+  in schedules menu
+- changed build environment that every class is build seperately
+  (thanks @Helmut Auer)
+- changed channel logos in main menu timers display to scale 
+  automatically
+- fixed a bug that rounded corners of color buttons in menus were
+  not drawn correctly
+- added possibility to add background image in freestyle themes
+  in displaymenu header (headerback.png, header_mirroredback.png)
+- fixed timer display in main menu so that setting "small without logo"
+  uses correct height
+- size of channel logos in main menu timers display configurable as
+  percent of timer width
+- Added theme dependend background for status icon in displayreplay
+- Fixed editing of text if text is scrolling (closes Bug 1572)
+- Cutting too long recording name in displayreplay
+- implemented GraphicsMagick compatibility (thanks @Manuel Reimer
+  for providing the patch)
+- changed Makefile to support both ImageMagick and GraphicsMagick
+  (configurable in Makefile)
+- updated slovakian translation
+- Added EPG Info in narrow Timers Menu
+- Freestyle Theme new default theme, old default renamed to "blue"
+- Changed Disc Usage Icon for default theme
+- Added logo backgrounds in displaychannel also for blended themes
+- Usage of channel logo background in displaychannel and on 
+  menuelements configurable via plugin setup
+- Fixed a bug that setup values are not stored if theme is changed
+
+Version 1.0.0
+
+- improved image scaling by using internal scaling libary from
+  Nikolaus Meine (thanks @Soeren Moch for providing the patch)
+- fixed a crash with dvb cards which deliver negative signal values
+- added theme darkredNG
+- updated ca_es po file
+
+Version 1.0.1
+
+- fixed a bug in cImageLoader::FirstImageInFolder()
+- added more Exception Handling for Image Loading
+- fixed a crash for recordings without valid title in info file
+- darkened borders of menubuttons and scrollbar in theme darkredNG
+
+Version 1.0.2
+
+- Extended image loading logging only if activated in setup
+- Fixed a possible crash if recording directory is no longer available
+
+Version 1.0.3
+
+- Fixed bugs that configured OSD top and left values are not correctly
+  used in DisplayChannel, DisplayTracks, DisplayVolume and
+  DisplayMessages (closes Tickets 1659 and 1696)
+- Fixed a bug with xine as output plugin that VDR crashes if xine plugin
+  gets closed (closes Ticket 1675)
+- Fixed bug that messages are not displayed during replay of a recording
+  if DisplayReplay is active (closes Ticket 1698)
+- Added information about running recordings in DisplayChannel (thanks
+  @Soeren Moch for providing a patch)
+
+Version 1.1.0
+
+- Added scraper2vdr support
+
+Version 1.1.1
+
+- Fixed a crash if no images exists for a movie
+- Only display poster in detailed EPG View if really available
+- Only display poster in detailed recordings view
+- fixed crash in detailed epg view
+
+Version 1.1.2
+
+- Restructured detailed EPG and recordings view
+- fixed naming of reruns tab when displaying recordings
+- scroll speed with up / down configurable (lines per click)
+- fixed bug that floating text is not shown completely
+- cleaned up and restructured setup menu
+
+Version 1.1.3
+
+- Vertical channel logo alignment configurable in displaychannel
+- added dedicated background pixmap in detailview
+- added support for tvscraper again, tvscraper Version 0.2.0 needed
+- fixed possible division by zero
+- updated theme darkred
diff --git a/Makefile b/Makefile
index e2c14ad..dcee31e 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,9 @@
 #
 # $Id$
 
+# External image lib to use: imagemagick, graphicsmagick
+IMAGELIB = imagemagick
+
 # The official name of this plugin.
 # This name will be used in the '-P...' option of VDR to load the plugin.
 # By default the main source file also carries this name.
@@ -48,17 +51,20 @@ SOFILE = libvdr-$(PLUGIN).so
 
 ### Includes and Defines and Dependencies (add further entries here):
 
-INCLUDES += $(shell pkg-config --cflags-only-I Magick++)
-
 DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
-DEFINES += -DMAGICKCORE_HDRI_ENABLE=0
-DEFINES += -DMAGICKCORE_QUANTUM_DEPTH=16
 
-LIBS += $(shell pkg-config --libs Magick++)
+ifeq ($(IMAGELIB), imagemagick)
+	INCLUDES += $(shell pkg-config --cflags Magick++)
+	LIBS += $(shell pkg-config --libs Magick++)
+else ifeq ($(IMAGELIB), graphicsmagick)
+	INCLUDES += $(shell pkg-config --cflags GraphicsMagick++)
+	LIBS += $(shell pkg-config --libs GraphicsMagick++)
+endif
 
 ### The object files (add further files here):
 
-OBJS = $(PLUGIN).o 
+OBJS = $(PLUGIN).o config.o detailview.o displaychannel.o displaymenu.o displaymenuview.o displaymessage.o displayreplay.o displaytracks.o displayvolume.o displaychannelview.o fontmanager.o \
+       geometrymanager.o imagecache.o imagemagickwrapper.o imagescaler.o helpers.o imageloader.o menudetailview.o menuitem.o nopacity.o setup.o textwindow.o timers.o
 
 ### The main target:
 
@@ -120,7 +126,11 @@ install-icons:
 	mkdir -p $(DESTDIR)$(PLGRESDIR)/icons
 	cp -r icons/* $(DESTDIR)$(PLGRESDIR)/icons
 
-install: install-lib install-i18n install-themes install-icons
+install-themeconfigs:
+	mkdir -p $(DESTDIR)$(VDRCONFDIR)/plugins/$(PLUGIN)/themeconfigs
+	cp conf/theme-* $(DESTDIR)$(VDRCONFDIR)/plugins/$(PLUGIN)/themeconfigs
+
+install: install-lib install-i18n install-themes install-icons install-themeconfigs
 
 dist: $(I18Npo) clean
 	@-rm -rf $(TMPDIR)/$(ARCHIVE)
diff --git a/README b/README
index 76c6b9d..c584a62 100644
--- a/README
+++ b/README
@@ -17,7 +17,8 @@ Requirements
 
 - VDR version >= 1.7.34
 
-- Installed ImageMagick for displaying png/jpg Icons, Channel Logos and EPG Images
+- Installed ImageMagick or GraphicsMagick for displaying png/jpg Icons, Channel Logos 
+  and EPG Images
 
 - for scaling the video picture to fit into the VDR menu window please use 
   softhddevice plugin revision 87c1c7be (2013-01-01) or newer.
@@ -52,7 +53,12 @@ or vdr.pc).
 During a "make install" the Icons are automatically copied from <SkinSourceDirectory>/icons/
 to the default path. Included Theme files are also copied from  <SkinSourceDirectory>/themes/
 to <ConfigDirectory>/themes/ 
-    
+
+Additionally with a "make install" also the theme specific configuration files 
+(see chapter "Theme specific configurations" below) are copied automatically
+from  <SkinSourceDirectory>/conf/ to the plugin config directory 
+(<VDRConfigDir>/plugins/skinnopacity/themeconfigs).
+
 I recommend to use channel logos from https://github.com/3PO/Senderlogos
 To download them just change in the directory you want to place the logos
 and do a:
@@ -70,13 +76,19 @@ package maintainer or distributor in parallel.
 For S2-6400 Users: Disable High Level OSD, otherwise the plugin will not be
 loaded because lack of true color support
 
+For Xine-Plugin Users: Set "Blend scaled Auto" as OSD display mode to achieve
+an suitable true color OSD.
+
+For Xineliboutput Users: Start vdr-sxfe with the --hud option enabled
+
 Usage
 -----
 
 After installation first activate then skin in the VDR OSD menu. nOpacity scales to 
 every screen resolution, but in lower resolutions than 1920 * 1080 it may be necessary
 to change some default settings for dimensions and font sizes to achieve the best result
-(see "setup options" below).
+(see "setup options" below). In the folder "screenResSetup" in the plugin source directory
+exemplarily setup options for SD and HDReady resolutions are provided.
 
 nOpacity respects the OSD settings for OSD top, left, width and height. If these values
 are not set to top&left: 0, width&height: 100, you'll get a border around every displayed
@@ -100,19 +112,79 @@ immediately after placing the channel logos in the correct place. So if you have
 the name of a channel logo (may be by inserting a space or a hyphen) so that it fits to
 the channel name, only use lower case letters, and not the name of the channel with upper 
 and lower letters as displayed inside VDR.
+If no logo is found for the channel name, additionally a search for a logo named as the
+ChannelID is performed. Analog to the channel name the ChannelID is also converted to lower 
+case letters. This allows channel logos for channels with changing names (for instance
+Sky Feed Channels).
 Additional hint: some channels have slashes in their name (in germany nick/comedy for instance).
 In this example, as a dirty hack just create a folder in your channel logo directory named 
 "nick" and place an image named "comedy.png" inside this folder.
 
-Themes and theme specific Icons
--------------------------------
+In the folder "logoconverter" a script and some backgrounds are provided to create logos
+with fancy backgrounds from the transparent logos. Before running the script, just adapt the 
+config variables in the header of the script according to your needs. If you place the newly 
+created logos in a subfolder of your logo directory named exactly as the used Theme name, 
+nOpacity uses these logos only for the appropriate theme automatically.
+
+Themes, Theme types, Theme specific Configurations and Icons
+------------------------------------------------------------
+
+nOpacity is fully themable with different "theme types". Examples for theme files with all 
+possible color settings are included in <SkinSourceDirectory>/themes/. As already mentioned 
+these themes are automatically copied during a "make install" into the VDR themes directory 
+and can be choosed in VDRs OSD setup menu.
+
+The following skin characteristics are theme dependend:
+- theme default configuration
+- theme configuration
+- theme colors
+- graphical skin elements (for "graphical" themes, see below)
+- theme icons and images
+
+Theme types:
+............
+
+nOpacity supports three different theme types named "flat", "blending" and "graphical". This
+type can be set with the config option "displayType" (flat: displayType = 0, blending: 
+displayType = 1, graphical: displayType = 2) which has to be provided via the theme specific
+configuration file (see below). If this value is not provided by the theme designer, the default 
+value "blending" is used.
+
+flat style: "basic" skin type with almost no effects, areas are just filled with plain colors
+blended style: skin elemements like menu items are drawn with a main and a blended color which
+are provided via the color theme file, skin elements are drawn with a blended effect.
+graphical style: almost all skin elements are drawn by using dedicated PNG images. These PNGs
+have to be placed in the <themename>/skinElements/ icon directory. See the default theme for 
+examples for this style and the used images.
+
+Theme specific configuration:
+.............................
+
+Because the "look&feel" of nOpacity is strongly dependend of the choosen setup configuration
+options.
+
+On the one hand it is possible for the theme designer to provide a dedicated default 
+config for every theme. This theme configuration has to be named "theme-<themename>.conf" and
+has to be placed in <VDRConfigDir>/plugins/skinnopacity/themeconfigs. As already mentioned all 
+theme configs which are available in the skin source directory <SkinSourceDirectory>/conf/ are
+copied automatically to the destination directory with a "make install". The syntax for this 
+theme configuration file is just straight forward a "configoption = value" per line. The possible 
+configuration options and the default values can be checked in the file config.c in the function
+cNopacityConfig::LoadDefaults(void).
+
+On the other hand, all configuration changes done by the user are only valid for the currently 
+choosen theme. That means that every theme has it's individual configuration. If the theme is 
+changed via the VDR Setup/OSD Menu, the configuration for this theme is loaded in the following way:
+
+- first the general default settings from cNopacityConfig::LoadDefaults() are used
+- after that the settings from the theme config file (if available) are looked up, every available
+  config option in this file replaces the default config option
+- after that the settings the user has individually customized are used and replace the corresponding
+  default settings
+
+Theme specific icons and images:
+................................
 
-nOpacity is fully themable. Examples for theme files with all possible color settings are
-included in <SkinSourceDirectory>/themes/. As already mentioned these themes are automatically
-copied during a "make install" into the VDR themes directory and can be choosed in VDRs
-OSD setup menu.
-
-Beside colors also the icons and images shown in the different menus are theme dependend. 
 Icons and images are first looked up in <IconPath>/<ThemeName>/. If there is no appropriate
 icon found, <IconPath>/ is used. With that it is possible to use specific icons for every
 different theme.
@@ -124,6 +196,25 @@ Two types of icons are used:
       has to be named as the plugin name so that the appropriate icon will be shown in the
       main menu.
 
+Image Caching
+-------------
+
+nOpacity uses an image cache to achieve best performance also on systems with low performance.
+The image cache loads all necessary images (icons, skin elements, channel logos) at startup and
+also after a change in screen resolution or leaving the nOpacity setup menu. Depending on the 
+system hardware and the configured number of channel logos to cache (see below) this cache reload
+can need some seconds.
+
+In the plugin setup menu in the submenu "image caching" it is possible to configure the number of 
+channel logos to be cached at startup and the maximum number of channel logos to cache. Channel logos
+are always cached in the order the channels appear in your channels.conf file. If you configure for
+example to cache 50 logos and you set the maximum number of logos to 100, the logos for the first 50
+channels in your channels.conf are cached at startup. If logos from channels 51 - 100 are needed,
+the image is created once, all further requests for that logo are fulfilled by the cache. Logos for
+channels > 100 are not cached and are always created from the source PNGs on your storage medium.
+
+In the "image cache" setup sub menu the current cache usage for the different types of images and the
+memory used is displayed as additional information.
 
 Customizing, Skin Setup Options
 -------------------------------
@@ -134,19 +225,25 @@ Customizing, Skin Setup Options
 
 * VDR menu: Common Settings:
 
+- Create Log Messages for image loading: show log message for each image loading process. Usefull
+  for debugging, but causes many log entries
 - Number of Default Menu Entries: Number of menu items for the default menu view.
 - Adjust Font Size - Default Menu Item
 - Adjustment of narrow menus: the narrow menus (main, schedules, channels, timers,
   setup) can either be adjusted left or right.
-- Scale Video size to fit into menu window
+- Scale Video size to fit into menu window: no / yes / auto: with "auto" the video  window is resized 
+  when the detailed EPG Window is displayed in Schedules and Recordings menu to be completely visible.
 - Header Height (% of OSD Height): Default: 7%
 - Header Icon Size (Square Header Menu Icons)
 - Footer Height (% of OSD Height): Default: 7%
 - Rounded Corners for menu items and buttons
   - Radius of rounded corners: if rounded corners are used, radius in px.
+- Use Channel Logo background: display theme specific background (clrMenuChannelLogoBack) for channel
+  logos in menus what's on now / next, channels, timers
 - Fade-In Time in ms (Zero for switching off fading): Default 0, active fading
   for main menu caused sometimes trouble in some special setups. Activate on
   own risk ;)
+- Menu Items Scroll Style: "Carriage Return" after scrolling is complete, or "Forward and Back again"
 - Menu Items Scrolling Speed
 - Menu Items Scrolling Delay in s: period which menu element has to be selected
   till scrolling starts
@@ -165,33 +262,34 @@ Customizing, Skin Setup Options
   - Width (Percent of OSD Width): if displayed narrow, width of this menu
 - Use narrow setup menu: display setup menu in narrow or standard style
   - Width (Percent of OSD Width): if displayed narrow, width of this menu
-- Use menu icons
-  - Icon Size (Square): if icons are used, size of the icons. Even if no icons
-    are used, the height of the menu items is determinated by this value.
+- Number of entires per page: number of menu items shown per screen
+- Use menu icons: yes/no
+- Main menu title style: way how VDR version in menu header is displayed:
+  "VDR" plus VDR version, only VDR version, no title
 - Display Disk Usage: Display Disk Usage in Main Menu
   - Size (square, Percent of OSD Width)
+  - Free Disc Display: free time in hours (estimated) or free disc space in GB
   - Adjust Font Size - free
   - Adjust Font Size - percent
-- Display Timers: Display active Tiers in Main Menu
-  - Width of Timers (Percent of OSD Width)
-  - Channel Logo Width (at the top of the timers displayed in main menu)
-  - Channel Logo Height (at the top of the timers displayed in main menu)
+- Display Timers: Display active Timers in Main Menu: "yes", "small without channel
+  logos", "no"
+  - Maximum number of timers to show in main menu
+  - Width of Timers (% of OSD Width)
+  - Width of channel logos (% of timers width)
   - Adjust Font Size - Header
   - Adjust Font Size - Title
 - Show Timer Conflicts
-- Header Logo Width: Default 104px
-- Header Logo Height: Default 78px
+- Header Logo Width / Height: Header Logo is scaled to fit into the header, these
+  values are used for correct scaling
 - Adjust Font Size - Menu Items
 
 * VDR Menu: Schedules Menu
 
 - Use narrow menu: display menu in narrow or standard style
   - Width (Percent of OSD Width): if displayed narrow, width of this menu
-- Channel Logo Width (Menu Buttons): width of channel logos shown in scheduling
-  "what's on" and "what's next" menus and channels menu. 
-- Channel Logo Height (Menu Buttons): height of channel logos shown in scheduling
-  "what's on" and "what's next" menus and channels menu. This size determinates 
-  the number of menu entries in schedules and channels menu.
+- Number of entires per page
+- Mode of EPG Window: "small window" with settings for fade in and scroll speed / delay
+  or "full screen" 
 - EPG Window Fade-In Time in ms (Zero for switching off fading)
 - EPG Window Display Delay in s: period which schedules menu element has to be
   selected till fade in of epg window starts
@@ -199,6 +297,7 @@ Customizing, Skin Setup Options
   window text starts to scroll
 - Height of EPG Info Window (Percent of OSD Height): Height of text window which
   is shown for schedules menu elements
+- Border around detailed EPG view: border to be displayed in detailed EPG view
 - Display Reruns in detailed EPG View: via epgsearch service
   - Number of reruns to display: Default 5
   - Use Subtitle for reruns
@@ -206,8 +305,6 @@ Customizing, Skin Setup Options
   EPG pictures will be shown at the end of the detailed EPG view. The pictures have
   to be named as eventid_number.jpg with number from 1 to 9.
   - Number of EPG pictures to display
-- Detail EPG View Logo Width: Default 260px
-- Detail EPG View Logo Height: Default 200px
 - Detail EPG View EPG Image Width: Default 210px
 - Detail EPG View EPG Image Height: Default 160px
 - Detail EPG View additional EPG Image Width: Default: 525 px
@@ -215,11 +312,22 @@ Customizing, Skin Setup Options
 - Adjust Font Size - Menu Item
 - Adjust Font Size - Menu Item Small
 - Adjust Font Size - EPG Info Window
+- Adjust Font Size - EPG Info Window Header
 
 * VDR Menu: Channels Menu
 
 - Use narrow menu: display menu in narrow or standard style
   - Width (Percent of OSD Width): if displayed narrow, width of this menu
+- Menu Items display mode: Transponder Information / Current Schedule / None
+  - If "Current Schedule": Schedules with time information
+- Number of EPG Entries in Schedules Info Window
+- Adjust Font Size - Menu Item
+- Adjust Font Size - Menu Item Small
+
+* VDR Menu: Timers Menu
+
+- Use narrow menu: display menu in narrow or standard style
+  - Width (Percent of OSD Width): if displayed narrow, width of this menu
 - Adjust Font Size - Menu Item
 - Adjust Font Size - Menu Item Small
 
@@ -227,11 +335,15 @@ Customizing, Skin Setup Options
 
 - Use narrow menu: display menu in narrow or standard style
   - Width (Percent of OSD Width): if displayed narrow, width of this menu
+- Number of entires per page
+- Mode of recording Window: window / full screen
+- Border around detailed recording view: analogue to "detailed EPG Info"
 - Display additional EPG Pictures in detailed recording View: if set to yes, additional
   pictures will be shown at the end of the detailed recording view. All jpegs in the
   recording directory will be used.
   - Number of EPG pictures to display
-- Folder Icon Size: size of the folder image used in recordings list
+- Use folder poster if available: use folder poster provided by tvscraper
+- Width / Height of manually set recording poster: used for correct scaling
 - Adjust Font Size - Menu Item
 - Adjust Font Size - Menu Item Small
   
@@ -241,20 +353,30 @@ Customizing, Skin Setup Options
 - Height of Channel Display (% of OSD Height): Default 25%
 - Left & Right Border Width: Default 15px
 - Bottom Border Height: Default 15px
+- Background Transparency in Percent: for graphical themes, sets transparency of background
+- Background Style: only for non graphical themes, transparent logo background or not
 - Channel Logo Position: left / right / do not display. If set to "do not display",
   the whole screen width is used for channel display.
-  - Channel Logo Width: Default 260px
-  - Channel Logo Height: Default 200px
-  - Channel Logo Border: Default 15px
+  - Channel Logo original Width: Default 260px (used for correct scaling)
+  - Channel Logo original Height: Default 200px (used for correct scaling)
+  - Use Channel Logo background: use theme specific image (skinElements/channellogoback.png)
+    as backgrond image for channel logos
+- Kind of time display for current schedule: elapsed or remaining time
+- Display Source Information: display Channel Source Information (used Satelite)
 - Display Signal Strength & Quality: Set this to Zero if you want to disable the
   display of signal strength & quality (for instance if your dvb drivers does not
   deliver this values)
-- Screen Resolution Icon Size: Default 100px
-- Status Icon Size: Default 64px
+- Display Poster or Fanart from TVScraper
+  - Border in px around poster / fanart
+- Display previous and next Channel Group
 - Adjust Font Size - Header: Font for Channel / Channelgroup Name
 - Adjust Font Size - Date
 - Adjust Font Size - EPG Text
 - Adjust Font Size - EPG Infotext
+- Adjust Font Size - Channel Source Info
+- Adjust Font Size - Channel Group
+- Adjust Font Size - Next/Prev Channel Group
+
 
 * Replay:
 
@@ -305,3 +427,7 @@ Customizing, Skin Setup Options
   Remark: the volume display is always positioned in the center of the screen,
   with bottom border it can be moved to the top.
 - Adjust Font Size
+
+
+Legal Remark: some of the menu icons used in this skin are from http://icons8.com/
+Thanks @icons8.com for provide these icons for free.
diff --git a/conf/theme-anthra.conf b/conf/theme-anthra.conf
new file mode 100644
index 0000000..af3f680
--- /dev/null
+++ b/conf/theme-anthra.conf
@@ -0,0 +1,31 @@
+displayType = 2
+channelBackgroundTransparency = 0
+menuWidthRecordings = 30
+logoVerticalAlignment = 1
+channelFadeTime = 0
+debugImageLoading = 1
+displayPoster = 0
+displaySignalStrength = 0
+displaySourceInfo = 0
+fontChannelDateSize = 7
+fontChannelHeaderSize = 1
+fontEPGSize = 4
+fontEPGSmallSize = 2
+fontMenuitemChannel = 5
+fontMenuitemLarge = 5
+headerHeight = 7
+mainMenuTitleStyle = 2
+menuChannelDisplayMode = 2
+menuEPGWindowFadeTime = 0
+narrowRecordingMenu = 0
+narrowScheduleMenu = 0
+narrowTimerMenu = 0
+numEPGEntriesChannelsMenu = 1
+showDiscUsage = 0
+showTimers = 0
+fontChannelDateSize = 8
+mainMenuTitleStyle = 2
+menuHeaderLogoHeight = 70
+menuHeaderLogoWidth = 160
+menuChannelLogoBackground = 0
+
diff --git a/conf/theme-darkredNG.conf b/conf/theme-darkredNG.conf
new file mode 100644
index 0000000..cdd6ee9
--- /dev/null
+++ b/conf/theme-darkredNG.conf
@@ -0,0 +1,6 @@
+displayType = 2
+channelBackgroundTransparency = 10
+mainMenuTitleStyle = 1
+menuWidthRecordings = 40
+menuChannelLogoBackground = 0
+logoVerticalAlignment = 2
diff --git a/conf/theme-default.conf b/conf/theme-default.conf
new file mode 100644
index 0000000..21cf5dd
--- /dev/null
+++ b/conf/theme-default.conf
@@ -0,0 +1,5 @@
+displayType = 2
+channelBackgroundTransparency = 20
+mainMenuTitleStyle = 1
+menuWidthRecordings = 40
+logoVerticalAlignment = 2 
diff --git a/conf/theme-iceblue.conf b/conf/theme-iceblue.conf
new file mode 100644
index 0000000..b2a51a2
--- /dev/null
+++ b/conf/theme-iceblue.conf
@@ -0,0 +1,2 @@
+displayType = 0
+logoVerticalAlignment = 1
diff --git a/conf/theme-light.conf b/conf/theme-light.conf
new file mode 100644
index 0000000..2338b4b
--- /dev/null
+++ b/conf/theme-light.conf
@@ -0,0 +1,39 @@
+displayType = 0
+backgroundStyle = 1
+logoVerticalAlignment = 1
+discUsageStyle = 0
+displayPoster = 0
+displaySignalStrength = 0
+displaySourceInfo = 0
+fontChannelGroupSize = 7
+fontChannelGroupSmallSize = 5
+fontDiskUsage = 13
+fontEPGInfoWindow = -2
+fontEPGSize = 3
+fontEPGSmallSize = 3
+fontHeader = 10
+fontMenuitemDefault = -14
+fontMenuitemLarge = 5
+fontTimers = -4
+fontTimersHead = -6
+footerHeight = 6
+headerHeight = 6
+mainMenuTitleStyle = 0
+menuSizeDiskUsage = 13
+menuWidthChannels = 37
+menuWidthMain = 26
+menuWidthRecordings = 37
+menuWidthRightItems = 13
+menuWidthSchedules = 37
+menuWidthSetup = 26
+menuWidthTimers = 37
+numDefaultMenuItems = 12
+numMainMenuItems = 12
+numSchedulesMenuItems = 12
+numRecordingsMenuItems = 12
+roundedCorners = 0
+scalePicture = 0
+showDiscUsage = 0
+showTimers = 2
+useFolderPoster = 0
+useMenuIcons = 0
diff --git a/config.c b/config.c
index 1c4bb94..0cf62f1 100644
--- a/config.c
+++ b/config.c
@@ -1,4 +1,9 @@
+#include <string>
+#include <vector>
+#include <map>
 #include "config.h"
+#include "helpers.h"
+#include <vdr/skins.h>
 
 cNopacityConfig::cNopacityConfig() {
     logoPathSet = false;
@@ -6,320 +11,386 @@ cNopacityConfig::cNopacityConfig() {
     iconPathSet = false;
     //Common
     mainMenuEntry = false;
-    fontIndex = 0;
+    fontName = NULL;
     fontDefaultName = "VDRSymbols Sans:Book";
-    //DisplayChannel
-    channelHeight = 25;
-    channelBorderVertical = 15;
-    channelBorderBottom = 15;
-    channelFadeTime = 300; // ms
-    logoPosition = 1;
-    logoWidth = 260;
-    logoHeight = 200;
     logoExtension = "png";
-    logoBorder = 15;
-    displaySignalStrength = 1;
-    fontChannelHeaderSize = 0;
-    fontChannelDateSize = 0;
-    fontEPGSize = 0;
-    fontEPGSmallSize = 0;
-    resolutionIconSize = 100;
-    statusIconSize = 64;
-    progressCurrentSchedule = 0;
-    //Display Replay 
-    replayHeight = 25;
-    replayBorderVertical = 15;
-    replayBorderBottom = 15;
-    replayFadeTime = 300; // ms
-    fontReplayHeader = 0;
-    fontReplay = 0;
-    //DisplayMessage
-    messageWidth = 90;
-    messageHeight = 10;
-    messageBorderBottom = 10;
-    fontMessage = 0;
-    messageFadeTime = 300;
-    //DisplayTracks
-    tracksFadeTime = 300;
-    tracksWidth = 25;
-    tracksItemHeight = 80;
-    tracksPosition = 0;
-    tracksBorderHorizontal = 10;
-    tracksBorderVertical = 10;
-    fontTracksHeader = 0;
-    fontTracks = 0;
-    //DisplayVolume
-    volumeFadeTime = 300;
-    volumeWidth = 40;
-    volumeHeight = 10;
-    volumeBorderBottom = 10;
-    fontVolume = 0;
-    //DisplayMenu
-    menuAdjustLeft = 1;
-    scalePicture = 1;
-    roundedCorners = 0;
-    cornerRadius = 12;
-    useMenuIcons = 1;
-    mainMenuTitleStyle = 0;
-    narrowMainMenu = 1;
-    narrowScheduleMenu = 1;
-    narrowChannelMenu = 1;
-    narrowTimerMenu = 1;
-    narrowRecordingMenu = 1;
-    narrowSetupMenu = 1;
-    displayRerunsDetailEPGView = 1;
-    numReruns = 5;
-    useSubtitleRerun = 1;
-    displayAdditionalEPGPictures = 1;
-    numAdditionalEPGPictures = 9;
-    displayAdditionalRecEPGPictures = 1;
-    numAdditionalRecEPGPictures = 9;
-    menuFadeTime = 0;
-    menuEPGWindowFadeTime = 300;
-    menuWidthMain = 30;
-    menuWidthSchedules = 30;
-    menuWidthChannels = 30;
-    menuWidthTimers = 30;
-    menuWidthRecordings = 30;
-    menuWidthSetup = 30;
-    menuHeightInfoWindow = 20;
-    menuScrollDelay = 1;
-    menuScrollSpeed = 2;
-    menuInfoTextDelay = 2;
-    menuInfoScrollDelay = 5;
-    menuInfoScrollSpeed = 2;
-    menuWidthRightItems = 12;
-    menuSizeDiskUsage = 12;
-    showDiscUsage = 1;
-    showTimers = 1;
-    numberTimers = 10;
-    checkTimerConflict = 1;
-    headerHeight = 7;
-    footerHeight = 7;
-    numDefaultMenuItems = 16;
-    iconHeight = 100;
-    headerIconHeight = 80;
-    menuHeaderLogoWidth = 160;
-    menuHeaderLogoHeight = 70;
-    menuItemLogoWidth = 130;
-    menuItemLogoHeight = 100;
-    detailViewLogoWidth = 260;
-    detailViewLogoHeight = 200;
-    timersLogoWidth = 90;
-    timersLogoHeight = 70;
-    epgImageWidth = 210;
-    epgImageHeight = 160;
-    epgImageWidthLarge = 525;
-    epgImageHeightLarge = 400;
-    menuRecFolderSize = 128;
-    fontHeader = 0;
-    fontDate = 0;
-    fontMenuitemLarge = 0;
-    fontMenuitemSchedule = 0;
-    fontMenuitemScheduleSmall = 0;
-    fontMenuitemChannel = 0;
-    fontMenuitemChannelSmall = 0;
-    fontMenuitemRecordings = 0;
-    fontMenuitemRecordingsSmall = 0;
-    fontMenuitemTimers = 0;
-    fontMenuitemTimersSmall = 0;
-    fontMenuitemDefault = 0;
-    fontDiskUsage = 0;
-    fontDiskUsagePercent = 0;
-    fontTimersHead = 0;
-    fontTimers = 0;
-    fontButtons = 0;
-    fontMessageMenu = 0;
-    fontDetailView = 0;
-    fontDetailViewHeader = 0;
-    fontDetailViewHeaderLarge = 0;
-    fontEPGInfoWindow = 0;
+    LoadDefaults();
 }
 
 cNopacityConfig::~cNopacityConfig() {
 }
 
-void cNopacityConfig::setDynamicValues() {
-    if (fontIndex == 0) {
+int cNopacityConfig::GetValue(std::string name) {
+    std::map<std::string, int>::iterator hit = conf.find(name);
+    if (hit != conf.end()) {
+        return (int)hit->second;
+    } else {
+        dsyslog("nopacity: ERROR: access to unknown config value %s", name.c_str());
+    }
+    return 0;
+}
+
+int *cNopacityConfig::GetValueRef(std::string name) {
+    int *ref = NULL;
+    std::map<std::string, int>::iterator hit = conf.find(name);
+    if (hit != conf.end()) {
+        ref = &hit->second;
+    } else {
+        dsyslog("nopacity: ERROR: access to unknown config value %s", name.c_str());
+    }
+    return ref;
+}
+
+void cNopacityConfig::LoadDefaults(void) {
+    conf.clear();
+    //Common Values
+    conf.insert(std::pair<std::string, int>("displayType", dtBlending));
+    conf.insert(std::pair<std::string, int>("fontIndex", 0));
+    conf.insert(std::pair<std::string, int>("debugImageLoading", 0));
+    //DisplayMenu
+    conf.insert(std::pair<std::string, int>("scrollMode", 0));
+    conf.insert(std::pair<std::string, int>("spaceMenu", 5));
+    conf.insert(std::pair<std::string, int>("widthScrollbar", 20));
+    conf.insert(std::pair<std::string, int>("menuAdjustLeft", 1));
+    conf.insert(std::pair<std::string, int>("scalePicture", 1));
+    conf.insert(std::pair<std::string, int>("roundedCorners", 1));
+    conf.insert(std::pair<std::string, int>("cornerRadius", 12));
+    conf.insert(std::pair<std::string, int>("useMenuIcons", 1));
+    conf.insert(std::pair<std::string, int>("mainMenuTitleStyle", 0));
+    conf.insert(std::pair<std::string, int>("narrowMainMenu", 1));
+    conf.insert(std::pair<std::string, int>("narrowScheduleMenu", 1));
+    conf.insert(std::pair<std::string, int>("narrowChannelMenu", 1));
+    conf.insert(std::pair<std::string, int>("narrowTimerMenu", 1));
+    conf.insert(std::pair<std::string, int>("narrowRecordingMenu", 1));
+    conf.insert(std::pair<std::string, int>("narrowSetupMenu", 1));
+    conf.insert(std::pair<std::string, int>("numReruns", 5));
+    conf.insert(std::pair<std::string, int>("useSubtitleRerun", 1));
+    conf.insert(std::pair<std::string, int>("menuChannelDisplayMode", 0));
+    conf.insert(std::pair<std::string, int>("menuChannelDisplayTime", 1));
+    conf.insert(std::pair<std::string, int>("numEPGEntriesChannelsMenu", 15));
+    conf.insert(std::pair<std::string, int>("menuFadeTime", 0));
+    conf.insert(std::pair<std::string, int>("menuEPGWindowFadeTime", 300));
+    conf.insert(std::pair<std::string, int>("menuWidthMain", 30));
+    conf.insert(std::pair<std::string, int>("menuWidthSchedules", 30));
+    conf.insert(std::pair<std::string, int>("menuWidthChannels", 30));
+    conf.insert(std::pair<std::string, int>("menuWidthTimers", 30));
+    conf.insert(std::pair<std::string, int>("menuWidthRecordings", 30));
+    conf.insert(std::pair<std::string, int>("menuWidthSetup", 30));
+    conf.insert(std::pair<std::string, int>("menuHeightInfoWindow", 20));
+    conf.insert(std::pair<std::string, int>("menuScrollDelay", 1));
+    conf.insert(std::pair<std::string, int>("menuScrollSpeed", 2));
+    conf.insert(std::pair<std::string, int>("menuInfoTextDelay", 2));
+    conf.insert(std::pair<std::string, int>("menuInfoScrollDelay", 5));
+    conf.insert(std::pair<std::string, int>("menuInfoScrollSpeed", 2));
+    conf.insert(std::pair<std::string, int>("menuWidthRightItems", 12));
+    conf.insert(std::pair<std::string, int>("menuSizeDiskUsage", 12));
+    conf.insert(std::pair<std::string, int>("showDiscUsage", 1));
+    conf.insert(std::pair<std::string, int>("discUsageStyle", 0));
+    conf.insert(std::pair<std::string, int>("showTimers", 1));
+    conf.insert(std::pair<std::string, int>("numberTimers", 10));
+    conf.insert(std::pair<std::string, int>("timersLogoWidth", 60));    
+    conf.insert(std::pair<std::string, int>("checkTimerConflict", 1));
+    conf.insert(std::pair<std::string, int>("headerHeight", 7));
+    conf.insert(std::pair<std::string, int>("footerHeight", 7));
+    conf.insert(std::pair<std::string, int>("numDefaultMenuItems", 16));
+    conf.insert(std::pair<std::string, int>("numMainMenuItems", 10));
+    conf.insert(std::pair<std::string, int>("numSchedulesMenuItems", 10));
+    conf.insert(std::pair<std::string, int>("numRecordingsMenuItems", 10));
+    conf.insert(std::pair<std::string, int>("menuHeaderLogoWidth", 160));
+    conf.insert(std::pair<std::string, int>("menuHeaderLogoHeight", 70));
+    conf.insert(std::pair<std::string, int>("epgImageWidth", 210));
+    conf.insert(std::pair<std::string, int>("epgImageHeight", 160));
+    conf.insert(std::pair<std::string, int>("epgImageWidthLarge", 525));
+    conf.insert(std::pair<std::string, int>("epgImageHeightLarge", 400));
+    conf.insert(std::pair<std::string, int>("posterWidth", 500));
+    conf.insert(std::pair<std::string, int>("posterHeight", 750));
+    conf.insert(std::pair<std::string, int>("useFolderPoster", 1));
+    conf.insert(std::pair<std::string, int>("menuChannelLogoBackground", 1));
+    conf.insert(std::pair<std::string, int>("borderDetailedEPG", 30));
+    conf.insert(std::pair<std::string, int>("borderDetailedRecordings", 30));
+    conf.insert(std::pair<std::string, int>("headerDetailedEPG", 20));
+    conf.insert(std::pair<std::string, int>("headerDetailedRecordings", 20));
+    conf.insert(std::pair<std::string, int>("detailedViewScrollStep", 1));
+    conf.insert(std::pair<std::string, int>("menuSchedulesWindowMode", 1));
+    conf.insert(std::pair<std::string, int>("menuRecordingsWindowMode", 1));
+    conf.insert(std::pair<std::string, int>("menuTimersWindowMode", 1));
+    conf.insert(std::pair<std::string, int>("fontHeader", 0));
+    conf.insert(std::pair<std::string, int>("fontDate", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemLarge", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemSchedule", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemScheduleSmall", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemChannel", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemChannelSmall", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemRecordings", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemRecordingsSmall", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemTimers", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemTimersSmall", 0));
+    conf.insert(std::pair<std::string, int>("fontMenuitemDefault", 0));
+    conf.insert(std::pair<std::string, int>("fontDiskUsage", 0));
+    conf.insert(std::pair<std::string, int>("fontDiskUsagePercent", 0));
+    conf.insert(std::pair<std::string, int>("fontTimers", 0));
+    conf.insert(std::pair<std::string, int>("fontTimersHead", 0));
+    conf.insert(std::pair<std::string, int>("fontButtons", 0));
+    conf.insert(std::pair<std::string, int>("fontMessageMenu", 0));
+    conf.insert(std::pair<std::string, int>("fontDetailView", 0));
+    conf.insert(std::pair<std::string, int>("fontDetailViewSmall", 0));
+    conf.insert(std::pair<std::string, int>("fontDetailViewHeader", 0));
+    conf.insert(std::pair<std::string, int>("fontDetailViewHeaderLarge", 0));
+    conf.insert(std::pair<std::string, int>("fontEPGInfoWindow", 0));
+    conf.insert(std::pair<std::string, int>("fontEPGInfoWindowLarge", 0));
+    //DisplayChannel
+    conf.insert(std::pair<std::string, int>("channelHeight", 25));
+    conf.insert(std::pair<std::string, int>("channelBorderVertical", 15));
+    conf.insert(std::pair<std::string, int>("channelBorderBottom", 15));
+    conf.insert(std::pair<std::string, int>("channelFadeTime", 300));
+    conf.insert(std::pair<std::string, int>("channelBackgroundTransparency", 0));
+    conf.insert(std::pair<std::string, int>("channelUseLogoBackground", 1));
+    conf.insert(std::pair<std::string, int>("logoPosition", 1));
+    conf.insert(std::pair<std::string, int>("logoVerticalAlignment", 1));
+    conf.insert(std::pair<std::string, int>("logoWidth", 260));
+    conf.insert(std::pair<std::string, int>("logoHeight", 200));
+    conf.insert(std::pair<std::string, int>("logoWidthOriginal", 260));
+    conf.insert(std::pair<std::string, int>("logoHeightOriginal", 200));
+    conf.insert(std::pair<std::string, int>("backgroundStyle", 0));
+    conf.insert(std::pair<std::string, int>("roundedCornersChannel", 1));
+    conf.insert(std::pair<std::string, int>("displaySignalStrength", 1));
+    conf.insert(std::pair<std::string, int>("displaySourceInfo", 1));
+    conf.insert(std::pair<std::string, int>("displayPrevNextChannelGroup", 1));
+    conf.insert(std::pair<std::string, int>("fontChannelHeaderSize", 0));
+    conf.insert(std::pair<std::string, int>("fontChannelDateSize", 0));
+    conf.insert(std::pair<std::string, int>("fontEPGSize", 0));
+    conf.insert(std::pair<std::string, int>("fontEPGSmallSize", 0));
+    conf.insert(std::pair<std::string, int>("fontChannelSourceInfoSize", 0));
+    conf.insert(std::pair<std::string, int>("fontChannelGroupSize", 0));
+    conf.insert(std::pair<std::string, int>("fontChannelGroupSmallSize", 0));
+    conf.insert(std::pair<std::string, int>("progressCurrentSchedule", 0));
+    conf.insert(std::pair<std::string, int>("displayPoster", 1));
+    conf.insert(std::pair<std::string, int>("channelPosterBorder", 10));
+    //Display Replay
+    conf.insert(std::pair<std::string, int>("replayHeight", 25));
+    conf.insert(std::pair<std::string, int>("replayBorderVertical", 15));
+    conf.insert(std::pair<std::string, int>("replayBorderBottom", 15));
+    conf.insert(std::pair<std::string, int>("replayFadeTime", 300));
+    conf.insert(std::pair<std::string, int>("fontReplayHeader", 0));
+    conf.insert(std::pair<std::string, int>("fontReplay", 0));
+    //DisplayMessage
+    conf.insert(std::pair<std::string, int>("messageFadeTime", 300));
+    conf.insert(std::pair<std::string, int>("messageWidth", 90));
+    conf.insert(std::pair<std::string, int>("messageHeight", 10));
+    conf.insert(std::pair<std::string, int>("messageBorderBottom", 10));
+    conf.insert(std::pair<std::string, int>("fontMessage", 0));
+    //DisplayTracks
+    conf.insert(std::pair<std::string, int>("tracksFadeTime", 300));
+    conf.insert(std::pair<std::string, int>("tracksWidth", 25));
+    conf.insert(std::pair<std::string, int>("tracksItemHeight", 80));
+    conf.insert(std::pair<std::string, int>("tracksPosition", 0));
+    conf.insert(std::pair<std::string, int>("tracksBorderHorizontal", 10));
+    conf.insert(std::pair<std::string, int>("tracksBorderVertical", 10));
+    conf.insert(std::pair<std::string, int>("fontTracksHeader", 0));
+    conf.insert(std::pair<std::string, int>("fontTracks", 0));
+    //DisplayVolume
+    conf.insert(std::pair<std::string, int>("volumeFadeTime", 300));
+    conf.insert(std::pair<std::string, int>("volumeWidth", 40));
+    conf.insert(std::pair<std::string, int>("volumeHeight", 10));
+    conf.insert(std::pair<std::string, int>("volumeBorderBottom", 10));
+    conf.insert(std::pair<std::string, int>("fontVolume", 0));
+    //Channel Logo Caching
+    conf.insert(std::pair<std::string, int>("limitLogoCache", 1));
+    conf.insert(std::pair<std::string, int>("numLogosInitial", 30));
+    conf.insert(std::pair<std::string, int>("numLogosMax", 50));
+}
+
+void cNopacityConfig::SetFontName() {
+    if (fontName)
+        free(fontName);
+    if (GetValue("fontIndex") == 0) {
         fontName = strdup(fontDefaultName);
     } else {
         cStringList availableFonts;
         cFont::GetAvailableFontNames(&availableFonts);
-        if (availableFonts[fontIndex-1]) {
-            fontName = strdup(availableFonts[fontIndex-1]);
-        } else 
+        if (availableFonts[GetValue("fontIndex")-1]) {
+            fontName = strdup(availableFonts[GetValue("fontIndex")-1]);
+        } else
             fontName = strdup(fontDefaultName);
     }
-    channelFrameTime = channelFadeTime / 10;
-    replayFrameTime = replayFadeTime / 10;
-    messageFrameTime = messageFadeTime / 10;
-    tracksFrameTime = tracksFadeTime / 10;
-    volumeFrameTime = volumeFadeTime / 10;
-    menuFrameTime = menuFadeTime / 10;
-    menuEPGWindowFrameTime = menuEPGWindowFadeTime / 10;
-    
-    menuScrollFrameTime = 0;
-    if (menuScrollSpeed == 1)
-        menuScrollFrameTime = 50;
-    else if (menuScrollSpeed == 2)
-        menuScrollFrameTime = 30;
-    else if (menuScrollSpeed == 3)
-        menuScrollFrameTime = 15;
-        
-    menuInfoScrollFrameTime = 0;
-    if (menuInfoScrollSpeed == 1)
-        menuInfoScrollFrameTime = 50;
-    else if (menuInfoScrollSpeed == 2)
-        menuInfoScrollFrameTime = 30;
-    else if (menuInfoScrollSpeed == 3)
-        menuInfoScrollFrameTime = 15;
-    
+}
+
+void cNopacityConfig::SetPathes(void) {
     logoPathDefault = cString::sprintf("%s/logos/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
     iconPathDefault = cString::sprintf("%s/icons/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
     epgImagePathDefault = cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N));
-    
-    dsyslog("nopacity: using Logo Directory %s", (logoPathSet)?(*logoPath):(*logoPathDefault)); 
-    dsyslog("nopacity: using Icon Directory %s", (iconPathSet)?(*iconPath):(*iconPathDefault)); 
-    dsyslog("nopacity: using EPG Images Directory %s", (epgImagePathSet)?(*epgImagePath):(*epgImagePathDefault)); 
+
+    dsyslog("nopacity: using Logo Directory %s", (logoPathSet)?(*logoPath):(*logoPathDefault));
+    dsyslog("nopacity: using Icon Directory %s", (iconPathSet)?(*iconPath):(*iconPathDefault));
+    dsyslog("nopacity: using EPG Images Directory %s", (epgImagePathSet)?(*epgImagePath):(*epgImagePathDefault));
 }
 
 void cNopacityConfig::SetLogoPath(cString path) {
-    logoPath = path;
+    logoPath = checkSlashAtEnd(*path);
     logoPathSet = true;
 }
 
 void cNopacityConfig::SetIconPath(cString path) {
-    iconPath = path;
+    iconPath = checkSlashAtEnd(*path);
     iconPathSet = true;
 }
 
 void cNopacityConfig::SetEpgImagePath(cString path) {
-    epgImagePath = path;
+    epgImagePath = checkSlashAtEnd(*path);
     epgImagePathSet = true;
 }
 
+cString cNopacityConfig::checkSlashAtEnd(std::string path) {
+    try {
+        if (!(path.at(path.size()-1) == '/'))
+            return cString::sprintf("%s/", path.c_str());
+    } catch (...) {return path.c_str();}
+    return path.c_str();
+}
+
+void cNopacityConfig::LoadThemeSpecificConfigs(void) {
+    cThemes themes;
+    themes.Load("nOpacity");
+    int numThemes = themes.NumThemes();
+    dsyslog("nopacity: %d themes available", numThemes);
+    for (int theme = 0; theme < numThemes; theme++) {
+        cString confFile = cString::sprintf("%s/themeconfigs/theme-%s.conf", cPlugin::ConfigDirectory(PLUGIN_NAME_I18N), themes.Name(theme));
+        dsyslog("nopacity: trying to load theme config %s", *confFile);
+        LoadThemeConfig(confFile, themes.Name(theme));
+    }
+}
+
+void cNopacityConfig::LoadThemeConfig(cString confFile, cString theme) {
+    FILE *f = fopen(*confFile, "r");
+    if (f) {
+        dsyslog("nopacity: %s successfully loaded", *confFile);
+        std::map<std::string, int> themeConf;
+        char *line;
+        cReadLine ReadLine;
+        bool insertConf = false;
+        while ((line = ReadLine.Read(f)) != NULL) {
+            std::pair<std::string, int> themeConfLine = ReadThemeConfigLine(line);
+            std::string name = (std::string)themeConfLine.first;
+            if (name.compare("undefined") != 0) {
+                themeConf.insert(themeConfLine);
+                insertConf = true;
+            }
+        }
+        if (insertConf)
+            themeConfigDefaults.insert(std::pair<std::string, std::map<std::string, int> >(*theme, themeConf));
+    }
+}
+
+std::pair<std::string, int> cNopacityConfig::ReadThemeConfigLine(const char *line) {
+    std::pair<std::string, int> themeConf;
+    try {
+        splitstring s(line);
+        std::vector<std::string> flds = s.split('=', 0);
+        if (flds.size() == 2) {
+            std::string name = flds[0];
+            name.erase(name.find_last_not_of(" ")+1);
+            name.erase(0, name.find_first_not_of(" "));
+            int value = atoi(flds[1].c_str());
+            themeConf = std::make_pair (name,value);
+        } else {
+            themeConf = std::make_pair ("undefined",0);
+        }
+    } catch (...) {
+        themeConf = std::make_pair ("undefined",0);
+    }
+    return themeConf;
+}
+
+void cNopacityConfig::SetThemeSpecificDefaults(void) {
+    std::map<std::string, std::map<std::string, int> >::iterator themeConfHit = themeConfigDefaults.find(Setup.OSDTheme);
+    if (themeConfHit != themeConfigDefaults.end()) {
+        std::map<std::string, int> themeConf =  (std::map<std::string, int>)themeConfHit->second;
+        for(std::map<std::string, int>::const_iterator it = themeConf.begin(); it != themeConf.end(); it++) {
+            std::string name = (std::string)it->first;
+            int value = (int)it->second;
+            std::map<std::string, int>::iterator origVal = conf.find(name);
+            if (origVal != conf.end()) {
+                conf.erase(origVal);
+                conf.insert(std::pair<std::string, int>(name, value));
+            } else {
+                dsyslog("nopacity: ERROR: unknown config parameter %s in default config for theme %s", name.c_str(), Setup.OSDTheme);
+            }
+        }
+    }
+}
+
+void cNopacityConfig::SetThemeSetup(void) {
+    std::map<std::string, std::map<std::string, int> >::iterator themeSetupHit = themeConfigSetup.find(Setup.OSDTheme);
+    if (themeSetupHit != themeConfigSetup.end()) {
+        std::map<std::string, int> themeSetup =  (std::map<std::string, int>)themeSetupHit->second;
+        for(std::map<std::string, int>::const_iterator it = themeSetup.begin(); it != themeSetup.end(); it++) {
+            std::string name = (std::string)it->first;
+            int value = (int)it->second;
+            std::map<std::string, int>::iterator origVal = conf.find(name);
+            if (origVal != conf.end()) {
+                conf.erase(origVal);
+                conf.insert(std::pair<std::string, int>(name, value));
+            }
+        }
+    }
+}
+
 bool cNopacityConfig::SetupParse(const char *Name, const char *Value) {
-    if      (strcmp(Name, "fontIndex") == 0)               fontIndex = atoi(Value);
-    else if (strcmp(Name, "channelFadeTime") == 0)         channelFadeTime = atoi(Value);
-    else if (strcmp(Name, "channelHeight") == 0)           channelHeight = atoi(Value);
-    else if (strcmp(Name, "channelBorderVertical") == 0)   channelBorderVertical = atoi(Value);
-    else if (strcmp(Name, "channelBorderBottom") == 0)     channelBorderBottom = atoi(Value);
-    else if (strcmp(Name, "logoPosition") == 0)            logoPosition = atoi(Value);
-    else if (strcmp(Name, "logoWidth") == 0)               logoWidth = atoi(Value);
-    else if (strcmp(Name, "logoHeight") == 0)              logoHeight = atoi(Value);
-    else if (strcmp(Name, "logoBorder") == 0)              logoBorder = atoi(Value);
-    else if (strcmp(Name, "displaySignalStrength") == 0)   displaySignalStrength = atoi(Value);
-    else if (strcmp(Name, "fontChannelHeaderSize") == 0)   fontChannelHeaderSize = atoi(Value);
-    else if (strcmp(Name, "fontChannelDateSize") == 0)     fontChannelDateSize = atoi(Value);
-    else if (strcmp(Name, "fontEPGSize") == 0)             fontEPGSize = atoi(Value);
-    else if (strcmp(Name, "fontEPGSmallSize") == 0)        fontEPGSmallSize = atoi(Value);
-    else if (strcmp(Name, "resolutionIconSize") == 0)      resolutionIconSize = atoi(Value);
-    else if (strcmp(Name, "statusIconSize") == 0)          statusIconSize = atoi(Value);
-    else if (strcmp(Name, "progressCurrentSchedule") == 0) progressCurrentSchedule = atoi(Value);
-    else if (strcmp(Name, "replayHeight") == 0)            replayHeight = atoi(Value);
-    else if (strcmp(Name, "replayBorderVertical") == 0)    replayBorderVertical = atoi(Value);
-    else if (strcmp(Name, "replayBorderBottom") == 0)      replayBorderBottom = atoi(Value);
-    else if (strcmp(Name, "replayFadeTime") == 0)          replayFadeTime = atoi(Value);
-    else if (strcmp(Name, "fontReplayHeader") == 0)        fontReplayHeader = atoi(Value);
-    else if (strcmp(Name, "fontReplay") == 0)              fontReplay = atoi(Value);
-    else if (strcmp(Name, "messageWidth") == 0)            messageWidth = atoi(Value);
-    else if (strcmp(Name, "messageHeight") == 0)           messageHeight = atoi(Value);
-    else if (strcmp(Name, "messageBorderBottom") == 0)     messageBorderBottom = atoi(Value);
-    else if (strcmp(Name, "fontMessage") == 0)             fontMessage = atoi(Value);
-    else if (strcmp(Name, "messageFadeTime") == 0)         messageFadeTime = atoi(Value);
-    else if (strcmp(Name, "tracksFadeTime") == 0)          tracksFadeTime = atoi(Value);
-    else if (strcmp(Name, "tracksWidth") == 0)             tracksWidth = atoi(Value);
-    else if (strcmp(Name, "tracksItemHeight") == 0)        tracksItemHeight = atoi(Value);
-    else if (strcmp(Name, "tracksPosition") == 0)          tracksPosition = atoi(Value);
-    else if (strcmp(Name, "tracksBorderHorizontal") == 0)  tracksBorderHorizontal = atoi(Value);
-    else if (strcmp(Name, "tracksBorderVertical") == 0)    tracksBorderVertical = atoi(Value);
-    else if (strcmp(Name, "fontTracksHeader") == 0)        fontTracksHeader = atoi(Value);
-    else if (strcmp(Name, "fontTracks") == 0)              fontTracks = atoi(Value);
-    else if (strcmp(Name, "volumeFadeTime") == 0)          volumeFadeTime = atoi(Value);
-    else if (strcmp(Name, "volumeWidth") == 0)             volumeWidth = atoi(Value);
-    else if (strcmp(Name, "volumeHeight") == 0)            volumeHeight = atoi(Value);
-    else if (strcmp(Name, "volumeBorderBottom") == 0)      volumeBorderBottom = atoi(Value);
-    else if (strcmp(Name, "fontVolume") == 0)              fontVolume = atoi(Value);
-    else if (strcmp(Name, "menuFadeTime") == 0)            menuFadeTime = atoi(Value);
-    else if (strcmp(Name, "menuEPGWindowFadeTime") == 0)   menuEPGWindowFadeTime = atoi(Value);
-    else if (strcmp(Name, "menuScrollDelay") == 0)         menuScrollDelay = atoi(Value);
-    else if (strcmp(Name, "menuScrollSpeed") == 0)         menuScrollSpeed = atoi(Value);
-    else if (strcmp(Name, "menuInfoTextDelay") == 0)       menuInfoTextDelay = atoi(Value);
-    else if (strcmp(Name, "menuInfoScrollDelay") == 0)     menuInfoScrollDelay = atoi(Value);
-    else if (strcmp(Name, "menuInfoScrollSpeed") == 0)     menuInfoScrollSpeed = atoi(Value);
-    else if (strcmp(Name, "menuAdjustLeft") == 0)          menuAdjustLeft = atoi(Value);
-    else if (strcmp(Name, "scalePicture") == 0)            scalePicture = atoi(Value);
-    else if (strcmp(Name, "roundedCorners") == 0)          roundedCorners = atoi(Value);
-    else if (strcmp(Name, "cornerRadius") == 0)            cornerRadius = atoi(Value);
-    else if (strcmp(Name, "useMenuIcons") == 0)            useMenuIcons = atoi(Value);
-    else if (strcmp(Name, "mainMenuTitleStyle") == 0)      mainMenuTitleStyle = atoi(Value);
-    else if (strcmp(Name, "narrowMainMenu") == 0)          narrowMainMenu = atoi(Value);
-    else if (strcmp(Name, "narrowScheduleMenu") == 0)      narrowScheduleMenu = atoi(Value);
-    else if (strcmp(Name, "narrowChannelMenu") == 0)       narrowChannelMenu = atoi(Value);
-    else if (strcmp(Name, "narrowTimerMenu") == 0)         narrowTimerMenu = atoi(Value);
-    else if (strcmp(Name, "narrowRecordingMenu") == 0)     narrowRecordingMenu = atoi(Value);
-    else if (strcmp(Name, "narrowSetupMenu") == 0)         narrowSetupMenu = atoi(Value);
-    else if (strcmp(Name, "displayRerunsDetailEPGView") == 0) displayRerunsDetailEPGView = atoi(Value);
-    else if (strcmp(Name, "numReruns") == 0)               numReruns = atoi(Value);
-    else if (strcmp(Name, "useSubtitleRerun") == 0)        useSubtitleRerun = atoi(Value);
-    else if (strcmp(Name, "displayAdditionalEPGPictures") == 0) displayAdditionalEPGPictures = atoi(Value);
-    else if (strcmp(Name, "numAdditionalEPGPictures") == 0) numAdditionalEPGPictures = atoi(Value);
-    else if (strcmp(Name, "displayAdditionalRecEPGPictures") == 0) displayAdditionalRecEPGPictures = atoi(Value);
-    else if (strcmp(Name, "numAdditionalRecEPGPictures") == 0) numAdditionalRecEPGPictures = atoi(Value);
-    else if (strcmp(Name, "menuWidthMain") == 0)           menuWidthMain = atoi(Value);
-    else if (strcmp(Name, "menuWidthSchedules") == 0)      menuWidthSchedules = atoi(Value);
-    else if (strcmp(Name, "menuWidthChannels") == 0)       menuWidthChannels = atoi(Value);
-    else if (strcmp(Name, "menuWidthTimers") == 0)         menuWidthTimers = atoi(Value);
-    else if (strcmp(Name, "menuWidthRecordings") == 0)     menuWidthRecordings = atoi(Value);
-    else if (strcmp(Name, "menuWidthSetup") == 0)          menuWidthSetup = atoi(Value);
-    else if (strcmp(Name, "menuWidthRightItems") == 0)     menuWidthRightItems = atoi(Value);
-    else if (strcmp(Name, "menuSizeDiskUsage") == 0)       menuSizeDiskUsage = atoi(Value);
-    else if (strcmp(Name, "menuHeightInfoWindow") == 0)    menuHeightInfoWindow = atoi(Value);
-    else if (strcmp(Name, "showDiscUsage") == 0)           showDiscUsage = atoi(Value);
-    else if (strcmp(Name, "showTimers") == 0)              showTimers = atoi(Value);
-    else if (strcmp(Name, "numberTimers") == 0)            numberTimers = atoi(Value);
-    else if (strcmp(Name, "checkTimerConflict") == 0)      checkTimerConflict = atoi(Value);
-    else if (strcmp(Name, "headerHeight") == 0)            headerHeight = atoi(Value);
-    else if (strcmp(Name, "footerHeight") == 0)            footerHeight = atoi(Value);
-    else if (strcmp(Name, "numDefaultMenuItems") == 0)     numDefaultMenuItems = atoi(Value);
-    else if (strcmp(Name, "iconHeight") == 0)              iconHeight = atoi(Value);
-    else if (strcmp(Name, "headerIconHeight") == 0)        headerIconHeight = atoi(Value);
-    else if (strcmp(Name, "menuItemLogoWidth") == 0)       menuItemLogoWidth = atoi(Value);
-    else if (strcmp(Name, "menuItemLogoHeight") == 0)      menuItemLogoHeight = atoi(Value);
-    else if (strcmp(Name, "menuHeaderLogoWidth") == 0)     menuHeaderLogoWidth = atoi(Value);
-    else if (strcmp(Name, "menuHeaderLogoHeight") == 0)    menuHeaderLogoHeight = atoi(Value);
-    else if (strcmp(Name, "detailViewLogoWidth") == 0)     detailViewLogoWidth = atoi(Value);
-    else if (strcmp(Name, "detailViewLogoHeight") == 0)    detailViewLogoHeight = atoi(Value);
-    else if (strcmp(Name, "timersLogoWidth") == 0)         timersLogoWidth = atoi(Value);
-    else if (strcmp(Name, "timersLogoHeight") == 0)        timersLogoHeight = atoi(Value);
-    else if (strcmp(Name, "epgImageWidth") == 0)           epgImageWidth = atoi(Value);
-    else if (strcmp(Name, "epgImageHeight") == 0)          epgImageHeight = atoi(Value);
-    else if (strcmp(Name, "epgImageWidthLarge") == 0)      epgImageWidthLarge = atoi(Value);
-    else if (strcmp(Name, "epgImageHeightLarge") == 0)     epgImageHeightLarge = atoi(Value);
-    else if (strcmp(Name, "menuRecFolderSize") == 0)       menuRecFolderSize = atoi(Value);
-    else if (strcmp(Name, "fontHeader") == 0)              fontHeader = atoi(Value);
-    else if (strcmp(Name, "fontDate") == 0)                fontDate = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemLarge") == 0)       fontMenuitemLarge = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemSchedule") == 0)    fontMenuitemSchedule = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemScheduleSmall") == 0) fontMenuitemScheduleSmall = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemChannel") == 0)     fontMenuitemChannel = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemChannelSmall") == 0) fontMenuitemChannelSmall = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemRecordings") == 0)    fontMenuitemRecordings = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemRecordingsSmall") == 0) fontMenuitemRecordingsSmall = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemTimers") == 0)      fontMenuitemTimers = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemTimersSmall") == 0) fontMenuitemTimersSmall = atoi(Value);
-    else if (strcmp(Name, "fontMenuitemDefault") == 0)     fontMenuitemDefault = atoi(Value);
-    else if (strcmp(Name, "fontDiskUsage") == 0)           fontDiskUsage = atoi(Value);
-    else if (strcmp(Name, "fontDiskUsagePercent") == 0)    fontDiskUsagePercent = atoi(Value);
-    else if (strcmp(Name, "fontTimersHead") == 0)          fontTimersHead = atoi(Value);
-    else if (strcmp(Name, "fontTimers") == 0)              fontTimers = atoi(Value);
-    else if (strcmp(Name, "fontButtons") == 0)             fontButtons = atoi(Value);
-    else if (strcmp(Name, "fontMessageMenu") == 0)         fontMessageMenu = atoi(Value);
-    else if (strcmp(Name, "fontDetailView") == 0)          fontDetailView = atoi(Value);
-    else if (strcmp(Name, "fontDetailViewHeader") == 0)    fontDetailViewHeader = atoi(Value);
-    else if (strcmp(Name, "fontDetailViewHeaderLarge") == 0) fontDetailViewHeaderLarge = atoi(Value);
-    else if (strcmp(Name, "fontEPGInfoWindow") == 0)       fontEPGInfoWindow = atoi(Value);
-    else return false;
+    splitstring s(Name);
+    std::vector<std::string> flds = s.split('.', 0);
+    if (flds.size() == 2) {
+        std::string theme = flds[0];
+        std::string name = flds[1];
+        //check if valid value
+        std::map<std::string, int>::iterator hit = conf.find(name);
+        if (hit == conf.end())
+            return false;
+        SetThemeConfigSetupValue(theme, name, atoi(Value));
+    } else {
+        return false;
+    }
     return true;
-    
-}
\ No newline at end of file
+}
+
+void cNopacityConfig::SetThemeConfigSetupValue(std::string themeName, std::string key, int value) {
+    //check if theme already in map
+    std::map<std::string, std::map<std::string, int> >::iterator hit = themeConfigSetup.find(themeName);
+    if (hit != themeConfigSetup.end()) {
+        std::map<std::string, int> existingValues = (std::map<std::string, int>)hit->second;
+        existingValues.erase(key);
+	existingValues.insert(std::pair<std::string, int>(key, value));
+        themeConfigSetup.erase(themeName);
+        themeConfigSetup.insert(std::pair<std::string, std::map<std::string, int> >(themeName, existingValues));
+    } else {
+        std::map<std::string, int> themeConf;
+        themeConf.insert(std::pair<std::string, int>(key, value));
+        themeConfigSetup.insert(std::pair<std::string, std::map<std::string, int> >(themeName, themeConf));
+    }
+}
+
+void cNopacityConfig::DumpConfig(void) {
+   esyslog("nopacity: current config -----------------");
+   for(std::map<std::string, int>::const_iterator it = conf.begin(); it != conf.end(); it++) {
+        esyslog("nopacity: %s: %d", (std::string(it->first)).c_str(), (int)it->second);
+   }
+   esyslog("nopacity: --------------------------------");
+}
+
+void cNopacityConfig::DumpThemeConfig(void) {
+    for (std::map<std::string, std::map<std::string, int> >::const_iterator it = themeConfigDefaults.begin(); it != themeConfigDefaults.end(); it++) {
+        esyslog("nopacity: Default Config for theme %s -----------------", (std::string(it->first)).c_str());
+        std::map<std::string, int> themeValues = (std::map<std::string, int>)it->second;
+        for (std::map<std::string, int>::const_iterator it2 = themeValues.begin(); it2 != themeValues.end(); it2++) {
+            esyslog("nopacity: %s: %d", (std::string(it2->first)).c_str(), (int)it2->second);
+        }
+    }
+    esyslog("nopacity: --------------------------------");
+    for (std::map<std::string, std::map<std::string, int> >::const_iterator it3 = themeConfigSetup.begin(); it3 != themeConfigSetup.end(); it3++) {
+        esyslog("nopacity: Setup for theme %s -----------------", (std::string(it3->first)).c_str());
+        std::map<std::string, int> themeValues = (std::map<std::string, int>)it3->second;
+        for (std::map<std::string, int>::const_iterator it4 = themeValues.begin(); it4 != themeValues.end(); it4++) {
+            esyslog("nopacity: %s: %d", (std::string(it4->first)).c_str(), (int)it4->second);
+        }
+    }
+    esyslog("nopacity: --------------------------------");
+}
diff --git a/config.h b/config.h
index 7ec88d8..7990aa5 100644
--- a/config.h
+++ b/config.h
@@ -1,165 +1,219 @@
-#ifndef __NOPACITY_CONFIG_H
-#define __NOPACITY_CONFIG_H
-
-class cNopacityConfig {
-    private:
-    public:
-        cNopacityConfig();
-        ~cNopacityConfig();
-        bool SetupParse(const char *Name, const char *Value);
-        void SetLogoPath(cString path);
-        void SetIconPath(cString path);
-        void SetEpgImagePath(cString path);
-        bool logoPathSet;
-        bool epgImagePathSet;
-        bool iconPathSet;
-        cString logoPathDefault;
-        cString iconPathDefault;
-        cString epgImagePathDefault;
-        void setDynamicValues();
-        //Common
-        int fontIndex;
-        const char *fontDefaultName;
-        char *fontName;
-        cString logoPath;
-        cString logoExtension;
-        cString iconPath;
-        cString epgImagePath;
-        bool mainMenuEntry;
-        //DisplayChannel
-        int channelHeight;
-        int channelBorderVertical;
-        int channelBorderBottom;
-        int channelFadeTime;
-        int channelFrameTime;
-        int logoPosition;
-        int logoWidth;
-        int logoHeight;
-        int logoBorder;
-        int displaySignalStrength;
-        int fontChannelHeaderSize;
-        int fontChannelDateSize;
-        int fontEPGSize;
-        int fontEPGSmallSize;
-        int resolutionIconSize;
-        int statusIconSize;
-        int progressCurrentSchedule;
-        //DisplayReplay
-        int replayHeight;
-        int replayBorderVertical;
-        int replayBorderBottom;
-        int replayFadeTime;
-        int replayFrameTime;
-        int fontReplayHeader;
-        int fontReplay;
-        //Display Message
-        int messageWidth;
-        int messageHeight;
-        int messageBorderBottom;
-        int fontMessage;
-        int messageFadeTime;
-        int messageFrameTime;
-        //DisplayTracks
-        int tracksFadeTime;
-        int tracksFrameTime;
-        int tracksWidth;
-        int tracksItemHeight;
-        int tracksPosition;
-        int tracksBorderHorizontal;
-        int tracksBorderVertical;
-        int fontTracksHeader;
-        int fontTracks;
-        //DisplayVolume
-        int volumeFadeTime;
-        int volumeFrameTime;
-        int volumeWidth;
-        int volumeHeight;
-        int volumeBorderBottom;
-        int fontVolume;
-        //DisplayMenu
-        int menuAdjustLeft;
-        int scalePicture;
-        int roundedCorners;
-        int cornerRadius;
-        int useMenuIcons;
-        int mainMenuTitleStyle;
-        int narrowMainMenu;
-        int narrowScheduleMenu;
-        int narrowChannelMenu;
-        int narrowTimerMenu;
-        int narrowRecordingMenu;
-        int narrowSetupMenu;
-        int displayRerunsDetailEPGView;
-        int numReruns;
-        int useSubtitleRerun;
-        int displayAdditionalEPGPictures;
-        int numAdditionalEPGPictures;
-        int displayAdditionalRecEPGPictures;
-        int numAdditionalRecEPGPictures;
-        int menuFadeTime;
-        int menuEPGWindowFadeTime;
-        int menuFrameTime;
-        int menuEPGWindowFrameTime;
-        int menuScrollDelay;
-        int menuScrollSpeed;
-        int menuScrollFrameTime;
-        int menuInfoTextDelay;
-        int menuInfoScrollDelay;
-        int menuInfoScrollSpeed;
-        int menuInfoScrollFrameTime;
-        int menuWidthMain;
-        int menuWidthSchedules;
-        int menuWidthChannels;
-        int menuWidthTimers;
-        int menuWidthRecordings;
-        int menuWidthSetup;
-        int menuHeightInfoWindow;
-        int menuWidthRightItems;
-        int menuSizeDiskUsage;
-        int showDiscUsage;
-        int showTimers;
-        int numberTimers;
-        int checkTimerConflict;
-        int headerHeight;
-        int footerHeight;
-        int numDefaultMenuItems;
-        int iconHeight;
-        int headerIconHeight;
-        int menuItemLogoWidth;
-        int menuItemLogoHeight;
-        int menuHeaderLogoWidth;
-        int menuHeaderLogoHeight;
-        int detailViewLogoWidth;
-        int detailViewLogoHeight;
-        int timersLogoWidth;
-        int timersLogoHeight;
-        int epgImageWidth;
-        int epgImageHeight;
-        int epgImageWidthLarge;
-        int epgImageHeightLarge;
-        int menuRecFolderSize;
-        int fontHeader;
-        int fontDate;
-        int fontMenuitemLarge;
-        int fontMenuitemSchedule;
-        int fontMenuitemScheduleSmall;
-        int fontMenuitemChannel;
-        int fontMenuitemChannelSmall;
-        int fontMenuitemRecordings;
-        int fontMenuitemRecordingsSmall;
-        int fontMenuitemTimers;
-        int fontMenuitemTimersSmall;
-        int fontMenuitemDefault;
-        int fontDiskUsage;
-        int fontDiskUsagePercent;
-        int fontTimersHead;
-        int fontTimers;
-        int fontButtons;
-        int fontMessageMenu;
-        int fontDetailView;
-        int fontDetailViewHeader;
-        int fontDetailViewHeaderLarge;
-        int fontEPGInfoWindow;
-};
-
-#endif //__NOPACITY_CONFIG_H
\ No newline at end of file
+#ifndef __NOPACITY_CONFIG_H
+#define __NOPACITY_CONFIG_H
+
+#include <string>
+#include <vector>
+#include <map>
+#include <vdr/tools.h>
+#include <vdr/skins.h>
+#include <vdr/plugin.h>
+#include "fontmanager.h"
+#include "geometrymanager.h"
+
+enum eDisplayType {
+    dtFlat = 0,
+    dtBlending,
+    dtGraphical
+};
+
+class cNopacityConfig {
+    private:
+        std::map<std::string, int> conf;
+        std::map<std::string, std::map<std::string, int> > themeConfigDefaults;
+        std::map<std::string, std::map<std::string, int> > themeConfigSetup;
+        void LoadThemeConfig(cString confFile, cString theme);
+        std::pair<std::string, int> ReadThemeConfigLine(const char *line);
+        cString checkSlashAtEnd(std::string path);
+    public:
+        cNopacityConfig();
+        ~cNopacityConfig();
+        int GetValue(std::string name);
+        int *GetValueRef(std::string name);
+        std::map<std::string, int>::const_iterator GetStart(void) { return conf.begin(); };
+        std::map<std::string, int>::const_iterator GetEnd(void) { return conf.end(); };
+        bool SetupParse(const char *Name, const char *Value);
+        void SetThemeConfigSetupValue(std::string themeName, std::string key, int value);
+        void SetLogoPath(cString path);
+        void SetIconPath(cString path);
+        void SetEpgImagePath(cString path);
+        bool logoPathSet;
+        bool epgImagePathSet;
+        bool iconPathSet;
+        cString logoPathDefault;
+        cString iconPathDefault;
+        cString epgImagePathDefault;
+        void LoadDefaults(void);
+        void LoadThemeSpecificConfigs(void);
+        void SetThemeSpecificDefaults(void);
+        void SetThemeSetup(void);
+        void SetPathes(void);
+        void DumpConfig(void);
+        void DumpThemeConfig(void);
+        void SetFontName();
+        const char *fontDefaultName;
+        char *fontName;
+        cString logoPath;
+        cString logoExtension;
+        cString iconPath;
+        cString epgImagePath;
+        bool mainMenuEntry;
+};
+#ifdef DEFINE_CONFIG
+   bool firstDisplay = true;
+   cNopacityConfig config;
+   cGeometryManager *geoManager;
+   cFontManager *fontManager;
+   cTheme Theme;
+#else
+   extern bool firstDisplay;
+   extern cNopacityConfig config;
+   extern cGeometryManager *geoManager;
+   extern cFontManager *fontManager;
+   extern cTheme Theme;
+#endif
+
+//COMMON
+#define CLR_TRANSPARENT         0x00000000
+#define CLR_MENUBACK            0xB012273F
+#define CLR_FONT                0xFFFFFFFF
+#define CLR_FONTINACTIVE        0xFF858585
+#define CLR_FONTDARK            0xFF000000
+
+//CHANNELS
+#define CLR_CHANNELPROGRESSBAR  0xFFC6D590
+#define CLR_CHANNELPROGRESSBARBACK 0xDD000000
+#define CLR_CHANNELPROGRESSBARBLEND 0xFF8EAB21
+#define CLR_FONTHEAD            0xFFEEEEEE
+#define CLR_CHANNELSYMBOLOFF    0xDD858585
+#define CLR_CHANNELRECACTIVE    0xDDFF0000
+#define CLR_RECNEXT             0xDDFFFF00
+
+//REPLAY
+#define CLR_CURRENT             0x90FFFFFF
+#define CLR_SEEN                0xFF8EAB21
+#define CLR_REST                0xDD858585
+
+//MENU
+#define CLR_MENUBORDER          0xAA242A38
+#define CLR_MENUSCROLLBAR       0x908EAB21
+#define CLR_MENUSCROLLBARBACK   0x99242A38
+#define CLR_MENUSCROLLBARBASE   0x00000000
+#define CLR_DISKALERT           0xDDFF0000
+#define CLR_TIMERS              0x7D000000
+#define CLR_MENUHEADER          0xDD000000
+#define CLR_PROGRESSBAR         0xFFC6D590
+#define CLR_PROGRESSBARBACK     0xDD000000
+#define CLR_PROGRESSBARBLEND    0xFF8EAB21
+#define CLR_PROGRESSBARHIGH     0xDD4E78B1
+#define CLR_PROGRESSBARBACKHIGH 0xDD000000
+#define CLR_PROGRESSBARBLENDHIGH 0xDD80B3FF
+#define CLR_CHANNELLOGOBACK     0x99C6C6C6
+#define CLR_FONTMENUITEMHIGH    0xFF363636
+#define CLR_TEXTWINDOW          0xB0000000
+#define CLR_DETAILVIEWBACK      0x50000000
+#define CLR_DETAILVIEWTABS      0x99242A38
+
+//CHANNELS
+THEME_CLR(Theme, clrChannelBackground,      CLR_MENUBACK);
+THEME_CLR(Theme, clrChannelBackBlend,       CLR_TRANSPARENT);
+THEME_CLR(Theme, clrChannelHead,            CLR_FONTHEAD);
+THEME_CLR(Theme, clrChannelEPG,             CLR_FONT);
+THEME_CLR(Theme, clrChannelEPGInfo,         CLR_FONT);
+THEME_CLR(Theme, clrChannelEPGNext,         CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrChannelEPGInfoNext,     CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrChannelProgressBar,     CLR_CHANNELPROGRESSBAR);
+THEME_CLR(Theme, clrChannelProgressBarBack, CLR_CHANNELPROGRESSBARBACK);
+THEME_CLR(Theme, clrChannelProgressBarBlend,CLR_CHANNELPROGRESSBARBLEND);
+THEME_CLR(Theme, clrStatusIconsBack,        CLR_TRANSPARENT);
+THEME_CLR(Theme, clrRecNow,                 CLR_CHANNELRECACTIVE);
+THEME_CLR(Theme, clrRecNowFont,             CLR_FONT);
+THEME_CLR(Theme, clrRecNext,                CLR_RECNEXT);
+THEME_CLR(Theme, clrRecNextFont,            CLR_FONTDARK);
+
+//REPLAY
+THEME_CLR(Theme, clrReplayBackground,       CLR_MENUBACK);
+THEME_CLR(Theme, clrReplayBackBlend,        CLR_TRANSPARENT);
+THEME_CLR(Theme, clrReplayHead,             CLR_FONT);
+THEME_CLR(Theme, clrReplayDescription,      CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrReplayCurrentTotal,     CLR_FONT);
+THEME_CLR(Theme, clrReplayProgressSeen,     CLR_SEEN);
+THEME_CLR(Theme, clrReplayProgressRest,     CLR_REST);
+THEME_CLR(Theme, clrReplayProgressSelected, CLR_FONTDARK);
+THEME_CLR(Theme, clrReplayProgressMark,     CLR_FONTDARK);
+THEME_CLR(Theme, clrReplayProgressCurrent,  CLR_CURRENT);
+THEME_CLR(Theme, clrReplayHighlightIcon,    CLR_TRANSPARENT);
+
+//TRACKS
+THEME_CLR(Theme, clrTracksFontHead,         CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrTracksFontButtons,      CLR_FONT);
+
+//Volume
+THEME_CLR(Theme, clrVolumeFont,             CLR_FONT);
+
+//MENU
+THEME_CLR(Theme, clrMenuBack,               CLR_MENUBACK);
+THEME_CLR(Theme, clrMenuBorder,             CLR_MENUBORDER);
+THEME_CLR(Theme, clrMenuScrollBar,          CLR_MENUSCROLLBAR);
+THEME_CLR(Theme, clrMenuScrollBarBack,      CLR_MENUSCROLLBARBACK);
+THEME_CLR(Theme, clrMenuScrollBarBase,      CLR_MENUSCROLLBARBASE);
+THEME_CLR(Theme, clrMenuItem,               CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuItemBlend,          CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuItemHigh,           CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuItemHighBlend,      CLR_TRANSPARENT);
+THEME_CLR(Theme, clrSeparatorBorder,        CLR_TRANSPARENT);
+THEME_CLR(Theme, clrDiskAlert,              CLR_DISKALERT);
+THEME_CLR(Theme, clrTimersBack,             CLR_TIMERS);
+THEME_CLR(Theme, clrTimersBackBlend,        CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMenuFontHeader,         CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDate,           CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDiscUsage,      CLR_FONTDARK);
+THEME_CLR(Theme, clrMenuFontDiscUsagePerc,  CLR_FONT);
+THEME_CLR(Theme, clrMenuFontTimers,         CLR_FONT);
+THEME_CLR(Theme, clrMenuFontTimersHeader,   CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDetailViewText, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontDetailViewHeader, CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrMenuFontDetailViewHeaderTitle, CLR_FONT);
+THEME_CLR(Theme, clrMenuFontMenuItem,       CLR_FONT);
+THEME_CLR(Theme, clrMenuFontMenuItemHigh,   CLR_FONTMENUITEMHIGH);
+THEME_CLR(Theme, clrMenuFontMenuItemTitle,  CLR_FONTMENUITEMHIGH);
+THEME_CLR(Theme, clrMenuFontMenuItemSep,    CLR_FONTINACTIVE);
+THEME_CLR(Theme, clrMenuHeader,             CLR_MENUHEADER);
+THEME_CLR(Theme, clrMenuHeaderBlend,        CLR_TRANSPARENT);
+THEME_CLR(Theme, clrAudioMenuHeader,        CLR_MENUHEADER);
+THEME_CLR(Theme, clrProgressBar,            CLR_PROGRESSBAR);
+THEME_CLR(Theme, clrProgressBarBack,        CLR_PROGRESSBARBACK);
+THEME_CLR(Theme, clrProgressBarBlend,       CLR_PROGRESSBARBLEND);
+THEME_CLR(Theme, clrProgressBarHigh,        CLR_PROGRESSBARHIGH);
+THEME_CLR(Theme, clrProgressBarBackHigh,    CLR_PROGRESSBARBACKHIGH);
+THEME_CLR(Theme, clrProgressBarBlendHigh,   CLR_PROGRESSBARBLENDHIGH);
+THEME_CLR(Theme, clrMenuTextWindow,         CLR_TEXTWINDOW);
+THEME_CLR(Theme, clrMenuChannelLogoBack,    CLR_CHANNELLOGOBACK);
+THEME_CLR(Theme, clrMenuDetailViewBack,     CLR_DETAILVIEWBACK);
+THEME_CLR(Theme, clrMenuDetailViewTabs,     CLR_DETAILVIEWTABS);
+
+//BUTTONS
+THEME_CLR(Theme, clrButtonRed,              CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonRedBorder,        CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonRedFont,          CLR_FONT);
+THEME_CLR(Theme, clrButtonGreen,            CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonGreenBorder,      CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonGreenFont,        CLR_FONT);
+THEME_CLR(Theme, clrButtonYellow,           CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonYellowBorder,     CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonYellowFont,       CLR_FONT);
+THEME_CLR(Theme, clrButtonBlue,             CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonBlueBorder,       CLR_TRANSPARENT);
+THEME_CLR(Theme, clrButtonBlueFont,         CLR_FONT);
+
+//MESSAGES
+THEME_CLR(Theme, clrMessageFontStatus,      CLR_FONT);
+THEME_CLR(Theme, clrMessageFontInfo,        CLR_FONT);
+THEME_CLR(Theme, clrMessageFontWarning,     CLR_FONT);
+THEME_CLR(Theme, clrMessageFontError,       CLR_FONT);
+THEME_CLR(Theme, clrMessageStatus,          CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageInfo,            CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageWarning,         CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageError,           CLR_TRANSPARENT);
+THEME_CLR(Theme, clrMessageBlend,           CLR_TRANSPARENT);
+
+#endif //__NOPACITY_CONFIG_H
diff --git a/detailview.c b/detailview.c
new file mode 100644
index 0000000..ad230b5
--- /dev/null
+++ b/detailview.c
@@ -0,0 +1,1130 @@
+#include "detailview.h"
+
+/********************************************************************************************
+* cNopacityView
+********************************************************************************************/
+
+cNopacityView::cNopacityView(cOsd *osd, cImageCache *imgCache) {
+    this->osd = osd;
+    this->imgCache = imgCache;
+    activeView = 0;
+    scrollable = false;
+    tabbed = false;
+    font = NULL;
+    fontSmall = NULL;
+    fontHeader = NULL;
+    fontHeaderLarge = NULL;
+    pixmapHeader = NULL;
+    pixmapHeaderLogo = NULL;
+    pixmapContent = NULL;
+    pixmapContentBack = NULL;
+    pixmapTabs = NULL;
+    title = "";
+    subTitle = "";
+    dateTime = "";
+    infoText = "";
+    channel = NULL;
+    eventID = 0;
+    recFileName = "";
+    x = 0;
+    y = 0;
+    width = 0;
+    height = 0;
+    border = 0;
+    headerHeight = 0;
+    contentHeight = 0;
+    tabHeight = 0;
+    headerDrawn = false;
+}
+
+cNopacityView::~cNopacityView(void) {
+    if (font)
+        delete font;
+    if (fontSmall)
+        delete fontSmall;
+    if (fontHeader)
+        delete fontHeader;
+    if (fontHeaderLarge)
+        delete fontHeaderLarge;
+    if (pixmapHeader)
+        osd->DestroyPixmap(pixmapHeader);
+    if (pixmapHeaderLogo)
+        osd->DestroyPixmap(pixmapHeaderLogo);   
+    if (pixmapContent)
+        osd->DestroyPixmap(pixmapContent);
+    if (pixmapContentBack)
+        osd->DestroyPixmap(pixmapContentBack);
+    if (pixmapTabs)
+        osd->DestroyPixmap(pixmapTabs);
+}
+
+void cNopacityView::SetGeometry(int x, int y, int width, int height, int border, int headerHeight) { 
+    this->x = x;
+    this->y = y;
+    this->width = width;
+    this->height = height;
+    this->border = border;
+    this->headerHeight = headerHeight;
+    if (tabbed)
+        tabHeight = 2 * border;
+    contentHeight = height - headerHeight - tabHeight;
+}
+
+void cNopacityView::SetFonts(void) {
+    font = cFont::CreateFont(config.fontName, contentHeight / 25 + 3 + config.GetValue("fontDetailView"));
+    fontSmall = cFont::CreateFont(config.fontName, contentHeight / 30 + config.GetValue("fontDetailViewSmall"));
+    fontHeaderLarge = cFont::CreateFont(config.fontName, headerHeight / 4 + 5 + config.GetValue("fontDetailViewHeaderLarge"));
+    fontHeader = cFont::CreateFont(config.fontName, headerHeight / 6 + config.GetValue("fontDetailViewHeader"));
+}
+
+void cNopacityView::DrawHeader(void) {
+    if (!pixmapHeader) {
+        pixmapHeader = osd->CreatePixmap(4, cRect(x, y, width, headerHeight));
+    }
+    if (!pixmapHeaderLogo) {
+        pixmapHeaderLogo = osd->CreatePixmap(5, cRect(x, y, width, headerHeight));
+    }
+    pixmapHeader->Fill(Theme.Color(clrMenuDetailViewBack));
+    pixmapHeaderLogo->Fill(clrTransparent);
+    //Channel Logo
+    int logoWidth = geoManager->channelLogoWidth;
+    int xText = border;
+    if (channel) {
+        cImage *logo = imgCache->GetLogo(ctLogo, channel);
+        if (logo) {
+            pixmapHeaderLogo->DrawImage(cPoint(border, max((headerHeight - geoManager->channelLogoHeight - border)/2, 0)), *logo);
+            xText += logoWidth + border;
+        }
+    }
+    //Date and Time, Title, Subtitle
+    int yDateTime = border;
+    int yTitle = (headerHeight - fontHeaderLarge->Height()) / 2;
+    int ySubtitle = headerHeight - fontHeader->Height() - border;
+    pixmapHeader->DrawText(cPoint(xText, yDateTime), dateTime.c_str(), Theme.Color(clrMenuFontDetailViewHeader), Theme.Color(clrMenuDetailViewBack), fontHeader);
+    pixmapHeader->DrawText(cPoint(xText, yTitle), title.c_str(), Theme.Color(clrMenuFontDetailViewHeaderTitle), Theme.Color(clrMenuDetailViewBack), fontHeaderLarge);
+    pixmapHeader->DrawText(cPoint(xText, ySubtitle), subTitle.c_str(), Theme.Color(clrMenuFontDetailViewHeader), Theme.Color(clrMenuDetailViewBack), fontHeader);
+}
+
+void cNopacityView::DrawTabs(void) {
+    if (!pixmapTabs) {
+        pixmapTabs = osd->CreatePixmap(4, cRect(0, y + height - tabHeight, width, tabHeight));
+    }
+    tColor bgColor = Theme.Color(clrMenuDetailViewTabs);
+    pixmapTabs->Fill(clrTransparent);
+    pixmapTabs->DrawRectangle(cRect(0, 0, width, 2), bgColor);
+    int numTabs = tabs.size();
+    int xCurrent = 0;
+    for (int tab = 0; tab < numTabs; tab++) {
+        std::string tabText = tabs[tab];
+        int textWidth = font->Width(tabText.c_str());
+        int tabWidth = textWidth + border;
+        pixmapTabs->DrawRectangle(cRect(xCurrent, (tab == activeView) ? 0 : 2, tabWidth - 2, tabHeight), bgColor);
+        pixmapTabs->DrawEllipse(cRect(xCurrent, tabHeight - border/2, border/2, border/2), clrTransparent, -3);
+        pixmapTabs->DrawEllipse(cRect(xCurrent + tabWidth - border / 2 - 2, tabHeight - border/2, border/2, border/2), clrTransparent, -4);
+        if (tab == activeView) {
+            pixmapTabs->DrawRectangle(cRect(xCurrent + 2, 0, tabWidth - 6, tabHeight - border/2 - 1), clrTransparent);
+            pixmapTabs->DrawRectangle(cRect(xCurrent + border / 2, tabHeight - border/2 - 1, tabWidth - border, border/2 - 1), clrTransparent);
+            pixmapTabs->DrawEllipse(cRect(xCurrent + 2, tabHeight - border/2 - 2, border/2, border/2), clrTransparent, 3);
+            pixmapTabs->DrawEllipse(cRect(xCurrent + tabWidth - border / 2 - 4, tabHeight - border/2 - 2, border/2, border/2), clrTransparent, 4);
+        }
+        pixmapTabs->DrawText(cPoint(xCurrent + (tabWidth - textWidth) / 2, 2 + (tabHeight - font->Height())/2), tabText.c_str(), Theme.Color(clrMenuFontDetailViewText), (tab == activeView) ? clrTransparent : bgColor, font);
+        xCurrent += tabWidth;
+    }
+}
+
+void cNopacityView::ClearContent(void) {
+    if (pixmapContent && Running()) {
+        osd->DestroyPixmap(pixmapContent);
+        pixmapContent = NULL;
+    }
+}
+
+void cNopacityView::CreateContent(int fullHeight) {
+    scrollable = false;
+    int drawPortHeight = contentHeight; 
+    if (fullHeight > contentHeight) {
+        drawPortHeight = fullHeight;
+        scrollable = true;
+    }
+    if (!pixmapContentBack) {
+        pixmapContentBack = osd->CreatePixmap(3, cRect(x, y + headerHeight, width, contentHeight + tabHeight));
+        pixmapContentBack->Fill(Theme.Color(clrMenuDetailViewBack));
+    }
+    pixmapContent = osd->CreatePixmap(4, cRect(x, y + headerHeight, width, contentHeight), cRect(0, 0, width, drawPortHeight));
+    pixmapContent->Fill(clrTransparent);
+}
+
+void cNopacityView::DrawContent(std::string *text) {
+    cTextWrapper wText;
+    wText.Set(text->c_str(), font, width - 2 * border);
+    int lineHeight = font->Height();
+    int textLines = wText.Lines();
+    int textHeight = lineHeight * textLines + 2*border;
+    int yText = border;
+    CreateContent(textHeight);
+    for (int i=0; i < textLines; i++) {
+        pixmapContent->DrawText(cPoint(border, yText), wText.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
+        yText += lineHeight;
+    }
+}
+
+void cNopacityView::DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *img2) {
+    cTextWrapper wTextTall;
+    cTextWrapper wTextFull;
+    int imgWidth = img->width;
+    int imgHeight = img->height;
+    int imgWidth2 = 0;
+    int imgHeight2 = 0;
+    if (imgHeight > (contentHeight - 2 * border)) {
+        imgHeight = contentHeight - 2 * border;
+        imgWidth = imgWidth * ((double)imgHeight / (double)img->height);
+    }
+    int imgHeightTotal = imgHeight;
+    if (img2) {
+        imgWidth2 = imgWidth;
+        imgHeight2 = img2->height * ((double)img2->width / (double)imgWidth2);
+        imgHeightTotal += img2->height + border;
+    }
+    CreateFloatingTextWrapper(&wTextTall, &wTextFull, infoText, imgWidth, imgHeightTotal);
+    int lineHeight = font->Height();
+    int textLinesTall = wTextTall.Lines();
+    int textLinesFull = wTextFull.Lines();
+    int textHeight = lineHeight * (textLinesTall + textLinesFull) + 2*border;
+    int yText = border;
+    CreateContent(max(textHeight, imgHeight + 2*border));
+    for (int i=0; i < textLinesTall; i++) {
+        pixmapContent->DrawText(cPoint(border, yText), wTextTall.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
+        yText += lineHeight;
+    }
+    for (int i=0; i < textLinesFull; i++) {
+        pixmapContent->DrawText(cPoint(border, yText), wTextFull.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
+        yText += lineHeight;
+    }
+    osd->Flush();
+    cImageLoader imgLoader;
+    if (imgLoader.LoadPoster(img->path.c_str(), imgWidth, imgHeight)) {
+        if (Running() && pixmapContent)
+            pixmapContent->DrawImage(cPoint(width - imgWidth - border, border), imgLoader.GetImage());
+    }
+    if (!img2)
+        return;
+    osd->Flush();
+    if (imgLoader.LoadPoster(img2->path.c_str(), imgWidth2, imgHeight2)) {
+        if (Running() && pixmapContent)
+            pixmapContent->DrawImage(cPoint(width - imgWidth2 - border, imgHeight + 2*border), imgLoader.GetImage());
+    }
+}
+
+void cNopacityView::CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg) {
+    int lineHeight = font->Height();
+    int linesNarrow = (heightImg + 2*border)/ lineHeight;
+    int linesDrawn = 0;
+    int y = 0;
+    int widthNarrow = width - 3 * border - widthImg;
+    bool drawNarrow = true;
+    
+    splitstring s(text->c_str());
+    std::vector<std::string> flds = s.split('\n', 1);
+
+    if (flds.size() < 1)
+        return;
+
+    std::stringstream sstrTextTall;
+    std::stringstream sstrTextFull;
+      
+    for (int i=0; i<flds.size(); i++) {
+        if (!flds[i].size()) {
+            //empty line
+            linesDrawn++;
+            y += lineHeight;
+            if (drawNarrow)
+                sstrTextTall << "\n";
+            else
+                sstrTextFull << "\n";
+        } else {
+            cTextWrapper wrapper;
+            if (drawNarrow) {
+                wrapper.Set((flds[i].c_str()), font, widthNarrow);
+                int newLines = wrapper.Lines();
+                //check if wrapper fits completely into narrow area
+                if (linesDrawn + newLines < linesNarrow) {
+                    for (int line = 0; line < wrapper.Lines(); line++) {
+                        sstrTextTall << wrapper.GetLine(line) << " ";
+                    }
+                    sstrTextTall << "\n";
+                    linesDrawn += newLines;
+                } else {
+                    //this wrapper has to be splitted
+                    for (int line = 0; line < wrapper.Lines(); line++) {
+                        if (line + linesDrawn < linesNarrow) {
+                            sstrTextTall << wrapper.GetLine(line) << " ";
+                        } else {
+                            sstrTextFull << wrapper.GetLine(line) << " ";
+                        }
+                    }
+                    sstrTextFull << "\n";
+                    drawNarrow = false;
+                }
+            } else {
+                wrapper.Set((flds[i].c_str()), font, width - 2*border);
+                for (int line = 0; line < wrapper.Lines(); line++) {
+                    sstrTextFull << wrapper.GetLine(line) << " ";        
+                }
+                sstrTextFull << "\n";
+            }
+        }
+    }
+    twNarrow->Set(sstrTextTall.str().c_str(), font, widthNarrow);
+    twFull->Set(sstrTextFull.str().c_str(), font, width - 2 * border);
+}
+
+void cNopacityView::DrawActors(std::vector<cActor> *actors) {
+    int numActors = actors->size();
+    if (numActors < 1) {
+        CreateContent(100);
+        pixmapContent->DrawText(cPoint(border, border), tr("No Cast available"), Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontHeaderLarge);
+        return;
+    }
+    int thumbWidth = actors->at(0).actorThumb.width;
+    int thumbHeight = actors->at(0).actorThumb.height;
+    
+    int picsPerLine = width / (thumbWidth + 2 * border);
+    if (picsPerLine < 1)
+        return;
+
+    int picLines = numActors / picsPerLine;
+    if (numActors%picsPerLine != 0)
+        picLines++;
+    
+    int totalHeight = picLines * (thumbHeight + 2*fontSmall->Height() + border + border/2) + 2*border + fontHeaderLarge->Height();
+
+    CreateContent(totalHeight);
+    cString header = cString::sprintf("%s:", tr("Cast"));
+    pixmapContent->DrawText(cPoint(border, border), *header, Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontHeaderLarge);
+
+    int x = 0;
+    int y = 2 * border + fontHeaderLarge->Height();
+    if (!Running())
+        return;
+        cImageLoader imgLoader;
+    int actor = 0;
+    for (int row = 0; row < picLines; row++) {
+        for (int col = 0; col < picsPerLine; col++) {
+            if (!Running())
+                return;
+            if (actor == numActors)
+                break;
+            std::string path = actors->at(actor).actorThumb.path;
+            std::string name = actors->at(actor).name;
+            std::stringstream sstrRole;
+            sstrRole << "\"" << actors->at(actor).role << "\"";
+            std::string role = sstrRole.str();
+            if (imgLoader.LoadPoster(path.c_str(), thumbWidth, thumbHeight)) {
+                if (Running() && pixmapContent)
+                    pixmapContent->DrawImage(cPoint(x + border, y), imgLoader.GetImage());
+            }
+
+            if (fontSmall->Width(name.c_str()) > thumbWidth + 2*border)
+                name = CutText(name, thumbWidth + 2*border, fontSmall);
+            if (fontSmall->Width(role.c_str()) > thumbWidth + 2*border)
+                role = CutText(role, thumbWidth + 2*border, fontSmall);
+            int xName = x + ((thumbWidth+2*border) - fontSmall->Width(name.c_str()))/2;
+            int xRole = x + ((thumbWidth+2*border) - fontSmall->Width(role.c_str()))/2;
+            if (Running() && pixmapContent) {
+                pixmapContent->DrawText(cPoint(xName, y + thumbHeight + border/2), name.c_str(), Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontSmall);
+                pixmapContent->DrawText(cPoint(xRole, y + thumbHeight + border/2 + fontSmall->Height()), role.c_str(), Theme.Color(clrMenuFontDetailViewText), clrTransparent, fontSmall);
+                x += thumbWidth + 2*border;
+            }
+            actor++;
+        }
+        osd->Flush();
+        x = 0;
+        y += thumbHeight + 2 * fontSmall->Height() + border + border/2;
+    }
+}
+
+void cNopacityView::ClearScrollbar(void) {
+    pixmapScrollbar->Fill(clrTransparent);
+    pixmapScrollbarBack->Fill(clrTransparent);
+}
+
+void cNopacityView::DrawScrollbar(void) {
+    ClearScrollbar();
+    if (!scrollable || !pixmapContent)
+        return;
+    int totalBarHeight = pixmapScrollbar->ViewPort().Height() - 6;
+    
+    int aktHeight = (-1)*pixmapContent->DrawPort().Point().Y();
+    int totalHeight = pixmapContent->DrawPort().Height();
+    int screenHeight = pixmapContent->ViewPort().Height();
+
+    int barHeight = (double)(screenHeight * totalBarHeight) / (double)totalHeight ;
+    int barTop = (double)(aktHeight * totalBarHeight) / (double)totalHeight ;
+
+    if (config.GetValue("displayType") == dtGraphical) {
+        cImage *image = imgCache->GetSkinElement(seScrollbar);
+        if (image)
+            pixmapScrollbarBack->DrawImage(cPoint(0, 0), *image);
+    } else {
+        pixmapScrollbarBack->Fill(Theme.Color(clrMenuScrollBar));
+        pixmapScrollbarBack->DrawRectangle(cRect(2,2,geoManager->menuWidthScrollbar-4, pixmapScrollbarBack->ViewPort().Height() - 4), Theme.Color(clrMenuScrollBarBack));
+    }
+
+    pixmapScrollbar->DrawRectangle(cRect(3,3 + barTop,geoManager->menuWidthScrollbar-6,barHeight), Theme.Color(clrMenuScrollBar));
+}
+
+bool cNopacityView::KeyUp(void) { 
+    if (!scrollable)
+        return false;
+    int aktHeight = pixmapContent->DrawPort().Point().Y();
+    int lineHeight = font->Height();
+    if (aktHeight >= 0) {
+        return false;
+    }
+    int step = config.GetValue("detailedViewScrollStep") * font->Height();
+    int newY = aktHeight + step;
+    if (newY > 0)
+        newY = 0;
+    pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+    return true;
+}
+
+bool cNopacityView::KeyDown(void) { 
+    if (!scrollable)
+        return false;
+    int aktHeight = pixmapContent->DrawPort().Point().Y();
+    int totalHeight = pixmapContent->DrawPort().Height();
+    int screenHeight = pixmapContent->ViewPort().Height();
+    
+    if (totalHeight - ((-1)*aktHeight) == screenHeight) {
+        return false;
+    } 
+    int step = config.GetValue("detailedViewScrollStep") * font->Height();
+    int newY = aktHeight - step;
+    if ((-1)*newY > totalHeight - screenHeight)
+        newY = (-1)*(totalHeight - screenHeight);
+    pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+    return true;
+}
+
+/********************************************************************************************
+* cNopacityEPGView : cNopacityView
+********************************************************************************************/
+
+cNopacityEPGView::cNopacityEPGView(cOsd *osd, cImageCache *imgCache) : cNopacityView(osd, imgCache) {
+    tabbed = true;
+    pixmapHeaderEPGImage = NULL;
+    numEPGPics = -1;
+    numTabs = 0;
+}
+
+cNopacityEPGView::~cNopacityEPGView(void) {
+    Cancel(-1);
+    while (Active())
+        cCondWait::SleepMs(10);
+    if (pixmapHeaderEPGImage)
+        osd->DestroyPixmap(pixmapHeaderEPGImage);
+}
+
+void cNopacityEPGView::SetTabs(void) {
+    tabs.push_back(tr("EPG Info"));
+    if (eventID > 0)
+        tabs.push_back(tr("Reruns"));
+    else
+        tabs.push_back(tr("Recording Information"));
+    if (numEPGPics > 0)
+        tabs.push_back(tr("Image Galery"));
+    numTabs = tabs.size();
+}
+
+void cNopacityEPGView::DrawHeaderEPGImage(void) {
+    cImageLoader imgLoader;
+    if (eventID > 0) {
+        if (!imgLoader.LoadEPGImage(eventID))
+            return;
+    } else if (recFileName.size() > 0) {
+        if (!imgLoader.LoadRecordingImage(recFileName.c_str()))
+            return;    
+    } else
+        return;
+
+    if (!pixmapHeaderEPGImage) {
+        pixmapHeaderEPGImage = osd->CreatePixmap(3, cRect(x, y, width, headerHeight));
+    }
+
+    int imgWidthOrig = config.GetValue("epgImageWidth");
+    int imgHeightOrig =  config.GetValue("epgImageHeight");
+
+    int imgWidth =  imgWidthOrig;
+    int imgHeight = imgHeightOrig;
+
+    if (imgHeight > (headerHeight-10)) {
+        imgHeight = headerHeight - 10;
+        imgWidth = imgWidthOrig * ((double)imgHeight / (double)imgHeightOrig);     
+    }
+
+    pixmapHeaderEPGImage->Fill(clrTransparent);
+    pixmapHeaderEPGImage->DrawImage(cPoint(width - imgWidth - border, (headerHeight - imgHeight)/2), imgLoader.GetImage());
+}
+
+void cNopacityEPGView::CheckEPGImages(void) {
+    if (eventID > 0) {
+        for (int i=1; i <= config.GetValue("numAdditionalEPGPictures"); i++) {
+            cString epgimage;
+            if (config.epgImagePathSet) {
+                epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePath, eventID, i);
+            } else {
+                epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePathDefault, eventID, i);
+            }
+            FILE *fp = fopen(*epgimage, "r");
+            if (fp) {
+                std::stringstream ss;
+                ss << i;
+                epgPics.push_back(ss.str());
+                fclose(fp);
+            } else {
+                break;
+            }
+        }
+    } else if (recFileName.size() > 0) {
+        DIR *dirHandle;
+        struct dirent *dirEntry;
+        dirHandle = opendir(recFileName.c_str());
+        int picsFound = 0;
+        if (dirHandle != NULL) {
+            while ( 0 != (dirEntry = readdir(dirHandle))) {
+                if (endswith(dirEntry->d_name, "jpg")) {
+                    std::string fileName = dirEntry->d_name;
+                    if (fileName.length() > 4) {
+                        fileName = fileName.substr(0, fileName.length() - 4);
+                        epgPics.push_back(fileName);
+                        picsFound++;
+                    }
+                }
+                if (picsFound >= config.GetValue("numAdditionalRecEPGPictures")) {
+                    break;
+                }
+            }
+            closedir(dirHandle);
+        }
+    } else {
+        return;
+    }
+    numEPGPics = epgPics.size();
+}
+
+void cNopacityEPGView::DrawImages(void) {
+    int imgWidth = config.GetValue("epgImageWidthLarge");
+    int imgHeight = config.GetValue("epgImageHeightLarge");
+
+    int totalHeight = numEPGPics * (imgHeight + border);
+
+    CreateContent(totalHeight);
+    
+    cImageLoader imgLoader;
+    int yPic = border;
+    for (int pic = 0; pic < numEPGPics; pic++) {
+        bool drawPic = false;
+        if (eventID > 0) {
+            cString epgimage = cString::sprintf("%d_%d", eventID, atoi(epgPics[pic].c_str()));
+            if (imgLoader.LoadAdditionalEPGImage(epgimage)) {
+                drawPic = true;
+            }
+
+        } else if (recFileName.size() > 0) {
+            std::string path = recFileName + "/";
+            if (imgLoader.LoadAdditionalRecordingImage(path.c_str(), epgPics[pic].c_str())) {
+                drawPic = true;
+            }
+        }
+        if (drawPic) {
+            pixmapContent->DrawImage(cPoint((width - imgWidth) / 2, yPic), imgLoader.GetImage());
+            yPic += imgHeight + border;
+            osd->Flush();
+        }
+    } 
+}
+
+void cNopacityEPGView::KeyLeft(void) { 
+    if (Running())
+        return;
+    activeView--;
+    if (activeView < 0)
+        activeView = numTabs - 1; 
+}
+
+void cNopacityEPGView::KeyRight(void) { 
+    if (Running())
+        return;
+    activeView = (activeView + 1) % numTabs;
+}
+
+void cNopacityEPGView::Action(void) {
+    ClearContent();
+    if (!headerDrawn) {
+        DrawHeader();
+        osd->Flush();
+        DrawHeaderEPGImage();
+        osd->Flush();
+        headerDrawn = true;
+    }
+    if (tabs.size() == 0) {
+        CheckEPGImages();
+        SetTabs();
+    }
+    DrawTabs();
+    switch (activeView) {
+        case evtInfo:
+            DrawContent(&infoText);
+            break;
+        case evtAddInfo:
+            DrawContent(&addInfoText);
+            break;
+        case evtImages:
+            DrawImages();
+            break;
+    }
+    DrawScrollbar();
+    osd->Flush();
+}
+
+/********************************************************************************************
+* cNopacitySeriesView : cNopacityView
+********************************************************************************************/
+
+cNopacitySeriesView::cNopacitySeriesView(cOsd *osd, cImageCache *imgCache, int seriesId, int episodeId) : cNopacityView(osd, imgCache) {
+    this->seriesId = seriesId;
+    this->episodeId = episodeId;
+    tvdbInfo = "";
+    pixmapHeaderBanner = NULL;
+    tabbed = true;
+}
+
+cNopacitySeriesView::~cNopacitySeriesView(void) {
+    Cancel(-1);
+    while (Active())
+        cCondWait::SleepMs(10);
+    if (pixmapHeaderBanner)
+        osd->DestroyPixmap(pixmapHeaderBanner);
+}
+
+void cNopacitySeriesView::LoadMedia(void) {
+    static cPlugin *pScraper = GetScraperPlugin();
+    if (!pScraper || seriesId < 1)
+        return;
+    series.seriesId = seriesId;
+    series.episodeId = episodeId;
+    pScraper->Service("GetSeries", &series);
+}
+
+void cNopacitySeriesView::SetTabs(void) {
+    tabs.push_back(tr("EPG Info"));
+    if (eventID > 0)
+        tabs.push_back(tr("Reruns"));
+    else
+        tabs.push_back(tr("Recording Information"));
+    tabs.push_back(tr("Cast"));
+    tabs.push_back(tr("TheTVDB Info"));
+    tabs.push_back(tr("Image Galery"));
+}
+
+void cNopacitySeriesView::CreateTVDBInfo(void) {
+    if (tvdbInfo.size() > 0)
+        return;
+    std::stringstream info;
+    info << tr("TheTVDB Information") << ":\n\n";
+
+    if (series.episode.name.size() > 0) {
+        info << tr("Episode") << ": " << series.episode.name << " (" << tr("Season") << " " << series.episode.season << ", " << tr("Episode") << " " << series.episode.number << ")\n\n";
+    }
+    if (series.episode.overview.size() > 0) {
+        info << tr("Episode Overview") << ": " << series.episode.overview << "\n\n";
+    }
+    if (series.episode.firstAired.size() > 0) {
+        info << tr("First aired") << ": " << series.episode.firstAired << "\n\n";
+    }
+    if (series.episode.guestStars.size() > 0) {
+        info << tr("Guest Stars") << ": " << series.episode.guestStars << "\n\n";
+    }
+    if (series.episode.rating > 0) {
+        info << tr("TheMovieDB Rating") << ": " << series.episode.rating << "\n\n";
+    }
+    if (series.overview.size() > 0) {
+        info << tr("Series Overview") << ": " << series.overview << "\n\n";
+    }
+    if (series.firstAired.size() > 0) {
+        info << tr("First aired") << ": " << series.firstAired << "\n\n";
+    }
+    if (series.genre.size() > 0) {
+        info << tr("Genre") << ": " << series.genre << "\n\n";
+    }
+    if (series.network.size() > 0) {
+        info << tr("Network") << ": " << series.network << "\n\n";
+    }
+    if (series.rating > 0) {
+        info << tr("TheMovieDB Rating") << ": " << series.rating << "\n\n";
+    }
+    if (series.status.size() > 0) {
+        info << tr("Status") << ": " << series.status << "\n\n";
+    }
+    tvdbInfo = info.str();
+}
+
+void cNopacitySeriesView::DrawHeaderBanner(void) {
+    if (series.banners.size() == 0)
+        return;
+    if (series.banners[0].height == 0)
+        return;
+ 
+    int bannerWidthOrig = series.banners[0].width;
+    int bannerHeightOrig = series.banners[0].height;
+    std::string bannerPath = series.banners[0].path;
+
+    if (bannerWidthOrig == 0)
+        return;
+
+    int bannerWidth = bannerWidthOrig;
+    int bannerHeight = bannerHeightOrig;
+
+    if (headerHeight < bannerHeightOrig) {
+        bannerHeight = headerHeight;
+        bannerWidth = bannerWidthOrig * ((double)bannerHeight / (double)bannerHeightOrig);
+    }
+
+    int bannerX = width - bannerWidth - border;
+    int bannerY = (headerHeight - bannerHeight) / 2;
+
+    if (!pixmapHeaderBanner) {
+        pixmapHeaderBanner = osd->CreatePixmap(3, cRect(x, y, width, headerHeight));
+    }
+    pixmapHeaderBanner->Fill(clrTransparent);
+
+    cImageLoader imgLoader;
+    if (imgLoader.LoadPoster(bannerPath.c_str(), bannerWidth, bannerHeight) && Running()) {
+        pixmapHeaderBanner->DrawImage(cPoint(bannerX, bannerY), imgLoader.GetImage());
+    }   
+}
+
+void cNopacitySeriesView::DrawImages(void) {
+    int numPosters = series.posters.size();
+    int numFanarts = series.fanarts.size();
+    int numBanners = series.banners.size();
+    
+    int totalHeight = border;
+    //Fanart Height
+    int fanartWidth = width - 2 * border;
+    int fanartHeight = 0;
+    if (numFanarts > 0 && series.fanarts[0].width > 0) {
+        fanartHeight = series.fanarts[0].height * ((double)fanartWidth / (double)series.fanarts[0].width);
+        if (fanartHeight > contentHeight - 2 * border) {
+            int fanartHeightOrig = fanartHeight;
+            fanartHeight = contentHeight - 2 * border;
+            fanartWidth = fanartWidth * ((double)fanartHeight / (double)fanartHeightOrig);
+        }
+        totalHeight += series.fanarts.size() * (fanartHeight + border);
+    }
+    //Poster Height
+    int posterWidth = (width - 4 * border) / 2;
+    int posterHeight = 0;
+    if (numPosters > 0 && series.posters[0].width > 0) {
+        posterHeight = series.posters[0].height * ((double)posterWidth / (double)series.posters[0].width);
+    }
+    if (numPosters > 0)
+        totalHeight += posterHeight + border;
+    if (numPosters == 3)
+        totalHeight += posterHeight + border;
+    //Banners Height
+    if (numBanners > 0)
+        totalHeight += (series.banners[0].height + border) * numBanners;
+       
+    CreateContent(totalHeight);
+    
+    cImageLoader imgLoader;
+    int yPic = border;
+    for (int i=0; i < numFanarts; i++) {
+        if (numBanners > i) {
+            if (imgLoader.LoadPoster(series.banners[i].path.c_str(), series.banners[i].width, series.banners[i].height) && Running()) {
+                pixmapContent->DrawImage(cPoint((width - series.banners[i].width) / 2, yPic), imgLoader.GetImage());
+                yPic += series.banners[i].height + border;
+                osd->Flush();
+            }
+        }
+        if (imgLoader.LoadPoster(series.fanarts[i].path.c_str(), fanartWidth, fanartHeight) && Running()) {
+            pixmapContent->DrawImage(cPoint((width - fanartWidth)/2, yPic), imgLoader.GetImage());
+            yPic += fanartHeight + border;
+            osd->Flush();
+        }
+    }
+    if (numPosters >= 1) {
+        if (imgLoader.LoadPoster(series.posters[0].path.c_str(), posterWidth, posterHeight) && Running()) {
+            pixmapContent->DrawImage(cPoint(border, yPic), imgLoader.GetImage());
+            osd->Flush();
+            yPic += posterHeight + border;
+        }
+    }
+    if (numPosters >= 2) {
+        if (imgLoader.LoadPoster(series.posters[1].path.c_str(), posterWidth, posterHeight) && Running()) {
+            pixmapContent->DrawImage(cPoint(2 * border + posterWidth, yPic - posterHeight - border), imgLoader.GetImage());
+            osd->Flush();
+        }
+    }
+    if (numPosters == 3) {
+        if (imgLoader.LoadPoster(series.posters[2].path.c_str(), posterWidth, posterHeight) && Running()) {
+            pixmapContent->DrawImage(cPoint((width - posterWidth) / 2, yPic), imgLoader.GetImage());
+            osd->Flush();
+        }
+    }
+}
+
+int cNopacitySeriesView::GetRandomPoster(void) {
+    int numPosters = series.posters.size();
+    if (numPosters == 0)
+        return -1;
+    srand((unsigned)time(NULL));
+    int randPoster = rand()%numPosters;
+    return randPoster;
+}
+
+void cNopacitySeriesView::KeyLeft(void) { 
+    if (Running())
+        return;
+    activeView--;
+    if (activeView < 0)
+        activeView = mvtCount - 1; 
+}
+
+void cNopacitySeriesView::KeyRight(void) { 
+    if (Running())
+        return;
+    activeView = (activeView + 1) % mvtCount;
+}
+
+void cNopacitySeriesView::Action(void) {
+    ClearContent();
+    if (!headerDrawn) {
+        DrawHeader();
+        osd->Flush();
+        DrawHeaderBanner();
+        osd->Flush();
+        headerDrawn = true;
+    }
+    if (tabs.size() == 0) {
+        SetTabs();
+    }
+    DrawTabs();
+    int randomPoster = GetRandomPoster();
+    switch (activeView) {
+        case mvtInfo:
+            if (randomPoster >= 0) {
+                DrawFloatingContent(&infoText, &series.posters[randomPoster]);
+            } else
+                DrawContent(&infoText);
+            break;
+        case mvtAddInfo:
+            if (randomPoster >= 0)
+                DrawFloatingContent(&addInfoText, &series.posters[randomPoster]);
+            else
+                DrawContent(&addInfoText);
+            break;
+        case mvtCast:
+            DrawActors(&series.actors);
+            break;
+        case mvtOnlineInfo:
+            CreateTVDBInfo();
+            if ((series.seasonPoster.path.size() > 0) && series.episode.episodeImage.path.size() > 0)
+                DrawFloatingContent(&tvdbInfo, &series.episode.episodeImage, &series.seasonPoster);
+            else if (series.seasonPoster.path.size() > 0)
+                DrawFloatingContent(&tvdbInfo, &series.seasonPoster);
+            else if (series.episode.episodeImage.path.size() > 0)
+                DrawFloatingContent(&tvdbInfo, &series.episode.episodeImage);
+            else if (randomPoster >= 0)
+                DrawFloatingContent(&tvdbInfo, &series.posters[randomPoster]);
+            else
+                DrawContent(&tvdbInfo);
+            break;
+        case mvtImages:
+            DrawImages();
+            break;
+    }
+    DrawScrollbar();
+    osd->Flush();
+}
+
+/********************************************************************************************
+* cNopacityMovieView : cNopacityView
+********************************************************************************************/
+
+cNopacityMovieView::cNopacityMovieView(cOsd *osd, cImageCache *imgCache, int movieId) : cNopacityView(osd, imgCache) {
+    this->movieId = movieId;
+    pixmapHeaderPoster = NULL;
+    tabbed = true;
+}
+
+cNopacityMovieView::~cNopacityMovieView(void) {
+    Cancel(-1);
+    while (Active())
+        cCondWait::SleepMs(10);
+    if (pixmapHeaderPoster)
+        osd->DestroyPixmap(pixmapHeaderPoster);
+}
+
+void cNopacityMovieView::LoadMedia(void) {
+    static cPlugin *pScraper = GetScraperPlugin();
+    if (!pScraper || movieId < 1)
+        return;
+    movie.movieId = movieId;
+    pScraper->Service("GetMovie", &movie);    
+}
+
+void cNopacityMovieView::SetTabs(void) {
+    tabs.push_back(tr("EPG Info"));
+    if (eventID > 0)
+        tabs.push_back(tr("Reruns"));
+    else
+        tabs.push_back(tr("Recording Information"));
+    tabs.push_back(tr("Cast"));
+    tabs.push_back(tr("TheTVDB Info"));
+    tabs.push_back(tr("Image Galery"));
+}
+
+void cNopacityMovieView::CreateMovieDBInfo(void) {
+    if (movieDBInfo.size() > 0)
+        return;
+    std::stringstream info;
+    info << tr("TheMovieDB Information") << ":\n\n";
+    if (movie.originalTitle.size() > 0) {
+        info << tr("Original Title") << ": " << movie.originalTitle << "\n\n";
+    }
+    if (movie.tagline.size() > 0) {
+        info << tr("Tagline") << ": " << movie.tagline << "\n\n";
+    }
+    if (movie.overview.size() > 0) {
+        info << tr("Overview") << ": " << movie.overview << "\n\n";
+    }
+    std::string strAdult = (movie.adult)?(tr("yes")):(tr("no"));
+    info << tr("Adult") << ": " << strAdult << "\n\n";
+    if (movie.collectionName.size() > 0) {
+        info << tr("Collection") << ": " << movie.collectionName << "\n\n";
+    }
+    if (movie.budget > 0) {
+        info << tr("Budget") << ": " << movie.budget << "$\n\n";
+    }
+    if (movie.revenue > 0) {
+        info << tr("Revenue") << ": " << movie.revenue << "$\n\n";
+    }
+    if (movie.genres.size() > 0) {
+        info << tr("Genre") << ": " << movie.genres << "\n\n";
+    }
+    if (movie.homepage.size() > 0) {
+        info << tr("Homepage") << ": " << movie.homepage << "\n\n";
+    }
+    if (movie.releaseDate.size() > 0) {
+        info << tr("Release Date") << ": " << movie.releaseDate << "\n\n";
+    }
+    if (movie.runtime > 0) {
+        info << tr("Runtime") << ": " << movie.runtime << " " << tr("minutes") << "\n\n";
+    }
+    if (movie.popularity > 0) {
+        info << tr("TheMovieDB Popularity") << ": " << movie.popularity << "\n\n";
+    }
+    if (movie.voteAverage > 0) {
+        info << tr("TheMovieDB Vote Average") << ": " << movie.voteAverage << "\n\n";
+    }
+    movieDBInfo = info.str();
+}
+
+void cNopacityMovieView::DrawHeaderPoster(void) {
+    if (movie.poster.width == 0 || movie.poster.height == 0 || movie.poster.path.size() == 0)
+        return;
+ 
+    int posterHeight = headerHeight - 10;
+    int posterWidth = movie.poster.width * ((double)posterHeight / (double)movie.poster.height);;
+    int posterX = width - posterWidth - border;
+    int posterY = (headerHeight - posterHeight) / 2;
+
+    if (!pixmapHeaderPoster) {
+        pixmapHeaderPoster = osd->CreatePixmap(3, cRect(x, y, width, headerHeight));
+    }
+    pixmapHeaderPoster->Fill(clrTransparent);
+
+    cImageLoader imgLoader;
+    if (imgLoader.LoadPoster(movie.poster.path.c_str(), posterWidth, posterHeight) && Running()) {
+        pixmapHeaderPoster->DrawImage(cPoint(posterX, posterY), imgLoader.GetImage());
+    }   
+}
+
+void cNopacityMovieView::DrawImages(void) {
+    int totalHeight = border;
+    //Fanart Height
+    int fanartWidth = width - 2 * border;
+    int fanartHeight = 0;
+    if (movie.fanart.width > 0 && movie.fanart.height > 0 && movie.fanart.path.size() > 0) {
+        fanartHeight = movie.fanart.height * ((double)fanartWidth / (double)movie.fanart.width);
+        if (fanartHeight > contentHeight - 2 * border) {
+            int fanartHeightOrig = fanartHeight;
+            fanartHeight = contentHeight - 2 * border;
+            fanartWidth = fanartWidth * ((double)fanartHeight / (double)fanartHeightOrig);
+        }
+        totalHeight += fanartHeight + border;
+    }
+    //Collection Fanart Height
+    int collectionFanartWidth = width - 2 * border;
+    int collectionFanartHeight = 0;
+    if (movie.collectionFanart.width > 0 && movie.collectionFanart.height > 0 && movie.collectionFanart.path.size() > 0) {
+        collectionFanartHeight = movie.collectionFanart.height * ((double)collectionFanartWidth / (double)movie.collectionFanart.width);
+        if (collectionFanartHeight > contentHeight - 2 * border) {
+            int fanartHeightOrig = collectionFanartHeight;
+            collectionFanartHeight = contentHeight - 2 * border;
+            collectionFanartWidth = collectionFanartWidth * ((double)collectionFanartHeight / (double)fanartHeightOrig);
+        }
+        totalHeight += collectionFanartHeight + border;
+    }
+    //Poster Height
+    if (movie.poster.width > 0 && movie.poster.height > 0 && movie.poster.path.size() > 0) {
+        totalHeight += movie.poster.height + border;
+    }
+    //Collection Popster Height
+    if (movie.collectionPoster.width > 0 && movie.collectionPoster.height > 0 && movie.collectionPoster.path.size() > 0) {
+        totalHeight += movie.collectionPoster.height + border;
+    }
+
+    CreateContent(totalHeight);
+    
+    cImageLoader imgLoader;
+    int yPic = border;
+    if (movie.fanart.width > 0 && movie.fanart.height > 0 && movie.fanart.path.size() > 0) {
+        if (imgLoader.LoadPoster(movie.fanart.path.c_str(), fanartWidth, fanartHeight) && Running()) {
+            pixmapContent->DrawImage(cPoint((width - fanartWidth)/2, yPic), imgLoader.GetImage());
+            yPic += fanartHeight + border;
+            osd->Flush();
+        }
+    }
+    if (movie.collectionFanart.width > 0 && movie.collectionFanart.height > 0 && movie.collectionFanart.path.size() > 0) {
+        if (imgLoader.LoadPoster(movie.collectionFanart.path.c_str(), collectionFanartWidth, collectionFanartHeight) && Running()) {
+            pixmapContent->DrawImage(cPoint((width - collectionFanartWidth)/2, yPic), imgLoader.GetImage());
+            yPic += collectionFanartHeight + border;
+            osd->Flush();
+        }
+    }
+    if (movie.poster.width > 0 && movie.poster.height > 0 && movie.poster.path.size() > 0) {
+        if (imgLoader.LoadPoster(movie.poster.path.c_str(), movie.poster.width, movie.poster.height) && Running()) {
+            pixmapContent->DrawImage(cPoint((width - movie.poster.width) / 2, yPic), imgLoader.GetImage());
+            yPic += movie.poster.height + border;
+            osd->Flush();
+        }
+    }
+    if (movie.collectionPoster.width > 0 && movie.collectionPoster.height > 0 && movie.collectionPoster.path.size() > 0) {
+        if (imgLoader.LoadPoster(movie.collectionPoster.path.c_str(), movie.collectionPoster.width, movie.collectionPoster.height) && Running()) {
+            pixmapContent->DrawImage(cPoint((width - movie.collectionPoster.width) / 2, yPic), imgLoader.GetImage());
+            yPic += movie.collectionPoster.height + border;
+            osd->Flush();
+        }
+    }
+}
+
+void cNopacityMovieView::KeyLeft(void) { 
+    if (Running())
+        return;
+    activeView--;
+    if (activeView < 0)
+        activeView = mvtCount - 1; 
+}
+
+void cNopacityMovieView::KeyRight(void) { 
+    if (Running())
+        return;
+    activeView = (activeView + 1) % mvtCount;
+}
+
+void cNopacityMovieView::Action(void) {
+    ClearContent();
+    if (!headerDrawn) {
+        DrawHeader();
+        osd->Flush();
+        DrawHeaderPoster();
+        osd->Flush();
+        headerDrawn = true;
+    }
+    if (tabs.size() == 0) {
+        SetTabs();
+    }
+    DrawTabs();
+    bool posterAvailable = (movie.poster.path.size() > 0 && movie.poster.width > 0 && movie.poster.height > 0) ? true : false;
+    switch (activeView) {
+        case mvtInfo:
+            if (posterAvailable)
+                DrawFloatingContent(&infoText, &movie.poster);
+            else
+                DrawContent(&infoText);
+            break;
+        case mvtAddInfo:
+            if (posterAvailable)
+                DrawFloatingContent(&addInfoText, &movie.poster);
+            else
+                DrawContent(&addInfoText);
+            break;
+        case mvtCast:
+            DrawActors(&movie.actors);
+            break;
+        case mvtOnlineInfo:
+            CreateMovieDBInfo();
+            if (posterAvailable)
+                DrawFloatingContent(&movieDBInfo, &movie.poster);
+            else
+                DrawContent(&movieDBInfo);
+            break;
+        case mvtImages:
+            DrawImages();
+            break;
+    }
+    DrawScrollbar();
+    osd->Flush();
+}
+
+/********************************************************************************************
+* cNopacityTextView : cNopacityView
+********************************************************************************************/
+
+cNopacityTextView::cNopacityTextView(cOsd *osd, cImageCache *imgCache) : cNopacityView(osd, imgCache) {
+}
+
+cNopacityTextView::~cNopacityTextView(void) {
+    Cancel(-1);
+    while (Active())
+        cCondWait::SleepMs(10);
+}
+
+void cNopacityTextView::KeyLeft(void) {
+    if (!pixmapContent)
+        return;
+    int aktHeight = pixmapContent->DrawPort().Point().Y();
+    int screenHeight = pixmapContent->ViewPort().Height();
+    int newY = aktHeight + screenHeight;
+    if (newY > 0)
+        newY = 0;
+    pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+    DrawScrollbar();
+    osd->Flush();
+}
+
+void cNopacityTextView::KeyRight(void) { 
+    if (!pixmapContent)
+        return;
+    int aktHeight = pixmapContent->DrawPort().Point().Y();
+    int screenHeight = pixmapContent->ViewPort().Height();
+    int totalHeight = pixmapContent->DrawPort().Height();
+    int newY = aktHeight - screenHeight;
+    if ((-1)*newY > totalHeight - screenHeight)
+        newY = (-1)*(totalHeight - screenHeight);
+    pixmapContent->SetDrawPortPoint(cPoint(0, newY));
+    DrawScrollbar();
+    osd->Flush();
+}
+
+void cNopacityTextView::Action(void) {
+    if (pixmapContent)
+        return;
+    DrawContent(&infoText);
+    DrawScrollbar();
+    osd->Flush();
+}
diff --git a/detailview.h b/detailview.h
new file mode 100644
index 0000000..0a908bd
--- /dev/null
+++ b/detailview.h
@@ -0,0 +1,161 @@
+#ifndef __NOPACITY_DETAILVIEW_H
+#define __NOPACITY_DETAILVIEW_H
+
+#include <vector>
+#include <string>
+#include <sstream>
+#include <vdr/skins.h>
+#include "services/scraper2vdr.h"
+#include "services/epgsearch.h"
+#include "config.h"
+#include "imagecache.h"
+#include "imageloader.h"
+#include "helpers.h"
+
+enum eEPGViewTabs {
+    evtInfo = 0,
+    evtAddInfo,
+    evtImages,
+    evtCount
+};
+
+enum eMediaViewTabs {
+    mvtInfo = 0,
+    mvtAddInfo,
+    mvtCast,
+    mvtOnlineInfo,
+    mvtImages,
+    mvtCount
+};
+
+class cNopacityView : public cThread {
+protected:
+    cOsd *osd;
+    cImageCache *imgCache;
+    cPixmap *pixmapHeader;
+    cPixmap *pixmapHeaderLogo;
+    cPixmap *pixmapContent;
+    cPixmap *pixmapContentBack;
+    cPixmap *pixmapScrollbar;
+    cPixmap *pixmapScrollbarBack;
+    cPixmap *pixmapTabs;
+    cFont *font, *fontSmall, *fontHeader, *fontHeaderLarge;
+    int activeView;
+    bool scrollable;
+    bool tabbed;
+    int x, y;
+    int width, height;
+    int border;
+    int headerHeight, contentHeight, tabHeight;
+    std::vector<std::string> tabs;
+    std::string title;
+    std::string subTitle;
+    std::string dateTime;
+    std::string infoText;
+    std::string addInfoText;
+    const cChannel *channel;
+    int eventID;
+    std::string recFileName;
+    bool headerDrawn;
+    void DrawHeader(void);
+    void ClearContent(void);
+    void CreateContent(int fullHeight);
+    void DrawContent(std::string *text);
+    void DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *img2 = NULL);
+    void CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg);
+    void DrawActors(std::vector<cActor> *actors);
+    void ClearScrollbar(void);
+    virtual void SetTabs(void) {};
+    void DrawTabs(void);
+public:    
+    cNopacityView(cOsd *osd, cImageCache *imgCache);
+    virtual ~cNopacityView(void);
+    void SetTitle(const char *t) { title = t ? t : ""; };
+    void SetSubTitle(const char *s) { subTitle = s ? s : ""; };
+    void SetDateTime(const char *dt) { dateTime = dt; };
+    void SetInfoText(const char *i) { infoText = i ? i : ""; };
+    void SetAdditionalInfoText(std::string addInfo) { addInfoText = addInfo; };
+    void SetChannel(const cChannel *c) { channel = c; };
+    void SetEventID(int id) { eventID = id; };
+    void SetRecFileName(const char *name) { recFileName = name ? name : ""; };
+    virtual void LoadMedia(void) {};
+    void SetGeometry(int x, int y, int width, int height, int border, int headerHeight);
+    void SetFonts(void);
+    void SetScrollbarPixmaps(cPixmap *s, cPixmap *sb) { pixmapScrollbar = s; pixmapScrollbarBack = sb; };
+    virtual bool KeyUp(void);
+    virtual bool KeyDown(void);
+    virtual void KeyLeft(void) {};
+    virtual void KeyRight(void) {};
+    void DrawScrollbar(void);
+    virtual void Action(void) {};
+};
+
+class cNopacityEPGView : public cNopacityView {
+protected:
+    cPixmap *pixmapHeaderEPGImage;
+    std::vector<std::string> epgPics;
+    int numEPGPics;
+    int numTabs;
+    void SetTabs(void);
+    void DrawHeaderEPGImage(void);
+    void CheckEPGImages(void);
+    void DrawImages(void);
+public:    
+    cNopacityEPGView(cOsd *osd, cImageCache *imgCache);
+    virtual ~cNopacityEPGView(void);
+    void KeyLeft(void);
+    void KeyRight(void);
+    void Action(void);
+};
+
+class cNopacitySeriesView : public cNopacityView {
+protected:
+    cPixmap *pixmapHeaderBanner;
+    int seriesId;
+    int episodeId;
+    cSeries series;
+    std::string tvdbInfo;
+    void SetTabs(void);
+    void CreateTVDBInfo(void);
+    void DrawHeaderBanner(void);
+    void DrawImages(void);
+    int GetRandomPoster(void);
+public:    
+    cNopacitySeriesView(cOsd *osd, cImageCache *imgCache, int seriesId, int episodeId);
+    virtual ~cNopacitySeriesView(void);
+    void LoadMedia(void);
+    void KeyLeft(void);
+    void KeyRight(void);
+    void Action(void);
+};
+
+class cNopacityMovieView : public cNopacityView {
+protected:
+    cPixmap *pixmapHeaderPoster;
+    int movieId;
+    cMovie movie;
+    std::string movieDBInfo;
+    void SetTabs(void);
+    void CreateMovieDBInfo(void);
+    void DrawHeaderPoster(void);
+    void DrawImages(void);
+public:    
+    cNopacityMovieView(cOsd *osd, cImageCache *imgCache, int movieId);
+    virtual ~cNopacityMovieView(void);
+    void LoadMedia(void);
+    void KeyLeft(void);
+    void KeyRight(void);
+    void Action(void);
+};
+
+class cNopacityTextView : public cNopacityView {
+protected:
+public:    
+    cNopacityTextView(cOsd *osd, cImageCache *imgCache);
+    virtual ~cNopacityTextView(void);    
+    void KeyLeft(void);
+    void KeyRight(void);
+    void Action(void);
+};
+
+#endif //__NOPACITY_DETAILVIEW_H
\ No newline at end of file
diff --git a/displaychannel.c b/displaychannel.c
index 4a8994c..ac9e179 100644
--- a/displaychannel.c
+++ b/displaychannel.c
@@ -1,556 +1,181 @@
-#include "symbols/audio.xpm"
-#include "symbols/dolbydigital.xpm"
-
+#include "config.h"
+#include "nopacity.h"
 #include "displaychannel.h"
+#include "imageloader.h"
+#include "helpers.h"
+
+#include <vdr/osd.h>
+#include <vdr/menu.h>
 
-cNopacityDisplayChannel::cNopacityDisplayChannel(bool WithInfo) {
-    config.setDynamicValues();
-    withInfo = WithInfo;
+cNopacityDisplayChannel::cNopacityDisplayChannel(cImageCache *imgCache, bool WithInfo) {
+    if (firstDisplay) {
+        imgCache->CreateCacheDelayed();
+        firstDisplay = false;
+        doOutput = false;
+        return;
+    } else
+        doOutput = true;
     groupSep = false;
     present = NULL;
-    lastSeen = -1;
-    lastSignalDisplay = 0;
-    lastSignalStrength = 0;
-    lastSignalQuality = 0;
-    lastScreenWidth = 0;
     currentLast = 0;
     channelChange = false;
-    isRadioChannel = false;
-    radioIconDrawn = false;
     initial = true;
-    FrameTime = config.channelFrameTime; 
-    FadeTime = config.channelFadeTime;
-    lastDate = "";
-    SetGeometry();
-    CreatePixmaps();
-    CreateFonts();
-    DrawBackground();
-    DrawSignalMeter();
-}
-
-cNopacityDisplayChannel::~cNopacityDisplayChannel() {
-    Cancel(-1);
-    while (Active())
-        cCondWait::SleepMs(10);
-    osd->DestroyPixmap(pixmapBackgroundTop);
-    osd->DestroyPixmap(pixmapBackgroundBottom);
-    osd->DestroyPixmap(pixmapLogo);
-    osd->DestroyPixmap(pixmapChannelInfo);
-    osd->DestroyPixmap(pixmapDate);
-    if (withInfo) {
-        osd->DestroyPixmap(pixmapBackgroundMiddle);
-        osd->DestroyPixmap(pixmapProgressBar);
-        osd->DestroyPixmap(pixmapEPGInfo);
-    }
-    if (pixmapScreenResolution)
-        osd->DestroyPixmap(pixmapScreenResolution); 
-    osd->DestroyPixmap(pixmapFooter);
-    osd->DestroyPixmap(pixmapStreamInfo);
-    osd->DestroyPixmap(pixmapStreamInfoBack);
-    if (config.displaySignalStrength && showSignal) {
-        osd->DestroyPixmap(pixmapSignalStrength);
-        osd->DestroyPixmap(pixmapSignalQuality);
-        osd->DestroyPixmap(pixmapSignalMeter);
-        osd->DestroyPixmap(pixmapSignalLabel);
-    }
-    if (config.displaySignalStrength && showSignal) {
-        delete fontInfoline;
-    }
-    delete fontHeader;
-    delete fontDate;
-    delete fontEPG;
-    delete fontEPGSmall;
-    delete osd;
-}
+    FadeTime = config.GetValue("channelFadeTime");
+    FrameTime = FadeTime / 10;
 
-void cNopacityDisplayChannel::SetGeometry(void) {
-    height = cOsd::OsdHeight() * config.channelHeight / 100;
-    int top = cOsd::OsdTop() + cOsd::OsdHeight() - height - config.channelBorderBottom;
-    osd = CreateOsd(cOsd::OsdLeft(), top, cOsd::OsdWidth(), height);
-    switch (config.logoPosition) {
-        case lpLeft:
-            infoWidth = osd->Width() - (config.logoWidth + 2 * config.channelBorderVertical + config.logoBorder);
-            infoX = config.logoWidth + config.channelBorderVertical + config.logoBorder;
-            break;
-        case lpRight:
-            infoWidth = osd->Width() - (config.logoWidth + 2 * config.channelBorderVertical + config.logoBorder);
-            infoX = config.channelBorderVertical;
-            break;
-        case lpNone:
-            infoWidth = osd->Width() - 2 * config.channelBorderVertical;
-            infoX = config.channelBorderVertical;
-            break;
-    }
-    channelInfoWidth = infoWidth * 0.7;
-    dateWidth = infoWidth - channelInfoWidth;   
-    channelInfoHeight = height * 0.2;
-    if (channelInfoHeight%2 != 0)
-        channelInfoHeight++;
-    progressBarHeight = height * 0.1;
-    streamInfoHeight = height * 0.2;
-    if (streamInfoHeight%2 != 0)
-        streamInfoHeight++;
-    epgInfoHeight = height - channelInfoHeight - streamInfoHeight - progressBarHeight;
-    epgInfoLineHeight = epgInfoHeight / 4;
-    streamInfoY = channelInfoHeight + progressBarHeight + epgInfoHeight;
-    iconSize = config.statusIconSize;
-    iconsWidth = 5*iconSize;
-}
-
-void cNopacityDisplayChannel::CreatePixmaps(void) {
-    int channelInfoY = 0;
-    if (withInfo) {
-        pixmapProgressBar = osd->CreatePixmap(2, cRect(infoX, channelInfoHeight, infoWidth, progressBarHeight));
-        pixmapEPGInfo     = osd->CreatePixmap(2, cRect(infoX, channelInfoHeight + progressBarHeight, infoWidth, epgInfoHeight));
-        pixmapBackgroundMiddle = osd->CreatePixmap(1, cRect(infoX, channelInfoHeight, infoWidth, progressBarHeight + epgInfoHeight));
+    channelView = new cNopacityDisplayChannelView(imgCache);
+    if (!channelView->createOsd()) {
+        doOutput = false;
     } else {
-        channelInfoY = (height - channelInfoHeight) / 3;
-        streamInfoY = (height - channelInfoHeight) / 3 + channelInfoHeight;
-    }
-    pixmapBackgroundTop = osd->CreatePixmap(1, cRect(infoX, channelInfoY, infoWidth, channelInfoHeight));
-    pixmapBackgroundBottom = osd->CreatePixmap(1, cRect(infoX, streamInfoY, infoWidth, streamInfoHeight));
-        
-    pixmapChannelInfo = osd->CreatePixmap(2, cRect(infoX, channelInfoY, channelInfoWidth, channelInfoHeight));
-    pixmapDate = osd->CreatePixmap(2, cRect(infoX + channelInfoWidth, channelInfoY, dateWidth, channelInfoHeight));
-    pixmapFooter  = osd->CreatePixmap(2, cRect(infoX, streamInfoY, infoWidth, streamInfoHeight));
-    pixmapStreamInfo =     osd->CreatePixmap(4, cRect(infoX + (infoWidth - iconsWidth - config.resolutionIconSize - 35), height - iconSize - 10, iconsWidth, iconSize));
-    pixmapStreamInfoBack = osd->CreatePixmap(3, cRect(infoX + (infoWidth - iconsWidth - config.resolutionIconSize - 35), height - iconSize - 10, iconsWidth, iconSize));
-    
-    switch (config.logoPosition) {
-        case lpLeft:
-            pixmapLogo = osd->CreatePixmap(1, cRect(0, 0, config.logoWidth + 2 * config.logoBorder, height));
-            break;
-        case lpRight:
-            pixmapLogo = osd->CreatePixmap(1, cRect(infoX + infoWidth, 0, config.logoWidth + 2 * config.logoBorder, height));
-            break;
-        case lpNone:
-            pixmapLogo = osd->CreatePixmap(-1, cRect(0, 0, 1, 1));
-            break;
-    }
-    
-    if (config.channelFadeTime) {
-        pixmapBackgroundTop->SetAlpha(0);
-        pixmapBackgroundBottom->SetAlpha(0);
-        pixmapChannelInfo->SetAlpha(0);
-        pixmapDate->SetAlpha(0);
-        pixmapLogo->SetAlpha(0);
-        pixmapFooter->SetAlpha(0);
-        pixmapStreamInfo->SetAlpha(0);
-        pixmapStreamInfoBack->SetAlpha(0);
-        if (withInfo) {
-            pixmapBackgroundMiddle->SetAlpha(0);
-            pixmapProgressBar->SetAlpha(0);
-            pixmapEPGInfo->SetAlpha(0);
+        channelView->CreatePixmaps();
+        channelView->DrawBackground();
+        if (config.GetValue("displaySignalStrength")) {
+            channelView->DrawSignalMeter();
         }
     }
-    if (withInfo) {
-        pixmapProgressBar->Fill(clrTransparent);
-        pixmapEPGInfo->Fill(clrTransparent);
-    }
-    pixmapScreenResolution = NULL;
-}
-
-void cNopacityDisplayChannel::CreateFonts(void) {
-    fontHeader = cFont::CreateFont(config.fontName, channelInfoHeight - 8 + config.fontChannelHeaderSize);
-    fontDate = cFont::CreateFont(config.fontName, channelInfoHeight/2 + config.fontChannelDateSize);
-    fontEPG = cFont::CreateFont(config.fontName, epgInfoLineHeight + config.fontEPGSize);
-    fontEPGSmall = cFont::CreateFont(config.fontName, epgInfoLineHeight - 6 + config.fontEPGSmallSize);
 }
 
-void cNopacityDisplayChannel::DrawBackground(void){
-    
-    DrawBlendedBackground(pixmapBackgroundTop, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), true);
-    if (withInfo)
-        pixmapBackgroundMiddle->Fill(Theme.Color(clrChannelBackground));
-    DrawBlendedBackground(pixmapBackgroundBottom, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), false);
-
-    pixmapBackgroundTop->DrawEllipse(cRect(0, 0, channelInfoHeight/2, channelInfoHeight/2), clrTransparent, -2);
-    pixmapBackgroundTop->DrawEllipse(cRect(infoWidth - channelInfoHeight/2, 0, channelInfoHeight/2, channelInfoHeight/2), clrTransparent, -1);
-    pixmapBackgroundBottom->DrawEllipse(cRect(0, streamInfoHeight/2, streamInfoHeight/2, streamInfoHeight/2), clrTransparent, -3);
-    pixmapBackgroundBottom->DrawEllipse(cRect(infoWidth - streamInfoHeight/2, streamInfoHeight/2, streamInfoHeight/2, streamInfoHeight/2), clrTransparent, -4);
-
-    pixmapChannelInfo->Fill(clrTransparent);
-    pixmapDate->Fill(clrTransparent);
-    pixmapLogo->Fill(clrTransparent);
-    pixmapFooter->Fill(clrTransparent);
-    pixmapStreamInfo->Fill(clrTransparent);
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/channelsymbols", iconsWidth, iconSize)) {
-        pixmapStreamInfo->DrawImage(cPoint(0, 0), imgLoader.GetImage());
-    }
-
-}
-
-void cNopacityDisplayChannel::DrawDate(void) {
-    cString curDate = DayDateTime();
-    if (initial || channelChange || strcmp(curDate, lastDate)) {
-        int strDateWidth = fontDate->Width(curDate);
-        int strDateHeight = fontDate->Height();
-        int x = dateWidth - strDateWidth - channelInfoHeight/2;
-        int y = (channelInfoHeight - strDateHeight) / 2;
-        pixmapDate->Fill(clrTransparent);
-        pixmapDate->DrawText(cPoint(x, y), curDate, Theme.Color(clrChannelHead), clrTransparent, fontDate);
-        lastDate = curDate;
-    }
-}
-
-void cNopacityDisplayChannel::DrawIcons(const cChannel *Channel) {
-    isRadioChannel = ((!Channel->Vpid())&&(Channel->Apid(0)))?true:false;
-    pixmapStreamInfoBack->Fill(clrTransparent);
-    
-    int backX = 5;
-    int backY = 5;
-    
-    tColor colVT = Theme.Color(clrChannelSymbolOff);
-    if (Channel->Vpid() && Channel->Tpid()) {
-        colVT = Theme.Color(clrChannelSymbolOn);
-    }
-    pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colVT);
-
-    backX += iconSize;
-    tColor colStereo = Theme.Color(clrChannelSymbolOff);
-    if (Channel->Apid(1)) {
-        colStereo = Theme.Color(clrChannelSymbolOn);
-    }
-    pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colStereo);
-
-    backX += iconSize;
-    tColor colDolby = Theme.Color(clrChannelSymbolOff);
-    if (Channel->Dpid(0)) {
-        colDolby = Theme.Color(clrChannelSymbolOn);
-    }
-    pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colDolby);
-
-    backX += iconSize;
-    tColor colCrypted = Theme.Color(clrChannelSymbolOff);
-    if (Channel->Ca()) {
-        colCrypted = Theme.Color(clrChannelSymbolOn);
-    }
-    pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colCrypted);
-
-    backX += iconSize;
-    tColor colRecording = Theme.Color(clrChannelSymbolOff);
-    if (cRecordControls::Active()) {
-        colRecording = Theme.Color(clrChannelRecActive);
-    }
-    pixmapStreamInfoBack->DrawRectangle(cRect(backX, backY, iconSize-10, iconSize-10), colRecording);
-}
-
-void cNopacityDisplayChannel::DrawScreenResolution(void) {
-    int spacing = 10;
-    int screenWidth = 0;
-    int screenHeight = 0;
-    double aspect = 0;
-
-    if (!pixmapScreenResolution) {
-        int x = infoX + infoWidth - config.resolutionIconSize - 2*spacing;
-        int y = streamInfoY + streamInfoHeight - config.resolutionIconSize - 3;
-        pixmapScreenResolution = osd->CreatePixmap(3, cRect(x, y, config.resolutionIconSize, config.resolutionIconSize));
-        pixmapScreenResolution->Fill(clrTransparent);
-        if ((initial)&&(config.channelFadeTime))
-            pixmapScreenResolution->SetAlpha(0);
-    }
-    
-    cImageLoader imgLoader;
-    if (isRadioChannel) {
-        if (!radioIconDrawn) {
-            if (imgLoader.LoadIcon("skinIcons/radio", config.resolutionIconSize)) {
-                    pixmapScreenResolution->DrawImage(cPoint(0,0), imgLoader.GetImage());
-            }
-            lastScreenWidth = 0;
-            radioIconDrawn = true;
-        }
-    } else {
-        cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect);
-        if (screenWidth != lastScreenWidth) {
-            cString iconName("");
-            switch (screenWidth) {
-                case 1920:
-                case 1440:
-                    iconName = "skinIcons/hd1080i";
-                    break;
-                case 1280:
-                    if (screenHeight == 720)
-                        iconName = "skinIcons/hd720p";
-                    else
-                        iconName = "skinIcons/hd1080i";
-                    break;
-                case 720:
-                    iconName = "skinIcons/sd576i";
-                    break;
-                default:
-                    iconName = "skinIcons/sd576i";
-                    break;
-            }
-            if (imgLoader.LoadIcon(*iconName, config.resolutionIconSize)) {
-                pixmapScreenResolution->DrawImage(cPoint(0,0), imgLoader.GetImage());
-            }
-            lastScreenWidth = screenWidth;
-            radioIconDrawn = false;
-        }
-    }
-}
-
-void cNopacityDisplayChannel::DrawSignalMeter(void) {
-    signalWidth = infoWidth * 0.15;
-    signalHeight = signalWidth *15 / 200;
-    showSignal = false;
-    if (config.displaySignalStrength) {
-        cImageLoader imgLoader;
-        cString signalStrength = "STR";
-        cString signalQuality = "SNR";
-        if (imgLoader.LoadIcon("skinIcons/signal", signalWidth, signalHeight, false)) {
-            cImage imgSignal = imgLoader.GetImage();
-            signalWidth = imgSignal.Width();
-            signalHeight = imgSignal.Height();
-            int signalMeterY = streamInfoY + (streamInfoHeight - 2*signalHeight - 5)/2;
-            fontInfoline = cFont::CreateFont(config.fontName, signalHeight - 2);
-            int labelWidth = max(fontInfoline->Width(*signalStrength), fontInfoline->Width(*signalQuality)) + 2;
-            signalX = streamInfoHeight / 2 + labelWidth;
-            showSignal = true;
-            pixmapSignalStrength = osd->CreatePixmap(3, cRect(infoX + signalX, signalMeterY + 2, signalWidth + 2, signalHeight + 2));
-            pixmapSignalQuality  = osd->CreatePixmap(3, cRect(infoX + signalX, signalMeterY + signalHeight + 5, signalWidth + 2, signalHeight + 2));
-            pixmapSignalMeter    = osd->CreatePixmap(4, cRect(infoX + signalX + 1, signalMeterY + 3, signalWidth, 2*signalHeight + 3));
-            pixmapSignalLabel    = osd->CreatePixmap(3, cRect(infoX + streamInfoHeight / 2, signalMeterY + 2, labelWidth, 2*signalHeight + 3));
-            pixmapSignalStrength->Fill(Theme.Color(clrProgressBarBack));
-            pixmapSignalQuality->Fill(Theme.Color(clrProgressBarBack));
-            pixmapSignalMeter->Fill(clrTransparent);
-            pixmapSignalLabel->Fill(clrTransparent);
-            if (config.channelFadeTime) {
-                pixmapSignalStrength->SetAlpha(0);
-                pixmapSignalQuality->SetAlpha(0);
-                pixmapSignalMeter->SetAlpha(0);
-                pixmapSignalLabel->SetAlpha(0);
-            }
-            pixmapSignalStrength->DrawImage(cPoint(1,1), imgSignal);
-            pixmapSignalQuality->DrawImage(cPoint(1,1), imgSignal);
-            pixmapSignalLabel->DrawText(cPoint(0, 2), *signalStrength, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
-            pixmapSignalLabel->DrawText(cPoint(0, signalHeight + 4), *signalQuality, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
-        }
-    }
-}
-
-void cNopacityDisplayChannel::DrawSignal(void) {
-    time_t Now = time(NULL);
-    if (Now != lastSignalDisplay) {
-        int SignalStrength = cDevice::ActualDevice()->SignalStrength();
-        int SignalQuality = cDevice::ActualDevice()->SignalQuality();
-        if ((SignalStrength == 0)&&(SignalQuality==0))
-            return;
-        if ((lastSignalStrength != SignalStrength) || (lastSignalQuality != SignalQuality)) {
-            pixmapSignalMeter->Fill(clrTransparent);
-            pixmapSignalMeter->DrawRectangle(cRect(double(SignalStrength) /100 * signalWidth, 0, signalWidth - (double)SignalStrength /100 * signalWidth + 1, signalHeight), Theme.Color(clrChannelBackground));
-            pixmapSignalMeter->DrawRectangle(cRect(double(SignalQuality) /100 * signalWidth, signalHeight + 3, signalWidth - (double)SignalQuality / 100 * signalWidth + 1, signalHeight + 1), Theme.Color(clrChannelBackground));
-        }
-        lastSignalStrength = SignalStrength;
-        lastSignalQuality = SignalQuality;
-        lastSignalDisplay = Now;
-    }
+cNopacityDisplayChannel::~cNopacityDisplayChannel() {
+    if (!doOutput)
+        return;
+    Cancel(-1);
+    while (Active())
+        cCondWait::SleepMs(10);
+    delete channelView;
 }
 
 void cNopacityDisplayChannel::SetChannel(const cChannel *Channel, int Number) {
-    pixmapLogo->Fill(clrTransparent);
-    pixmapChannelInfo->Fill(clrTransparent);
-    
-    if (withInfo) {
-        pixmapProgressBar->Fill(clrTransparent);
-        pixmapEPGInfo->Fill(clrTransparent);
-    }
-    
+    if (!doOutput)
+        return;
+
     channelChange = true;
-    lastSignalStrength = 0;
-    lastSignalQuality = 0;
+    groupSep = false;
+
     cString ChannelNumber("");
     cString ChannelName("");
-    groupSep = false;
+
     if (Channel) {
         ChannelName = Channel->Name();
         if (!Channel->GroupSep()) {
-            DrawIcons(Channel);
             ChannelNumber = cString::sprintf("%d%s", Channel->Number(), Number ? "-" : "");
-        } else
+        } else {
             groupSep = true;
-        } else if (Number) {
+        }
+    } else if (Number) {
         ChannelNumber = cString::sprintf("%d-", Number);
     } else {
         ChannelName = ChannelString(NULL, 0);
     }
-
-    cString channelString = cString::sprintf("%s %s", *ChannelNumber, *ChannelName);
-
+    channelView->ClearChannelLogo();
+    channelView->ClearChannelName();
+    channelView->ClearEPGInfo();
+    channelView->ClearStatusIcons();
+    channelView->ClearSourceInfo();
     if (!groupSep) {
-        pixmapChannelInfo->DrawText(cPoint(channelInfoHeight/2, (channelInfoHeight-fontHeader->Height())/2), channelString, Theme.Color(clrChannelHead), clrTransparent, fontHeader);
-        if (config.logoPosition != lpNone) {
-            cImageLoader imgLoader;
-            if (imgLoader.LoadLogo(*ChannelName)) {
-                pixmapLogo->DrawImage(cPoint(config.logoBorder, (height-config.logoHeight)/2), imgLoader.GetImage());
-            }
-        }
+        channelView->DrawChannelName(ChannelNumber, ChannelName);
+        if (Channel && config.GetValue("logoPosition") != lpNone)
+            channelView->DrawChannelLogo(Channel);
+        if (Channel)
+            channelView->DrawStatusIcons(Channel);
     } else {
-        if (withInfo) {
-            pixmapProgressBar->Fill(clrTransparent);
-            pixmapEPGInfo->Fill(clrTransparent);
-            pixmapEPGInfo->DrawText(cPoint(channelInfoHeight/2, (epgInfoHeight-fontHeader->Height())/2 - fontHeader->Height()/2), channelString, Theme.Color(clrChannelHead), clrTransparent, fontHeader);
-        } else {
-            pixmapChannelInfo->DrawText(cPoint(channelInfoHeight/2, (channelInfoHeight-fontHeader->Height())/2), channelString, Theme.Color(clrChannelHead), clrTransparent, fontHeader);
-        }
-        if (config.logoPosition != lpNone) {
-            cImageLoader imgLoader;
-            cString separator = cString::sprintf("separatorlogos/%s", *ChannelName);
-            if (imgLoader.LoadLogo(*separator)) {
-                pixmapLogo->DrawImage(cPoint(config.logoBorder, (height-config.logoHeight)/2), imgLoader.GetImage());
-            } else if (imgLoader.LoadIcon("skinIcons/Channelseparator", config.logoHeight)) {
-                pixmapLogo->DrawImage(cPoint(config.logoBorder + (config.logoWidth - config.logoHeight)/2, (height-config.logoHeight)/2), imgLoader.GetImage());
-            }
-        }
+        channelView->HideSignalMeter();
+        channelView->ClearProgressBar();
+        if (Channel)
+            channelView->DrawChannelGroups(Channel, ChannelName);
     }
+
 }
 
 void cNopacityDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following) {
-    if (!withInfo)
+    if (!doOutput)
         return;
-    if (present != Present)
-        lastSeen = -1;
     present = Present;
-    
-    if (Present || Following) {
-        pixmapProgressBar->Fill(clrTransparent);
-        pixmapEPGInfo->Fill(clrTransparent);
+    channelView->ClearProgressBar();
+    if (!groupSep) {
+        channelView->DrawProgressbarBackground();
+        channelView->ClearEPGInfo();
     }
-    int indent = 20;
-    
-    for (int i = 0; i < 2; i++) {
-        const cEvent *e = !i ? Present : Following;
-        int y = !i ? 0 : 2;
-        if (e) {
-            cString startTime = e->GetTimeString();
-            int startTimeWidth = fontEPG->Width(*startTime);
-            int epgWidth = fontEPG->Width(e->Title());
-            int epgWidthShort = fontEPGSmall->Width(e->ShortText());
-            cString strSeen("");
-            if (i==0) {
-                if (config.progressCurrentSchedule == 0) {
-                    int seen = (int)(time(NULL) - e->StartTime())/60;
-                    strSeen = cString::sprintf("%d/%dmin", seen, e->Duration()/60);
-                } else if (config.progressCurrentSchedule == 1) {
-                    int remaining = (int)(e->EndTime() - time(NULL))/60;
-                    strSeen = cString::sprintf("-%d/%dmin", remaining, e->Duration()/60);
-                }
-            } else {
-                strSeen = cString::sprintf("%dmin", e->Duration()/60);
-            }
-            int seenWidth = fontEPG->Width(*strSeen);
-            int space = infoWidth - 9*indent - seenWidth - startTimeWidth - config.resolutionIconSize;
-            cString strEPG;
-            if (space < epgWidth) {
-                cTextWrapper epgInfoWrapper(e->Title(), fontEPG, space);
-                strEPG = epgInfoWrapper.GetLine(0);
-                strEPG = cString::sprintf("%s...", *strEPG);
-            } else {
-                strEPG = e->Title();
-            }
-            cString strEPGShort("");
-            int spaceShort = infoWidth - 6*indent - startTimeWidth - config.resolutionIconSize;
-            if (spaceShort < epgWidthShort) {
-                cTextWrapper epgInfoWrapper(e->ShortText(), fontEPGSmall, spaceShort);
-                strEPGShort = epgInfoWrapper.GetLine(0);
-                strEPGShort = cString::sprintf("%s...", *strEPGShort);
-            } else {
-                strEPGShort = e->ShortText();
-            }
-            tColor fontColor = (i==0)?Theme.Color(clrChannelEPG):Theme.Color(clrChannelEPGInfo);
-            pixmapEPGInfo->DrawText(cPoint(indent, y * epgInfoLineHeight), *startTime, fontColor, clrTransparent, fontEPG);
-            pixmapEPGInfo->DrawText(cPoint(2 * indent + startTimeWidth, y * epgInfoLineHeight), *strEPG, fontColor, clrTransparent, fontEPG);
-            pixmapEPGInfo->DrawText(cPoint(2 * indent + startTimeWidth, (y+1) * epgInfoLineHeight + 3), *strEPGShort, fontColor, clrTransparent, fontEPGSmall);
-            int x = infoWidth - indent - seenWidth - config.resolutionIconSize - indent;
-            pixmapEPGInfo->DrawText(cPoint(x, y * epgInfoLineHeight), *strSeen, fontColor, clrTransparent, fontEPG);
+    if (Present) {
+        if (!groupSep) {
+            SetProgressBar(Present);
         }
-    }
-}
-
-void cNopacityDisplayChannel::DrawProgressBar(int Current, int Total) {
-    if ((Current < currentLast + 3) && !channelChange)
-        return;
-    currentLast = Current;
-    if ((Current > 0) || (Total > 0)) {
-        int barHeight = pixmapProgressBar->ViewPort().Height()-8;
-        if (barHeight%2 != 0)
-            barHeight++;
-        int barFullWidth = pixmapProgressBar->ViewPort().Width() - 20 - barHeight;
-        double percentSeen = ((double)Current) / (double)Total;
-
-        pixmapProgressBar->DrawEllipse(cRect(9, 3, barHeight+2, barHeight+2), Theme.Color(clrProgressBarBack));
-        pixmapProgressBar->DrawEllipse(cRect(9 + barFullWidth, 3, barHeight+2, barHeight+2), Theme.Color(clrProgressBarBack));
-        pixmapProgressBar->DrawRectangle(cRect( 9 + barHeight/2, 3, barFullWidth, barHeight+1), Theme.Color(clrProgressBarBack));
-
-        pixmapProgressBar->DrawEllipse(cRect(10, 4, barHeight, barHeight), Theme.Color(clrProgressBarBlend));
-        if (Current > 0) {
-            tColor colAct = DrawProgressbarBackground(10 + barHeight/2, 4, barFullWidth * percentSeen, barHeight-1);
-            pixmapProgressBar->DrawEllipse(cRect(10 + barFullWidth * percentSeen, 4, barHeight, barHeight), colAct);
+        bool recCurrent = false;
+        eTimerMatch TimerMatch = tmNone;
+        const cTimer *Timer = Timers.GetMatch(Present, &TimerMatch);
+        if (Timer && Timer->Recording()) {
+            recCurrent = true;
         }
+        channelView->DrawEPGInfo(Present, true, recCurrent);
     }
+    if (Following) {
+        bool recFollowing = Following->HasTimer();
+        channelView->DrawEPGInfo(Following, false, recFollowing);
+    }
+    if (config.GetValue("displayPoster"))
+        channelView->DrawPoster(Present, initial);
 }
 
-tColor cNopacityDisplayChannel::DrawProgressbarBackground(int left, int top, int width, int height) {
-
-    tColor clr1 = Theme.Color(clrProgressBar);
-    tColor clr2 = Theme.Color(clrProgressBarBlend);
-    tColor clr = 0x00000000;
-    width = (width==0)?1:width;
-    int step = width / 256;
-    int alpha = 0x0;
-    int alphaStep;
-    int maximum = 0;
-    if (step == 0) {    //width < 256
-        step = 1;
-        alphaStep = 256 / width;
-        maximum = width;
-    } else {            //width > 256
-        alphaStep = 0x1;
-        maximum = 256;
-    }
-    int x = 0;
-    for (int i = 0; i < maximum; i++) {
-        x = left + i*step;
-        clr = AlphaBlend(clr1, clr2, alpha);
-        pixmapProgressBar->DrawRectangle(cRect(x,top,step,height), clr);
-        alpha += alphaStep;
+void cNopacityDisplayChannel::SetProgressBar(const cEvent *present) {
+    int Current = 0;
+    int Total = 0;
+    time_t t = time(NULL);
+    if (t > present->StartTime())
+        Current = t - present->StartTime();
+    Total = present->Duration();
+    if ((Current > currentLast + 3) || initial || channelChange){
+        currentLast = Current;
+        channelView->DrawProgressBar(Current, Total);
     }
-    if (step > 0) {
-        int rest = width - step*256;
-        pixmapProgressBar->DrawRectangle(cRect(left+step*256, top, rest, height), clr);
-    }
-    return clr;
 }
 
+
 void cNopacityDisplayChannel::SetMessage(eMessageType Type, const char *Text) {
+    channelView->ClearChannelLogo();
+    channelView->ClearChannelName();
+    channelView->ClearEPGInfo();
+    channelView->ClearStatusIcons();
+    channelView->ClearSourceInfo();
+    channelView->ClearProgressBar();
+    channelView->HideSignalMeter();
+    channelView->DisplayMessage(Text);
+    groupSep = true;
 }
 
 void cNopacityDisplayChannel::Flush(void) {
-    DrawDate();
+    if (!doOutput)
+        return;
+    if (initial || channelChange)
+        channelView->DrawDate();
+
+    if (present) {
+        SetProgressBar(present);
+    } else
+        channelView->ClearProgressBar();
+
     if (!groupSep)
-        DrawScreenResolution();
-    if (config.displaySignalStrength && showSignal) {
-        DrawSignal();
-    }
-    if (withInfo) {
-        int Current = 0;
-        int Total = 0;
-        if (present) {
-            time_t t = time(NULL);
-            if (t > present->StartTime())
-                Current = t - present->StartTime();
-            Total = present->Duration();
-            DrawProgressBar(Current, Total);
-        }
-    }
+        channelView->DrawScreenResolution();
+    else
+        channelView->ClearStatusIcons();
+
+    if (config.GetValue("displaySignalStrength") && !groupSep) {
+        channelView->ShowSignalMeter();
+        channelView->DrawSignal();
+    } else
+        channelView->HideSignalMeter();
+
+    if (config.GetValue("displaySourceInfo") && !groupSep) {
+        channelView->ClearSourceInfo();
+	channelView->DrawSourceInfo();
+    } else
+        channelView->ClearSourceInfo();
+
     if (initial) {
-        if (config.channelFadeTime)
+        if (config.GetValue("channelFadeTime"))
             Start();
     }
     initial = false;
     channelChange = false;
-    osd->Flush();
+    channelView->Flush();
 }
 
 void cNopacityDisplayChannel::Action(void) {
@@ -560,30 +185,10 @@ void cNopacityDisplayChannel::Action(void) {
         cPixmap::Lock();
         double t = min(double(Now - Start) / FadeTime, 1.0);
         int Alpha = t * ALPHA_OPAQUE;
-        pixmapBackgroundTop->SetAlpha(Alpha);
-        pixmapBackgroundBottom->SetAlpha(Alpha);
-        pixmapLogo->SetAlpha(Alpha);
-        pixmapChannelInfo->SetAlpha(Alpha);
-        pixmapDate->SetAlpha(Alpha);
-        if (withInfo) {
-            pixmapBackgroundMiddle->SetAlpha(Alpha);
-            pixmapProgressBar->SetAlpha(Alpha);
-            pixmapEPGInfo->SetAlpha(Alpha);
-        }
-        pixmapFooter->SetAlpha(Alpha);
-        pixmapStreamInfo->SetAlpha(Alpha);
-        pixmapStreamInfoBack->SetAlpha(Alpha);
-        if (pixmapScreenResolution)
-            pixmapScreenResolution->SetAlpha(Alpha);
-        if (config.displaySignalStrength && showSignal) {
-            pixmapSignalStrength->SetAlpha(Alpha);
-            pixmapSignalQuality->SetAlpha(Alpha);
-            pixmapSignalMeter->SetAlpha(Alpha);
-            pixmapSignalLabel->SetAlpha(Alpha);
-        }
-        if (Running())
-            osd->Flush();
+        channelView->SetAlpha(Alpha);
         cPixmap::Unlock();
+        if (Running())
+            channelView->Flush();
         int Delta = cTimeMs::Now() - Now;
         if (Running() && (Delta < FrameTime))
             cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaychannel.h b/displaychannel.h
index 3a5f924..65b6884 100644
--- a/displaychannel.h
+++ b/displaychannel.h
@@ -1,20 +1,18 @@
 #ifndef __NOPACITY_DISPLAYCHANNEL_H
 #define __NOPACITY_DISPLAYCHANNEL_H
 
-enum eLogoPosition {lpNone = 0, lpLeft, lpRight};
+#include <vdr/thread.h>
+#include "displaychannelview.h"
 
 class cNopacityDisplayChannel : public cSkinDisplayChannel, cThread {
 private:
+    cNopacityDisplayChannelView *channelView;
+    bool doOutput;
     int FrameTime;
     int FadeTime;
-    bool withInfo;
     bool initial;
     bool groupSep;
     bool channelChange;
-    bool isRadioChannel;
-    bool radioIconDrawn;
-    cString lastDate;
-    int lastSeen;
     time_t lastSignalDisplay;
     int lastSignalStrength;
     int lastSignalQuality;
@@ -22,56 +20,10 @@ private:
     int currentLast;
     bool showSignal;
     const cEvent *present;
-    cOsd *osd;
-    cPixmap *pixmapBackgroundTop;
-    cPixmap *pixmapBackgroundMiddle;
-    cPixmap *pixmapBackgroundBottom;
-    cPixmap *pixmapChannelInfo;
-    cPixmap *pixmapDate;
-    cPixmap *pixmapLogo;
-    cPixmap *pixmapProgressBar;
-    cPixmap *pixmapEPGInfo;
-    cPixmap *pixmapFooter;
-    cPixmap *pixmapStreamInfo;
-    cPixmap *pixmapStreamInfoBack;
-    cPixmap *pixmapSignalStrength;
-    cPixmap *pixmapSignalQuality;
-    cPixmap *pixmapSignalMeter;
-    cPixmap *pixmapSignalLabel;
-    cPixmap *pixmapScreenResolution;
-    int height;
-    int infoWidth;
-    int infoX;
-    int channelInfoWidth;
-    int channelInfoHeight;
-    int dateWidth;
-    int progressBarHeight;
-    int epgInfoHeight;
-    int epgInfoLineHeight;
-    int streamInfoHeight;
-    int streamInfoY;
-    int iconSize;
-    int iconsWidth;
-    int signalWidth, signalHeight, signalX;
-    cFont *fontHeader;
-    cFont *fontDate;
-    cFont *fontEPG;
-    cFont *fontEPGSmall;
-    cFont *fontInfoline;
     virtual void Action(void);
-    void SetGeometry(void);
-    void CreatePixmaps(void);
-    void CreateFonts(void);
-    void DrawBackground(void);
-    void DrawDate(void);
-    void DrawProgressBar(int Current, int Total);
-    tColor DrawProgressbarBackground(int left, int top, int width, int height);
-    void DrawIcons(const cChannel *channel);
-    void DrawScreenResolution(void);
-    void DrawSignalMeter(void);
-    void DrawSignal(void);
+    void SetProgressBar(const cEvent *present);
 public:
-    cNopacityDisplayChannel(bool WithInfo);
+    cNopacityDisplayChannel(cImageCache *imgCache, bool WithInfo);
     virtual ~cNopacityDisplayChannel();
     virtual void SetChannel(const cChannel *Channel, int Number);
     virtual void SetEvents(const cEvent *Present, const cEvent *Following);
diff --git a/displaychannelview.c b/displaychannelview.c
new file mode 100644
index 0000000..c4e8ddc
--- /dev/null
+++ b/displaychannelview.c
@@ -0,0 +1,843 @@
+#include "services/scraper2vdr.h"
+#include "displaychannelview.h"
+#include "config.h"
+#include "helpers.h"
+#include "fontmanager.h"
+#include "geometrymanager.h"
+#include "imageloader.h"
+#include <vdr/menu.h>
+
+cNopacityDisplayChannelView::cNopacityDisplayChannelView(cImageCache *imgCache) {
+    this->imgCache = imgCache;
+    osd = NULL;
+    lastDate = "";
+    isRadioChannel = false;
+    statusIconBorder = 5;
+    statusIconSize = geoManager->channelFooterHeight - 2 * statusIconBorder;
+    signalWidth = 0;
+    signalHeight = 0;
+    signalX = 0;
+    lastSignalDisplay = 0;
+    lastSignalStrength = 0;
+    lastSignalQuality = 0;
+    pixmapSignalMeter = NULL;
+    pixmapSignalStrength = NULL;
+    pixmapSignalQuality = NULL;
+    pixmapSignalLabel = NULL;
+    pixmapPoster = NULL;
+}
+
+cNopacityDisplayChannelView::~cNopacityDisplayChannelView() {
+    osd->DestroyPixmap(pixmapBackground);
+    osd->DestroyPixmap(pixmapTop);
+    osd->DestroyPixmap(pixmapLogo);
+    osd->DestroyPixmap(pixmapLogoBackground);
+    osd->DestroyPixmap(pixmapChannelName);
+    osd->DestroyPixmap(pixmapDate);
+    osd->DestroyPixmap(pixmapProgressBar);
+    osd->DestroyPixmap(pixmapEPGInfo);
+    osd->DestroyPixmap(pixmapStatusIcons);
+    osd->DestroyPixmap(pixmapStatusIconsBackground);
+    osd->DestroyPixmap(pixmapSourceInfo);
+    if (pixmapSignalStrength)
+        osd->DestroyPixmap(pixmapSignalStrength);
+    if (pixmapSignalQuality)
+        osd->DestroyPixmap(pixmapSignalQuality);
+    if (pixmapSignalMeter)
+        osd->DestroyPixmap(pixmapSignalMeter);
+    if (pixmapSignalLabel)
+        osd->DestroyPixmap(pixmapSignalLabel);
+    if (pixmapPoster)
+        osd->DestroyPixmap(pixmapPoster);
+    delete osd;
+}
+
+bool cNopacityDisplayChannelView::createOsd(void) {
+    osd = CreateOsd(geoManager->osdLeft,
+                    geoManager->osdTop,
+                    geoManager->osdWidth,
+                    geoManager->osdHeight);
+    if (!osd)
+        return false;
+    return true;
+}
+
+void cNopacityDisplayChannelView::CreatePixmaps(void) {
+    pixmapBackground = osd->CreatePixmap(1,
+                              cRect(geoManager->channelX,
+                                    geoManager->channelTop,
+                                    geoManager->channelWidth,
+                                    geoManager->channelHeight)
+                            );
+    pixmapTop = osd->CreatePixmap(7,
+                              cRect(geoManager->channelX,
+                                    geoManager->channelTop,
+                                    geoManager->channelWidth,
+                                    geoManager->channelHeight)
+                            );
+    pixmapLogo  = osd->CreatePixmap(3,
+                              cRect(geoManager->channelX + geoManager->channelLogoX,
+                                    geoManager->channelLogoY,
+                                    geoManager->channelLogoWidth,
+                                    geoManager->channelLogoHeight)
+                            );
+    pixmapLogoBackground  = osd->CreatePixmap(2,
+                              cRect(geoManager->channelX + geoManager->channelLogoX,
+                                    geoManager->channelLogoY,
+                                    geoManager->channelLogoWidth,
+                                    geoManager->channelLogoHeight)
+                            );
+    pixmapChannelName = osd->CreatePixmap(2,
+                              cRect(geoManager->channelX + geoManager->channelContentX,
+                                    geoManager->channelTop,
+                                    geoManager->channelChannelNameWidth,
+                                    geoManager->channelHeaderHeight)
+                            );
+    pixmapDate  = osd->CreatePixmap(2,
+                              cRect(geoManager->channelX + geoManager->channelContentX +
+                                    geoManager->channelChannelNameWidth,
+                                    geoManager->channelTop,
+                                    geoManager->channelDateWidth,
+                                    geoManager->channelHeaderHeight)
+                            );
+    pixmapProgressBar  = osd->CreatePixmap(2,
+                              cRect(geoManager->channelX + geoManager->channelContentX,
+                                    geoManager->channelTop + geoManager->channelHeaderHeight,
+                                    geoManager->channelContentWidth,
+                                    geoManager->channelProgressBarHeight)
+                            );
+    pixmapEPGInfo  = osd->CreatePixmap(2,
+                              cRect(geoManager->channelX + geoManager->channelContentX,
+                                    geoManager->channelTop + geoManager->channelHeaderHeight +
+                                    geoManager->channelProgressBarHeight,
+                                    geoManager->channelContentWidth,
+                                    geoManager->channelEpgInfoHeight)
+                            );
+    int statusIconsWidth = 8 * statusIconSize + 6 * statusIconBorder;
+    int statusIconX = geoManager->osdWidth
+                      - config.GetValue("channelBorderVertical")
+                      - statusIconsWidth
+                      - 3*statusIconBorder;
+    if (config.GetValue("logoPosition") == lpRight)
+        statusIconX -= geoManager->channelLogoWidthTotal;
+
+    pixmapStatusIcons  = osd->CreatePixmap(3,
+                              cRect(statusIconX,
+                                    geoManager->channelTop + geoManager->channelHeaderHeight +
+                                    geoManager->channelProgressBarHeight +
+                                    geoManager->channelEpgInfoHeight,
+                                    statusIconsWidth,
+                                    geoManager->channelFooterHeight)
+                            );
+    pixmapStatusIconsBackground = osd->CreatePixmap(2,
+                              cRect(statusIconX - 2*statusIconBorder,
+                                    geoManager->channelTop + geoManager->channelHeaderHeight +
+                                    geoManager->channelProgressBarHeight +
+                                    geoManager->channelEpgInfoHeight + 1,
+                                    statusIconsWidth + 3*statusIconBorder,
+                                    geoManager->channelFooterHeight - 2)
+                            );
+    int sourceInfoX = geoManager->channelX + geoManager->channelContentX + 10;
+    if (config.GetValue("displaySignalStrength")) 
+        sourceInfoX +=geoManager->channelWidth * 0.2;
+    pixmapSourceInfo  = osd->CreatePixmap(2,
+                              cRect(sourceInfoX,
+                                    geoManager->channelTop + geoManager->channelHeaderHeight +
+                                    geoManager->channelProgressBarHeight +
+                                    geoManager->channelEpgInfoHeight,
+                                    statusIconX - sourceInfoX,
+                                    geoManager->channelFooterHeight)
+                            );
+
+    if (config.GetValue("channelFadeTime")) {
+        pixmapBackground->SetAlpha(0);
+        pixmapTop->SetAlpha(0);
+        pixmapLogo->SetAlpha(0);
+        pixmapLogoBackground->SetAlpha(0);
+        pixmapChannelName->SetAlpha(0);
+        pixmapDate->SetAlpha(0);
+        pixmapProgressBar->SetAlpha(0);
+        pixmapEPGInfo->SetAlpha(0);
+        pixmapStatusIcons->SetAlpha(0);
+        pixmapStatusIconsBackground->SetAlpha(0);
+        pixmapSourceInfo->SetAlpha(0);
+    } else {
+        int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*255/100;
+        pixmapBackground->SetAlpha(alphaBack);
+    }
+}
+
+void cNopacityDisplayChannelView::SetAlpha(int alpha) {
+    int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*alpha/100;
+    pixmapBackground->SetAlpha(alphaBack);
+    pixmapTop->SetAlpha(alpha);
+    pixmapLogo->SetAlpha(alpha);
+    pixmapLogoBackground->SetAlpha(alpha);
+    pixmapChannelName->SetAlpha(alpha);
+    pixmapDate->SetAlpha(alpha);
+    pixmapProgressBar->SetAlpha(alpha);
+    pixmapEPGInfo->SetAlpha(alpha);
+    pixmapStatusIcons->SetAlpha(alpha);
+    pixmapStatusIconsBackground->SetAlpha(alpha);
+    pixmapSourceInfo->SetAlpha(alpha);
+    if (pixmapSignalStrength)
+        pixmapSignalStrength->SetAlpha(alpha);
+    if (pixmapSignalQuality)
+        pixmapSignalQuality->SetAlpha(alpha);
+    if (pixmapSignalMeter)
+        pixmapSignalMeter->SetAlpha(alpha);
+    if (pixmapSignalLabel)
+        pixmapSignalLabel->SetAlpha(alpha);
+    if (pixmapPoster)
+        pixmapPoster->SetAlpha(alpha);
+}
+
+void cNopacityDisplayChannelView::DrawBackground(void) {
+    pixmapBackground->Fill(clrTransparent);
+    pixmapTop->Fill(clrTransparent);
+    if (config.GetValue("displayType") == dtGraphical) {
+        cImage *imgBack = imgCache->GetSkinElement(seChannelBackground);
+        if (imgBack)
+            pixmapBackground->DrawImage(cPoint(0,0), *imgBack);
+        cImage *imgTop = imgCache->GetSkinElement(seChannelTop);
+        if (imgTop)
+            pixmapTop->DrawImage(cPoint(0,0), *imgTop);
+    } else {
+        int backgroundX;
+        int backgroundWidth;
+        if (config.GetValue("backgroundStyle") == bsFull) {
+            backgroundX = 0;
+            backgroundWidth = geoManager->channelWidth;
+        } else {
+            backgroundX = geoManager->channelContentX;
+            backgroundWidth = geoManager->channelContentWidth;
+        }
+        pixmapBackground->DrawRectangle(cRect(backgroundX,
+                                              0,
+                                              backgroundWidth,
+                                              geoManager->channelHeight),
+                                        Theme.Color(clrChannelBackground));
+        if (config.GetValue("displayType") == dtBlending) {
+            DrawBlendedBackground(pixmapBackground,
+                                  backgroundX,
+                                  backgroundWidth,
+                                  Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend),
+                                  true);
+            DrawBlendedBackground(pixmapBackground,
+                                  backgroundX,
+                                  backgroundWidth,
+                                  Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend),
+                                  false);
+        }
+        if (config.GetValue("roundedCornersChannel")) {
+            int cornerRadius = geoManager->channelHeaderHeight/2;
+            if (cornerRadius > 2) {
+                DrawRoundedCorners(pixmapBackground,
+                                   cornerRadius,
+                                   backgroundX,
+                                   0,
+                                   backgroundWidth,
+                                   geoManager->channelHeight);
+            }
+        }
+    }
+}
+
+void cNopacityDisplayChannelView::DrawChannelLogo(const cChannel *Channel) {
+    if (config.GetValue("displayType") != dtFlat && config.GetValue("channelUseLogoBackground")) {
+        cImage *imgLogoBack = imgCache->GetSkinElement(seChannelLogoBack);
+        if (imgLogoBack)
+            pixmapLogoBackground->DrawImage(cPoint(0,0), *imgLogoBack);
+    }
+    cImage *imgLogo = imgCache->GetLogo(ctLogo, Channel);
+    if (imgLogo) {
+        pixmapLogo->DrawImage(cPoint(0,0), *imgLogo);
+    }
+}
+
+void cNopacityDisplayChannelView::ClearChannelLogo(void) {
+    pixmapLogoBackground->Fill(clrTransparent);
+    pixmapLogo->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayChannelView::DrawChannelName(cString number, cString name) {
+    cString channelString = cString::sprintf("%s %s", *number, *name);
+    pixmapChannelName->DrawText(cPoint(geoManager->channelHeaderHeight/2,
+                       (geoManager->channelHeaderHeight-fontManager->channelHeader->Height())/2),
+                       channelString,
+                       Theme.Color(clrChannelHead),
+                       clrTransparent,
+                       fontManager->channelHeader);
+}
+
+void cNopacityDisplayChannelView::ClearChannelName(void) {
+    pixmapChannelName->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayChannelView::DrawDate(void) {
+    cString curDate = DayDateTime();
+    if (strcmp(curDate, lastDate)) {
+        int strDateWidth = fontManager->channelDate->Width(curDate);
+        int strDateHeight = fontManager->channelDate->Height();
+        int x = geoManager->channelDateWidth - strDateWidth - geoManager->channelHeaderHeight/2;
+        int y = (geoManager->channelHeaderHeight - strDateHeight) / 2;
+        pixmapDate->Fill(clrTransparent);
+        pixmapDate->DrawText(cPoint(x, y), curDate, Theme.Color(clrChannelHead), clrTransparent, fontManager->channelDate);
+        lastDate = curDate;
+    }
+}
+
+void cNopacityDisplayChannelView::DrawProgressBar(int Current, int Total) {
+    int barHeight = pixmapProgressBar->ViewPort().Height()-8;
+    if (barHeight%2 != 0)
+        barHeight++;
+    if (barHeight < 3)
+        return;
+    int barFullWidth = pixmapProgressBar->ViewPort().Width() - 20 - barHeight;
+    if (Current > Total)
+        Current = Total;
+    if ((Current > 0) || (Total > 0)) {
+        double percentSeen = ((double)Current) / (double)Total;
+        pixmapProgressBar->DrawEllipse(cRect(10,
+                                             4,
+                                             barHeight,
+                                             barHeight),
+                                       Theme.Color(clrChannelProgressBarBlend));
+        if (Current > 0) {
+            tColor colAct = DrawProgressbarProgress(10 + barHeight/2, 4, barFullWidth * percentSeen, barHeight-1);
+            pixmapProgressBar->DrawEllipse(cRect(10 + barFullWidth * percentSeen,
+                                                 4,
+                                                 barHeight,
+                                                 barHeight),
+                                           colAct);
+        }
+    }
+}
+
+void cNopacityDisplayChannelView::DrawProgressbarBackground(void) {
+    int barHeight = pixmapProgressBar->ViewPort().Height()-8;
+    if (barHeight%2 != 0)
+        barHeight++;
+    if (barHeight < 3)
+        return;
+    int barFullWidth = pixmapProgressBar->ViewPort().Width() - 20 - barHeight;
+    pixmapProgressBar->DrawEllipse(cRect(9,
+                                         3,
+                                         barHeight+2,
+                                         barHeight+2),
+                                   Theme.Color(clrChannelProgressBarBack));
+    pixmapProgressBar->DrawEllipse(cRect(9 + barFullWidth,
+                                         3, barHeight+2,
+                                         barHeight+2),
+                                   Theme.Color(clrChannelProgressBarBack));
+    pixmapProgressBar->DrawRectangle(cRect(9 + barHeight/2,
+                                           3,
+                                           barFullWidth,
+                                           barHeight+1),
+                                     Theme.Color(clrChannelProgressBarBack));
+}
+
+tColor cNopacityDisplayChannelView::DrawProgressbarProgress(int left, int top, int width, int height) {
+    tColor clr1 = Theme.Color(clrChannelProgressBar);
+    tColor clr2 = Theme.Color(clrChannelProgressBarBlend);
+    tColor clr = 0x00000000;
+    width = (width==0)?1:width;
+    int step = width / 256;
+    int alpha = 0x0;
+    int alphaStep;
+    int maximum = 0;
+    if (step == 0) {    //width < 256
+        step = 1;
+        alphaStep = 256 / width;
+        maximum = width;
+    } else {            //width > 256
+        alphaStep = 0x1;
+        maximum = 256;
+    }
+    int x = 0;
+    for (int i = 0; i < maximum; i++) {
+        x = left + i*step;
+        clr = AlphaBlend(clr1, clr2, alpha);
+        pixmapProgressBar->DrawRectangle(cRect(x,top,step,height), clr);
+        alpha += alphaStep;
+    }
+    if (step > 0) {
+        int rest = width - step*256;
+        pixmapProgressBar->DrawRectangle(cRect(left+step*256, top, rest, height), clr);
+    }
+    return clr;
+}
+
+void cNopacityDisplayChannelView::ClearProgressBar(void) {
+    pixmapProgressBar->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayChannelView::DrawEPGInfo(const cEvent *e, bool present, bool recording) {
+    int indent = 20;
+    cString startTime = e->GetTimeString();
+    cString strEPG = e->Title();
+    cString strEPGShort = e->ShortText();
+    cString strSeen("");
+    if (present) {
+        if (config.GetValue("progressCurrentSchedule") == 0) {
+            int seen = (int)(time(NULL) - e->StartTime())/60;
+            strSeen = cString::sprintf("%d/%dmin", seen, e->Duration()/60);
+        } else if (config.GetValue("progressCurrentSchedule") == 1) {
+            int remaining = (int)(e->EndTime() - time(NULL))/60;
+            strSeen = cString::sprintf("-%d/%dmin", remaining, e->Duration()/60);
+        }
+    } else {
+        strSeen = cString::sprintf("%dmin", e->Duration()/60);
+    }
+
+    int startTimeWidth = fontManager->channelEPG->Width(*startTime);
+    int epgWidth = fontManager->channelEPG->Width(*strEPG);
+    int epgWidthShort = fontManager->channelEPGSmall->Width(*strEPGShort);
+    int seenWidth = fontManager->channelEPG->Width(*strSeen);
+
+    int widthRecIcon = 0;
+    if (recording) {
+        widthRecIcon = fontManager->channelEPGSmall->Width(" REC ") + indent/2;
+    }
+    int spaceEPGText = geoManager->channelContentWidth - seenWidth
+                       - startTimeWidth - 3 * indent - widthRecIcon
+                       - fontManager->channelEPG->Width("...");
+    int spaceEPGTextSmall = spaceEPGText + widthRecIcon;
+    if (spaceEPGText < epgWidth) {
+        strEPG = CutText(*strEPG, spaceEPGText, fontManager->channelEPG).c_str();
+    }
+    if (spaceEPGTextSmall < epgWidthShort) {
+        strEPGShort = CutText(*strEPGShort, spaceEPGText, fontManager->channelEPGSmall).c_str();
+    }
+
+    int lineHeight = geoManager->channelEpgInfoLineHeight;
+    int yEPG = (present) ? 0 : 2 * lineHeight;
+    int yEPGSmall = (present) ? lineHeight : 3 * lineHeight;
+    int xEPG = 2 * indent + startTimeWidth;
+
+    tColor fontColor = (present) ? Theme.Color(clrChannelEPG)
+                                 : Theme.Color(clrChannelEPGNext);
+    tColor fontColorInfo = (present) ? Theme.Color(clrChannelEPGInfo)
+                                     : Theme.Color(clrChannelEPGInfoNext);
+
+    pixmapEPGInfo->DrawText(cPoint(indent, yEPG), *startTime, fontColor, clrTransparent, fontManager->channelEPG);
+
+    pixmapEPGInfo->DrawText(cPoint(xEPG + widthRecIcon, yEPG), *strEPG, fontColor, clrTransparent, fontManager->channelEPG);
+
+    pixmapEPGInfo->DrawText(cPoint(xEPG, yEPGSmall), *strEPGShort, fontColorInfo, clrTransparent, fontManager->channelEPGSmall);
+
+    int x = geoManager->channelContentWidth - 2 * indent - seenWidth;
+
+    pixmapEPGInfo->DrawText(cPoint(x, yEPG), *strSeen, fontColor, clrTransparent, fontManager->channelEPG);
+
+    //Recording Icon
+    if (recording) {
+        tColor clrRecIcon = (present)?Theme.Color(clrRecNow):Theme.Color(clrRecNext);
+        tColor clrRecIconText = (present)?Theme.Color(clrRecNowFont):Theme.Color(clrRecNextFont);
+        pixmapEPGInfo->DrawRectangle(cRect(xEPG, yEPG, widthRecIcon - indent/2, lineHeight), clrRecIcon);
+        int xRecText = xEPG + (widthRecIcon - indent/2 - fontManager->channelEPGSmall->Width("REC"))/2;
+        int yRecText = yEPG + (lineHeight - fontManager->channelEPGSmall->Height())/2;
+        pixmapEPGInfo->DrawText(cPoint(xRecText, yRecText), "REC", clrRecIconText, clrRecIcon, fontManager->channelEPGSmall);
+    }
+}
+
+void cNopacityDisplayChannelView::ClearEPGInfo(void) {
+    pixmapEPGInfo->Fill(clrTransparent);
+}
+
+void cNopacityDisplayChannelView::DrawStatusIcons(const cChannel *Channel) {
+    pixmapStatusIconsBackground->Fill(Theme.Color(clrStatusIconsBack));
+    DrawRoundedCorners(pixmapStatusIconsBackground,
+                       5,
+                       0,
+                       0,
+                       pixmapStatusIconsBackground->ViewPort().Width(),
+                       pixmapStatusIconsBackground->ViewPort().Height()
+                      );
+
+    isRadioChannel = ((!Channel->Vpid())&&(Channel->Apid(0)))?true:false;
+    int iconX = 0;
+
+    if (Channel->Vpid() && Channel->Tpid()) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/txton", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(0,statusIconBorder), *imgIcon);
+    } else {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/txtoff", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(0,statusIconBorder), *imgIcon);
+    }
+
+    iconX += statusIconBorder + statusIconSize;
+
+    if (Channel->Apid(0)) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/stereoon", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    } else {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/stereooff", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    }
+
+    iconX += statusIconBorder + statusIconSize;
+
+    if (Channel->Dpid(0)) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/dolbyon", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    } else {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/dolbyoff", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    }
+
+    iconX += statusIconBorder + statusIconSize;
+
+    if (Channel->Ca()) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/crypted", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    } else {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/fta", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    }
+
+    iconX += statusIconBorder + statusIconSize;
+
+    if (cRecordControls::Active()) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recon", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    } else {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recoff", statusIconSize, statusIconSize);
+        if (imgIcon)
+            pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgIcon);
+    }
+
+    iconX += statusIconBorder + statusIconSize;
+
+
+}
+
+void cNopacityDisplayChannelView::DrawScreenResolution(void) {
+    cString resolutionIcon("");
+    if (isRadioChannel) {
+        resolutionIcon = "skinIcons/radio";
+    } else {
+        resolutionIcon = GetScreenResolutionIcon();
+    }
+    int iconX = 5 * (statusIconBorder + statusIconSize);
+    cImage *imgRes = imgCache->GetSkinIcon(*resolutionIcon, 3*statusIconSize, statusIconSize);
+    if (imgRes)
+        pixmapStatusIcons->DrawImage(cPoint(iconX,statusIconBorder), *imgRes);
+
+}
+
+cString cNopacityDisplayChannelView::GetScreenResolutionIcon(void) {
+    int screenWidth = 0;
+    int screenHeight = 0;
+    double aspect = 0;
+    cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect);
+    cString iconName("");
+    switch (screenWidth) {
+        case 1920:
+        case 1440:
+            iconName = "skinIcons/hd1080i";
+            break;
+        case 1280:
+            if (screenHeight == 720)
+                iconName = "skinIcons/hd720p";
+            else
+                iconName = "skinIcons/hd1080i";
+            break;
+        case 720:
+            iconName = "skinIcons/sd576i";
+            break;
+        default:
+            iconName = "skinIcons/sd576i";
+            break;
+    }
+    return iconName;
+}
+
+void cNopacityDisplayChannelView::ClearStatusIcons(void) {
+    pixmapStatusIcons->Fill(clrTransparent);
+    pixmapStatusIconsBackground->Fill(clrTransparent);
+}
+
+void cNopacityDisplayChannelView::DrawPoster(const cEvent *event, bool initial) {
+    if (pixmapPoster) {
+        osd->DestroyPixmap(pixmapPoster);
+        pixmapPoster = NULL;
+    }
+
+    static cPlugin *pScraper = GetScraperPlugin();
+    if (pScraper) {
+        ScraperGetPosterBanner call;
+        call.event = event;
+        if (pScraper->Service("GetPosterBanner", &call)) {
+            int mediaWidth = 0;
+            int mediaHeight = 0;
+            std::string mediaPath = "";
+            if ((call.type == tSeries) && call.banner.path.size() > 0) {
+                mediaWidth = call.banner.width;
+                mediaHeight = call.banner.height;
+                mediaPath = call.banner.path;
+            } else if (call.type == tMovie && call.poster.path.size() > 0 && call.poster.height > 0) {
+                double ratio = (double)(cOsd::OsdHeight()/3) / (double)call.poster.height;
+                mediaWidth = ratio * call.poster.width;
+                mediaHeight = ratio * call.poster.height;
+                mediaPath = call.poster.path;
+            } else
+                return;
+            int border = config.GetValue("channelPosterBorder");
+            pixmapPoster = osd->CreatePixmap(1, cRect(config.GetValue("channelBorderVertical"),
+                                                      config.GetValue("channelBorderBottom"),
+                                                      mediaWidth + 2 * border,
+                                                      mediaHeight + 2 * border));
+            if (initial && config.GetValue("channelFadeTime"))
+                pixmapPoster->SetAlpha(0);
+            cImageLoader imgLoader;
+            if (imgLoader.LoadPoster(mediaPath.c_str(), mediaWidth, mediaHeight)) {
+                pixmapPoster->Fill(Theme.Color(clrChannelBackground));
+                pixmapPoster->DrawImage(cPoint(border, border), imgLoader.GetImage());
+                DrawRoundedCorners(pixmapPoster, border, 0, 0, pixmapPoster->ViewPort().Width(), pixmapPoster->ViewPort().Height());
+            } else {
+                pixmapPoster->Fill(clrTransparent);
+            }
+        }
+        return;
+    }
+}
+
+void cNopacityDisplayChannelView::DrawSignalMeter(void) {
+    signalWidth = geoManager->channelWidth * 0.15;
+    signalHeight = signalWidth *15 / 200;
+    cFont *fontInfoline = cFont::CreateFont(config.fontName, signalHeight - 2);
+    cString signalStrength = "STR";
+    cString signalQuality = "SNR";
+    cImage *imgSignal = imgCache->GetSkinIcon("skinIcons/signal", signalWidth, signalHeight, true);
+    if (imgSignal) {
+        signalWidth = imgSignal->Width();
+        signalHeight = imgSignal->Height();
+        int signalMeterY = geoManager->channelFooterY +
+                           (geoManager->channelFooterHeight - 2*signalHeight - 5)/2;
+        int labelWidth = max(fontInfoline->Width(*signalStrength),
+                             fontInfoline->Width(*signalQuality)) + 2;
+        signalX = geoManager->channelFooterHeight / 2 + labelWidth;
+        pixmapSignalStrength = osd->CreatePixmap(3,
+                                                 cRect(geoManager->channelContentX + 10 + signalX,
+                                                       signalMeterY + 2,
+                                                       signalWidth + 2,
+                                                       signalHeight + 2));
+        pixmapSignalQuality  = osd->CreatePixmap(3,
+                                                 cRect(geoManager->channelContentX + 10 + signalX,
+                                                       signalMeterY + signalHeight + 5,
+                                                       signalWidth + 2,
+                                                       signalHeight + 2));
+        pixmapSignalMeter    = osd->CreatePixmap(4,
+                                                 cRect(geoManager->channelContentX + 10 + signalX + 1,
+                                                       signalMeterY + 3, signalWidth,
+                                                       2*signalHeight + 3));
+        pixmapSignalLabel    = osd->CreatePixmap(3,
+                                                 cRect(geoManager->channelContentX + 10
+                                                       + geoManager->channelFooterHeight / 2,
+                                                       signalMeterY + 2,
+                                                       labelWidth,
+                                                       2*signalHeight + 3));
+        pixmapSignalStrength->Fill(Theme.Color(clrProgressBarBack));
+        pixmapSignalQuality->Fill(Theme.Color(clrProgressBarBack));
+        pixmapSignalMeter->Fill(clrTransparent);
+        pixmapSignalLabel->Fill(clrTransparent);
+        if (config.GetValue("channelFadeTime")) {
+            pixmapSignalStrength->SetAlpha(0);
+            pixmapSignalQuality->SetAlpha(0);
+            pixmapSignalMeter->SetAlpha(0);
+            pixmapSignalLabel->SetAlpha(0);
+        }
+        pixmapSignalStrength->DrawImage(cPoint(1,1), *imgSignal);
+        pixmapSignalQuality->DrawImage(cPoint(1,1), *imgSignal);
+        pixmapSignalLabel->DrawText(cPoint(0, 2), *signalStrength, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
+        pixmapSignalLabel->DrawText(cPoint(0, signalHeight + 4), *signalQuality, Theme.Color(clrChannelEPGInfo), clrTransparent, fontInfoline);
+    }
+    delete fontInfoline;
+}
+
+void cNopacityDisplayChannelView::DrawSignal(void) {
+    time_t Now = time(NULL);
+    if (Now != lastSignalDisplay) {
+        int SignalStrength = cDevice::ActualDevice()->SignalStrength();
+        int SignalQuality = cDevice::ActualDevice()->SignalQuality();
+        if (SignalStrength < 0) SignalStrength = 0;
+        if (SignalQuality < 0) SignalQuality = 0;
+        if ((SignalStrength == 0)&&(SignalQuality==0))
+            return;
+        if ((lastSignalStrength != SignalStrength) || (lastSignalQuality != SignalQuality)) {
+            pixmapSignalMeter->Fill(clrTransparent);
+            pixmapSignalMeter->DrawRectangle(cRect(double(SignalStrength) /100 * signalWidth, 0, signalWidth - (double)SignalStrength /100 * signalWidth + 1, signalHeight), Theme.Color(clrChannelBackground));
+            pixmapSignalMeter->DrawRectangle(cRect(double(SignalQuality) /100 * signalWidth, signalHeight + 3, signalWidth - (double)SignalQuality / 100 * signalWidth + 1, signalHeight + 1), Theme.Color(clrChannelBackground));
+        }
+        lastSignalStrength = SignalStrength;
+        lastSignalQuality = SignalQuality;
+        lastSignalDisplay = Now;
+    }
+}
+
+
+void cNopacityDisplayChannelView::ShowSignalMeter(void) {
+    if(pixmapSignalStrength)
+        pixmapSignalStrength->SetLayer(3);
+    if(pixmapSignalQuality)
+        pixmapSignalQuality->SetLayer(3);
+    if(pixmapSignalMeter)
+        pixmapSignalMeter->SetLayer(4);
+    if(pixmapSignalLabel)
+        pixmapSignalLabel->SetLayer(3);
+}
+
+void cNopacityDisplayChannelView::HideSignalMeter(void) {
+    if(pixmapSignalStrength)
+        pixmapSignalStrength->SetLayer(-1);
+    if(pixmapSignalQuality)
+        pixmapSignalQuality->SetLayer(-1);
+    if(pixmapSignalMeter)
+        pixmapSignalMeter->SetLayer(-1);
+    if(pixmapSignalLabel)
+        pixmapSignalLabel->SetLayer(-1);
+}
+
+void cNopacityDisplayChannelView::DrawChannelGroups(const cChannel *Channel, cString ChannelName) {
+    int xSep, ySep;
+    int prevNextIconSize = 64;
+
+    cImageLoader imgLoader;
+    if (config.GetValue("logoPosition") != lpNone) {
+        cString separator = cString::sprintf("separatorlogos/%s", *ChannelName);
+        if (imgLoader.LoadLogo(*separator, geoManager->channelLogoWidth, geoManager->channelLogoHeight)) {
+            pixmapLogo->DrawImage(cPoint(0, 0), imgLoader.GetImage());
+        } else {
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/Channelseparator", geoManager->channelLogoWidth, geoManager->channelLogoHeight);
+            if (imgIcon)
+                pixmapLogo->DrawImage(cPoint(0, 0), *imgIcon);
+        }
+    }
+
+    ySep = (geoManager->channelContentHeight-fontManager->channelChannelGroup->Height())/2 - fontManager->channelChannelGroup->Height()/2;
+    int widthSep = fontManager->channelChannelGroup->Width(*ChannelName);
+
+    if (!config.GetValue("displayPrevNextChannelGroup")) {
+        xSep = (geoManager->channelContentWidth - widthSep)/2;
+        pixmapEPGInfo->DrawText(cPoint(xSep, ySep), *ChannelName, Theme.Color(clrChannelHead), clrTransparent, fontManager->channelChannelGroup);
+        return;
+    }
+
+    int spaceSep = 4 * geoManager->channelContentWidth / 10;
+    int spaceNextPrev = (geoManager->channelContentWidth - spaceSep - 2*prevNextIconSize - 10) / 2;
+
+    int xPrev = 0;
+    int xPrevIcon = spaceNextPrev;
+    xSep = xPrevIcon + prevNextIconSize;
+    int xNextIcon = xSep + spaceSep;
+    int xNext = xNextIcon + prevNextIconSize + 10;
+
+    std::string strSep = *ChannelName;
+    if (widthSep > spaceSep)
+        strSep = CutText(strSep, spaceSep, fontManager->channelChannelGroup);
+    widthSep = fontManager->channelChannelGroup->Width(strSep.c_str());
+    pixmapEPGInfo->DrawText(cPoint(xSep + (spaceSep - widthSep)/2, ySep), strSep.c_str(), Theme.Color(clrChannelHead), clrTransparent, fontManager->channelChannelGroup);
+
+    std::string prevChannelSep = GetChannelSep(Channel, true);
+    std::string nextChannelSep = GetChannelSep(Channel, false);
+    bool prevAvailable = (prevChannelSep.size() > 0)?true:false;
+    bool nextAvailable = (nextChannelSep.size() > 0)?true:false;
+
+    int ySepNextPrevIcon = (geoManager->channelContentHeight - prevNextIconSize)/2 - fontManager->channelChannelGroup->Height()/2;
+
+    int ySepNextPrev = ySep + (fontManager->channelChannelGroup->Height() - fontManager->channelChannelGroupSmall->Height())/2;
+    if (prevAvailable) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/arrowLeftChannelSep", prevNextIconSize, prevNextIconSize);
+        if (imgIcon)
+            pixmapEPGInfo->DrawImage(cPoint(xPrevIcon, ySepNextPrevIcon), *imgIcon);
+        if (fontManager->channelChannelGroupSmall->Width(prevChannelSep.c_str()) > spaceNextPrev)
+            prevChannelSep = CutText(prevChannelSep, spaceNextPrev, fontManager->channelChannelGroupSmall);
+        pixmapEPGInfo->DrawText(cPoint(xPrev, ySepNextPrev), prevChannelSep.c_str(), Theme.Color(clrChannelEPGInfoNext), clrTransparent, fontManager->channelChannelGroupSmall);
+    }
+    if (nextAvailable) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/arrowRightChannelSep", prevNextIconSize, prevNextIconSize);
+        if (imgIcon)
+            pixmapEPGInfo->DrawImage(cPoint(xNextIcon, ySepNextPrevIcon), *imgIcon);
+        if (fontManager->channelChannelGroupSmall->Width(nextChannelSep.c_str()) > (spaceNextPrev-10))
+            nextChannelSep = CutText(nextChannelSep, spaceNextPrev-10, fontManager->channelChannelGroupSmall);
+        pixmapEPGInfo->DrawText(cPoint(xNext, ySepNextPrev), nextChannelSep.c_str(), Theme.Color(clrChannelEPGInfoNext), clrTransparent, fontManager->channelChannelGroupSmall);
+    }
+}
+
+std::string cNopacityDisplayChannelView::GetChannelSep(const cChannel *channel, bool prev) {
+    std::string sepName = "";
+    const cChannel *sep = prev ? Channels.Prev(channel) :
+                                 Channels.Next(channel);
+    for (; sep; (prev)?(sep = Channels.Prev(sep)):(sep = Channels.Next(sep))) {
+        if (sep->GroupSep()) {
+            sepName = sep->Name();
+            break;
+        }
+    }
+    return sepName;
+}
+
+void cNopacityDisplayChannelView::DrawSourceInfo(void) {
+    const cChannel *channel = cDevice::ActualDevice()->GetCurrentlyTunedTransponder();
+    const cSource *source = (channel) ? Sources.Get(channel->Source()) : NULL;
+    cString channelInfo = "";
+    if (source) {
+        channelInfo = cString::sprintf("%s #%d", source->Description(), cDevice::ActualDevice()->DeviceNumber());
+    }
+    if (cRecordControls::Active()) {
+        cSortedTimers SortedTimers;
+        bool first = true;
+        int truncPos = 0;
+        for (int i = 0; i < SortedTimers.Size(); i++)
+            if (const cTimer *Timer = SortedTimers[i])
+                if (Timer->Recording()) {
+                    if (cRecordControl *RecordControl = cRecordControls::GetRecordControl(Timer))
+                        if (const cDevice *Device = RecordControl->Device()) {
+                            cString name(Timer->File());
+                            if (first) {
+                                truncPos = strlen(*channelInfo) + 30;
+                            } else {
+                                name.Truncate(15);
+                                if (truncPos) {
+                                    channelInfo.Truncate(truncPos);
+                                    truncPos = 0;
+                                    ClearSourceInfo();
+                                }
+                            }
+                            channelInfo = cString::sprintf("%s%s #%i: %s", *channelInfo, (first)?" - Rec:":",", Device->DeviceNumber(), *name);
+                            first = false;
+                        }
+                } else if ((Timer->Flags() & tfActive) && !Timer->Pending())
+                break;
+    }
+    int textY = (geoManager->channelFooterHeight - fontManager->channelSourceInfo->Height()) / 2;
+    if (fontManager->channelSourceInfo->Width(*channelInfo) > pixmapSourceInfo->ViewPort().Width())
+        channelInfo = CutText(*channelInfo, pixmapSourceInfo->ViewPort().Width(), fontManager->channelSourceInfo).c_str();
+    pixmapSourceInfo->DrawText(cPoint(0, textY), channelInfo, Theme.Color(clrChannelHead), clrTransparent, fontManager->channelSourceInfo);
+}
+
+void cNopacityDisplayChannelView::ClearSourceInfo(void) {
+    pixmapSourceInfo->Fill(clrTransparent);
+}
+
+void cNopacityDisplayChannelView::DisplayMessage(const char *Text) {
+    if (!Text)
+        return;
+    int textWidth = fontManager->channelEPG->Width(Text);
+    int x = (geoManager->channelContentWidth - textWidth)/2;
+    int y = (geoManager->channelEpgInfoHeight - fontManager->channelEPG->Height())/2;
+    pixmapEPGInfo->DrawText(cPoint(x, y), Text, Theme.Color(clrChannelEPG), clrTransparent, fontManager->channelEPG);
+}
diff --git a/displaychannelview.h b/displaychannelview.h
new file mode 100644
index 0000000..7a3fd91
--- /dev/null
+++ b/displaychannelview.h
@@ -0,0 +1,69 @@
+#ifndef __NOPACITY_DISPLAYCHANNELVIEW_H
+#define __NOPACITY_DISPLAYCHANNELVIEW_H
+
+#include "imagecache.h"
+#include <vdr/osd.h>
+
+class cNopacityDisplayChannelView {
+private:
+    cImageCache *imgCache;
+    cOsd *osd;
+    cString lastDate;
+    int statusIconBorder;
+    int statusIconSize;
+    bool isRadioChannel;
+    int signalWidth, signalHeight, signalX;
+    int lastSignalDisplay;
+    int lastSignalStrength;
+    int lastSignalQuality;
+    cPixmap *pixmapBackground;
+    cPixmap *pixmapTop;
+    cPixmap *pixmapLogo;
+    cPixmap *pixmapLogoBackground;
+    cPixmap *pixmapChannelName;
+    cPixmap *pixmapDate;
+    cPixmap *pixmapProgressBar;
+    cPixmap *pixmapEPGInfo;
+    cPixmap *pixmapStatusIcons;
+    cPixmap *pixmapStatusIconsBackground;
+    cPixmap *pixmapSignalStrength;
+    cPixmap *pixmapSignalQuality;
+    cPixmap *pixmapSignalMeter;
+    cPixmap *pixmapSignalLabel;
+    cPixmap *pixmapSourceInfo;
+    cPixmap *pixmapPoster;
+    tColor DrawProgressbarProgress(int left, int top, int width, int height);
+    cString GetScreenResolutionIcon(void);
+    std::string GetChannelSep(const cChannel *channel, bool prev);
+public:
+    cNopacityDisplayChannelView(cImageCache *imgCache);
+    virtual ~cNopacityDisplayChannelView();
+    bool createOsd(void);
+    void CreatePixmaps(void);
+    void SetAlpha(int alpha);
+    void DrawBackground(void);
+    void DrawChannelLogo(const cChannel *Channel);
+    void ClearChannelLogo(void);
+    void DrawChannelName(cString number, cString name);
+    void ClearChannelName(void);
+    void DrawDate(void);
+    void DrawProgressbarBackground(void);
+    void DrawProgressBar(int Current, int Total);
+    void ClearProgressBar(void);
+    void DrawEPGInfo(const cEvent *e, bool present, bool recording);
+    void ClearEPGInfo(void);
+    void DrawStatusIcons(const cChannel *Channel);
+    void DrawScreenResolution(void);
+    void ClearStatusIcons(void);
+    void DrawPoster(const cEvent *event, bool initial);
+    void DrawSignalMeter(void);
+    void DrawSignal(void);
+    void ShowSignalMeter(void);
+    void HideSignalMeter(void);
+    void DrawChannelGroups(const cChannel *Channel, cString ChannelName);
+    void DrawSourceInfo(void);
+    void ClearSourceInfo(void);
+    void DisplayMessage(const char *Text);
+    void Flush(void) { osd->Flush(); };
+};
+#endif //__NOPACITY_DISPLAYCHANNELVIEW_H
diff --git a/displaymenu.c b/displaymenu.c
index 0bedb00..31737e5 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -5,14 +5,17 @@ namespace PluginRemoteTimers {
     }
 }
 
+#include "displaymenuview.h"
 #include "displaymenu.h"
+#include "config.h"
 #include <string>
+#include "services/epgsearch.h"
 
-cNopacityDisplayMenu::cNopacityDisplayMenu(void) {
-    config.setDynamicValues();
+cNopacityDisplayMenu::cNopacityDisplayMenu(cImageCache *imgCache) {
+    this->imgCache = imgCache;
     menuCategoryLast = mcUndefined;
-    FrameTime = config.menuFrameTime; 
-    FadeTime = config.menuFadeTime;
+    FadeTime = config.GetValue("menuFadeTime");
+    FrameTime = FadeTime / 10;
     initial = true;
     initMenu = true;
     diskUsageDrawn = false;
@@ -23,15 +26,14 @@ cNopacityDisplayMenu::cNopacityDisplayMenu(void) {
     currentNumItems = 0;
     detailView = NULL;
     SetButtonPositions();
-    menuView = new cNopacityDisplayMenuView();
+    menuView = new cNopacityDisplayMenuView(imgCache);
     osd = menuView->createOsd();
-    menuView->SetGeometry();
+    menuView->SetDescriptionTextWindowSize();
     menuView->CreatePixmaps();
-    menuView->CreateFonts();
     menuView->SetAvrgFontWidth();
-    menuView->CreateBackgroundImages(handleBackgrounds, handleButtons);
     menuView->DrawHeaderLogo();
     menuView->DrawBorderDecoration();
+    currentFeed = 0;
 }
 
 cNopacityDisplayMenu::~cNopacityDisplayMenu() {
@@ -44,17 +46,12 @@ cNopacityDisplayMenu::~cNopacityDisplayMenu() {
         delete detailView;
     }
     timers.Clear();
-    for (int i=0; i<14; i++)
-        cOsdProvider::DropImage(handleBackgrounds[i]);
-    for (int i=0; i<4; i++)
-        cOsdProvider::DropImage(handleButtons[i]);
-
     delete osd;
     cDevice::PrimaryDevice()->ScaleVideo(cRect::Null);
 }
 
 void cNopacityDisplayMenu::DrawDisk(void) {
-    if (!config.narrowMainMenu)
+    if (!config.GetValue("narrowMainMenu"))
         return;
     if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!diskUsageDrawn)) {
         if (cVideoDiskUsage::HasChanged(lastDiskUsageState)) {
@@ -90,7 +87,7 @@ int cNopacityDisplayMenu::CheckTimerConflict(bool timersChanged) {
 }
 
 void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
-    if (!config.narrowMainMenu)
+    if (!config.GetValue("narrowMainMenu"))
         return;
     int maxTimersHeight = menuView->GetTimersMaxHeight();
     if (initial || ((menuCategoryLast!=mcMain)&&(MenuCategory()==mcMain)&&!timersDrawn)) {
@@ -103,7 +100,7 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
                 drawRemoteTimers = pRemoteTimers->Service("RemoteTimers::RefreshTimers-v1.0", &errorMsg);
             }
             timers.Clear();
-            cSortedTimers SortedTimers; 
+            cSortedTimers SortedTimers;
             //if remotetimers plugin is available, take timers also from him
             if (drawRemoteTimers) {
                 cTimer* remoteTimer = NULL;
@@ -121,7 +118,7 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
                 if (initial)
                     if (FadeTime)
                         t->SetAlpha(0);
-                currentHeight += t->GetHeight() + menuView->spaceMenu;
+                currentHeight += t->GetHeight() + geoManager->menuSpace;
                 timers.Add(t);
             }
             int numTimersDisplayed = 0;
@@ -132,11 +129,11 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
                         if (initial)
                             if (FadeTime)
                                 t->SetAlpha(0);
-                        currentHeight += t->GetHeight() + menuView->spaceMenu;
+                        currentHeight += t->GetHeight() + geoManager->menuSpace;
                         if (currentHeight < maxTimersHeight) {
                             timers.Add(t);
                         numTimersDisplayed++;
-                        if (numTimersDisplayed == config.numberTimers)
+                        if (numTimersDisplayed == config.GetValue("numberTimers"))
                             break;
                         } else {
                             delete t;
@@ -148,65 +145,61 @@ void cNopacityDisplayMenu::DrawTimers(bool timersChanged, int numConflicts) {
         } else {
             for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
                 t->Show();
-            } 
+            }
         }
         timersDrawn = true;
     }
 }
 
 void cNopacityDisplayMenu::Scroll(bool Up, bool Page) {
-    bool scrolled;
-    scrolled = detailView->Scroll(Up, Page);
-    if (scrolled) {
-        double height = detailView->ScrollbarSize();
-        double offset = detailView->Offset();
-        menuView->DrawScrollbar(height, offset);
-    }
+    if (!detailView)
+        return;
+    detailView->KeyInput(Up, Page);
 }
 
 int cNopacityDisplayMenu::MaxItems(void) {
     int maxItems = 0;
     switch (MenuCategory()) {
         case mcMain:
-            if (config.narrowMainMenu)
-                maxItems = menuView->GetMaxItems(MenuCategory());
+            if (config.GetValue("narrowMainMenu"))
+                maxItems = config.GetValue("numMainMenuItems");
             else
-                maxItems = config.numDefaultMenuItems;
+                maxItems = config.GetValue("numDefaultMenuItems");
             break;
         case mcSetup:
-            if (config.narrowSetupMenu)
-                maxItems = menuView->GetMaxItems(MenuCategory());
+            if (config.GetValue("narrowSetupMenu"))
+                maxItems = config.GetValue("numMainMenuItems");
             else
-                maxItems = config.numDefaultMenuItems;
+                maxItems = config.GetValue("numDefaultMenuItems");
             break;
         case mcSchedule:
         case mcScheduleNow:
         case mcScheduleNext:
-            if (config.narrowScheduleMenu)
-                maxItems = menuView->GetMaxItems(MenuCategory());
+            if (config.GetValue("narrowScheduleMenu"))
+                maxItems = config.GetValue("numSchedulesMenuItems");
             else
-                maxItems = config.numDefaultMenuItems;
+                maxItems = config.GetValue("numDefaultMenuItems");
             break;
         case mcChannel:
-            if (config.narrowChannelMenu)
-                maxItems = menuView->GetMaxItems(MenuCategory());
+            if (config.GetValue("narrowChannelMenu"))
+                maxItems = config.GetValue("numSchedulesMenuItems");
             else
-                maxItems = config.numDefaultMenuItems;
+                maxItems = config.GetValue("numDefaultMenuItems");
             break;
         case mcTimer:
-            if (config.narrowTimerMenu)
-                maxItems = menuView->GetMaxItems(MenuCategory());
+            if (config.GetValue("narrowTimerMenu"))
+                maxItems = config.GetValue("numSchedulesMenuItems");
             else
-                maxItems = config.numDefaultMenuItems;
+                maxItems = config.GetValue("numDefaultMenuItems");
             break;
         case mcRecording:
-            if (config.narrowRecordingMenu)
-                maxItems = menuView->GetMaxItems(MenuCategory());
+            if (config.GetValue("narrowRecordingMenu"))
+                maxItems = config.GetValue("numRecordingsMenuItems");
             else
-                maxItems = config.numDefaultMenuItems;
+                maxItems = config.GetValue("numDefaultMenuItems");
             break;
         default:
-            maxItems = config.numDefaultMenuItems;      
+            maxItems = config.GetValue("numDefaultMenuItems");
     }
     currentNumItems = maxItems;
     return maxItems;
@@ -257,14 +250,14 @@ void cNopacityDisplayMenu::SetMenuCategory(eMenuCategory MenuCategory) {
     menuCategoryLast = this->MenuCategory();
     cSkinDisplayMenu::SetMenuCategory(MenuCategory);
     if ((menuCategoryLast == mcMain) && (MenuCategory != mcMain)) {
-        if (config.showDiscUsage) {
+        if (config.GetValue("showDiscUsage")) {
             menuView->ShowDiskUsage(false);
             diskUsageDrawn = false;
         }
-        if (config.showTimers) {
+        if (config.GetValue("showTimers")) {
             for (cNopacityTimer *t = timers.First(); t; t = timers.Next(t)) {
                 t->Hide();
-            } 
+            }
             timersDrawn = false;
         }
     }
@@ -283,7 +276,7 @@ void cNopacityDisplayMenu::SetTitle(const char *Title) {
         cString title = Title;
         switch (MenuCategory()) {
             case mcMain:
-                switch (config.mainMenuTitleStyle) {
+                switch (config.GetValue("mainMenuTitleStyle")) {
                     case 0:
                         title = cString::sprintf("%s %s", Title, VDRVERSION);
                         break;
@@ -342,27 +335,26 @@ void cNopacityDisplayMenu::SetButtonPositions(void) {
             continue;
         }
     }
-    
 }
 
 void cNopacityDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue) {
     if (Red) {
-        menuView->DrawButton(Red, handleButtons[0], Theme.Color(clrButtonRedBorder), positionButtons[0]);
+        menuView->DrawButton(Red, seButtonRed, Theme.Color(clrButtonRed), Theme.Color(clrButtonRedBorder), Theme.Color(clrButtonRedFont), positionButtons[0]);
     } else
         menuView->ClearButton(positionButtons[0]);
 
     if (Green) {
-        menuView->DrawButton(Green, handleButtons[1], Theme.Color(clrButtonGreenBorder), positionButtons[1]);
+        menuView->DrawButton(Green, seButtonGreen,Theme.Color(clrButtonGreen),  Theme.Color(clrButtonGreenBorder), Theme.Color(clrButtonGreenFont), positionButtons[1]);
     } else
         menuView->ClearButton(positionButtons[1]);
 
     if (Yellow) {
-        menuView->DrawButton(Yellow, handleButtons[2], Theme.Color(clrButtonYellowBorder), positionButtons[2]);
+        menuView->DrawButton(Yellow, seButtonYellow, Theme.Color(clrButtonYellow), Theme.Color(clrButtonYellowBorder), Theme.Color(clrButtonYellowFont), positionButtons[2]);
     } else
         menuView->ClearButton(positionButtons[2]);
 
     if (Blue) {
-        menuView->DrawButton(Blue, handleButtons[3], Theme.Color(clrButtonBlueBorder), positionButtons[3]);
+        menuView->DrawButton(Blue, seButtonBlue, Theme.Color(clrButtonBlue), Theme.Color(clrButtonBlueBorder), Theme.Color(clrButtonBlueFont), positionButtons[3]);
     } else
         menuView->ClearButton(positionButtons[3]);
 }
@@ -375,26 +367,30 @@ void cNopacityDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
     }
 }
 
-bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current, 
-                                        bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) { 
-    if (!config.narrowScheduleMenu)
+bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Current,
+                                        bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) {
+
+    if (!config.GetValue("narrowScheduleMenu"))
         return false;
     if ((initMenu)&&(Index > menuItemIndexLast)) {
-        cNopacityMenuItem *item = new cNopacityScheduleMenuItem(osd, Event, Channel, TimerMatch, Selectable, MenuCategory());
+        cNopacityMenuItem *item = new cNopacityScheduleMenuItem(osd, imgCache, Event, Channel, TimerMatch, Selectable, MenuCategory(), &videoWindowRect);
         cPoint itemSize;
         menuView->GetMenuItemSize(MenuCategory(), &itemSize);
-        item->SetFont(menuView->GetMenuItemFont(mcSchedule));
-        item->SetFontSmall(menuView->GetMenuItemFontSmall(mcSchedule));
-        item->SetFontEPGWindow(menuView->GetEPGWindowFont());
+        item->SetFont(fontManager->menuItemSchedule);
+        item->SetFontSmall(fontManager->menuItemScheduleSmall);
+        item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
+        item->SetFontEPGWindowLarge(fontManager->menuEPGInfoWindowLarge);
         int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
-        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
         item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcSchedule));
         item->SetCurrent(Current);
-        item->SetBackgrounds(handleBackgrounds);
         item->CreateText();
         int textWidth = item->CheckScrollable((Channel)?true:false);
-        item->CreatePixmap();
-        item->CreatePixmapIcon();
+        item->CreatePixmapBackground();
+        if (config.GetValue("displayType") == dtGraphical) {
+            item->CreatePixmapForeground();
+        }
+        item->CreatePixmapStatic();
         item->CreatePixmapTextScroller(textWidth);
         menuItems.Add(item);
         item->Render();
@@ -414,23 +410,28 @@ bool cNopacityDisplayMenu::SetItemEvent(const cEvent *Event, int Index, bool Cur
     return true;
 }
 
-bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { 
-    if (!config.narrowTimerMenu)
+bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) {
+    if (!config.GetValue("narrowTimerMenu"))
         return false;
     if ((initMenu)&&(Index > menuItemIndexLast)) {
-        cNopacityMenuItem *item = new cNopacityTimerMenuItem(osd, Timer, Selectable);
+        cNopacityMenuItem *item = new cNopacityTimerMenuItem(osd, imgCache, Timer, Selectable, &videoWindowRect);
         cPoint itemSize;
         menuView->GetMenuItemSize(MenuCategory(), &itemSize);
-        item->SetFont(menuView->GetMenuItemFont(mcTimer));
-        item->SetFontSmall(menuView->GetMenuItemFontSmall(mcTimer));
+        item->SetFont(fontManager->menuItemTimers);
+        item->SetFontSmall(fontManager->menuItemTimersSmall);
+        item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
+        item->SetFontEPGWindowLarge(fontManager->menuEPGInfoWindowLarge);
         int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
-        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
+        item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcTimer));
         item->SetCurrent(Current);
-        item->SetBackgrounds(handleBackgrounds);
         item->CreateText();
         int textWidth = item->CheckScrollable(true);
-        item->CreatePixmap();
-        item->CreatePixmapIcon();
+        item->CreatePixmapBackground();
+        if (config.GetValue("displayType") == dtGraphical) {
+            item->CreatePixmapForeground();
+        }
+        item->CreatePixmapStatic();
         item->CreatePixmapTextScroller(textWidth);
         menuItems.Add(item);
         item->Render();
@@ -450,24 +451,28 @@ bool cNopacityDisplayMenu::SetItemTimer(const cTimer *Timer, int Index, bool Cur
     return true;
 }
 
-bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { 
-    if (!config.narrowChannelMenu)
+bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) {
+    if (!config.GetValue("narrowChannelMenu"))
         return false;
     if ((initMenu)&&(Index > menuItemIndexLast)) {
-        cNopacityMenuItem *item = new cNopacityChannelMenuItem(osd, Channel, Selectable);
+        cNopacityMenuItem *item = new cNopacityChannelMenuItem(osd, imgCache, Channel, Selectable, &videoWindowRect);
         cPoint itemSize;
         menuView->GetMenuItemSize(MenuCategory(), &itemSize);
-        item->SetFont(menuView->GetMenuItemFont(mcChannel));
-        item->SetFontSmall(menuView->GetMenuItemFontSmall(mcChannel));
+        item->SetFont(fontManager->menuItemChannel);
+        item->SetFontSmall(fontManager->menuItemChannelSmall);
+        item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
         int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
-        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
+        item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcChannel));
         item->SetCurrent(Current);
-        item->SetBackgrounds(handleBackgrounds);
         item->CreateText();
         int textWidth = item->CheckScrollable(true);
-        item->CreatePixmap();
-        item->CreatePixmapIcon();
+        item->CreatePixmapBackground();
+        item->CreatePixmapStatic();
         item->CreatePixmapTextScroller(textWidth);
+        if (config.GetValue("displayType") == dtGraphical) {
+            item->CreatePixmapForeground();
+        }
         menuItems.Add(item);
         item->Render();
         menuItemIndexLast = Index;
@@ -486,30 +491,34 @@ bool cNopacityDisplayMenu::SetItemChannel(const cChannel *Channel, int Index, bo
     return true;
 }
 
-bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, 
+bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable,
                                             int Level, int Total, int New) {
-    if (!config.narrowRecordingMenu)
+    if (!config.GetValue("narrowRecordingMenu"))
         return false;
     if ((initMenu)&&(Index > menuItemIndexLast)) {
         bool isFolder = false;
         if (Total > 0)
             isFolder = true;
-        cNopacityMenuItem *item = new cNopacityRecordingMenuItem(osd, Recording, Selectable, isFolder, Level, Total, New);
+        cNopacityMenuItem *item = new cNopacityRecordingMenuItem(osd, imgCache, Recording, Selectable, isFolder, Level, Total, New, &videoWindowRect);
         cPoint itemSize;
         menuView->GetMenuItemSize(MenuCategory(), &itemSize);
-        item->SetFont(menuView->GetMenuItemFont(mcRecording));
-        item->SetFontSmall(menuView->GetMenuItemFontSmall(mcRecording));
-        item->SetFontEPGWindow(menuView->GetEPGWindowFont());
+        item->SetFont(fontManager->menuItemRecordings);
+        item->SetFontSmall(fontManager->menuItemRecordingsSmall);
+        item->SetFontEPGWindow(fontManager->menuEPGInfoWindow);
+        item->SetFontEPGWindowLarge(fontManager->menuEPGInfoWindowLarge);
         int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
-        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+        item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
         item->SetTextWindow(menuView->GetDescriptionTextWindowSize(mcRecording));
         item->SetCurrent(Current);
-        item->SetBackgrounds(handleBackgrounds);
         item->CreateText();
+        item->SetPoster();
         int textWidth = item->CheckScrollable(false);
-        item->CreatePixmap();
-        item->CreatePixmapIcon();
+        item->CreatePixmapBackground();
+        item->CreatePixmapStatic();
         item->CreatePixmapTextScroller(textWidth);
+        if (config.GetValue("displayType") == dtGraphical) {
+            item->CreatePixmapForeground();
+        }
         menuItems.Add(item);
         item->Render();
         menuItemIndexLast = Index;
@@ -531,6 +540,7 @@ bool cNopacityDisplayMenu::SetItemRecording(const cRecording *Recording, int Ind
 
 void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
     bool hasIcons = false;
+    bool MainOrSetup = false;
     cString *strItems = new cString[MaxTabs];
     int *tabItems = new int[2*MaxTabs];
     for (int i=0; i<MaxTabs; i++) {
@@ -543,29 +553,30 @@ void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bo
         if (Index > menuItemIndexLast) {
             cNopacityMenuItem *item;
             cPoint itemSize;
-            if (((MenuCategory() == mcMain)&&(config.narrowMainMenu)) || ((MenuCategory() == mcSetup)&&(config.narrowSetupMenu))){
+            if (((MenuCategory() == mcMain)&&(config.GetValue("narrowMainMenu"))) || ((MenuCategory() == mcSetup)&&(config.GetValue("narrowSetupMenu")))){
+                MainOrSetup = true;
                 bool isSetup = (MenuCategory() == mcSetup)?true:false;
-                item = new cNopacityMainMenuItem(osd, Text, Selectable, isSetup);
+                item = new cNopacityMainMenuItem(osd, imgCache, Text, Selectable, isSetup);
                 menuView->GetMenuItemSize(MenuCategory(), &itemSize);
-                item->SetFont(menuView->GetMenuItemFont(mcMain));
-                if (config.useMenuIcons)
+                item->SetFont(fontManager->menuItemLarge);
+                if (config.GetValue("useMenuIcons"))
                     hasIcons = true;
             } else {
-                item = new cNopacityDefaultMenuItem(osd, Text, Selectable);
+                item = new cNopacityDefaultMenuItem(osd, imgCache, Text, Selectable);
                 menuView->GetMenuItemSize(mcUnknown, &itemSize);
-                item->SetFont(menuView->GetMenuItemFont(mcUnknown));
+                item->SetFont(fontManager->menuItemDefault);
             }
             int spaceTop = menuView->GetMenuTop(currentNumItems, itemSize.Y());
-            item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), menuView->spaceMenu);
+            item->SetGeometry(Index, spaceTop, menuView->GetMenuItemLeft(itemSize.X()), itemSize.X(), itemSize.Y(), geoManager->menuSpace);
             item->SetCurrent(Current);
-            item->SetBackgrounds(handleBackgrounds);
             item->SetTabs(strItems, tabItems, MaxTabs);
             item->CreateText();
             int textWidth = item->CheckScrollable(hasIcons);
-            item->CreatePixmap();
-            if (hasIcons) {
-                item->CreatePixmapIcon();
+            item->CreatePixmapBackground();
+            if (config.GetValue("displayType") == dtGraphical && MainOrSetup) {
+                item->CreatePixmapForeground();
             }
+            item->CreatePixmapStatic();
             if (textWidth > 0)
                 item->CreatePixmapTextScroller(textWidth);
             menuItems.Add(item);
@@ -590,6 +601,8 @@ void cNopacityDisplayMenu::SetItem(const char *Text, int Index, bool Current, bo
         if (item) {
             item->SetTabs(strItems, tabItems, MaxTabs);
             item->SetCurrent(Current);
+            if ((MenuCategory() != mcMain) && (MenuCategory() != mcSetup))
+                item->CheckScrollable(false);
             item->Render();
         }
     }
@@ -625,8 +638,8 @@ void cNopacityDisplayMenu::SplitItem(const char *Text, cString *strItems, int *t
     }
 }
 
-int cNopacityDisplayMenu::Tab(int n) { 
-    return (n >= 0 && n < MaxTabs) ? menuView->mytabs[n] : 0; 
+int cNopacityDisplayMenu::Tab(int n) {
+    return (n >= 0 && n < MaxTabs) ? menuView->mytabs[n] : 0;
 }
 
 void cNopacityDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
@@ -648,7 +661,7 @@ void cNopacityDisplayMenu::SetScrollbar(int Total, int Offset) {
     }
     double height = (double)MaxItems()/(double)Total;
     double offset = (double)Offset/(double)Total;
-    
+
     menuView->DrawScrollbar(height, offset);
 }
 
@@ -656,18 +669,10 @@ void cNopacityDisplayMenu::SetEvent(const cEvent *Event) {
     if (!Event)
         return;
     menuView->AdjustContentBackground(this->MenuCategory(), menuCategoryLast, videoWindowRect);
-    detailView = new cNopacityMenuDetailEventView(osd, Event);
+    detailView = new cNopacityDetailView(dvEvent, osd, imgCache);
     menuView->SetDetailViewSize(dvEvent, detailView);
-    detailView->SetFonts();
-    detailView->SetContent();
-    detailView->SetContentHeight();
-    detailView->CreatePixmaps();
-    detailView->Render();
-    if (detailView->Scrollable()) {
-        double height = detailView->ScrollbarSize();
-        double offset = 0.0;
-        menuView->DrawScrollbar(height, offset);
-    }
+    detailView->SetEvent(Event);
+    detailView->Start();
 }
 
 void cNopacityDisplayMenu::SetRecording(const cRecording *Recording) {
@@ -678,52 +683,37 @@ void cNopacityDisplayMenu::SetRecording(const cRecording *Recording) {
         return;
     }
     menuView->AdjustContentBackground(this->MenuCategory(), menuCategoryLast, videoWindowRect);
-    detailView = new cNopacityMenuDetailRecordingView(osd, Recording);
+    detailView = new cNopacityDetailView(dvRecording, osd, imgCache);
     menuView->SetDetailViewSize(dvRecording, detailView);
-    detailView->SetFonts();
-    detailView->SetContent();
-    detailView->SetContentHeight();
-    detailView->CreatePixmaps();
-    detailView->Render();
-    if (detailView->Scrollable()) {
-        double height = detailView->ScrollbarSize();
-        double offset = 0.0;
-        menuView->DrawScrollbar(height, offset);
-    }
+    detailView->SetRecording(Recording);
+    detailView->Start();
 }
 
 void cNopacityDisplayMenu::SetText(const char *Text, bool FixedFont) {
     if (!Text)
         return;
     menuView->AdjustContentBackground(this->MenuCategory(), menuCategoryLast, videoWindowRect);
-    detailView = new cNopacityMenuDetailTextView(osd, Text);
+    detailView = new cNopacityDetailView(dvText, osd, imgCache);
     menuView->SetDetailViewSize(dvText, detailView);
-    detailView->SetFonts();
-    detailView->SetContent();
-    detailView->SetContentHeight();
-    detailView->CreatePixmaps();
-    detailView->Render();
-    if (detailView->Scrollable()) {
-        double height = detailView->ScrollbarSize();
-        double offset = 0.0;
-        menuView->DrawScrollbar(height, offset);
-    }
+    detailView->SetText(Text);
+    detailView->Start();
 }
 
 void cNopacityDisplayMenu::Flush(void) {
+    //int start = cTimeMs::Now();
     menuView->DrawDate(initial);
     if (MenuCategory() == mcMain) {
-        if (config.showDiscUsage)
+        if (config.GetValue("showDiscUsage"))
             DrawDisk();
         bool timersChanged = Timers.Modified(lastTimersState);
         int numConflicts = 0;
-        if (config.checkTimerConflict)
+        if (config.GetValue("checkTimerConflict"))
             numConflicts = CheckTimerConflict(timersChanged);
-        if (config.showTimers)
+        if (config.GetValue("showTimers"))
             DrawTimers(timersChanged, numConflicts);
     }
     if (initial) {
-        if (config.menuFadeTime)
+        if (FadeTime)
             Start();
     }
     initMenu = false;
@@ -747,9 +737,9 @@ void cNopacityDisplayMenu::Action(void) {
         }
         for (cNopacityTimer *t = timers.First(); Running() && t; t = timers.Next(t))
             t->SetAlpha(Alpha);
+        cPixmap::Unlock();
         if (Running())
             osd->Flush();
-        cPixmap::Unlock();
         int Delta = cTimeMs::Now() - Now;
         if (Running() && (Delta < FrameTime))
             cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaymenu.h b/displaymenu.h
index 3089f0d..761bb51 100644
--- a/displaymenu.h
+++ b/displaymenu.h
@@ -1,10 +1,15 @@
 #ifndef __NOPACITY_DISPLAYMENU_H
 #define __NOPACITY_DISPLAYMENU_H
 
+#include "nopacity.h"
+#include "menuitem.h"
+#include <vdr/thread.h>
+
 class cNopacityDisplayMenu : public cSkinDisplayMenu , cThread {
 private:
+    cImageCache *imgCache;
     cNopacityDisplayMenuView *menuView;
-    cNopacityMenuDetailView *detailView;
+    cNopacityDetailView *detailView;
     cOsd *osd;
     eMenuCategory menuCategoryLast;
     int FrameTime;
@@ -19,10 +24,10 @@ private:
     int currentNumItems;
     cList<cNopacityTimer> timers;
     cList<cNopacityMenuItem> menuItems;
-    int handleBackgrounds[14];
-    int handleButtons[4];
     int positionButtons[4];
     cRect videoWindowRect;
+    int currentFeed;
+    void SetNextFeed(void);
     void DrawDisk(void);
     int CheckTimerConflict(bool timersChanged);
     void DrawTimers(bool timersChanged, int numConflicts);
@@ -32,7 +37,7 @@ private:
 protected:
     int Tab(int n);
 public:
-    cNopacityDisplayMenu(void);
+    cNopacityDisplayMenu(cImageCache *imgCache);
     virtual ~cNopacityDisplayMenu();
     virtual void Scroll(bool Up, bool Page);
     virtual int MaxItems(void);
diff --git a/displaymenuview.c b/displaymenuview.c
index a454402..9a94f25 100644
--- a/displaymenuview.c
+++ b/displaymenuview.c
@@ -1,6 +1,7 @@
 #include "displaymenuview.h"
 
-cNopacityDisplayMenuView::cNopacityDisplayMenuView() {
+cNopacityDisplayMenuView::cNopacityDisplayMenuView(cImageCache *imgCache) {
+    this->imgCache = imgCache;
     diskUsageAlert = 95;
     pixmapStatus = NULL;
     pixmapHeaderIcon = NULL;
@@ -8,98 +9,88 @@ cNopacityDisplayMenuView::cNopacityDisplayMenuView() {
 
 cNopacityDisplayMenuView::~cNopacityDisplayMenuView(void) {
     osd->DestroyPixmap(pixmapHeader);
+    osd->DestroyPixmap(pixmapHeaderForeground);
     osd->DestroyPixmap(pixmapHeaderLogo);
     osd->DestroyPixmap(pixmapHeaderLabel);
     osd->DestroyPixmap(pixmapDate);
     osd->DestroyPixmap(pixmapFooter);
+    osd->DestroyPixmap(pixmapFooterBack);
+    osd->DestroyPixmap(pixmapButtonsText);
     osd->DestroyPixmap(pixmapContent);
-    osd->DestroyPixmap(pixmapScrollbar);    
+    osd->DestroyPixmap(pixmapScrollbar);
+    osd->DestroyPixmap(pixmapScrollbarBack);
     osd->DestroyPixmap(pixmapDiskUsage);
     osd->DestroyPixmap(pixmapDiskUsageIcon);
     osd->DestroyPixmap(pixmapDiskUsageLabel);
     if (pixmapHeaderIcon)
         osd->DestroyPixmap(pixmapHeaderIcon);
-    
-    delete fontHeader;
-    delete fontDate;
-    delete fontMenuitemLarge;
-    delete fontMenuitemSchedule;
-    delete fontMenuitemScheduleSmall;
-    delete fontMenuitemChannel;
-    delete fontMenuitemChannelSmall;
-    delete fontMenuitemRecordings;
-    delete fontMenuitemRecordingsSmall;
-    delete fontMenuitemTimers;
-    delete fontMenuitemTimersSmall;
-    delete fontMenuitemDefault;
-    delete fontDiskUsage;
-    delete fontDiskUsagePercent;
-    delete fontTimers;
-    delete fontTimersHead;
-    delete fontButtons;
-    delete fontMessage;
-    delete fontEPGInfoWindow;
 }
 
 cOsd *cNopacityDisplayMenuView::createOsd(void) {
-    osdLeft = cOsd::OsdLeft();
-    osdTop = cOsd::OsdTop();
-    osdWidth = cOsd::OsdWidth();
-    osdHeight = cOsd::OsdHeight();
-    osd = CreateOsd(osdLeft, osdTop, osdWidth, osdHeight);
+    osd = CreateOsd(geoManager->osdLeft, geoManager->osdTop, geoManager->osdWidth, geoManager->osdHeight);
     return osd;
 }
 
-void cNopacityDisplayMenuView::SetGeometry(void) {
-    spaceMenu = 5;
-    widthScrollbar = 20;
-    dateWidth = osdWidth * 0.3;
-    headerHeight = osdHeight * config.headerHeight / 100;
-    footerHeight = osdHeight * config.footerHeight / 100;
-    contentHeight = osdHeight - headerHeight - footerHeight;
-    contentWidthMain = osdWidth * config.menuWidthMain / 100;
-    contentWidthSchedules = osdWidth * config.menuWidthSchedules / 100;
-    contentWidthChannels = osdWidth * config.menuWidthChannels / 100;
-    contentWidthTimers = osdWidth * config.menuWidthTimers / 100;
-    contentWidthRecordings = osdWidth * config.menuWidthRecordings / 100;
-    contentWidthSetup = osdWidth * config.menuWidthSetup / 100;
-    contentWidthFull = osdWidth - widthScrollbar - spaceMenu;
-    contentWidthMinimum = Minimum(contentWidthMain, 
-                                  contentWidthSchedules, 
-                                  contentWidthChannels,
-                                  contentWidthTimers,
-                                  contentWidthRecordings,
-                                  contentWidthSetup);
-    menuItemWidthDefault = contentWidthFull - 4 * spaceMenu;
-    menuItemWidthMain = contentWidthMain - 4*spaceMenu;
-    menuItemWidthSchedule = contentWidthSchedules - 4*spaceMenu;
-    menuItemWidthChannel = contentWidthChannels - 4*spaceMenu;
-    menuItemWidthTimer = contentWidthTimers - 4*spaceMenu;
-    menuItemWidthRecording = contentWidthRecordings - 4*spaceMenu;
-    menuItemWidthSetup = contentWidthSetup - 4*spaceMenu;
-    menuItemHeightMain = config.iconHeight + 2;
-    menuItemHeightSchedule = config.menuItemLogoHeight + 2;
-    menuItemHeightDefault = contentHeight / config.numDefaultMenuItems - spaceMenu;
-    menuItemHeightRecordings = config.menuRecFolderSize + 2;
-    diskUsageWidth = diskUsageHeight = osdWidth  * config.menuSizeDiskUsage / 100;
-    timersWidth = osdWidth  * config.menuWidthRightItems / 100;
-    buttonsBorder = 10;
-    buttonWidth = (osdWidth / 4) - 2 * buttonsBorder;
-    buttonHeight = footerHeight - 3 * buttonsBorder;
-    messageWidth = 0.8 * osdWidth;
-    messageHeight = 0.1 * osdHeight;
-    SetDescriptionTextWindowSize();
-}
-
 void cNopacityDisplayMenuView::SetDescriptionTextWindowSize(void) {
-    int xSchedules =  (config.menuAdjustLeft) ? (2 * spaceMenu + contentWidthSchedules + widthScrollbar)  : (spaceMenu);
-    int xRecordings = (config.menuAdjustLeft) ? (2 * spaceMenu + contentWidthRecordings + widthScrollbar) : (spaceMenu);
-    int height = config.menuHeightInfoWindow * (contentHeight - 2*spaceMenu) / 100;
-    int y = headerHeight + (contentHeight - height - spaceMenu);
-    int widthSchedules = (config.menuAdjustLeft)  ? (osdWidth - xSchedules - spaceMenu)  : (osdWidth - contentWidthSchedules - widthScrollbar - 2 * spaceMenu);
-    int widthRecordings = (config.menuAdjustLeft) ? (osdWidth - xRecordings - spaceMenu) : (osdWidth - contentWidthRecordings - widthScrollbar - 2 * spaceMenu);
-    textWindowSizeSchedules = cRect(xSchedules,y,widthSchedules,height);
-    textWindowSizeRecordings = cRect(xRecordings,y,widthRecordings,height);
+    int xSchedules, xRecordings, xChannels, xTimers;
+    int widthSchedules, widthRecordings, widthChannels, widthTimers;
+    if (config.GetValue("menuAdjustLeft")) {
+        xSchedules =    2 * geoManager->menuSpace
+                        + geoManager->menuContentWidthSchedules
+                        + geoManager->menuWidthScrollbar;
+        xRecordings =   2 * geoManager->menuSpace
+                        + geoManager->menuContentWidthRecordings
+                        + geoManager->menuWidthScrollbar;
+        xChannels =     2 * geoManager->menuSpace
+                        + geoManager->menuContentWidthChannels
+                        + geoManager->menuWidthScrollbar;
+        xTimers =       2 * geoManager->menuSpace
+                        + geoManager->menuContentWidthTimers
+                        + geoManager->menuWidthScrollbar;
+        widthSchedules = geoManager->osdWidth - xSchedules - geoManager->menuSpace;
+        widthRecordings = geoManager->osdWidth - xRecordings - geoManager->menuSpace;
+        widthChannels = geoManager->osdWidth - xChannels - geoManager->menuSpace;
+        widthTimers = geoManager->osdWidth - xTimers - geoManager->menuSpace;
+    } else {
+        xSchedules = geoManager->menuSpace;
+        xRecordings = geoManager->menuSpace;
+        xChannels = geoManager->menuSpace;
+        xTimers = geoManager->menuSpace;
+        widthSchedules =  geoManager->osdWidth
+                          - geoManager->menuContentWidthSchedules
+                          - geoManager->menuWidthScrollbar
+                          - 2 * geoManager->menuSpace;
+        widthRecordings = geoManager->osdWidth
+                          - geoManager->menuContentWidthRecordings
+                          - geoManager->menuWidthScrollbar
+                          - 2 * geoManager->menuSpace;
+        widthChannels =   geoManager->osdWidth
+                          - geoManager->menuContentWidthChannels
+                          - geoManager->menuWidthScrollbar
+                          - 2 * geoManager->menuSpace;
+        widthTimers =     geoManager->osdWidth
+                          - geoManager->menuContentWidthTimers
+                          - geoManager->menuWidthScrollbar
+                          - 2 * geoManager->menuSpace;
+    }
+    int heightFull = geoManager->menuContentHeight - 2*geoManager->menuSpace;
+    int height = config.GetValue("menuHeightInfoWindow") * heightFull / 100;
+    int y = geoManager->menuHeaderHeight + (geoManager->menuContentHeight - height - geoManager->menuSpace);
+    int yFullScreen = geoManager->menuHeaderHeight + geoManager->menuSpace;
+
+    if (config.GetValue("menuSchedulesWindowMode") == 0)
+        textWindowSizeSchedules = cRect(xSchedules,y,widthSchedules,height);
+    else
+        textWindowSizeSchedules = cRect(xSchedules,yFullScreen,widthSchedules,heightFull);
+    if (config.GetValue("menuRecordingsWindowMode") == 0)
+        textWindowSizeRecordings = cRect(xRecordings,y,widthRecordings,height);
+    else
+        textWindowSizeRecordings = cRect(xRecordings,yFullScreen,widthRecordings,heightFull);
+    if (config.GetValue("menuTimersWindowMode") == 0)
+        textWindowSizeTimers = cRect(xTimers,y,widthTimers,height);
+    else
+        textWindowSizeTimers = cRect(xTimers,yFullScreen,widthTimers,heightFull);
+    textWindowSizeChannels = cRect(xChannels,y,widthChannels,height);
 }
 
 cRect *cNopacityDisplayMenuView::GetDescriptionTextWindowSize(eMenuCategory menuCat) {
@@ -108,6 +99,10 @@ cRect *cNopacityDisplayMenuView::GetDescriptionTextWindowSize(eMenuCategory menu
             return &textWindowSizeSchedules;
         case mcRecording:
             return &textWindowSizeRecordings;
+        case mcChannel:
+            return &textWindowSizeChannels;
+        case mcTimer:
+            return &textWindowSizeTimers;
         default:
             return NULL;
     }
@@ -117,75 +112,83 @@ cRect *cNopacityDisplayMenuView::GetDescriptionTextWindowSize(eMenuCategory menu
 int cNopacityDisplayMenuView::GetContentWidth(eMenuCategory menuCat) {
     switch (menuCat) {
         case mcMain:
-            if (config.narrowMainMenu)
-                return contentWidthMain;
+            if (config.GetValue("narrowMainMenu"))
+                return geoManager->menuContentWidthMain;
             else
-                return contentWidthFull;
+                return geoManager->menuContentWidthFull;
         case mcSetup:
-            if (config.narrowSetupMenu)
-                return contentWidthSetup;
+            if (config.GetValue("narrowSetupMenu"))
+                return geoManager->menuContentWidthSetup;
             else
-                return contentWidthFull;
+                return geoManager->menuContentWidthFull;
         case mcSchedule:
         case mcScheduleNow:
         case mcScheduleNext:
-            if (config.narrowScheduleMenu)
-                return contentWidthSchedules;
+            if (config.GetValue("narrowScheduleMenu"))
+                return geoManager->menuContentWidthSchedules;
             else
-                return contentWidthFull;
+                return geoManager->menuContentWidthFull;
         case mcChannel:
-            if (config.narrowChannelMenu)
-                return contentWidthChannels;
+            if (config.GetValue("narrowChannelMenu"))
+                return geoManager->menuContentWidthChannels;
             else
-                return contentWidthFull;
+                return geoManager->menuContentWidthFull;
         case mcTimer:
-            if (config.narrowTimerMenu)
-                return contentWidthTimers;
+            if (config.GetValue("narrowTimerMenu"))
+                return geoManager->menuContentWidthTimers;
             else
-                return contentWidthFull;
+                return geoManager->menuContentWidthFull;
         case mcRecording:
-            if (config.narrowRecordingMenu)
-                return contentWidthRecordings;
+            if (config.GetValue("narrowRecordingMenu"))
+                return geoManager->menuContentWidthRecordings;
             else
-                return contentWidthFull;
+                return geoManager->menuContentWidthFull;
         default:
-            return contentWidthFull;     
+            return geoManager->menuContentWidthFull;
     }
-    return contentWidthFull;
+    return geoManager->menuContentWidthFull;
 }
 
 
 void cNopacityDisplayMenuView::CreatePixmaps(void) {
-    pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, osdWidth, headerHeight));
-    int dateX = (config.menuAdjustLeft) ? (osdWidth - dateWidth) : 0;
-    pixmapDate = osd->CreatePixmap(2, cRect(dateX, 0, dateWidth, headerHeight));
-    int logoX = (config.menuAdjustLeft) ? 0 : (osdWidth - config.menuHeaderLogoWidth);
-    pixmapHeaderLogo = osd->CreatePixmap(-1, cRect(logoX, 0, config.menuHeaderLogoWidth, config.menuHeaderLogoHeight));
-    int labelX = (config.menuAdjustLeft) ? 0 : dateWidth;
-    pixmapHeaderLabel = osd->CreatePixmap(2, cRect(labelX, 0, osdWidth - dateWidth, headerHeight));
-    pixmapFooter = osd->CreatePixmap(1, cRect(0, osdHeight-footerHeight, osdWidth, footerHeight));
-    int drawPortWidth = osdWidth + contentWidthFull - contentWidthMinimum;
-    pixmapContent = osd->CreatePixmap(1, cRect(0, headerHeight, osdWidth, contentHeight),
-                                         cRect(0, 0, drawPortWidth, contentHeight));
-    int diskUsageX = (config.menuAdjustLeft) ? (osdWidth - diskUsageWidth - 10) : 10;
-    pixmapDiskUsage = osd->CreatePixmap(2, cRect(diskUsageX, headerHeight + spaceMenu, diskUsageWidth, diskUsageHeight));
-    pixmapDiskUsageIcon = osd->CreatePixmap(3, cRect(diskUsageX + 2, headerHeight + spaceMenu + 2, diskUsageWidth - 4, diskUsageHeight - 4));
-    pixmapDiskUsageLabel = osd->CreatePixmap(4, cRect(diskUsageX + 2, headerHeight + spaceMenu + 2, diskUsageWidth - 4, diskUsageHeight - 4));
-    int scrollbarX = (config.menuAdjustLeft) ? contentWidthMain : (osdWidth - contentWidthMain);
-    pixmapScrollbar = osd->CreatePixmap(2, cRect(scrollbarX, headerHeight + spaceMenu, widthScrollbar, contentHeight - 2 * spaceMenu));
+    pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, geoManager->osdWidth, geoManager->menuHeaderHeight));
+    pixmapHeaderForeground = osd->CreatePixmap(3, cRect(0, 0, geoManager->osdWidth, geoManager->menuHeaderHeight));
+    int dateX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuDateWidth) : 0;
+    pixmapDate = osd->CreatePixmap(2, cRect(dateX, 0, geoManager->menuDateWidth, geoManager->menuHeaderHeight));
+    int logoX = (config.GetValue("menuAdjustLeft")) ? 0 : (geoManager->osdWidth - geoManager->menuHeaderVDRLogoWidth);
+    pixmapHeaderLogo = osd->CreatePixmap(-1, cRect(logoX, 2, geoManager->menuHeaderVDRLogoWidth, geoManager->menuHeaderHeight - 4));
+    int labelX = (config.GetValue("menuAdjustLeft")) ? 0 : geoManager->menuDateWidth;
+    pixmapHeaderLabel = osd->CreatePixmap(2, cRect(labelX, 0, geoManager->osdWidth - geoManager->menuDateWidth, geoManager->menuHeaderHeight));
+    pixmapFooter = osd->CreatePixmap(2, cRect(0, geoManager->osdHeight - geoManager->menuFooterHeight, geoManager->osdWidth, geoManager->menuFooterHeight));
+    pixmapFooterBack = osd->CreatePixmap(1, cRect(0, geoManager->osdHeight - geoManager->menuFooterHeight, geoManager->osdWidth, geoManager->menuFooterHeight));
+    pixmapButtonsText = osd->CreatePixmap(3, cRect(0, geoManager->osdHeight - geoManager->menuFooterHeight, geoManager->osdWidth, geoManager->menuFooterHeight));
+    int drawPortWidth = geoManager->osdWidth + geoManager->menuContentWidthFull - geoManager->menuContentWidthMinimum;
+    pixmapContent = osd->CreatePixmap(1, cRect(0, geoManager->menuHeaderHeight, geoManager->osdWidth, geoManager->menuContentHeight),
+                                         cRect(0, 0, drawPortWidth, geoManager->menuContentHeight));
+    int diskUsageX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuDiskUsageWidth - 10) : 10;
+    pixmapDiskUsage = osd->CreatePixmap(2, cRect(diskUsageX, geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuDiskUsageWidth, geoManager->menuDiskUsageHeight));
+    pixmapDiskUsageIcon = osd->CreatePixmap(3, cRect(diskUsageX + 2, geoManager->menuHeaderHeight + geoManager->menuSpace + 2, geoManager->menuDiskUsageWidth - 4, geoManager->menuDiskUsageHeight - 4));
+    pixmapDiskUsageLabel = osd->CreatePixmap(4, cRect(diskUsageX + 2, geoManager->menuHeaderHeight + geoManager->menuSpace + 2, geoManager->menuDiskUsageWidth - 4, geoManager->menuDiskUsageHeight - 4));
+    int scrollbarX = (config.GetValue("menuAdjustLeft")) ? geoManager->menuContentWidthMain : (geoManager->osdWidth - geoManager->menuContentWidthMain);
+    pixmapScrollbar = osd->CreatePixmap(3, cRect(scrollbarX, geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2 * geoManager->menuSpace));
+    pixmapScrollbarBack = osd->CreatePixmap(2, cRect(scrollbarX, geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2 * geoManager->menuSpace));
 
     pixmapHeaderLogo->Fill(clrTransparent);
     pixmapHeaderLabel->Fill(clrTransparent);
     pixmapDiskUsage->Fill(clrTransparent);
     pixmapDiskUsageIcon->Fill(clrTransparent);
     pixmapDiskUsageLabel->Fill(clrTransparent);
-    if (config.menuFadeTime) {
+    if (config.GetValue("menuFadeTime")) {
         pixmapHeader->SetAlpha(0);
+        pixmapHeaderForeground->SetAlpha(0);
         pixmapHeaderLogo->SetAlpha(0);
         pixmapHeaderLabel->SetAlpha(0);
         pixmapDate->SetAlpha(0);
         pixmapFooter->SetAlpha(0);
+        pixmapFooterBack->SetAlpha(0);
+        pixmapButtonsText->SetAlpha(0);
         pixmapContent->SetAlpha(0);
+        pixmapScrollbarBack->SetAlpha(0);
         pixmapScrollbar->SetAlpha(0);
         pixmapDiskUsage->SetAlpha(0);
         pixmapDiskUsageIcon->SetAlpha(0);
@@ -195,158 +198,76 @@ void cNopacityDisplayMenuView::CreatePixmaps(void) {
 
 void cNopacityDisplayMenuView::SetPixmapAlpha(int Alpha) {
     pixmapHeader->SetAlpha(Alpha);
+    pixmapHeaderForeground->SetAlpha(Alpha);
     pixmapHeaderLogo->SetAlpha(Alpha);
     pixmapHeaderLabel->SetAlpha(Alpha);
     pixmapDate->SetAlpha(Alpha);
     pixmapContent->SetAlpha(Alpha);
     pixmapFooter->SetAlpha(Alpha);
+    pixmapFooterBack->SetAlpha(Alpha);
+    pixmapButtonsText->SetAlpha(Alpha);
+    pixmapScrollbarBack->SetAlpha(Alpha);
     pixmapScrollbar->SetAlpha(Alpha);
     pixmapDiskUsage->SetAlpha(Alpha);
     pixmapDiskUsageIcon->SetAlpha(Alpha);
     pixmapDiskUsageLabel->SetAlpha(Alpha);
 }
 
-void cNopacityDisplayMenuView::CreateFonts(void) {
-    fontHeader = cFont::CreateFont(config.fontName, headerHeight / 2 + config.fontHeader);
-    fontDate = cFont::CreateFont(config.fontName, headerHeight / 2 + config.fontDate);
-    fontMenuitemLarge = cFont::CreateFont(config.fontName, menuItemHeightMain/3 + 4 + config.fontMenuitemLarge);
-    fontMenuitemSchedule = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 + 5 + config.fontMenuitemSchedule);
-    fontMenuitemScheduleSmall = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 - 5 + config.fontMenuitemScheduleSmall);
-    fontMenuitemChannel = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 3 + config.fontMenuitemChannel);
-    fontMenuitemChannelSmall = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 5 - 2 + config.fontMenuitemChannelSmall);
-    fontMenuitemRecordings = cFont::CreateFont(config.fontName, menuItemHeightRecordings / 2 - 14 + config.fontMenuitemRecordings);
-    fontMenuitemRecordingsSmall = cFont::CreateFont(config.fontName, menuItemHeightRecordings / 4 - 3 + config.fontMenuitemRecordingsSmall);
-    fontMenuitemTimers = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 3 + config.fontMenuitemTimers);
-    fontMenuitemTimersSmall = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 - 3 + config.fontMenuitemTimersSmall);
-    fontMenuitemDefault = cFont::CreateFont(config.fontName, menuItemHeightDefault * 2 / 3 + config.fontMenuitemDefault);
-    fontDiskUsage = cFont::CreateFont(config.fontName, diskUsageHeight/6 - 2 + config.fontDiskUsage);
-    fontDiskUsagePercent = cFont::CreateFont(config.fontName, diskUsageHeight/5 - 4 + config.fontDiskUsagePercent);
-    fontTimersHead = cFont::CreateFont(config.fontName, (contentHeight - 3*spaceMenu - diskUsageHeight) / 25 + config.fontTimersHead);
-    fontTimers = cFont::CreateFont(config.fontName, (contentHeight - 3*spaceMenu - diskUsageHeight) / 25 - 6 + config.fontTimers);
-    fontButtons = cFont::CreateFont(config.fontName, buttonHeight*0.8 + config.fontButtons);
-    fontMessage = cFont::CreateFont(config.fontName, messageHeight / 3 + config.fontMessageMenu);
-    fontEPGInfoWindow = cFont::CreateFont(config.fontName, (config.menuHeightInfoWindow *  contentHeight / 100)/ 6 + config.fontEPGInfoWindow);
-}
-
-cFont *cNopacityDisplayMenuView::GetMenuItemFont(eMenuCategory menuCat) {
-    switch (menuCat) {
-        case mcUnknown:
-            return fontMenuitemDefault;
-        case mcMain:
-        case mcSetup:
-            return fontMenuitemLarge;
-        case mcSchedule:
-            return fontMenuitemSchedule;
-        case mcChannel:
-            return fontMenuitemChannel;
-        case mcTimer:
-            return fontMenuitemTimers;
-        case mcRecording:
-            return fontMenuitemRecordings;
-        default:
-            return fontMenuitemDefault;     
-    }
-    return fontMenuitemDefault;
-}
-
-cFont *cNopacityDisplayMenuView::GetMenuItemFontSmall(eMenuCategory menuCat) {
-    switch (menuCat) {
-        case mcSchedule:
-            return fontMenuitemScheduleSmall;
-        case mcChannel:
-            return fontMenuitemChannelSmall;
-        case mcTimer:
-            return fontMenuitemTimersSmall;
-        case mcRecording:
-            return fontMenuitemTimersSmall;
-        default:
-            return fontMenuitemScheduleSmall;     
-    }
-    return fontMenuitemScheduleSmall;
-}
-
-cFont *cNopacityDisplayMenuView::GetEPGWindowFont(void) {
-    return fontEPGInfoWindow;
-}
-
 void cNopacityDisplayMenuView::GetMenuItemSize(eMenuCategory menuCat, cPoint *itemSize) {
     int itemWidth = 0;
     int itemHeight = 0;
     switch (menuCat) {
         case mcUnknown:
-            itemWidth = menuItemWidthDefault;
-            itemHeight = menuItemHeightDefault;
+            itemWidth = geoManager->menuItemWidthDefault;
+            itemHeight = geoManager->menuItemHeightDefault;
             break;
         case mcMain:
-            itemWidth = menuItemWidthMain;
-            itemHeight = menuItemHeightMain;
+            itemWidth = geoManager->menuItemWidthMain;
+            itemHeight = geoManager->menuItemHeightMain;
             break;
         case mcSetup:
-            itemWidth = menuItemWidthSetup;
-            itemHeight = menuItemHeightMain;
+            itemWidth = geoManager->menuItemWidthSetup;
+            itemHeight = geoManager->menuItemHeightMain;
             break;
         case mcSchedule:
         case mcScheduleNow:
         case mcScheduleNext:
-            itemWidth = menuItemWidthSchedule;
-            itemHeight = menuItemHeightSchedule;
+            itemWidth = geoManager->menuItemWidthSchedule;
+            itemHeight = geoManager->menuItemHeightSchedule;
             break;
         case mcChannel:
-            itemWidth = menuItemWidthChannel;
-            itemHeight = menuItemHeightSchedule;
+            itemWidth = geoManager->menuItemWidthChannel;
+            itemHeight = geoManager->menuItemHeightSchedule;
             break;
         case mcTimer:
-            itemWidth = menuItemWidthTimer;
-            itemHeight = menuItemHeightSchedule;
+            itemWidth = geoManager->menuItemWidthTimer;
+            itemHeight = geoManager->menuItemHeightSchedule;
             break;
         case mcRecording:
-            itemWidth = menuItemWidthRecording;
-            itemHeight = menuItemHeightRecordings;
+            itemWidth = geoManager->menuItemWidthRecording;
+            itemHeight = geoManager->menuItemHeightRecordings;
             break;
         default:
-            itemWidth = menuItemWidthDefault;
-            itemHeight = menuItemHeightDefault;
+            itemWidth = geoManager->menuItemWidthDefault;
+            itemHeight = geoManager->menuItemHeightDefault;
             break;
     }
     itemSize->Set(itemWidth, itemHeight);
 }
 
-int cNopacityDisplayMenuView::GetMaxItems(eMenuCategory menuCat) {
-    int maxItems = 0;
-    switch (menuCat) {
-        case mcMain:
-        case mcSetup:
-            maxItems = contentHeight / (menuItemHeightMain + spaceMenu);
-            break;
-        case mcSchedule:
-        case mcScheduleNow:
-        case mcScheduleNext:
-        case mcChannel:
-        case mcTimer:
-            maxItems = contentHeight / (menuItemHeightSchedule + spaceMenu);
-            break;
-        case mcRecording:
-            maxItems = contentHeight / (menuItemHeightRecordings + spaceMenu);
-            break;
-        default:
-            maxItems = config.numDefaultMenuItems;      
-    }
-    return maxItems;
-}
-
 int cNopacityDisplayMenuView::GetMenuTop(int numItems, int itemHeight) {
-    return headerHeight + (contentHeight - numItems*(itemHeight + spaceMenu))/2;
+    return geoManager->menuHeaderHeight + (geoManager->menuContentHeight - numItems*(itemHeight + geoManager->menuSpace))/2;
 }
 
 int cNopacityDisplayMenuView::GetMenuItemLeft(int itemWidth) {
-    int menuLeft = spaceMenu;
-    if (!config.menuAdjustLeft)
-        menuLeft = osdWidth - itemWidth - spaceMenu;
+    int menuLeft = geoManager->menuSpace;
+    if (!config.GetValue("menuAdjustLeft"))
+        menuLeft = geoManager->osdWidth - itemWidth - geoManager->menuSpace;
     return menuLeft;
 }
 
 void cNopacityDisplayMenuView::SetAvrgFontWidth(void) {
-    avrgFontWidth = fontMenuitemDefault->Width("x")+3;
+    avrgFontWidth = fontManager->menuItemDefault->Width("x")+3;
 }
 
 void cNopacityDisplayMenuView::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
@@ -365,120 +286,91 @@ void cNopacityDisplayMenuView::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, i
 }
 
 int cNopacityDisplayMenuView::GetEditableWidth(void) {
-    return contentWidthFull*0.5;
+    return geoManager->menuContentWidthFull*0.5;
 }
 
 int cNopacityDisplayMenuView::GetTextAreaWidth(void) {
-    return contentWidthFull - 2*spaceMenu;
+    return geoManager->menuContentWidthFull - 2*geoManager->menuSpace;
 }
 
 const cFont *cNopacityDisplayMenuView::GetTextAreaFont(bool FixedFont) {
-    return cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
-}
-
-void cNopacityDisplayMenuView::CreateBackgroundImages(int *handleBackgrounds, int *handleButtons) {
-    cImageLoader imgLoader;
-    //Default Menus
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidthDefault-2, menuItemHeightDefault-2);
-    handleBackgrounds[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidthDefault-2, menuItemHeightDefault-2);
-    handleBackgrounds[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    //Main Menu
-    cPoint itemSize;
-    GetMenuItemSize(mcMain, &itemSize);
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[2] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[3] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    //Schedules Menu
-    GetMenuItemSize(mcSchedule, &itemSize);
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[4] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[5] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    //Channels Menu
-    GetMenuItemSize(mcChannel, &itemSize);
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[6] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[7] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    //Recordings Menu
-    GetMenuItemSize(mcRecording, &itemSize);
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[8] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[9] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    //Timers Menu
-    GetMenuItemSize(mcTimer, &itemSize);
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[10] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[11] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    //Setup Menu
-    GetMenuItemSize(mcSetup, &itemSize);
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[12] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), itemSize.X()-2, itemSize.Y()-2);
-    handleBackgrounds[13] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    
-    imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonRed), buttonWidth-4, buttonHeight-4);
-    handleButtons[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonGreen), buttonWidth-4, buttonHeight-4);
-    handleButtons[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonYellow), buttonWidth-4, buttonHeight-4);
-    handleButtons[2] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonBlue), buttonWidth-4, buttonHeight-4);
-    handleButtons[3] = cOsdProvider::StoreImage(imgLoader.GetImage());
+    return cFont::CreateFont(config.fontName, geoManager->menuContentHeight / 25 + config.GetValue("fontDetailView"));
 }
 
 void cNopacityDisplayMenuView::DrawBorderDecoration() {
-    cImageLoader imgLoader;
-    bool mirrorHeader = (config.menuAdjustLeft) ? false : true;
-    imgLoader.DrawBackground(Theme.Color(clrMenuHeaderBlend), Theme.Color(clrMenuHeader), osdWidth, headerHeight, mirrorHeader);
-    pixmapHeader->DrawImage(cPoint(0,0), imgLoader.GetImage());
-    pixmapFooter->Fill(Theme.Color(clrMenuBack));
-    
+    if (config.GetValue("displayType") == dtGraphical) {
+        cImage *headerImageBack = imgCache->GetSkinElement(seMenuHeader);
+        if (headerImageBack)
+            pixmapHeader->DrawImage(cPoint(0, 0), *headerImageBack);
+        else
+            pixmapHeader->Fill(Theme.Color(clrMenuBack));
+        cImage *headerImageTop = imgCache->GetSkinElement(seMenuHeaderTop);
+        if (headerImageTop)
+            pixmapHeaderForeground->DrawImage(cPoint(0, 0), *headerImageTop);
+        else
+            pixmapHeaderForeground->Fill(clrTransparent);
+    } else if (config.GetValue("displayType") == dtBlending) {
+        pixmapHeaderForeground->Fill(clrTransparent);
+        cImage *headerImage = imgCache->GetSkinElement(seMenuHeader);
+        if (headerImage)
+            pixmapHeader->DrawImage(cPoint(0, 0), *headerImage);
+        else
+            pixmapHeader->Fill(Theme.Color(clrMenuBack));
+    } else {
+        pixmapHeaderForeground->Fill(clrTransparent);
+        pixmapHeader->Fill(Theme.Color(clrMenuBack));
+    }
+    pixmapFooter->Fill(clrTransparent);
+    pixmapFooterBack->Fill(Theme.Color(clrMenuBack));
+    pixmapButtonsText->Fill(clrTransparent);
+
     int borderWidth = 2;
     int radius = 10;
 
     pixmapContent->Fill(clrTransparent);
 
-    if (config.menuAdjustLeft) {
+    if (config.GetValue("menuAdjustLeft")) {
         //Background
-        pixmapContent->DrawRectangle(cRect(0, 0, contentWidthFull - radius, contentHeight), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(0, 0, geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull - radius, 0, geoManager->menuWidthScrollbar + geoManager->menuSpace + radius, geoManager->menuContentHeight), Theme.Color(clrMenuScrollBarBase));
         //Upper and lower Corner Square
-        pixmapContent->DrawRectangle(cRect(contentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBack));
-        pixmapContent->DrawRectangle(cRect(contentWidthFull - radius, contentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
         //Upper line
-        pixmapContent->DrawRectangle(cRect(contentWidthFull, 0, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+        pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull, 0, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
         //Lower Line
-        pixmapContent->DrawRectangle(cRect(contentWidthFull, contentHeight - borderWidth, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+        pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull, geoManager->menuContentHeight - borderWidth, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
         //Vertical line
-        pixmapContent->DrawRectangle(cRect(contentWidthFull-radius, radius, borderWidth, contentHeight - 2*radius), Theme.Color(clrMenuBorder));
-        //Upper Ellipse
-        pixmapContent->DrawEllipse(cRect(contentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBorder),2);
-        pixmapContent->DrawEllipse(cRect(contentWidthFull - radius + borderWidth, borderWidth, radius-borderWidth, radius-borderWidth), clrTransparent, 2);
-        //Lower Ellipse
-        pixmapContent->DrawEllipse(cRect(contentWidthFull - radius, contentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),3);
-        pixmapContent->DrawEllipse(cRect(contentWidthFull - radius + borderWidth, contentHeight - radius, radius-borderWidth, radius-borderWidth), clrTransparent, 3);
+        pixmapContent->DrawRectangle(cRect(geoManager->menuContentWidthFull-radius, radius, borderWidth, geoManager->menuContentHeight - 2*radius), Theme.Color(clrMenuBorder));
+        if (radius-borderWidth > 2) {
+            //Upper Ellipse
+            pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBorder),2);
+            pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius + borderWidth, borderWidth, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 2);
+            //Lower Ellipse
+            pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),3);
+            pixmapContent->DrawEllipse(cRect(geoManager->menuContentWidthFull - radius + borderWidth, geoManager->menuContentHeight - radius, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 3);
+        }
     } else {
         //Background
-        pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum + radius, 0, contentWidthFull - radius, contentHeight), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum + radius, 0, geoManager->menuContentWidthFull - radius, geoManager->menuContentHeight), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(0, 0, geoManager->menuWidthScrollbar + geoManager->menuSpace + radius, geoManager->menuContentHeight), Theme.Color(clrMenuScrollBarBase));
         //Upper and lower Corner Square
-        pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBack));
-        pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum, contentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBack));
+        pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
         //Upper line
-        pixmapContent->DrawRectangle(cRect(0, 0, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+        pixmapContent->DrawRectangle(cRect(0, 0, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
         //Lower Line
-        pixmapContent->DrawRectangle(cRect(0, contentHeight - borderWidth, osdWidth - contentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
+        pixmapContent->DrawRectangle(cRect(0, geoManager->menuContentHeight - borderWidth, geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth), Theme.Color(clrMenuBorder));
         //Vertical line
-        pixmapContent->DrawRectangle(cRect(osdWidth - contentWidthMinimum + radius - borderWidth, radius, borderWidth, contentHeight - 2*radius), Theme.Color(clrMenuBorder));
-        //Upper Ellipse
-        pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBorder),1);
-        pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, borderWidth, radius-borderWidth, radius-borderWidth), clrTransparent, 1);
-        //Lower Ellipse
-        pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, contentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),4);
-        pixmapContent->DrawEllipse(cRect(osdWidth - contentWidthMinimum, contentHeight - radius, radius-borderWidth, radius-borderWidth), clrTransparent, 4);
+        pixmapContent->DrawRectangle(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum + radius - borderWidth, radius, borderWidth, geoManager->menuContentHeight - 2*radius), Theme.Color(clrMenuBorder));
+        if (radius-borderWidth > 2) {
+            //Upper Ellipse
+            pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, 0, radius, radius), Theme.Color(clrMenuBorder),1);
+            pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, borderWidth, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 1);
+            //Lower Ellipse
+            pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, geoManager->menuContentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),4);
+            pixmapContent->DrawEllipse(cRect(geoManager->osdWidth - geoManager->menuContentWidthMinimum, geoManager->menuContentHeight - radius, radius-borderWidth, radius-borderWidth), Theme.Color(clrMenuScrollBarBase), 4);
+        }
     }
 }
 
@@ -487,40 +379,42 @@ void cNopacityDisplayMenuView::AdjustContentBackground(eMenuCategory menuCat, eM
     int contentWidthLast = GetContentWidth(menuCatLast);
     int drawportX;
     if ((contentWidth != contentWidthLast)||(menuCatLast == mcUndefined)) {
-        if (contentWidth == contentWidthFull) {
-            drawportX = (config.menuAdjustLeft)?0:(contentWidthMinimum - contentWidthFull);
+        if (contentWidth == geoManager->menuContentWidthFull) {
+            drawportX = (config.GetValue("menuAdjustLeft"))?0:(geoManager->menuContentWidthMinimum - geoManager->menuContentWidthFull);
             pixmapContent->SetDrawPortPoint(cPoint(drawportX, 0));
-            if (config.scalePicture) {
+            if (config.GetValue("scalePicture")) {
                 // ask output device to restore full size
                 vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null);
             }
         } else {
-            drawportX = (config.menuAdjustLeft)?(contentWidth - contentWidthFull):(contentWidthMinimum - contentWidth);
+            drawportX = (config.GetValue("menuAdjustLeft"))?(contentWidth - geoManager->menuContentWidthFull):(geoManager->menuContentWidthMinimum - contentWidth);
             pixmapContent->SetDrawPortPoint(cPoint(drawportX, 0));
-            if (config.scalePicture) {
+            if (config.GetValue("scalePicture")) {
                 // ask output device to scale down
-                int windowX = (config.menuAdjustLeft)?(osdLeft + contentWidth + widthScrollbar + 2 * spaceMenu)
-                                                     :(osdLeft + 2 * spaceMenu);
+                int windowX = (config.GetValue("menuAdjustLeft"))?(geoManager->osdLeft + contentWidth + geoManager->menuWidthScrollbar + 2 * geoManager->menuSpace)
+                                                     :(geoManager->osdLeft + 2 * geoManager->menuSpace);
                 cRect availableRect(
                     windowX,
-                    osdTop + headerHeight,
-                    contentWidthFull - osdLeft - contentWidth - widthScrollbar - 4 * spaceMenu,
-                    contentHeight);
+                    geoManager->osdTop + geoManager->menuHeaderHeight,
+                    geoManager->menuContentWidthFull - geoManager->osdLeft - contentWidth - geoManager->menuWidthScrollbar - 4 * geoManager->menuSpace,
+                    geoManager->menuContentHeight);
                 vidWin = cDevice::PrimaryDevice()->CanScaleVideo(availableRect);
             }
         }
     }
     osd->DestroyPixmap(pixmapScrollbar);
-    int scrollbarX = (config.menuAdjustLeft)?(contentWidth):(osdWidth - contentWidth - widthScrollbar);
-    pixmapScrollbar = osd->CreatePixmap(2, cRect(scrollbarX , headerHeight + spaceMenu, widthScrollbar, osdHeight - headerHeight - footerHeight - 2*spaceMenu));
+    osd->DestroyPixmap(pixmapScrollbarBack);
+    int scrollbarX = (config.GetValue("menuAdjustLeft"))?(contentWidth):(geoManager->osdWidth - contentWidth - geoManager->menuWidthScrollbar);
+    pixmapScrollbar = osd->CreatePixmap(3, cRect(scrollbarX , geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2*geoManager->menuSpace));
+    pixmapScrollbarBack = osd->CreatePixmap(2, cRect(scrollbarX , geoManager->menuHeaderHeight + geoManager->menuSpace, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2*geoManager->menuSpace));
     pixmapScrollbar->Fill(clrTransparent);
+    pixmapScrollbarBack->Fill(clrTransparent);
 }
 
 void cNopacityDisplayMenuView::DrawHeaderLogo(void) {
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/vdrlogo", config.menuHeaderLogoWidth, config.menuHeaderLogoHeight)) {
-        pixmapHeaderLogo->DrawImage(cPoint(0,0), imgLoader.GetImage());
-    }
+    cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/vdrlogo");
+    if (imgIcon)
+        pixmapHeaderLogo->DrawImage(cPoint(0,0), *imgIcon);
 }
 
 int cNopacityDisplayMenuView::ShowHeaderLogo(bool show) {
@@ -529,7 +423,7 @@ int cNopacityDisplayMenuView::ShowHeaderLogo(bool show) {
     } else {
         pixmapHeaderLogo->SetLayer(-1);
     }
-    return config.menuHeaderLogoWidth + spaceMenu;
+    return geoManager->menuHeaderVDRLogoWidth + geoManager->menuSpace;
 }
 
 int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
@@ -558,16 +452,17 @@ int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
         default:
             drawIcon = false;
     }
-    
+
     int left = 0;
     if (drawIcon) {
-        int iconX = (config.menuAdjustLeft) ? 0 : (osdWidth - config.headerIconHeight);
-        pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 0, config.headerIconHeight, config.headerIconHeight));
+        int iconSize = geoManager->menuHeaderHeight - 4;
+        int iconX = (config.GetValue("menuAdjustLeft")) ? 0 : (geoManager->osdWidth - geoManager->menuHeaderHeight);
+        pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 2, iconSize, iconSize));
         pixmapHeaderIcon->Fill(clrTransparent);
-        cImageLoader imgLoader;
-        if (imgLoader.LoadIcon(*icon, config.headerIconHeight)) {
-            pixmapHeaderIcon->DrawImage(cPoint(0,0), imgLoader.GetImage());
-            left = config.headerIconHeight + spaceMenu;
+        cImage *imgIcon = imgCache->GetSkinIcon(*icon);
+        if (imgIcon) {
+            pixmapHeaderIcon->DrawImage(cPoint(0,0), *imgIcon);
+            left = geoManager->menuHeaderHeight + geoManager->menuSpace;
         }
     }
     return left;
@@ -575,8 +470,14 @@ int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
 
 int cNopacityDisplayMenuView::ShowHeaderIconChannelLogo(const char *Title) {
     int left = 0;
-    int iconX = (config.menuAdjustLeft) ? 0 : (osdWidth - config.menuItemLogoWidth);
-    pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 0, config.menuItemLogoWidth, config.menuItemLogoHeight));
+    int logoHeight = geoManager->menuHeaderHeight - 4;
+    cSize logoSize = ScaleToFit(1000,
+                                logoHeight,
+                                config.GetValue("logoWidth"),
+                                config.GetValue("logoHeight"));
+    int logoWidth = logoSize.Width();
+    int iconX = (config.GetValue("menuAdjustLeft")) ? 0 : (geoManager->osdWidth - logoWidth);
+    pixmapHeaderIcon = osd->CreatePixmap(2, cRect(iconX, 2, logoWidth, logoHeight));
     pixmapHeaderIcon->Fill(clrTransparent);
     std::string channel = Title;
     if (channel.length() == 0)
@@ -587,9 +488,9 @@ int cNopacityDisplayMenuView::ShowHeaderIconChannelLogo(const char *Title) {
         channel.erase(0, remove.length());
     } catch (...) {}
     cImageLoader imgLoader;
-    if (imgLoader.LoadLogo(channel.c_str(), config.menuItemLogoWidth, config.menuItemLogoHeight)) {
+    if (imgLoader.LoadLogo(channel.c_str(), logoWidth, logoHeight)) {
         pixmapHeaderIcon->DrawImage(cPoint(0, 0), imgLoader.GetImage());
-        left =  config.menuItemLogoWidth + spaceMenu;
+        left =  logoWidth + geoManager->menuSpace;
     }
     return left;
 }
@@ -603,44 +504,51 @@ void cNopacityDisplayMenuView::DestroyHeaderIcon(void) {
 
 void cNopacityDisplayMenuView::DrawHeaderLabel(int left, cString label) {
     pixmapHeaderLabel->Fill(clrTransparent);
-    int labelW = fontHeader->Width(label);
-    int labelX = (config.menuAdjustLeft) ? (left) : (osdWidth - dateWidth - labelW - left - 2*spaceMenu);
-    pixmapHeaderLabel->DrawText(cPoint(labelX, ((headerHeight - 10) - fontHeader->Height()) / 2), *label, Theme.Color(clrMenuFontHeader), clrTransparent, fontHeader);
+    int labelW = fontManager->menuHeader->Width(label);
+    int labelX = (config.GetValue("menuAdjustLeft")) ? (left)
+                : (geoManager->osdWidth - geoManager->menuDateWidth - labelW - left - 2*geoManager->menuSpace);
+    int labelY = (geoManager->menuHeaderHeight - fontManager->menuHeader->Height())/2;
+    pixmapHeaderLabel->DrawText(cPoint(labelX, labelY),
+                                *label,
+                                Theme.Color(clrMenuFontHeader),
+                                clrTransparent,
+                                fontManager->menuHeader);
 }
 
 void cNopacityDisplayMenuView::DrawDate(bool initial) {
     cString date = DayDateTime();
     if (initial || strcmp(date, lastDate)) {
         pixmapDate->Fill(clrTransparent);
-        int dateW = fontDate->Width(date);
-        int dateX = (config.menuAdjustLeft) ? (dateWidth - dateW - 2*spaceMenu) : (spaceMenu);
-        pixmapDate->DrawText(cPoint(dateX, (headerHeight - fontDate->Height()) / 2), date, Theme.Color(clrMenuFontDate), clrTransparent, fontDate);
+        int dateW = fontManager->menuDate->Width(date);
+        int dateX = (config.GetValue("menuAdjustLeft")) ? (geoManager->menuDateWidth - dateW - 2*geoManager->menuSpace) : (geoManager->menuSpace);
+        pixmapDate->DrawText(cPoint(dateX, (geoManager->menuHeaderHeight - fontManager->menuDate->Height()) / 2), date, Theme.Color(clrMenuFontDate), clrTransparent, fontManager->menuDate);
         lastDate = date;
     }
 }
 
 void cNopacityDisplayMenuView::DrawDiskUsage(void) {
-    int iconWidth = diskUsageWidth * 3/4;
+    int iconWidth = geoManager->menuDiskUsageWidth * 3/4;
     int DiskUsage = cVideoDiskUsage::UsedPercent();
     bool DiskAlert = DiskUsage > diskUsageAlert;
     tColor bgColor = DiskAlert ? Theme.Color(clrDiskAlert) : Theme.Color(clrMenuBack);
     pixmapDiskUsage->Fill(Theme.Color(clrMenuBorder));
-    pixmapDiskUsage->DrawRectangle(cRect(2,2,diskUsageWidth-4, diskUsageHeight-4), bgColor);
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/DiskUsage", iconWidth)) {
-        cImage icon = imgLoader.GetImage();
-        pixmapDiskUsageIcon->DrawImage(cPoint((diskUsageWidth - iconWidth)/2,0), icon);
-    }
-    if (imgLoader.LoadIcon("skinIcons/discpercent", diskUsageWidth - 4, diskUsageHeight/5, false)) {
-        cImage icon = imgLoader.GetImage();
-        pixmapDiskUsageIcon->DrawImage(cPoint(0,4*diskUsageHeight/5), icon);
-    }
+    pixmapDiskUsage->DrawRectangle(cRect(2,2,geoManager->menuDiskUsageWidth-4, geoManager->menuDiskUsageHeight-4), bgColor);
+    cImage *imgDisc = imgCache->GetSkinIcon("skinIcons/DiskUsage");
+    if (imgDisc)
+        pixmapDiskUsageIcon->DrawImage(cPoint((geoManager->menuDiskUsageWidth - iconWidth)/2,0), *imgDisc);
+    cImage *imgDiscPerc = imgCache->GetSkinIcon("skinIcons/discpercent");
+    if (imgDiscPerc)
+        pixmapDiskUsageIcon->DrawImage(cPoint(0,4*geoManager->menuDiskUsageHeight/5), *imgDiscPerc);
     pixmapDiskUsageLabel->Fill(clrTransparent);
     cString usage = cString::sprintf("%d%%", DiskUsage);
-    cString rest = cString::sprintf("%02d:%02dh %s", cVideoDiskUsage::FreeMinutes() / 60, cVideoDiskUsage::FreeMinutes() % 60, tr("free"));
-    pixmapDiskUsageLabel->DrawRectangle(cRect((diskUsageWidth - 4)*DiskUsage/100,4*diskUsageHeight/5, (diskUsageWidth - 4) - (diskUsageWidth - 4)*DiskUsage/100, diskUsageHeight/5), 0xDD000000);
-    pixmapDiskUsageLabel->DrawText(cPoint((diskUsageWidth - fontDiskUsagePercent->Width(*usage))/2, 4*diskUsageHeight/5), *usage, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontDiskUsagePercent);
-    pixmapDiskUsageLabel->DrawText(cPoint((diskUsageWidth - fontDiskUsage->Width(*rest))/2, (diskUsageHeight - fontDiskUsage->Height())/2), *rest, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontDiskUsage);
+    cString rest;
+    if (config.GetValue("discUsageStyle") == 0)
+        rest = cString::sprintf("%02d:%02dh %s", cVideoDiskUsage::FreeMinutes() / 60, cVideoDiskUsage::FreeMinutes() % 60, tr("free"));
+    else
+        rest = cString::sprintf("%d GB %s", cVideoDiskUsage::FreeMB() / 1024, tr("free"));
+    pixmapDiskUsageLabel->DrawRectangle(cRect((geoManager->menuDiskUsageWidth - 4)*DiskUsage/100,4*geoManager->menuDiskUsageHeight/5, (geoManager->menuDiskUsageWidth - 4) - (geoManager->menuDiskUsageWidth - 4)*DiskUsage/100, geoManager->menuDiskUsageHeight/5), 0xDD000000);
+    pixmapDiskUsageLabel->DrawText(cPoint((geoManager->menuDiskUsageWidth - fontManager->menuDiskUsagePercent->Width(*usage))/2, 4*geoManager->menuDiskUsageHeight/5), *usage, Theme.Color(clrMenuFontDiscUsagePerc), clrTransparent, fontManager->menuDiskUsagePercent);
+    pixmapDiskUsageLabel->DrawText(cPoint((geoManager->menuDiskUsageWidth - fontManager->menuDiskUsage->Width(*rest))/2, (geoManager->menuDiskUsageHeight - fontManager->menuDiskUsage->Height())/2), *rest, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontManager->menuDiskUsage);
 
     pixmapDiskUsage->SetLayer(2);
     pixmapDiskUsageIcon->SetLayer(3);
@@ -659,72 +567,84 @@ void cNopacityDisplayMenuView::ShowDiskUsage(bool show) {
     }
 }
 
-void cNopacityDisplayMenuView::DrawButton(const char *text, int handleImage, tColor borderColor, int num) {
+void cNopacityDisplayMenuView::DrawButton(const char *text, eSkinElementType seButton, tColor buttonColor, tColor borderColor, tColor fontColor, int num) {
     if (num < 0)
         return;
-    int top = 2*buttonsBorder;
-    int left = num * buttonWidth + (2*num + 1) * buttonsBorder;
-    pixmapFooter->DrawRectangle(cRect(left, top, buttonWidth, buttonHeight), borderColor);
-    pixmapFooter->DrawImage(cPoint(left+2, top+2), handleImage);
-    
-    if (config.roundedCorners) {
-        int radius = config.cornerRadius;
-
-        pixmapFooter->DrawEllipse(cRect(left,top,radius,radius), borderColor, -2);
-        pixmapFooter->DrawEllipse(cRect(left-2,top-2,radius,radius), Theme.Color(clrMenuBack), -2);
+    int top = 2*geoManager->menuButtonsBorder;
+    int left = num * geoManager->menuButtonWidth + (2*num + 1) * geoManager->menuButtonsBorder;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapFooter->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), borderColor);
+        cImage *back = imgCache->GetSkinElement(seButton);
+        if (back)
+            pixmapFooter->DrawImage(cPoint(left+2, top+2), *back);
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *image = imgCache->GetSkinElement(seButton);
+        if (image)
+            pixmapFooter->DrawImage(cPoint(left, top), *image);
+    } else {
+        pixmapFooter->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), borderColor);
+        pixmapFooter->DrawRectangle(cRect(left+1, top+1, geoManager->menuButtonWidth-2, geoManager->menuButtonHeight-2), buttonColor);
+    }
+    if (config.GetValue("roundedCorners") && (config.GetValue("displayType") != dtGraphical)) {
+        int radius = config.GetValue("cornerRadius");
+        if (radius > 2) {
+            pixmapFooter->DrawEllipse(cRect(left,top,radius,radius), borderColor, -2);
+            pixmapFooter->DrawEllipse(cRect(left-1,top-1,radius,radius), clrTransparent, -2);
 
-        pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius, top,radius,radius), borderColor, -1);
-        pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius+2,top-2,radius,radius), Theme.Color(clrMenuBack), -1);
+            pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius, top,radius,radius), borderColor, -1);
+            pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius+1,top-1,radius,radius), clrTransparent, -1);
 
-        pixmapFooter->DrawEllipse(cRect(left,top + buttonHeight -radius,radius,radius), borderColor, -3);
-        pixmapFooter->DrawEllipse(cRect(left - 2, top + buttonHeight - radius + 2,radius,radius), Theme.Color(clrMenuBack), -3);
+            pixmapFooter->DrawEllipse(cRect(left,top + geoManager->menuButtonHeight -radius,radius,radius), borderColor, -3);
+            pixmapFooter->DrawEllipse(cRect(left - 1, top + geoManager->menuButtonHeight - radius + 1,radius,radius), clrTransparent, -3);
 
-        pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius, top + buttonHeight -radius,radius,radius), borderColor, -4);
-        pixmapFooter->DrawEllipse(cRect(left + buttonWidth -radius + 2, top + buttonHeight -radius + 2,radius,radius), Theme.Color(clrMenuBack), -4);
+            pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius, top + geoManager->menuButtonHeight -radius,radius,radius), borderColor, -4);
+            pixmapFooter->DrawEllipse(cRect(left + geoManager->menuButtonWidth -radius + 1, top + geoManager->menuButtonHeight -radius + 1,radius,radius), clrTransparent, -4);
+        }
     }
-    
-    int textWidth = fontButtons->Width(text);
-    int textHeight = fontButtons->Height();
-    pixmapFooter->DrawText(cPoint(left + (buttonWidth-textWidth)/2, top + (buttonHeight-textHeight)/2), text, Theme.Color(clrMenuFontButton), clrTransparent, fontButtons);
+    int textWidth = fontManager->menuButtons->Width(text);
+    int textHeight = fontManager->menuButtons->Height();
+    pixmapButtonsText->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), clrTransparent);
+    pixmapButtonsText->DrawText(cPoint(left + (geoManager->menuButtonWidth-textWidth)/2, top + (geoManager->menuButtonHeight-textHeight)/2), text, fontColor, clrTransparent, fontManager->menuButtons);
 }
 
 void cNopacityDisplayMenuView::ClearButton(int num) {
     if (num < 0)
         return;
-    int top = 2*buttonsBorder;
-    int left = num * buttonWidth + (2*num + 1) * buttonsBorder;
-    pixmapFooter->DrawRectangle(cRect(left, top, buttonWidth, buttonHeight), Theme.Color(clrMenuBack));
+    int top = 2*geoManager->menuButtonsBorder;
+    int left = num * geoManager->menuButtonWidth + (2*num + 1) * geoManager->menuButtonsBorder;
+    pixmapFooter->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), clrTransparent);
+    pixmapButtonsText->DrawRectangle(cRect(left, top, geoManager->menuButtonWidth, geoManager->menuButtonHeight), clrTransparent);
 }
 
 int cNopacityDisplayMenuView::GetTimersInitHeight(void) {
-    int initHeight = headerHeight + 2*spaceMenu;
-    if (config.showDiscUsage)
-        initHeight += diskUsageHeight;
+    int initHeight = geoManager->menuHeaderHeight + 2*geoManager->menuSpace;
+    if (config.GetValue("showDiscUsage"))
+        initHeight += geoManager->menuDiskUsageHeight;
     return initHeight;
 }
 
 int cNopacityDisplayMenuView::GetTimersMaxHeight(void) {
-    return headerHeight + contentHeight;
+    return geoManager->menuHeaderHeight + geoManager->menuContentHeight;
 }
 
 cNopacityTimer *cNopacityDisplayMenuView::DrawTimerConflict(int numConflicts, int y) {
-    cNopacityTimer *t = new cNopacityTimer(osd, numConflicts, fontTimers, fontTimersHead);
-    t->SetGeometry(timersWidth, y);
+    cNopacityTimer *t = new cNopacityTimer(osd, imgCache, numConflicts, fontManager->menuTimers, fontManager->menuTimersHead);
+    t->SetGeometry(geoManager->menuTimersWidth, y);
     t->CreateConflictText();
-    t->CalculateHeight(spaceMenu);
-    int timerX = (config.menuAdjustLeft) ? (osdWidth - timersWidth - 10) : 10;
+    t->CalculateHeight(geoManager->menuSpace);
+    int timerX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuTimersWidth - 10) : 10;
     t->CreatePixmaps(timerX);
     t->Render();
     return t;
 }
 
 cNopacityTimer *cNopacityDisplayMenuView::DrawTimer(const cTimer *Timer, int y) {
-    cNopacityTimer *t = new cNopacityTimer(osd, Timer, fontTimers, fontTimersHead);
-    t->SetGeometry(timersWidth, y);
+    cNopacityTimer *t = new cNopacityTimer(osd, imgCache, Timer, fontManager->menuTimers, fontManager->menuTimersHead);
+    t->SetGeometry(geoManager->menuTimersWidth, y);
     t->CreateDate();
     t->CreateShowName();
-    t->CalculateHeight(spaceMenu);
-    int timerX = (config.menuAdjustLeft) ? (osdWidth - timersWidth - 10) : 10;
+    t->CalculateHeight(geoManager->menuSpace);
+    int timerX = (config.GetValue("menuAdjustLeft")) ? (geoManager->osdWidth - geoManager->menuTimersWidth - 10) : 10;
     t->CreatePixmaps(timerX);
     t->Render();
     return t;
@@ -734,42 +654,79 @@ void cNopacityDisplayMenuView::DrawScrollbar(double Height, double Offset) {
     int totalHeight = pixmapScrollbar->ViewPort().Height() - 6;
     int height = Height * totalHeight;
     int offset = Offset * totalHeight;
-    pixmapScrollbar->Fill(Theme.Color(clrMenuScrollBar));
-    pixmapScrollbar->DrawRectangle(cRect(2,2,widthScrollbar-4,totalHeight+2), Theme.Color(clrMenuScrollBarBack));
-    pixmapScrollbar->DrawRectangle(cRect(3,3 + offset,widthScrollbar-6,height), Theme.Color(clrMenuScrollBar));
+    if (config.GetValue("displayType") == dtGraphical) {
+        cImage *image = imgCache->GetSkinElement(seScrollbar);
+        if (image)
+            pixmapScrollbarBack->DrawImage(cPoint(0, 0), *image);
+    } else {
+        pixmapScrollbarBack->Fill(Theme.Color(clrMenuScrollBar));
+        pixmapScrollbarBack->DrawRectangle(cRect(2,2,geoManager->menuWidthScrollbar-4,totalHeight+2), Theme.Color(clrMenuScrollBarBack));
+    }
+    pixmapScrollbar->Fill(clrTransparent);
+    pixmapScrollbar->DrawRectangle(cRect(3,3 + offset,geoManager->menuWidthScrollbar-6,height), Theme.Color(clrMenuScrollBar));
 }
 
 void cNopacityDisplayMenuView::ClearScrollbar(void) {
     pixmapScrollbar->Fill(clrTransparent);
+    pixmapScrollbarBack->Fill(clrTransparent);
 }
 
 
 void cNopacityDisplayMenuView::DrawMessage(eMessageType Type, const char *Text) {
     tColor col = Theme.Color(clrMessageStatus);
+    tColor colFont = Theme.Color(clrMessageFontStatus);
+    eSkinElementType seType = seMessageMenuStatus;
     switch (Type) {
-        case mtStatus: 
+        case mtStatus:
             col = Theme.Color(clrMessageStatus);
+            colFont = Theme.Color(clrMessageFontStatus);
+            seType = seMessageMenuStatus;
             break;
         case mtInfo:
             col = Theme.Color(clrMessageInfo);
+            colFont = Theme.Color(clrMessageFontInfo);
+            seType = seMessageMenuInfo;
             break;
         case mtWarning:
             col = Theme.Color(clrMessageWarning);
+            colFont = Theme.Color(clrMessageFontWarning);
+            seType = seMessageMenuWarning;
             break;
         case mtError:
             col = Theme.Color(clrMessageError);
+            colFont = Theme.Color(clrMessageFontError);
+            seType = seMessageMenuError;
             break;
     }
     if (pixmapStatus) {
         ClearMessage();
     }
-    pixmapStatus = osd->CreatePixmap(5, cRect(0.1*osdWidth, 0.8*osdHeight, messageWidth, messageHeight));
-    pixmapStatus->Fill(col);
-    cImageLoader imgLoader;
-    imgLoader.DrawBackground2(Theme.Color(clrMenuBack), col, messageWidth-2, messageHeight-2);
-    pixmapStatus->DrawImage(cPoint(1, 1), imgLoader.GetImage());
-    int textWidth = fontMessage->Width(Text);
-    pixmapStatus->DrawText(cPoint((messageWidth - textWidth) / 2, (messageHeight - fontMessage->Height()) / 2), Text, Theme.Color(clrMenuFontMessages), clrTransparent, fontMessage);
+    pixmapStatus = osd->CreatePixmap(7, cRect(0.1*geoManager->osdWidth, 0.8*geoManager->osdHeight, geoManager->menuMessageWidth, geoManager->menuMessageHeight));
+
+    pixmapStatus->Fill(clrTransparent);
+    if (config.GetValue("displayType") == dtGraphical) {
+        cImage *imgBack = imgCache->GetSkinElement(seType);
+        if (imgBack) {
+            pixmapStatus->DrawImage(cPoint(0, 0), *imgBack);
+        }
+    } else {
+        pixmapStatus->Fill(col);
+        if (config.GetValue("displayType") == dtBlending) {
+            cImage imgBack = imgCache->GetBackground(Theme.Color(clrMenuBack), col, geoManager->menuMessageWidth-2, geoManager->menuMessageHeight-2, true);
+            pixmapStatus->DrawImage(cPoint(1, 1), imgBack);
+        }
+        if (config.GetValue("roundedCorners")) {
+            DrawRoundedCornersWithBorder(pixmapStatus, col, config.GetValue("cornerRadius"), geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+        }
+    }
+    int textWidth = fontManager->menuMessage->Width(Text);
+    tColor clrFontBack = (config.GetValue("displayType") != dtFlat)?(clrTransparent):col;
+    pixmapStatus->DrawText(cPoint((geoManager->menuMessageWidth - textWidth) / 2,
+                                  (geoManager->menuMessageHeight - fontManager->menuMessage->Height()) / 2),
+                                  Text,
+                                  colFont,
+                                  clrFontBack,
+                                  fontManager->menuMessage);
 }
 
 void cNopacityDisplayMenuView::ClearMessage(void) {
@@ -779,29 +736,33 @@ void cNopacityDisplayMenuView::ClearMessage(void) {
     }
 }
 
-void cNopacityDisplayMenuView::SetDetailViewSize(eDetailViewType detailViewType, cNopacityMenuDetailView *detailView) {
-    int x = (config.menuAdjustLeft) ? 0 : osdWidth - contentWidthFull + 2*spaceMenu;
+void cNopacityDisplayMenuView::SetDetailViewSize(eDetailViewType detailViewType, cNopacityDetailView *detailView) {
+    int x = (config.GetValue("menuAdjustLeft")) ? 0 : geoManager->osdWidth - geoManager->menuContentWidthFull + 2*geoManager->menuSpace;
     int width = 0;
     int height = 0;
     int top = 0;
-    int contentBorder = 20;
+    int contentBorder = 30;
     int detailHeaderHeight = 0;
-    
+
+    width = geoManager->menuContentWidthFull - 2*geoManager->menuSpace;
+    height = geoManager->menuContentHeight;
+    top = geoManager->menuHeaderHeight;
+
     switch (detailViewType) {
         case dvEvent:
-            detailHeaderHeight = max(config.detailViewLogoHeight, config.epgImageHeight)+4;
+            detailHeaderHeight = config.GetValue("headerDetailedEPG") * height / 100;
+            contentBorder = config.GetValue("borderDetailedEPG");
             break;
         case dvRecording:
-            detailHeaderHeight = config.epgImageHeight + 4;
+            detailHeaderHeight = config.GetValue("headerDetailedRecordings") * height / 100;
+            contentBorder = config.GetValue("borderDetailedRecordings");
             break;
         case dvText:
-            detailHeaderHeight = 0;         
+            detailHeaderHeight = 0;
             break;
         default:
             break;
     }
-    width = contentWidthFull - 2*spaceMenu;
-    height = contentHeight;
-    top = headerHeight;
     detailView->SetGeometry(x, width, height, top, contentBorder, detailHeaderHeight);
-}
+    detailView->SetScrollBar(pixmapScrollbar, pixmapScrollbarBack);
+}
\ No newline at end of file
diff --git a/displaymenuview.h b/displaymenuview.h
index 63af3c8..974bab7 100644
--- a/displaymenuview.h
+++ b/displaymenuview.h
@@ -1,97 +1,61 @@
 #ifndef __NOPACITY_DISPLAYMENUVIEW_H
 #define __NOPACITY_DISPLAYMENUVIEW_H
 
-enum eDetailViewType {dvEvent = 0, dvRecording, dvText};
+#include "timers.h"
+#include "menudetailview.h"
+#include <vdr/skins.h>
+#include <vdr/videodir.h>
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
 
 class cNopacityDisplayMenuView {
     private:
         cOsd *osd;
+        cImageCache *imgCache;
         cString lastDate;
         int diskUsageAlert;
         cPixmap *pixmapHeader;
+        cPixmap *pixmapHeaderForeground;
         cPixmap *pixmapHeaderLogo;
         cPixmap *pixmapHeaderIcon;
         cPixmap *pixmapHeaderLabel;
         cPixmap *pixmapDate;
         cPixmap *pixmapFooter;
+        cPixmap *pixmapFooterBack;
+        cPixmap *pixmapButtonsText;
         cPixmap *pixmapContent;
-        cPixmap *pixmapScrollbar;   
+        cPixmap *pixmapScrollbar;
+        cPixmap *pixmapScrollbarBack;
         cPixmap *pixmapDiskUsage;
         cPixmap *pixmapDiskUsageIcon;
         cPixmap *pixmapDiskUsageLabel;
         cPixmap *pixmapStatus;
-        cFont *fontHeader;
-        cFont *fontDate;
-        cFont *fontMenuitemLarge;
-        cFont *fontMenuitemSchedule;
-        cFont *fontMenuitemScheduleSmall;
-        cFont *fontMenuitemChannel;
-        cFont *fontMenuitemChannelSmall;
-        cFont *fontMenuitemRecordings;
-        cFont *fontMenuitemRecordingsSmall;
-        cFont *fontMenuitemTimers;
-        cFont *fontMenuitemTimersSmall;
-        cFont *fontMenuitemDefault;
-        cFont *fontDiskUsage;
-        cFont *fontDiskUsagePercent;
-        cFont *fontTimers;
-        cFont *fontTimersHead;
-        cFont *fontButtons;
-        cFont *fontMessage;
-        cFont *fontEPGInfoWindow;
-        int osdWidth, osdHeight;
-        int osdLeft, osdTop;
-        int widthScrollbar;
-        int dateWidth;
-        int headerHeight, footerHeight, contentHeight;
-        int contentWidthFull;
-        int contentWidthMain;
-        int contentWidthSchedules;
-        int contentWidthChannels;
-        int contentWidthTimers;
-        int contentWidthRecordings;
-        int contentWidthSetup;
-        int contentWidthMinimum;
-        int menuItemWidthDefault, menuItemHeightDefault;
-        int menuItemWidthMain, menuItemHeightMain;
-        int menuItemWidthSchedule, menuItemHeightSchedule;
-        int menuItemWidthChannel;
-        int menuItemWidthTimer;
-        int menuItemWidthRecording, menuItemHeightRecordings;
-        int menuItemWidthSetup;
-        int diskUsageWidth, diskUsageHeight;
-        int timersWidth;
-        int buttonsBorder, buttonWidth, buttonHeight;
-        int messageWidth, messageHeight;
+        int feedNameLength;
         int avrgFontWidth;
         cRect textWindowSizeSchedules;
         cRect textWindowSizeRecordings;
-        void SetDescriptionTextWindowSize(void);
+        cRect textWindowSizeChannels;
+        cRect textWindowSizeTimers;
         int GetContentWidth(eMenuCategory menuCat);
     public:
-        cNopacityDisplayMenuView();
+        cNopacityDisplayMenuView(cImageCache *imgCache);
         virtual ~cNopacityDisplayMenuView(void);
         cOsd *createOsd(void);
-        void SetGeometry(void);
+        void SetDescriptionTextWindowSize(void);
         void CreatePixmaps(void);
         void SetPixmapAlpha(int Alpha);
-        void CreateFonts(void);
-        cFont *GetMenuItemFont(eMenuCategory menuCat);
-        cFont *GetMenuItemFontSmall(eMenuCategory menuCat);
-        cFont *GetEPGWindowFont(void);
         void GetMenuItemSize(eMenuCategory menuCat, cPoint *itemSize);
-        int GetMaxItems(eMenuCategory menuCat);
         int GetMenuTop(int numItems, int itemHeight);
         int GetMenuItemLeft(int itemWidth);
         void SetAvrgFontWidth(void);
         int mytabs[cSkinDisplayMenu::MaxTabs];
         void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0);
         int GetEditableWidth(void);
-        int GetWidthDefaultMenu(void) {return menuItemWidthDefault;};
+        int GetWidthDefaultMenu(void) {return geoManager->menuItemWidthDefault;};
         int GetTextAreaWidth(void);
         const cFont *GetTextAreaFont(bool FixedFont);
         cRect *GetDescriptionTextWindowSize(eMenuCategory menuCat);
-        void CreateBackgroundImages(int *handleBackgrounds, int *handleButtons);
         void AdjustContentBackground(eMenuCategory menuCat, eMenuCategory menuCatLast, cRect & vidWin);
         void DrawBorderDecoration(void);
         int ShowHeaderLogo(bool show);
@@ -103,7 +67,7 @@ class cNopacityDisplayMenuView {
         void DrawDate(bool initial);
         void DrawDiskUsage(void);
         void ShowDiskUsage(bool show);
-        void DrawButton(const char *text, int handleImage, tColor borderColor, int num);
+        void DrawButton(const char *text, eSkinElementType seButton, tColor buttonColor, tColor borderColor, tColor fontColor, int num);
         void ClearButton(int num);
         int GetTimersInitHeight(void);
         int GetTimersMaxHeight(void);
@@ -113,8 +77,7 @@ class cNopacityDisplayMenuView {
         void ClearScrollbar(void);
         void DrawMessage(eMessageType Type, const char *Text);
         void ClearMessage(void);
-        void SetDetailViewSize(eDetailViewType detailViewType, cNopacityMenuDetailView *detailView);
-        int spaceMenu;
+        void SetDetailViewSize(eDetailViewType detailViewType, cNopacityDetailView *detailView);
 };
 
 
diff --git a/displaymessage.c b/displaymessage.c
index 4b5fb47..f2c9c65 100644
--- a/displaymessage.c
+++ b/displaymessage.c
@@ -1,18 +1,21 @@
 #include "displaymessage.h"
+#include "config.h"
+#include "imageloader.h"
+#include "helpers.h"
 
-cNopacityDisplayMessage::cNopacityDisplayMessage(void) {
-    config.setDynamicValues();
-    height = cOsd::OsdHeight() * config.messageHeight / 100;
-    int top = cOsd::OsdTop() + cOsd::OsdHeight() - height - config.messageBorderBottom;
-    width = cOsd::OsdWidth() * config.messageWidth / 100;
-    int left = (cOsd::OsdLeft() + cOsd::OsdWidth() - width) / 2;
-    osd = CreateOsd(left, top, width, height);
-    pixmap = osd->CreatePixmap(1, cRect(0, 0, width, height));
-    if (config.messageFadeTime)
+cNopacityDisplayMessage::cNopacityDisplayMessage(cImageCache *imgCache) {
+    this->imgCache = imgCache;
+    FadeTime = config.GetValue("messageFadeTime");
+    FrameTime = FadeTime / 10;
+    int top = geoManager->osdTop + geoManager->osdHeight - geoManager->messageHeight - config.GetValue("messageBorderBottom");
+    int left = geoManager->osdLeft + (geoManager->osdWidth - geoManager->messageWidth) / 2;
+    osd = CreateOsd(left, top, geoManager->messageWidth, geoManager->messageHeight);
+    pixmap = osd->CreatePixmap(2, cRect(0, 0, geoManager->messageWidth, geoManager->messageHeight));
+    pixmapBackground = osd->CreatePixmap(1, cRect(0, 0, geoManager->messageWidth, geoManager->messageHeight));
+    if (FadeTime) {
         pixmap->SetAlpha(0);
-    font = cFont::CreateFont(config.fontName, height / 4 + 15 + config.fontMessage);
-    FrameTime = config.messageFrameTime;
-    FadeTime = config.messageFadeTime;
+        pixmapBackground->SetAlpha(0);
+    }
 }
 
 cNopacityDisplayMessage::~cNopacityDisplayMessage() {
@@ -20,33 +23,62 @@ cNopacityDisplayMessage::~cNopacityDisplayMessage() {
     while (Active())
         cCondWait::SleepMs(10);
     osd->DestroyPixmap(pixmap);
-    delete font;
+    osd->DestroyPixmap(pixmapBackground);
     delete osd;
 }
 
 void cNopacityDisplayMessage::SetMessage(eMessageType Type, const char *Text) {
     tColor col = Theme.Color(clrMessageStatus);
+    tColor colFont = Theme.Color(clrMessageFontStatus);
+    eSkinElementType seType = seMessageStatus;
     switch (Type) {
-        case mtStatus: 
+        case mtStatus:
             col = Theme.Color(clrMessageStatus);
+            colFont = Theme.Color(clrMessageFontStatus);
+            seType = seMessageStatus;
             break;
         case mtInfo:
             col = Theme.Color(clrMessageInfo);
+            colFont = Theme.Color(clrMessageFontInfo);
+            seType = seMessageInfo;
             break;
         case mtWarning:
             col = Theme.Color(clrMessageWarning);
+            colFont = Theme.Color(clrMessageFontWarning);
+            seType = seMessageWarning;
             break;
         case mtError:
             col = Theme.Color(clrMessageError);
+            colFont = Theme.Color(clrMessageFontError);
+            seType = seMessageError;
             break;
     }
-    pixmap->Fill(col);
-    cImageLoader imgLoader;
-    imgLoader.DrawBackground2(Theme.Color(clrMessageBlend), col, width-2, height-2);
-    pixmap->DrawImage(cPoint(1, 1), imgLoader.GetImage());
-    int textWidth = font->Width(Text);
-    pixmap->DrawText(cPoint((width - textWidth) / 2, (height - font->Height()) / 2), Text, Theme.Color(clrMessageFont), clrTransparent, font);
-    if (config.messageFadeTime)
+
+    pixmap->Fill(clrTransparent);
+    if (config.GetValue("displayType") == dtGraphical) {
+        pixmapBackground->Fill(clrTransparent);
+        cImage *imgBack = imgCache->GetSkinElement(seType);
+        if (imgBack) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *imgBack);
+        }
+    } else {
+        pixmapBackground->Fill(col);
+        if (config.GetValue("displayType") == dtBlending) {
+            cImage imgBack = imgCache->GetBackground(Theme.Color(clrMessageBlend), col, geoManager->messageWidth-2, geoManager->messageHeight-2, true);
+            pixmapBackground->DrawImage(cPoint(1, 1), imgBack);
+        }
+        if (config.GetValue("roundedCorners")) {
+            DrawRoundedCornersWithBorder(pixmapBackground, col, config.GetValue("cornerRadius"), geoManager->messageWidth, geoManager->messageHeight);
+        }
+    }
+    int textWidth = fontManager->messageText->Width(Text);
+    pixmap->DrawText(cPoint((geoManager->messageWidth - textWidth) / 2,
+                            (geoManager->messageHeight - fontManager->messageText->Height()) / 2),
+                            Text,
+                            colFont,
+                            clrTransparent,
+                            fontManager->messageText);
+    if (FadeTime)
         Start();
 }
 
@@ -61,10 +93,11 @@ void cNopacityDisplayMessage::Action(void) {
         cPixmap::Lock();
         double t = min(double(Now - Start) / FadeTime, 1.0);
         int Alpha = t * ALPHA_OPAQUE;
+        pixmapBackground->SetAlpha(Alpha);
         pixmap->SetAlpha(Alpha);
+        cPixmap::Unlock();
         if (Running())
             osd->Flush();
-        cPixmap::Unlock();
         int Delta = cTimeMs::Now() - Now;
         if (Running() && (Delta < FrameTime))
             cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaymessage.h b/displaymessage.h
index b287e33..fc1d5b0 100644
--- a/displaymessage.h
+++ b/displaymessage.h
@@ -1,17 +1,21 @@
 #ifndef __NOPACITY_DISPLAYMESSAGE_H
 #define __NOPACITY_DISPLAYMESSAGE_H
+
+#include <vdr/thread.h>
+#include <vdr/skins.h>
+#include "imagecache.h"
+
 class cNopacityDisplayMessage : public cSkinDisplayMessage , cThread {
 private:
     cOsd *osd;
-    int width;
-    int height;
+    cImageCache *imgCache;
     cPixmap *pixmap;
-    cFont *font;
+    cPixmap *pixmapBackground;
     int FrameTime;
     int FadeTime;
     virtual void Action(void);
 public:
-  cNopacityDisplayMessage(void);
+  cNopacityDisplayMessage(cImageCache *imgCache);
   virtual ~cNopacityDisplayMessage();
   virtual void SetMessage(eMessageType Type, const char *Text);
   virtual void Flush(void);
diff --git a/displayreplay.c b/displayreplay.c
index b19351b..6e42cea 100644
--- a/displayreplay.c
+++ b/displayreplay.c
@@ -1,17 +1,18 @@
 #include "displayreplay.h"
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
 
-cNopacityDisplayReplay::cNopacityDisplayReplay(bool ModeOnly) {
-    config.setDynamicValues();
+cNopacityDisplayReplay::cNopacityDisplayReplay(cImageCache *imgCache, bool ModeOnly) {
+    this->imgCache = imgCache;
     initial = true;
     modeOnly = ModeOnly;
     lastDate = "";
-    FrameTime = config.replayFrameTime;
-    FadeTime = config.replayFadeTime;
-
-    SetGeometry();
+    FadeTime = config.GetValue("replayFadeTime");
+    FrameTime = FadeTime / 10;
+    createOSD();
     CreatePixmaps();
     DrawBackground();
-    CreateFonts();
 }
 
 cNopacityDisplayReplay::~cNopacityDisplayReplay() {
@@ -19,132 +20,205 @@ cNopacityDisplayReplay::~cNopacityDisplayReplay() {
     while (Active())
         cCondWait::SleepMs(10);
     if (!modeOnly) {
-        osd->DestroyPixmap(pixmapHeader);
         osd->DestroyPixmap(pixmapBackground);
+        osd->DestroyPixmap(pixmapTop);
         osd->DestroyPixmap(pixmapInfo);
         osd->DestroyPixmap(pixmapDate);
         osd->DestroyPixmap(pixmapInfo2);
         osd->DestroyPixmap(pixmapProgressBar);
         osd->DestroyPixmap(pixmapCurrent);
         osd->DestroyPixmap(pixmapTotal);
-        osd->DestroyPixmap(pixmapScreenResolution);
+        osd->DestroyPixmap(pixmapScreenResBackground);
+        osd->DestroyPixmap(pixmapScreenRes);
         osd->DestroyPixmap(pixmapJump);
-        osd->DestroyPixmap(pixmapFooter);
+        osd->DestroyPixmap(pixmapMessage);
     }
     osd->DestroyPixmap(pixmapControls);
     osd->DestroyPixmap(pixmapRew);
-    osd->DestroyPixmap(pixmapRewSpeed);
     osd->DestroyPixmap(pixmapPause);
     osd->DestroyPixmap(pixmapPlay);
     osd->DestroyPixmap(pixmapFwd);
-    osd->DestroyPixmap(pixmapFwdSpeed);
-    delete fontReplayHeader;
-    delete fontReplay;
     delete osd;
 }
 
-void cNopacityDisplayReplay::SetGeometry(void) {
-    height = cOsd::OsdHeight() * config.replayHeight / 100;
-    width = cOsd::OsdWidth() - 2 * config.replayBorderVertical;
-    int top = cOsd::OsdTop() + cOsd::OsdHeight() - height - config.replayBorderBottom;
-    osd = CreateOsd(cOsd::OsdLeft() + config.replayBorderVertical, top, width, height);
-    headerHeight = height * 0.2;
-    if (headerHeight%2 != 0)
-        headerHeight++;
-    footerHeight = headerHeight;
-    info2Height = 0.2 * height;
-    progressBarHeight = 0.1 * height;
-    if (progressBarHeight%2 != 0)
-        progressBarHeight++;
-    currentHeight = progressBarHeight + config.fontReplay;
-    controlsHeight = height - headerHeight - info2Height - footerHeight - progressBarHeight;
-
-    infoWidth = 0.75 * width - config.resolutionIconSize - 10;
-    dateWidth = width - infoWidth;
-
-    resolutionX = 10;
-    resolutionY = 5;
-    
-    jumpX = (width - 4 * controlsHeight)/2 + 5*controlsHeight;
-    jumpY = headerHeight + info2Height + progressBarHeight;
-    jumpWidth = width - jumpX;
-    jumpHeight = controlsHeight;
+void cNopacityDisplayReplay::createOSD(void) {
+    int top = geoManager->osdTop
+              + geoManager->osdHeight
+              - geoManager->replayHeight
+              - config.GetValue("replayBorderBottom");
+    osd = CreateOsd(geoManager->osdLeft + config.GetValue("replayBorderVertical"),
+                    top,
+                    geoManager->replayWidth,
+                    geoManager->replayHeight);
 }
 
 void cNopacityDisplayReplay::CreatePixmaps(void) {
     if (!modeOnly) {
-        pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, width, headerHeight));
-        pixmapBackground = osd->CreatePixmap(1, cRect(0, headerHeight, width, info2Height + progressBarHeight + controlsHeight));
-        pixmapFooter = osd->CreatePixmap(1, cRect(0, headerHeight + info2Height + progressBarHeight + controlsHeight, width, footerHeight));
-        pixmapInfo = osd->CreatePixmap(2, cRect(config.resolutionIconSize + 10, 0, infoWidth, headerHeight));
-        pixmapDate = osd->CreatePixmap(2, cRect(infoWidth, 0, dateWidth, headerHeight));
-        pixmapInfo2 = osd->CreatePixmap(2, cRect(config.resolutionIconSize + 10, headerHeight, infoWidth, info2Height));
-        pixmapProgressBar = osd->CreatePixmap(2, cRect(0, headerHeight + info2Height, width, progressBarHeight));
-        pixmapCurrent = osd->CreatePixmap(3, cRect(0, headerHeight + info2Height + progressBarHeight, width/5, currentHeight));
-        pixmapTotal = osd->CreatePixmap(3, cRect(4*width/5, headerHeight + info2Height + progressBarHeight, width/5, currentHeight));
-        pixmapScreenResolution = osd->CreatePixmap(5, cRect(resolutionX, resolutionY, config.resolutionIconSize, config.resolutionIconSize));
-        pixmapJump = osd->CreatePixmap(4, cRect(jumpX, jumpY, jumpWidth, jumpHeight));
+        pixmapBackground = osd->CreatePixmap(1, cRect(0,
+                                                      0,
+                                                      geoManager->replayWidth,
+                                                      geoManager->replayHeight));
+        pixmapTop = osd->CreatePixmap(7, cRect(0,
+                                               0,
+                                               geoManager->replayWidth,
+                                               geoManager->replayHeight));
+        pixmapInfo = osd->CreatePixmap(2, cRect(0,
+                                                0,
+                                                geoManager->replayInfoWidth,
+                                                geoManager->replayHeaderHeight));
+        pixmapDate = osd->CreatePixmap(2, cRect(geoManager->replayInfoWidth,
+                                                0,
+                                                geoManager->replayDateWidth,
+                                                geoManager->replayHeaderHeight));
+        pixmapInfo2 = osd->CreatePixmap(2, cRect(0,
+                                                 geoManager->replayHeaderHeight,
+                                                 geoManager->replayInfoWidth,
+                                                 geoManager->replayInfo2Height));
+        pixmapProgressBar = osd->CreatePixmap(2, cRect(0,
+                                                       geoManager->replayHeaderHeight
+                                                       + geoManager->replayInfo2Height,
+                                                       geoManager->replayWidth,
+                                                       geoManager->replayProgressBarHeight));
+        pixmapCurrent = osd->CreatePixmap(3, cRect(0,
+                                                   geoManager->replayHeaderHeight
+                                                   + geoManager->replayInfo2Height
+                                                   + geoManager->replayProgressBarHeight,
+                                                   geoManager->replayWidth/5,
+                                                   geoManager->replayCurrentHeight));
+        pixmapTotal = osd->CreatePixmap(3, cRect(4*geoManager->replayWidth/5,
+                                                 geoManager->replayHeaderHeight
+                                                 + geoManager->replayInfo2Height
+                                                 + geoManager->replayProgressBarHeight,
+                                                 geoManager->replayWidth/5,
+                                                 geoManager->replayCurrentHeight));
+        pixmapScreenResBackground = osd->CreatePixmap(5, cRect(geoManager->replayResolutionX - 10,
+                                                     geoManager->replayResolutionY - 5,
+                                                     geoManager->replayResolutionSize * 3 + 20,
+                                                     geoManager->replayResolutionSize + 10));
+        pixmapScreenRes = osd->CreatePixmap(6, cRect(geoManager->replayResolutionX,
+                                                     geoManager->replayResolutionY,
+                                                     geoManager->replayResolutionSize * 3,
+                                                     geoManager->replayResolutionSize));
+        pixmapJump = osd->CreatePixmap(4, cRect(geoManager->replayJumpX,
+                                                geoManager->replayJumpY,
+                                                geoManager->replayJumpWidth,
+                                                geoManager->replayJumpHeight));
+        pixmapMessage = osd->CreatePixmap(4, cRect(0,
+                                                   geoManager->replayMessageY,
+                                                   geoManager->replayMessageWidth,
+                                                   geoManager->replayMessageHeight));
     }
-    
-    int controlY = headerHeight + info2Height + progressBarHeight;
-    iconBorder = 5;
-    iconSize = min(controlsHeight - 2*iconBorder, 128);
-    int backgroundWidth = 2 * iconBorder + iconSize;
+
+    int controlY = geoManager->replayHeaderHeight
+                    + geoManager->replayInfo2Height
+                    + geoManager->replayProgressBarHeight;
+    int iconBorder = geoManager->replayIconBorder;
+    int iconSize = geoManager->replayIconSize;
+    int iconWidth = 2 * iconBorder + iconSize;
 
     if (!modeOnly) {
-        pixmapControls = osd->CreatePixmap(2, cRect(0, controlY, width, controlsHeight));
+        pixmapControls = osd->CreatePixmap(2, cRect(0,
+                                                    controlY,
+                                                    geoManager->replayWidth,
+                                                    geoManager->replayControlsHeight));
     } else {
-        pixmapControls = osd->CreatePixmap(2, cRect( (width - (5 * backgroundWidth))/2, controlY - 10, 5 * backgroundWidth, controlsHeight + 20));
+        pixmapControls = osd->CreatePixmap(2, cRect((geoManager->replayWidth
+                                                     - (5 * iconWidth))/2,
+                                                    controlY - 10,
+                                                    5 * iconWidth,
+                                                    geoManager->replayControlsHeight + 20));
     }
-    pixmapRew = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + iconBorder, controlY + iconBorder, iconSize, iconSize));   
-    pixmapRewSpeed = osd->CreatePixmap(5, cRect((width - 4 * backgroundWidth)/2 + iconBorder, controlY + iconBorder, iconSize, iconSize));  
-    pixmapPause = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + (iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize)); 
-    pixmapPlay = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + 2*(iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize));    
-    pixmapFwd = osd->CreatePixmap(4, cRect((width - 4 * backgroundWidth)/2 + 3*(iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize)); 
-    pixmapFwdSpeed = osd->CreatePixmap(5, cRect((width - 4 * backgroundWidth)/2 + 3*(iconSize + 2*iconBorder) + iconBorder, controlY + iconBorder, iconSize, iconSize));    
+    int iconX = (geoManager->replayWidth - 4 * iconWidth)/2;
+    pixmapRew = osd->CreatePixmap(4, cRect(iconX + iconBorder,
+                                           controlY + iconBorder,
+                                           iconSize,
+                                           iconSize));
+    pixmapPause = osd->CreatePixmap(4, cRect(iconX + iconSize + 3*iconBorder,
+                                             controlY + iconBorder,
+                                             iconSize,
+                                             iconSize));
+    pixmapPlay = osd->CreatePixmap(4, cRect(iconX + 2*iconSize + 3*iconBorder,
+                                            controlY + iconBorder,
+                                            iconSize,
+                                            iconSize));
+    pixmapFwd = osd->CreatePixmap(4, cRect(iconX + 3*iconSize + 3*iconBorder,
+                                           controlY + iconBorder,
+                                           iconSize,
+                                           iconSize));
 
-    if (config.replayFadeTime) {
+    if (FadeTime) {
         if (!modeOnly) {
-            pixmapHeader->SetAlpha(0);
             pixmapBackground->SetAlpha(0);
+            pixmapTop->SetAlpha(0);
             pixmapInfo->SetAlpha(0);
             pixmapDate->SetAlpha(0);
             pixmapInfo2->SetAlpha(0);
             pixmapProgressBar->SetAlpha(0);
             pixmapCurrent->SetAlpha(0);
             pixmapTotal->SetAlpha(0);
-            pixmapScreenResolution->SetAlpha(0);
+            pixmapScreenResBackground->SetAlpha(0);
+            pixmapScreenRes->SetAlpha(0);
             pixmapJump->SetAlpha(0);
-            pixmapFooter->SetAlpha(0);
+            pixmapMessage->SetAlpha(0);
         }
         pixmapControls->SetAlpha(0);
-        pixmapRew->SetAlpha(0); 
-        pixmapRewSpeed->SetAlpha(0);    
-        pixmapPause->SetAlpha(0);   
-        pixmapPlay->SetAlpha(0);    
+        pixmapRew->SetAlpha(0);
+        pixmapPause->SetAlpha(0);
+        pixmapPlay->SetAlpha(0);
         pixmapFwd->SetAlpha(0);
-        pixmapFwdSpeed->SetAlpha(0);    
+    } else if (!modeOnly) {
+        int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*255/100;
+        pixmapBackground->SetAlpha(alphaBack);
     }
 }
 
-void cNopacityDisplayReplay::CreateFonts(void) {
-    fontReplayHeader = cFont::CreateFont(config.fontName, headerHeight - 8 + config.fontReplayHeader);
-    fontReplay = cFont::CreateFont(config.fontName, currentHeight);
-}
-
 void cNopacityDisplayReplay::DrawBackground(void) {
     if (!modeOnly) {
-        DrawBlendedBackground(pixmapHeader, Theme.Color(clrReplayBackground), Theme.Color(clrReplayBackBlend), true);
-        pixmapHeader->DrawEllipse(cRect(0,0, headerHeight/2, headerHeight/2), clrTransparent, -2);
-        pixmapHeader->DrawEllipse(cRect(width - headerHeight/2 ,0 ,headerHeight/2,headerHeight/2), clrTransparent, -1);
-        pixmapBackground->Fill(Theme.Color(clrReplayBackground));
+        if (config.GetValue("displayType") == dtGraphical) {
+            cImage *imgBack = imgCache->GetSkinElement(seReplayBackground);
+            if (imgBack)
+                pixmapBackground->DrawImage(cPoint(0,0), *imgBack);
+            cImage *imgTop = imgCache->GetSkinElement(seReplayTop);
+            if (imgTop)
+                pixmapTop->DrawImage(cPoint(0,0), *imgTop);
+            else
+	        pixmapTop->Fill(clrTransparent);
+        } else {
+            pixmapBackground->Fill(Theme.Color(clrReplayBackground));
+            pixmapTop->Fill(clrTransparent);
+            if (config.GetValue("displayType") == dtBlending &&
+                   (Theme.Color(clrReplayBackground) != Theme.Color(clrReplayBackBlend))) {
+                DrawBlendedBackground(pixmapBackground,
+                                      0,
+                                      geoManager->replayWidth,
+                                      Theme.Color(clrReplayBackground),
+                                      Theme.Color(clrReplayBackBlend),
+                                      true);
+                DrawBlendedBackground(pixmapBackground,
+                                      0,
+                                      geoManager->replayWidth,
+                                      Theme.Color(clrReplayBackground),
+                                      Theme.Color(clrReplayBackBlend),
+                                      false);
+            }
+            if (config.GetValue("roundedCornersChannel")) {
+                int cornerRadius = geoManager->replayHeaderHeight/2;
+                if (cornerRadius > 2) {
+                    DrawRoundedCorners(pixmapBackground,
+                                       cornerRadius,
+                                       0,
+                                       0,
+                                       geoManager->replayWidth,
+                                       geoManager->replayHeight);
+                }
+            }
+        }
         pixmapControls->Fill(clrTransparent);
         pixmapProgressBar->Fill(clrTransparent);
-        pixmapScreenResolution->Fill(clrTransparent);
+        pixmapScreenResBackground->Fill(clrTransparent);
+        pixmapScreenRes->Fill(clrTransparent);
         pixmapJump->Fill(clrTransparent);
-        DrawBlendedBackground(pixmapFooter, Theme.Color(clrReplayBackground), Theme.Color(clrReplayBackBlend), false);
-        pixmapFooter->DrawEllipse(cRect(0,footerHeight/2,footerHeight/2,footerHeight/2), clrTransparent, -3);
-        pixmapFooter->DrawEllipse(cRect(width - footerHeight/2, footerHeight/2 ,footerHeight/2,footerHeight/2), clrTransparent, -4);
+        pixmapMessage->Fill(clrTransparent);
     } else {
         pixmapControls->Fill(Theme.Color(clrMenuBorder));
         pixmapControls->DrawRectangle(cRect(2, 2, pixmapControls->ViewPort().Width() - 4, pixmapControls->ViewPort().Height() - 4),Theme.Color(clrReplayBackground));
@@ -152,37 +226,39 @@ void cNopacityDisplayReplay::DrawBackground(void) {
 }
 
 void cNopacityDisplayReplay::LoadControlIcons(void) {
-    
     pixmapRew->Fill(clrTransparent);
     pixmapPause->Fill(clrTransparent);
     pixmapPlay->Fill(clrTransparent);
     pixmapFwd->Fill(clrTransparent);
-    
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/rewInactive", iconSize)) {
-        pixmapRew->DrawImage(cPoint(0,0), imgLoader.GetImage());
-    }
-    if (imgLoader.LoadIcon("skinIcons/pauseInactive", iconSize)) {
-        pixmapPause->DrawImage(cPoint(0,0), imgLoader.GetImage());
-    }
-    if (imgLoader.LoadIcon("skinIcons/playInactive", iconSize)) {
-        pixmapPlay->DrawImage(cPoint(0,0), imgLoader.GetImage());
-    }
-    if (imgLoader.LoadIcon("skinIcons/fwdInactive", iconSize)) {
-        pixmapFwd->DrawImage(cPoint(0,0), imgLoader.GetImage());
-    }
+    int iconSize = geoManager->replayIconSize;
+    cImage *imgRew = imgCache->GetSkinIcon("skinIcons/rewInactive", iconSize, iconSize);
+    if (imgRew)
+        pixmapRew->DrawImage(cPoint(0,0), *imgRew);
+    cImage *imgPause = imgCache->GetSkinIcon("skinIcons/pauseInactive", iconSize, iconSize);
+    if (imgPause)
+        pixmapPause->DrawImage(cPoint(0,0), *imgPause);
+    cImage *imgPlay = imgCache->GetSkinIcon("skinIcons/playInactive", iconSize, iconSize);
+    if (imgPlay)
+        pixmapPlay->DrawImage(cPoint(0,0), *imgPlay);
+    cImage *imgFwd = imgCache->GetSkinIcon("skinIcons/fwdInactive", iconSize, iconSize);
+    if (imgFwd)
+        pixmapFwd->DrawImage(cPoint(0,0), *imgFwd);
 }
 
 
 void cNopacityDisplayReplay::DrawDate(void) {
     cString curDate = DayDateTime();
     if (initial || strcmp(curDate, lastDate)) {
-        int strDateWidth = fontReplay->Width(curDate);
-        int strDateHeight = fontReplay->Height();
-        int x = dateWidth - strDateWidth - headerHeight/2;
-        int y = (headerHeight - strDateHeight) / 2;
+        int strDateWidth = fontManager->replayText->Width(curDate);
+        int strDateHeight = fontManager->replayText->Height();
+        int x = geoManager->replayDateWidth - strDateWidth - geoManager->replayHeaderHeight/2;
+        int y = (geoManager->replayHeaderHeight - strDateHeight) / 2;
         pixmapDate->Fill(clrTransparent);
-        pixmapDate->DrawText(cPoint(x, y), curDate, Theme.Color(clrReplayHead), clrTransparent, fontReplay);
+        pixmapDate->DrawText(cPoint(x, y),
+                             curDate,
+                             Theme.Color(clrReplayHead),
+                             clrTransparent,
+                             fontManager->replayText);
         lastDate = curDate;
     }
 }
@@ -196,114 +272,211 @@ void cNopacityDisplayReplay::DrawScreenResolution(void) {
     switch (screenWidth) {
         case 1920:
         case 1440:
-            iconName = "skinIcons/hd1080i";
+            iconName = "skinIcons/hd1080i_rec";
             break;
         case 1280:
             if (screenHeight == 720)
-                iconName = "skinIcons/hd720p";
+                iconName = "skinIcons/hd720p_rec";
             else
-                iconName = "skinIcons/hd1080i";
+                iconName = "skinIcons/hd1080i_rec";
             break;
         case 720:
-            iconName = "skinIcons/sd576i";
+            iconName = "skinIcons/sd576i_rec";
             break;
         default:
-            iconName = "skinIcons/sd576i";
+            iconName = "skinIcons/sd576i_rec";
             break;
     }
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon(*iconName, config.resolutionIconSize)) {
-        pixmapScreenResolution->DrawImage(cPoint(0,0), imgLoader.GetImage());
+    int replaySize = geoManager->replayResolutionSize;
+    cImage *imgRes = imgCache->GetSkinIcon(*iconName, 3 * replaySize, replaySize);
+    if (imgRes) {
+        pixmapScreenResBackground->Fill(Theme.Color(clrStatusIconsBack));
+        DrawRoundedCorners(pixmapScreenResBackground,
+                       5,
+                       0,
+                       0,
+                       pixmapScreenResBackground->ViewPort().Width(),
+                       pixmapScreenResBackground->ViewPort().Height()
+                      );
+        pixmapScreenRes->DrawImage(cPoint(0,0), *imgRes);
     }
 }
 
 void cNopacityDisplayReplay::SetRecording(const cRecording *Recording) {
     const cRecordingInfo *RecordingInfo = Recording->Info();
-    SetTitle(RecordingInfo->Title());
+    const char *recName = RecordingInfo->Title();
+    if (!recName) {
+        recName = Recording->Name();
+    }
+    SetTitle(recName);
     cString info2;
     if (RecordingInfo->ShortText())
         info2 = cString::sprintf("%s - %s %s", RecordingInfo->ShortText(), *ShortDateString(Recording->Start()), *TimeString(Recording->Start()));
     else
         info2 = cString::sprintf("%s %s", *ShortDateString(Recording->Start()), *TimeString(Recording->Start()));
-    
+
     pixmapInfo2->Fill(clrTransparent);
-    pixmapInfo2->DrawText(cPoint(headerHeight/2, max( (info2Height - fontReplay->Height())/2 - 10,0 )), *info2, Theme.Color(clrReplayDescription), clrTransparent, fontReplay);
+    pixmapInfo2->DrawText(cPoint(geoManager->replayHeaderHeight/2,
+                                 max((geoManager->replayInfo2Height
+                                      - fontManager->replayText->Height())/2 - 10,
+                                     0)),
+                          *info2,
+                          Theme.Color(clrReplayDescription),
+                          clrTransparent,
+                          fontManager->replayText);
     DrawScreenResolution();
 }
 
 void cNopacityDisplayReplay::SetTitle(const char *Title) {
     pixmapInfo->Fill(clrTransparent);
-    pixmapInfo->DrawText(cPoint(headerHeight/2, 0), Title, Theme.Color(clrReplayHead), clrTransparent, fontReplayHeader);
+    if (!Title)
+        return;
+    int titleLength = fontManager->replayHeader->Width(Title);
+    int titleSpace = geoManager->replayInfoWidth - geoManager->replayHeaderHeight/2;
+    std::string strTitle = Title;
+    if (titleLength > titleSpace)
+        strTitle = CutText(strTitle, titleSpace, fontManager->replayHeader);
+    pixmapInfo->DrawText(cPoint(geoManager->replayHeaderHeight/2, 0),
+                         strTitle.c_str(),
+                         Theme.Color(clrReplayHead),
+                         clrTransparent,
+                         fontManager->replayHeader);
 }
 
 void cNopacityDisplayReplay::SetMode(bool Play, bool Forward, int Speed) {
     LoadControlIcons();
-    pixmapRewSpeed->Fill(clrTransparent);
-    pixmapFwdSpeed->Fill(clrTransparent);
-
-    cImageLoader imgLoader;
-    if (!Play) {
-        pixmapPause->Fill(clrTransparent);
-        if (imgLoader.LoadIcon("skinIcons/pause", iconSize)) {
-            pixmapPause->DrawImage(cPoint(0,0), imgLoader.GetImage());
+    int iconSize = geoManager->replayIconSize;
+    if (Speed == -1) {
+        if (Play) {
+            pixmapPlay->Fill(clrTransparent);
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/play", iconSize, iconSize);
+            if (imgIcon)
+                pixmapPlay->DrawImage(cPoint(0,0), *imgIcon);
+        } else {
+            pixmapPause->Fill(clrTransparent);
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/pause", iconSize, iconSize);
+            if (imgIcon)
+                pixmapPause->DrawImage(cPoint(0,0), *imgIcon);
         }
-    } else if (Play && (Speed < 0)) {
-        pixmapPlay->Fill(clrTransparent);
-        if (imgLoader.LoadIcon("skinIcons/play", iconSize)) {
-            pixmapPlay->DrawImage(cPoint(0,0), imgLoader.GetImage());
+    } else if (Forward) {
+        if (!Play) {
+            pixmapPause->Fill(clrTransparent);
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/pause", iconSize, iconSize);
+            if (imgIcon)
+                pixmapPause->DrawImage(cPoint(0,0), *imgIcon);
         }
-    } else if (Play && Forward) {
         pixmapFwd->Fill(clrTransparent);
-        if (imgLoader.LoadIcon("skinIcons/fwd", iconSize)) {
-            pixmapFwd->DrawImage(cPoint(0,0), imgLoader.GetImage());
-        }
         if (Speed > 0) {
-            cString speed = cString::sprintf("x%d", Speed);
-            int sWidth = fontReplayHeader->Width(*speed);
-            pixmapFwdSpeed->DrawText(cPoint((iconSize - sWidth)/2, (iconSize - fontReplayHeader->Height())/2), *speed, Theme.Color(clrReplayHighlightIcon), clrTransparent, fontReplayHeader); 
+            cString trickIcon = cString::sprintf("skinIcons/fwdx%d", Speed);
+            cImage *imgIcon = imgCache->GetSkinIcon(*trickIcon, iconSize, iconSize);
+            if (imgIcon)
+                pixmapFwd->DrawImage(cPoint(0,0), *imgIcon);
+        } else {
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/fwd", iconSize, iconSize);
+            if (imgIcon)
+                pixmapFwd->DrawImage(cPoint(0,0), *imgIcon);
         }
-    } else if (Play && !Forward) {
-        pixmapRew->Fill(clrTransparent);
-        if (imgLoader.LoadIcon("skinIcons/rew", iconSize)) {
-            pixmapRew->DrawImage(cPoint(0,0), imgLoader.GetImage());
+    } else {
+        if (!Play) {
+            pixmapPause->Fill(clrTransparent);
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/pause", iconSize, iconSize);
+            if (imgIcon)
+                pixmapPause->DrawImage(cPoint(0,0), *imgIcon);
         }
+        pixmapRew->Fill(clrTransparent);
         if (Speed > 0) {
-            cString speed = cString::sprintf("x%d", Speed);
-            int sWidth = fontReplayHeader->Width(*speed);
-            pixmapRewSpeed->DrawText(cPoint((iconSize - sWidth)/2, (iconSize - fontReplayHeader->Height())/2), *speed, Theme.Color(clrReplayHighlightIcon), clrTransparent, fontReplayHeader); 
+            cString trickIcon = cString::sprintf("skinIcons/rewx%d", Speed);
+            cImage *imgIcon = imgCache->GetSkinIcon(*trickIcon, iconSize, iconSize);
+            if (imgIcon)
+                pixmapRew->DrawImage(cPoint(0,0), *imgIcon);
+        } else {
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/rew", iconSize, iconSize);
+            if (imgIcon)
+                pixmapRew->DrawImage(cPoint(0,0), *imgIcon);
         }
     }
-    
 }
 
 void cNopacityDisplayReplay::SetProgress(int Current, int Total) {
-    int barWidth = width - 2*progressBarHeight;
-    cProgressBar pb(barWidth, progressBarHeight-2, Current, Total, marks, Theme.Color(clrReplayProgressSeen), Theme.Color(clrReplayProgressRest), Theme.Color(clrReplayProgressSelected), Theme.Color(clrReplayProgressMark), Theme.Color(clrReplayProgressCurrent));
-    pixmapProgressBar->DrawEllipse(cRect(progressBarHeight/2, 0, progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
-    pixmapProgressBar->DrawEllipse(cRect(barWidth + progressBarHeight/2, 0, progressBarHeight, progressBarHeight), Theme.Color(clrReplayProgressRest));
-    pixmapProgressBar->DrawRectangle(cRect( progressBarHeight, 0, barWidth, progressBarHeight), Theme.Color(clrProgressBarBack));
-    pixmapProgressBar->DrawEllipse(cRect(progressBarHeight/2+1, 1, progressBarHeight-1, progressBarHeight-2), Theme.Color(clrReplayProgressSeen));
-    pixmapProgressBar->DrawBitmap(cPoint(progressBarHeight, 1), pb);
+    if (geoManager->replayProgressBarHeight < 5)
+        return;
+    int barWidth = geoManager->replayWidth - 2*geoManager->replayProgressBarHeight;
+    cProgressBar pb(barWidth,
+                    geoManager->replayProgressBarHeight-2,
+                    Current,
+                    Total,
+                    marks,
+                    Theme.Color(clrReplayProgressSeen),
+                    Theme.Color(clrReplayProgressRest),
+                    Theme.Color(clrReplayProgressSelected),
+                    Theme.Color(clrReplayProgressMark),
+                    Theme.Color(clrReplayProgressCurrent));
+    pixmapProgressBar->DrawEllipse(cRect(geoManager->replayProgressBarHeight/2,
+                                         0,
+                                         geoManager->replayProgressBarHeight,
+                                         geoManager->replayProgressBarHeight),
+                                   Theme.Color(clrProgressBarBack));
+    pixmapProgressBar->DrawEllipse(cRect(barWidth + geoManager->replayProgressBarHeight/2,
+                                         0,
+                                         geoManager->replayProgressBarHeight,
+                                         geoManager->replayProgressBarHeight),
+                                   Theme.Color(clrReplayProgressRest));
+    pixmapProgressBar->DrawRectangle(cRect(geoManager->replayProgressBarHeight,
+                                           0,
+                                           barWidth,
+                                           geoManager->replayProgressBarHeight),
+                                     Theme.Color(clrProgressBarBack));
+    pixmapProgressBar->DrawEllipse(cRect(geoManager->replayProgressBarHeight/2+1,
+                                         1,
+                                         geoManager->replayProgressBarHeight-1,
+                                         geoManager->replayProgressBarHeight-2),
+                                   Theme.Color(clrReplayProgressSeen));
+    pixmapProgressBar->DrawBitmap(cPoint(geoManager->replayProgressBarHeight, 1), pb);
 }
 
 void cNopacityDisplayReplay::SetCurrent(const char *Current) {
     pixmapCurrent->Fill(clrTransparent);
-    pixmapCurrent->DrawText(cPoint(headerHeight/2, 0), Current, Theme.Color(clrReplayCurrentTotal), clrTransparent, fontReplay);
+    pixmapCurrent->DrawText(cPoint(geoManager->replayHeaderHeight/2, 0),
+                            Current,
+                            Theme.Color(clrReplayCurrentTotal),
+                            clrTransparent,
+                            fontManager->replayText);
 }
 
 void cNopacityDisplayReplay::SetTotal(const char *Total) {
     pixmapTotal->Fill(clrTransparent);
-    pixmapTotal->DrawText(cPoint(width/5 - (fontReplay->Width(Total) + headerHeight/2), 0), Total, Theme.Color(clrReplayCurrentTotal), clrTransparent, fontReplay);
+    pixmapTotal->DrawText(cPoint(geoManager->replayWidth/5
+                                 - (fontManager->replayText->Width(Total)
+                                 + geoManager->replayHeaderHeight/2),
+                                 0),
+                          Total,
+                          Theme.Color(clrReplayCurrentTotal),
+                          clrTransparent,
+                          fontManager->replayText);
 }
 
 void cNopacityDisplayReplay::SetJump(const char *Jump) {
     pixmapJump->Fill(clrTransparent);
     if (Jump) {
-        pixmapJump->DrawText(cPoint(0, (jumpHeight - fontReplayHeader->Height())/2), Jump, Theme.Color(clrReplayCurrentTotal), clrTransparent, fontReplayHeader);
+        pixmapJump->DrawText(cPoint(0,
+                                    (geoManager->replayJumpHeight
+                                    - fontManager->replayHeader->Height())/2),
+                             Jump,
+                             Theme.Color(clrReplayCurrentTotal),
+                             clrTransparent,
+                             fontManager->replayHeader);
     }
 }
 
 void cNopacityDisplayReplay::SetMessage(eMessageType Type, const char *Text) {
+    pixmapMessage->Fill(clrTransparent);
+    if (!Text)
+        return;
+    pixmapMessage->DrawText(cPoint(geoManager->replayMessageHeight/2, 0),
+                            Text,
+                            Theme.Color(clrReplayHead),
+                            clrTransparent,
+                            fontManager->replayHeader);
 }
 
 void cNopacityDisplayReplay::Flush(void) {
@@ -311,7 +484,7 @@ void cNopacityDisplayReplay::Flush(void) {
         DrawDate();
     }
     if (initial) {
-        if (config.replayFadeTime)
+        if (FadeTime)
             Start();
     }
     initial = false;
@@ -326,28 +499,29 @@ void cNopacityDisplayReplay::Action(void) {
         double t = min(double(Now - Start) / FadeTime, 1.0);
         int Alpha = t * ALPHA_OPAQUE;
         if (!modeOnly) {
-            pixmapHeader->SetAlpha(Alpha);
-            pixmapBackground->SetAlpha(Alpha);
+            int alphaBack = (100 - config.GetValue("channelBackgroundTransparency"))*Alpha/100;
+            pixmapBackground->SetAlpha(alphaBack);
+            pixmapTop->SetAlpha(Alpha);
             pixmapInfo->SetAlpha(Alpha);
             pixmapDate->SetAlpha(Alpha);
             pixmapInfo2->SetAlpha(Alpha);
             pixmapProgressBar->SetAlpha(Alpha);
             pixmapCurrent->SetAlpha(Alpha);
             pixmapTotal->SetAlpha(Alpha);
-            pixmapScreenResolution->SetAlpha(Alpha);
+            pixmapScreenResBackground->SetAlpha(Alpha);
+            pixmapScreenRes->SetAlpha(Alpha);
             pixmapJump->SetAlpha(Alpha);
-            pixmapFooter->SetAlpha(Alpha);
+            pixmapMessage->SetAlpha(Alpha);
+
         }
         pixmapControls->SetAlpha(Alpha);
-        pixmapRew->SetAlpha(Alpha); 
-        pixmapRewSpeed->SetAlpha(Alpha);    
-        pixmapPause->SetAlpha(Alpha);   
-        pixmapPlay->SetAlpha(Alpha);    
+        pixmapRew->SetAlpha(Alpha);
+        pixmapPause->SetAlpha(Alpha);
+        pixmapPlay->SetAlpha(Alpha);
         pixmapFwd->SetAlpha(Alpha);
-        pixmapFwdSpeed->SetAlpha(Alpha);
+        cPixmap::Unlock();
         if (Running())
             osd->Flush();
-        cPixmap::Unlock();
         int Delta = cTimeMs::Now() - Now;
         if (Running() && (Delta < FrameTime))
             cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displayreplay.h b/displayreplay.h
index ae7ee5f..9ada0fc 100644
--- a/displayreplay.h
+++ b/displayreplay.h
@@ -1,58 +1,45 @@
 #ifndef __NOPACITY_DISPLAYREPLAY_H
 #define __NOPACITY_DISPLAYREPLAY_H
 
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "imagecache.h"
+
 class cNopacityDisplayReplay : public cSkinDisplayReplay , cThread{
 private:
     cOsd *osd;
+    cImageCache *imgCache;
     bool initial;
     bool modeOnly;
     cString lastDate;
-    int width;
-    int height;
-    int headerHeight;
-    int info2Height;
-    int progressBarHeight;
-    int currentHeight;
-    int controlsHeight;
-    int footerHeight;
-    int infoWidth;
-    int dateWidth;
-    int iconSize, iconBorder;
-    int resolutionX, resolutionY; 
-    int jumpX, jumpY; 
-    int jumpWidth, jumpHeight;
     int FrameTime;
     int FadeTime;
-    cPixmap *pixmapHeader;
     cPixmap *pixmapBackground;
+    cPixmap *pixmapTop;
     cPixmap *pixmapInfo;
     cPixmap *pixmapDate;
     cPixmap *pixmapInfo2;
     cPixmap *pixmapProgressBar;
     cPixmap *pixmapCurrent;
     cPixmap *pixmapTotal;
-    cPixmap *pixmapScreenResolution;
+    cPixmap *pixmapScreenRes;
+    cPixmap *pixmapScreenResBackground;
     cPixmap *pixmapControls;
     cPixmap *pixmapRew;
-    cPixmap *pixmapRewSpeed;
     cPixmap *pixmapPause;
     cPixmap *pixmapPlay;
     cPixmap *pixmapFwd;
-    cPixmap *pixmapFwdSpeed;
     cPixmap *pixmapJump;
-    cPixmap *pixmapFooter;
-    cFont *fontReplayHeader;
-    cFont *fontReplay;
+    cPixmap *pixmapMessage;
     virtual void Action(void);
-    void SetGeometry(void);
+    void createOSD(void);
     void CreatePixmaps(void);
-    void CreateFonts(void);
     void DrawBackground(void);
     void DrawDate(void);
     void LoadControlIcons(void);
     void DrawScreenResolution(void);
 public:
-  cNopacityDisplayReplay(bool ModeOnly);
+  cNopacityDisplayReplay(cImageCache *imgCache, bool ModeOnly);
   virtual ~cNopacityDisplayReplay();
   virtual void SetRecording(const cRecording *Recording);
   virtual void SetTitle(const char *Title);
@@ -64,5 +51,5 @@ public:
   virtual void SetMessage(eMessageType Type, const char *Text);
   virtual void Flush(void);
   };
-  
+
 #endif //__NOPACITY_DISPLAYREPLAY_H
\ No newline at end of file
diff --git a/displaytracks.c b/displaytracks.c
index 8dcdc96..7c2a1e1 100644
--- a/displaytracks.c
+++ b/displaytracks.c
@@ -1,17 +1,19 @@
 #include "displaytracks.h"
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
 
-cNopacityDisplayTracks::cNopacityDisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) {
-    config.setDynamicValues();
+
+cNopacityDisplayTracks::cNopacityDisplayTracks(cImageCache *imgCache, const char *Title, int NumTracks, const char * const *Tracks) {
+    this->imgCache = imgCache;
     initial = true;
     currentIndex = -1;
     numTracks = NumTracks;
     audioChannelLast = -5;
-    FrameTime = config.tracksFrameTime; 
-    FadeTime = config.tracksFadeTime;
+    FadeTime = config.GetValue("tracksFadeTime");
+    FrameTime = FadeTime / 10;
     SetGeometry();
     CreatePixmaps();
-    CreateFonts();
-    CreateBackgroundImages();
     DrawHeader(Title);
     for (int i = 0; i < NumTracks; i++)
         SetItem(Tracks[i], i, false);
@@ -25,57 +27,53 @@ cNopacityDisplayTracks::~cNopacityDisplayTracks() {
     osd->DestroyPixmap(pixmapHeader);
     osd->DestroyPixmap(pixmapHeaderAudio);
     menuItems.Clear();
-    for (int i=0; i<2; i++)
-        cOsdProvider::DropImage(handleBackgrounds[i]);
-    delete font;
-    delete fontHeader;
     delete osd;
 }
 
 void cNopacityDisplayTracks::SetGeometry(void) {
-    width = cOsd::OsdWidth() * config.tracksWidth / 100;
-    height = (config.tracksItemHeight +4) * (numTracks+1);
+    width = geoManager->trackWidth;
+    height = (config.GetValue("tracksItemHeight") +4) * (numTracks+1);
 
-    menuItemWidth = width - 4;
-    menuItemHeight = config.tracksItemHeight;
+    menuItemWidth = geoManager->menuItemWidthTracks;
+    menuItemHeight = geoManager->menuItemHeightTracks;
 
     int top, left;
-    switch(config.tracksPosition) {
+    switch(config.GetValue("tracksPosition")) {
         case 0:     //middle bottom
-            top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
-            left = (cOsd::OsdWidth() - width) / 2;
+            top = geoManager->osdTop  + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + (geoManager->osdWidth - width) / 2;
             break;
         case 1:     //left bottom
-            top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
-            left = cOsd::OsdLeft();
+            top = geoManager->osdTop + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + config.GetValue("tracksBorderHorizontal");
             break;
         case 2:     //left middle
-            top = (cOsd::OsdHeight() - height) / 2;
-            left = cOsd::OsdLeft() + config.tracksBorderVertical;
+            top = geoManager->osdTop + (geoManager->osdHeight - height) / 2;
+            left = geoManager->osdLeft + config.GetValue("tracksBorderHorizontal");
             break;
         case 3:     //left top
-            top = cOsd::OsdTop() + config.tracksBorderHorizontal;
-            left = cOsd::OsdLeft() + config.tracksBorderVertical;
+            top = geoManager->osdTop + config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + config.GetValue("tracksBorderHorizontal");
             break;
         case 4:     //top middle
-            top = cOsd::OsdTop() + config.tracksBorderHorizontal;
-            left = (cOsd::OsdWidth() - width) / 2;
+            top = geoManager->osdTop + config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + (geoManager->osdWidth - width) / 2;
             break;
         case 5:     //top right
-            top = cOsd::OsdTop() + config.tracksBorderHorizontal;
-            left = cOsd::OsdWidth() - cOsd::OsdLeft() - width - config.tracksBorderVertical;
+            top = geoManager->osdTop + config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + geoManager->osdWidth - width - config.GetValue("tracksBorderHorizontal");
             break;
         case 6:     //right middle
-            top = (cOsd::OsdHeight() - height) / 2;
-            left = cOsd::OsdWidth() - cOsd::OsdLeft() - width - config.tracksBorderVertical;
+            top = geoManager->osdTop + (geoManager->osdHeight - height) / 2;
+            left = geoManager->osdLeft + geoManager->osdWidth - width - config.GetValue("tracksBorderHorizontal");
             break;
         case 7:     //right bottom
-            top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
-            left = cOsd::OsdWidth() - cOsd::OsdLeft() - width - config.tracksBorderVertical;
+            top = geoManager->osdTop + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + geoManager->osdWidth - width - config.GetValue("tracksBorderHorizontal");
             break;
         default:    //middle bottom
-            top = cOsd::OsdHeight() - cOsd::OsdTop() - height - config.tracksBorderHorizontal;
-            left = (cOsd::OsdWidth() - width) / 2;
+            top = geoManager->osdTop  + geoManager->osdHeight - height - config.GetValue("tracksBorderVertical");
+            left = geoManager->osdLeft + (geoManager->osdWidth - width) / 2;
             break;
     }
     osd = CreateOsd(left, top, width, height);
@@ -85,49 +83,48 @@ void cNopacityDisplayTracks::CreatePixmaps(void) {
     pixmapContainer = osd->CreatePixmap(1, cRect(0, 0, width, height));
     pixmapHeader = osd->CreatePixmap(2, cRect(2, 2, menuItemWidth, menuItemHeight));
     pixmapHeaderAudio = osd->CreatePixmap(3, cRect(menuItemWidth - menuItemHeight, 2, menuItemHeight, menuItemHeight));
-    if (config.tracksFadeTime) {
+    if (FadeTime) {
         pixmapContainer->SetAlpha(0);
         pixmapHeader->SetAlpha(0);
         pixmapHeaderAudio->SetAlpha(0);
     }
 }
 
-void cNopacityDisplayTracks::CreateFonts(void) {
-    font = cFont::CreateFont(config.fontName, menuItemHeight/3 + config.fontTracks);
-    fontHeader = cFont::CreateFont(config.fontName, menuItemHeight/2 + config.fontTracksHeader);
-}
-
-void cNopacityDisplayTracks::CreateBackgroundImages(void) {
-    cImageLoader imgLoader;
-    imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidth-2, menuItemHeight-2);
-    handleBackgrounds[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
-    imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidth-2, menuItemHeight-2);
-    handleBackgrounds[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
-}
-
 void cNopacityDisplayTracks::DrawHeader(const char *Title) {
     pixmapContainer->Fill(Theme.Color(clrMenuBorder));
     pixmapContainer->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrMenuBack));
-
-    pixmapHeader->Fill(Theme.Color(clrMenuItem));
-    pixmapHeader->DrawImage(cPoint(1, 1), handleBackgrounds[0]);
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapHeader->Fill(Theme.Color(clrMenuItem));
+        cImage *back = imgCache->GetSkinElement(seTracks);
+        if (back)
+            pixmapHeader->DrawImage(cPoint(1, 1), *back);
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(seTracks);
+        if (back)
+            pixmapHeader->DrawImage(cPoint(0, 0), *back);
+    } else {
+        pixmapHeader->Fill(Theme.Color(clrMenuItem));
+        pixmapHeader->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrAudioMenuHeader));
+    }
     pixmapIcon = osd->CreatePixmap(3, cRect(2, 2, menuItemHeight-2, menuItemHeight-2));
     pixmapIcon->Fill(clrTransparent);
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/tracks", menuItemHeight-6)) {
-        pixmapIcon->DrawImage(cPoint(3, 3), imgLoader.GetImage());
-    }
-    pixmapHeader->DrawText(cPoint((width - fontHeader->Width(Title)) / 2, (menuItemHeight - fontHeader->Height()) / 2), Title, Theme.Color(clrTracksFontHead), clrTransparent, fontHeader);
+
+    cImage *imgTracks = imgCache->GetSkinIcon("skinIcons/tracks", menuItemHeight-6, menuItemHeight-6);
+    if (imgTracks)
+        pixmapIcon->DrawImage(cPoint(3,3), *imgTracks);
+    pixmapIcon->DrawText(cPoint((width - fontManager->trackHeader->Width(Title)) / 2, (menuItemHeight - fontManager->trackHeader->Height()) / 2), Title, Theme.Color(clrTracksFontHead), clrTransparent, fontManager->trackHeader);
 }
 
 void cNopacityDisplayTracks::SetItem(const char *Text, int Index, bool Current) {
     cNopacityMenuItem *item;
-    item = new cNopacityTrackMenuItem(osd, Text);
+    item = new cNopacityTrackMenuItem(osd, imgCache, Text);
     item->SetCurrent(Current);
-    item->SetFont(font);
+    item->SetFont(fontManager->trackText);
     item->SetGeometry(Index, menuItemHeight+4, 2, menuItemWidth, menuItemHeight, 4);
-    item->CreatePixmap();
-    item->SetBackgrounds(handleBackgrounds);
+    item->CreatePixmapBackground();
+    item->CreatePixmapStatic();
+    if (config.GetValue("displayType") == dtGraphical)
+        item->CreatePixmapForeground();
     menuItems.Add(item);
     item->Render();
 }
@@ -151,26 +148,26 @@ void cNopacityDisplayTracks::SetAudioChannel(int AudioChannel) {
         pixmapHeaderAudio->Fill(clrTransparent);
         cString icon("");
         switch (AudioChannel) {
-            case -1: 
+            case -1:
                 icon = "skinIcons/ac3";
                 break;
-            case 0: 
-                icon = "skinIcons/stereo"; 
+            case 0:
+                icon = "skinIcons/stereo";
                 break;
             default:
-                icon = "skinIcons/stereo"; 
+                icon = "skinIcons/stereo";
                 break;
         }
-        cImageLoader imgLoader;
-        if (imgLoader.LoadIcon(icon, menuItemHeight-2)) {
-            pixmapHeaderAudio->DrawImage(cPoint(1, 1), imgLoader.GetImage());
-        }
+        cImage *imgIcon = imgCache->GetSkinIcon(*icon, menuItemHeight-2, menuItemHeight-2);
+        if (imgIcon)
+            pixmapHeaderAudio->DrawImage(cPoint(1,1), *imgIcon);
+
     }
 }
 
 void cNopacityDisplayTracks::Flush(void) {
     if (initial)
-        if (config.tracksFadeTime)
+        if (FadeTime)
             Start();
     initial = false;
     osd->Flush();
@@ -189,9 +186,9 @@ void cNopacityDisplayTracks::Action(void) {
         for (cNopacityMenuItem *item = menuItems.First(); Running() && item; item = menuItems.Next(item)) {
             item->SetAlpha(Alpha);
         }
+        cPixmap::Unlock();
         if (Running())
             osd->Flush();
-        cPixmap::Unlock();
         int Delta = cTimeMs::Now() - Now;
         if (Running() && (Delta < FrameTime))
             cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displaytracks.h b/displaytracks.h
index 171b808..05c5596 100644
--- a/displaytracks.h
+++ b/displaytracks.h
@@ -1,9 +1,14 @@
 #ifndef __NOPACITY_DISPLAYTRACKS_H
 #define __NOPACITY_DISPLAYTRACKS_H
 
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "menuitem.h"
+
 class cNopacityDisplayTracks : public cSkinDisplayTracks, cThread {
 private:
     cOsd *osd;
+    cImageCache *imgCache;
     int FrameTime;
     int FadeTime;
     int width, height;
@@ -18,18 +23,13 @@ private:
     cPixmap *pixmapHeaderAudio;
     cPixmap *pixmapIcon;
     cList<cNopacityMenuItem> menuItems;
-    int handleBackgrounds[2];
-    cFont *font;
-    cFont *fontHeader;
     virtual void Action(void);
     void SetItem(const char *Text, int Index, bool Current);
     void SetGeometry(void);
     void CreatePixmaps(void);
-    void CreateFonts(void);
-    void CreateBackgroundImages(void);
     void DrawHeader(const char *Title);
 public:
-    cNopacityDisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
+    cNopacityDisplayTracks(cImageCache *imgCache, const char *Title, int NumTracks, const char * const *Tracks);
     virtual ~cNopacityDisplayTracks();
     virtual void SetTrack(int Index, const char * const *Tracks);
     virtual void SetAudioChannel(int AudioChannel);
diff --git a/displayvolume.c b/displayvolume.c
index fcb8e25..1661e02 100644
--- a/displayvolume.c
+++ b/displayvolume.c
@@ -1,85 +1,99 @@
 #include "symbols/mute.xpm"
 #include "displayvolume.h"
 
-cNopacityDisplayVolume::cNopacityDisplayVolume(void) {
-    config.setDynamicValues();
+#include "config.h"
+#include "helpers.h"
+
+cNopacityDisplayVolume::cNopacityDisplayVolume(cImageCache *imgCache) {
+    this->imgCache = imgCache;
     initial = true;
     muted = false;
-    FrameTime = config.volumeFrameTime; 
-    FadeTime = config.volumeFadeTime;
-
-    width = cOsd::OsdWidth() * config.volumeWidth / 100;
-    height = cOsd::OsdHeight() * config.volumeHeight / 100;
-
-    int top = (cOsd::OsdHeight() - height) - config.volumeBorderBottom;
-    int left = (cOsd::OsdWidth() - width) / 2;
-    
-    osd = CreateOsd(left, top, width, height);
+    FadeTime = config.GetValue("volumeFadeTime");
+    FrameTime = FadeTime / 10;
 
-    pixmapBackgroundTop = osd->CreatePixmap(1, cRect(0, 0, width, height/2));
-    pixmapBackgroundBottom = osd->CreatePixmap(1, cRect(0, height/2, width, height/2));
+    int top = geoManager->osdTop + geoManager->osdHeight - geoManager->volumeHeight - config.GetValue("volumeBorderBottom");
+    int left = geoManager->osdLeft + (geoManager->osdWidth - geoManager->volumeWidth) / 2;
+    osd = CreateOsd(left, top, geoManager->volumeWidth, geoManager->volumeHeight);
 
-    DrawBlendedBackground(pixmapBackgroundTop, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), true);
-    DrawBlendedBackground(pixmapBackgroundBottom, Theme.Color(clrChannelBackground), Theme.Color(clrChannelBackBlend), false);
+    pixmapBackground = osd->CreatePixmap(1, cRect(0, 0, geoManager->volumeWidth, geoManager->volumeHeight));
 
-    pixmapBackgroundTop->DrawEllipse(cRect(0, 0, height/4, height/4), clrTransparent, -2);
-    pixmapBackgroundTop->DrawEllipse(cRect(width - height/4, 0, height/4, height/4), clrTransparent, -1);
-    pixmapBackgroundBottom->DrawEllipse(cRect(0, height/4, height/4, height/4), clrTransparent, -3);
-    pixmapBackgroundBottom->DrawEllipse(cRect(width - height/4, height/4, height/4, height/4), clrTransparent, -4);
-
-    labelHeight = height/3;
-    pixmapLabel = osd->CreatePixmap(2, cRect(0, 5, width, labelHeight));
-    progressBarWidth = 0.9 * width;
-    progressBarHeight = 0.3 * height;
-    if (progressBarHeight%2 != 0)
-        progressBarHeight++;
-    pixmapProgressBar = osd->CreatePixmap(2, cRect((width - progressBarWidth) / 2, (height - progressBarHeight)*2/3, progressBarWidth, progressBarHeight));
+    if (config.GetValue("displayType") == dtGraphical) {
+        cImage *imgBack = imgCache->GetSkinElement(seVolumeBackground);
+        if (imgBack) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *imgBack);
+        }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrChannelBackground));
+        if (config.GetValue("displayType") == dtBlending) {
+            DrawBlendedBackground(pixmapBackground,
+                                  0,
+                                  geoManager->volumeWidth,
+                                  Theme.Color(clrChannelBackground),
+                                  Theme.Color(clrChannelBackBlend),
+                                  true);
+            DrawBlendedBackground(pixmapBackground,
+                                  0,
+                                  geoManager->volumeWidth,
+                                  Theme.Color(clrChannelBackground),
+                                  Theme.Color(clrChannelBackBlend),
+                                  false);
+        }
+        int cornerRadius = geoManager->volumeHeight/4;
+        if (cornerRadius > 2) {
+            DrawRoundedCorners(pixmapBackground,
+                               cornerRadius,
+                               0,
+                               0,
+                               geoManager->volumeWidth,
+                               geoManager->volumeHeight);
+        }
+    }
+    pixmapLabel = osd->CreatePixmap(2, cRect(0, 5, geoManager->volumeWidth, geoManager->volumeLabelHeight));
+    pixmapProgressBar = osd->CreatePixmap(2, cRect((geoManager->volumeWidth - geoManager->volumeProgressBarWidth) / 2, (geoManager->volumeHeight - geoManager->volumeProgressBarHeight)*2/3, geoManager->volumeProgressBarWidth, geoManager->volumeProgressBarHeight));
 
-    if (config.volumeFadeTime) {
-        pixmapBackgroundTop->SetAlpha(0);
-        pixmapBackgroundBottom->SetAlpha(0);
+    if (FadeTime) {
+        pixmapBackground->SetAlpha(0);
         pixmapProgressBar->SetAlpha(0);
         pixmapLabel->SetAlpha(0);
     }
-    font = cFont::CreateFont(config.fontName, labelHeight - 6 + config.fontVolume);
 }
 
 cNopacityDisplayVolume::~cNopacityDisplayVolume() {
     Cancel(-1);
     while (Active())
         cCondWait::SleepMs(10);
-    osd->DestroyPixmap(pixmapBackgroundTop);
-    osd->DestroyPixmap(pixmapBackgroundBottom);
+    osd->DestroyPixmap(pixmapBackground);
     osd->DestroyPixmap(pixmapLabel);
     osd->DestroyPixmap(pixmapProgressBar);
-    delete font;
     delete osd;
 }
 
 void cNopacityDisplayVolume::SetVolume(int Current, int Total, bool Mute) {
     pixmapLabel->Fill(clrTransparent);
     cString label = cString::sprintf("%s: %d", tr("Volume"), Current);
-    pixmapLabel->DrawText(cPoint((width - font->Width(*label)) / 2, (labelHeight - font->Height()) / 2), *label, Theme.Color(clrVolumeFont), clrTransparent, font);
+    pixmapLabel->DrawText(cPoint((geoManager->volumeWidth - fontManager->volumeText->Width(*label)) / 2, (geoManager->volumeLabelHeight - fontManager->volumeText->Height()) / 2), *label, Theme.Color(clrVolumeFont), clrTransparent, fontManager->volumeText);
     if (Mute) {
         cBitmap bmMute(mute_xpm);
-        pixmapLabel->DrawBitmap(cPoint(width - 2*bmMute.Width(), (labelHeight - bmMute.Height()) / 2), bmMute, Theme.Color(clrDiskAlert), clrTransparent);
+        pixmapLabel->DrawBitmap(cPoint(geoManager->volumeWidth - 2*bmMute.Width(), (geoManager->volumeLabelHeight - bmMute.Height()) / 2), bmMute, Theme.Color(clrDiskAlert), clrTransparent);
     }
         DrawProgressBar(Current, Total);
 }
 
 void cNopacityDisplayVolume::DrawProgressBar(int Current, int Total) {
     pixmapProgressBar->Fill(clrTransparent);
+    if (geoManager->volumeProgressBarHeight < 5)
+        return;
     double percent = ((double)Current) / (double)Total;
-    int barWidth = progressBarWidth - progressBarHeight;
+    int barWidth = geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight;
     if ((Current > 0) || (Total > 0)) {
-        pixmapProgressBar->DrawEllipse(cRect(0, 0, progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
-        pixmapProgressBar->DrawEllipse(cRect(progressBarWidth - progressBarHeight, 0, progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
-        pixmapProgressBar->DrawRectangle(cRect(progressBarHeight/2, 0, progressBarWidth - progressBarHeight, progressBarHeight), Theme.Color(clrProgressBarBack));
+        pixmapProgressBar->DrawEllipse(cRect(0, 0, geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack));
+        pixmapProgressBar->DrawEllipse(cRect(geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight, 0, geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack));
+        pixmapProgressBar->DrawRectangle(cRect(geoManager->volumeProgressBarHeight/2, 0, geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack));
 
-        pixmapProgressBar->DrawEllipse(cRect(1, 1, progressBarHeight-2, progressBarHeight-2), Theme.Color(clrProgressBarBlend));
+        pixmapProgressBar->DrawEllipse(cRect(1, 1, geoManager->volumeProgressBarHeight-2, geoManager->volumeProgressBarHeight-2), Theme.Color(clrProgressBarBlend));
         if (Current > 0) {
-            tColor colAct = DrawProgressbarBackground(progressBarHeight / 2 - 1, 1, barWidth * percent - 2, progressBarHeight - 2);
-            pixmapProgressBar->DrawEllipse(cRect(barWidth * percent, 1, progressBarHeight-2, progressBarHeight-2), colAct);
+            tColor colAct = DrawProgressbarBackground(geoManager->volumeProgressBarHeight / 2 - 1, 1, barWidth * percent - 2, geoManager->volumeProgressBarHeight - 2);
+            pixmapProgressBar->DrawEllipse(cRect(barWidth * percent, 1, geoManager->volumeProgressBarHeight-2, geoManager->volumeProgressBarHeight-2), colAct);
         }
     }
 }
@@ -117,7 +131,7 @@ tColor cNopacityDisplayVolume::DrawProgressbarBackground(int left, int top, int
 
 void cNopacityDisplayVolume::Flush(void) {
     if (initial)
-        if (config.volumeFadeTime)
+        if (FadeTime)
             Start();
     initial = false;
     osd->Flush();
@@ -130,13 +144,12 @@ void cNopacityDisplayVolume::Action(void) {
         cPixmap::Lock();
         double t = min(double(Now - Start) / FadeTime, 1.0);
         int Alpha = t * ALPHA_OPAQUE;
-        pixmapBackgroundTop->SetAlpha(Alpha);
-        pixmapBackgroundBottom->SetAlpha(Alpha);
+        pixmapBackground->SetAlpha(Alpha);
         pixmapProgressBar->SetAlpha(Alpha);
         pixmapLabel->SetAlpha(Alpha);
+        cPixmap::Unlock();
         if (Running())
             osd->Flush();
-        cPixmap::Unlock();
         int Delta = cTimeMs::Now() - Now;
         if (Running() && (Delta < FrameTime))
             cCondWait::SleepMs(FrameTime - Delta);
diff --git a/displayvolume.h b/displayvolume.h
index 707bca3..a3d66cc 100644
--- a/displayvolume.h
+++ b/displayvolume.h
@@ -1,29 +1,29 @@
 #ifndef __NOPACITY_DISPLAYVOLUME_H
 #define __NOPACITY_DISPLAYVOLUME_H
 
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "imagecache.h"
+
 class cNopacityDisplayVolume : public cSkinDisplayVolume, cThread {
 private:
     int FrameTime;
     int FadeTime;
     bool initial;
     bool muted;
-    int width, height;
-    int labelHeight;
-    int progressBarWidth, progressBarHeight;
     cOsd *osd;
-    cPixmap *pixmapBackgroundTop;
-    cPixmap *pixmapBackgroundBottom;
+    cImageCache *imgCache;
+    cPixmap *pixmapBackground;
     cPixmap *pixmapProgressBar;
     cPixmap *pixmapLabel;
-    cFont *font;
     virtual void Action(void);
     void DrawProgressBar(int Current, int Total);
     tColor DrawProgressbarBackground(int left, int top, int width, int height);
 public:
-  cNopacityDisplayVolume(void);
+  cNopacityDisplayVolume(cImageCache *imgCache);
   virtual ~cNopacityDisplayVolume();
   virtual void SetVolume(int Current, int Total, bool Mute);
   virtual void Flush(void);
   };
-  
+
 #endif //__NOPACITY_DISPLAYVOLUME_H
\ No newline at end of file
diff --git a/fontmanager.c b/fontmanager.c
new file mode 100644
index 0000000..0ef4bb1
--- /dev/null
+++ b/fontmanager.c
@@ -0,0 +1,135 @@
+#include "fontmanager.h"
+#include "geometrymanager.h"
+#include "config.h"
+
+
+cFontManager::cFontManager() {
+}
+
+cFontManager::~cFontManager() {
+    DeleteFonts();
+}
+
+void cFontManager::SetFonts() {
+    SetFontsMenu();
+    SetFontsChannel();
+    SetFontsReplay();
+    SetFontsMessage();
+    SetFontsTrack();
+    SetFontsVolume();
+}
+
+void cFontManager::DeleteFonts() {
+    DeleteFontsMenu();
+    DeleteFontsChannel();
+    DeleteFontsReplay();
+    DeleteFontsMessage();
+    DeleteFontsTrack();
+    DeleteFontsVolume();
+}
+
+cFont *cFontManager::CreateFont(int size) {
+    return cFont::CreateFont(config.fontName, size);
+}
+
+void cFontManager::SetFontsMenu(void) {
+    menuHeader = CreateFont(geoManager->menuHeaderHeight / 2 + config.GetValue("fontHeader"));
+    menuDate = CreateFont(geoManager->menuHeaderHeight / 2 + config.GetValue("fontDate"));
+    menuItemLarge = CreateFont(geoManager->menuItemHeightMain/3 + 4 + config.GetValue("fontMenuitemLarge"));
+    menuItemSchedule = CreateFont(geoManager->menuItemHeightSchedule / 4 + 5 + config.GetValue("fontMenuitemSchedule"));
+    menuItemScheduleSmall = CreateFont(geoManager->menuItemHeightSchedule / 4 - 5 + config.GetValue("fontMenuitemScheduleSmall"));
+    menuItemChannel = CreateFont(geoManager->menuItemHeightSchedule / 3 + config.GetValue("fontMenuitemChannel"));
+    menuItemChannelSmall = CreateFont(geoManager->menuItemHeightSchedule / 5 - 2 + config.GetValue("fontMenuitemChannelSmall"));
+    menuItemRecordings = CreateFont(geoManager->menuItemHeightRecordings / 2 - 14 + config.GetValue("fontMenuitemRecordings"));
+    menuItemRecordingsSmall = CreateFont(geoManager->menuItemHeightRecordings / 4 - 3 + config.GetValue("fontMenuitemRecordingsSmall"));
+    menuItemTimers = CreateFont(geoManager->menuItemHeightSchedule / 3 + config.GetValue("fontMenuitemTimers"));
+    menuItemTimersSmall = CreateFont(geoManager->menuItemHeightSchedule / 4 - 3 + config.GetValue("fontMenuitemTimersSmall"));
+    menuItemDefault = CreateFont(geoManager->menuItemHeightDefault * 2 / 3 + config.GetValue("fontMenuitemDefault"));
+    menuDiskUsage = CreateFont(geoManager->menuDiskUsageHeight/6 - 2 + config.GetValue("fontDiskUsage"));
+    menuDiskUsagePercent = CreateFont(geoManager->menuDiskUsageHeight/5 - 4 + config.GetValue("fontDiskUsagePercent"));
+    menuTimersHead = CreateFont((geoManager->menuContentHeight - 3*geoManager->menuSpace - geoManager->menuDiskUsageHeight) / 25 + config.GetValue("fontTimersHead"));
+    menuTimers = CreateFont((geoManager->menuContentHeight - 3*geoManager->menuSpace - geoManager->menuDiskUsageHeight) / 25 - 6 + config.GetValue("fontTimers"));
+    menuButtons = CreateFont(geoManager->menuButtonHeight*0.8 + config.GetValue("fontButtons"));
+    menuMessage = CreateFont(geoManager->menuMessageHeight / 3 + config.GetValue("fontMessageMenu"));
+    menuEPGInfoWindow = CreateFont(geoManager->menuContentHeight / 30 + config.GetValue("fontEPGInfoWindow"));
+    menuEPGInfoWindowLarge = CreateFont(geoManager->menuContentHeight / 20 + config.GetValue("fontEPGInfoWindowLarge"));
+}
+
+void cFontManager::DeleteFontsMenu(void) {
+    delete menuHeader;
+    delete menuDate;
+    delete menuItemLarge;
+    delete menuItemSchedule;
+    delete menuItemScheduleSmall;
+    delete menuItemChannel;
+    delete menuItemChannelSmall;
+    delete menuItemRecordings;
+    delete menuItemRecordingsSmall;
+    delete menuItemTimers;
+    delete menuItemTimersSmall;
+    delete menuItemDefault;
+    delete menuDiskUsage;
+    delete menuDiskUsagePercent;
+    delete menuTimers;
+    delete menuTimersHead;
+    delete menuButtons;
+    delete menuMessage;
+    delete menuEPGInfoWindow;
+    delete menuEPGInfoWindowLarge;
+}
+
+void cFontManager::SetFontsChannel(void) {
+    channelHeader = CreateFont(geoManager->channelHeaderHeight - 8 + config.GetValue("fontChannelHeaderSize"));
+    channelDate = CreateFont(geoManager->channelHeaderHeight/2 + config.GetValue("fontChannelDateSize"));
+    channelEPG = CreateFont(geoManager->channelEpgInfoLineHeight + config.GetValue("fontEPGSize"));
+    channelEPGSmall = CreateFont(geoManager->channelEpgInfoLineHeight - 6 + config.GetValue("fontEPGSmallSize"));
+    channelSourceInfo = CreateFont(geoManager->channelFooterHeight/2 + config.GetValue("fontChannelSourceInfoSize"));;
+    channelChannelGroup = CreateFont(geoManager->channelEpgInfoHeight/3 + config.GetValue("fontChannelGroupSize"));
+    channelChannelGroupSmall = CreateFont(geoManager->channelEpgInfoHeight/3 - 5 + config.GetValue("fontChannelGroupSmallSize"));
+}
+
+void cFontManager::DeleteFontsChannel(void) {
+    delete channelHeader;
+    delete channelDate;
+    delete channelEPG;
+    delete channelEPGSmall;
+    delete channelSourceInfo;
+    delete channelChannelGroup;
+    delete channelChannelGroupSmall;
+}
+
+void cFontManager::SetFontsReplay(void) {
+    replayHeader = CreateFont(geoManager->replayHeaderHeight - 8 + config.GetValue("fontReplayHeader"));
+    replayText = CreateFont(geoManager->replayCurrentHeight);
+}
+
+void cFontManager::DeleteFontsReplay(void) {
+    delete replayHeader;
+    delete replayText;
+}
+
+void cFontManager::SetFontsMessage(void) {
+    messageText = CreateFont(geoManager->messageHeight / 4 + 15 + config.GetValue("fontMessage"));
+}
+
+void cFontManager::DeleteFontsMessage(void) {
+    delete messageText;
+}
+
+void cFontManager::SetFontsTrack(void) {
+    trackText = CreateFont(geoManager->menuItemHeightTracks/3 + config.GetValue("fontTracks"));
+    trackHeader = CreateFont(geoManager->menuItemHeightTracks/2 + config.GetValue("fontTracksHeader"));
+}
+
+void cFontManager::DeleteFontsTrack(void) {
+    delete trackText;
+    delete trackHeader;
+}
+
+void cFontManager::SetFontsVolume(void) {
+    volumeText = CreateFont(geoManager->volumeLabelHeight - 6 + config.GetValue("fontVolume"));
+}
+
+void cFontManager::DeleteFontsVolume(void) {
+    delete volumeText;
+}
\ No newline at end of file
diff --git a/fontmanager.h b/fontmanager.h
new file mode 100644
index 0000000..28d2a45
--- /dev/null
+++ b/fontmanager.h
@@ -0,0 +1,67 @@
+#ifndef __NOPACITY_FONTMANAGER_H
+#define __NOPACITY_FONTMANAGER_H
+
+#include <vdr/skins.h>
+
+class cFontManager {
+    private:
+        void SetFontsMenu(void);
+        void DeleteFontsMenu(void);
+        void SetFontsChannel(void);
+        void DeleteFontsChannel(void);
+        void SetFontsReplay(void);
+        void DeleteFontsReplay(void);
+        void SetFontsMessage(void);
+        void DeleteFontsMessage(void);
+        void SetFontsTrack(void);
+        void DeleteFontsTrack(void);
+        void SetFontsVolume(void);
+        void DeleteFontsVolume(void);
+    public:
+        cFontManager();
+        ~cFontManager();
+        cFont *CreateFont(int size);
+        void SetFonts(void);
+        void DeleteFonts(void);
+        //Fonts DisplayMenu
+        cFont *menuHeader;
+        cFont *menuDate;
+        cFont *menuItemLarge;
+        cFont *menuItemSchedule;
+        cFont *menuItemScheduleSmall;
+        cFont *menuItemChannel;
+        cFont *menuItemChannelSmall;
+        cFont *menuItemRecordings;
+        cFont *menuItemRecordingsSmall;
+        cFont *menuItemTimers;
+        cFont *menuItemTimersSmall;
+        cFont *menuItemDefault;
+        cFont *menuDiskUsage;
+        cFont *menuDiskUsagePercent;
+        cFont *menuTimers;
+        cFont *menuTimersHead;
+        cFont *menuButtons;
+        cFont *menuMessage;
+        cFont *menuEPGInfoWindow;
+        cFont *menuEPGInfoWindowLarge;
+        //Fonts DisplayChannel
+        cFont *channelHeader;
+        cFont *channelDate;
+        cFont *channelEPG;
+        cFont *channelEPGSmall;
+        cFont *channelSourceInfo;
+        cFont *channelChannelGroup;
+        cFont *channelChannelGroupSmall;
+        //Fonts DisplayReplay
+        cFont *replayHeader;
+        cFont *replayText;
+        //Fonts DisplayMessage
+        cFont *messageText;
+        //Fonts DisplayTracks
+        cFont *trackText;
+        cFont *trackHeader;
+        //Fonts DisplayVolume
+        cFont *volumeText;
+};
+
+#endif //__NOPACITY_FONTMANAGER_H
\ No newline at end of file
diff --git a/geometrymanager.c b/geometrymanager.c
new file mode 100644
index 0000000..0c0b938
--- /dev/null
+++ b/geometrymanager.c
@@ -0,0 +1,227 @@
+#include "geometrymanager.h"
+#include "config.h"
+#include "helpers.h"
+#include <vdr/osd.h>
+
+cGeometryManager::cGeometryManager() {
+    SetOSDSize();
+}
+
+cGeometryManager::~cGeometryManager() {
+}
+
+void cGeometryManager::SetOSDSize(void) {
+    osdWidth = cOsd::OsdWidth();
+    osdHeight = cOsd::OsdHeight();
+    osdLeft = cOsd::OsdLeft();
+    osdTop = cOsd::OsdTop();
+}
+
+void cGeometryManager::SetGeometry(void) {
+    SetDisplayMenuSizes();
+    SetDisplayChannelSizes();
+    SetDisplayReplaySizes();
+    SetDisplayMessageSizes();
+    SetDisplayTrackSizes();
+    SetDisplayVolumeSizes();
+}
+
+bool cGeometryManager::GeometryChanged(void) {
+    if ((osdWidth != cOsd::OsdWidth()) ||
+        (osdHeight != cOsd::OsdHeight()) ||
+        (osdLeft != cOsd::OsdLeft()) ||
+        (osdTop != cOsd::OsdTop())) {
+        dsyslog("nopacity: osd Size changed");
+        dsyslog("nopacity: old osd size: top %d left %d size %d * %d", osdLeft, osdTop, osdWidth, osdHeight);
+        SetOSDSize();
+        dsyslog("nopacity: new osd size: top %d left %d size %d * %d", osdLeft, osdTop, osdWidth, osdHeight);
+        return true;
+    }
+    return false;
+}
+
+void cGeometryManager::SetDisplayMenuSizes() {
+    menuSpace = config.GetValue("spaceMenu");
+
+    menuWidthScrollbar = config.GetValue("widthScrollbar");
+    menuDateWidth = osdWidth * 0.3;
+
+    menuHeaderHeight = osdHeight * config.GetValue("headerHeight") / 100;
+    menuFooterHeight = osdHeight * config.GetValue("footerHeight") / 100;
+    menuContentHeight = osdHeight - menuHeaderHeight - menuFooterHeight;
+
+    menuContentWidthMain = osdWidth * config.GetValue("menuWidthMain") / 100;
+    menuContentWidthSchedules = osdWidth * config.GetValue("menuWidthSchedules") / 100;
+    menuContentWidthChannels = osdWidth * config.GetValue("menuWidthChannels") / 100;
+    menuContentWidthTimers = osdWidth * config.GetValue("menuWidthTimers") / 100;
+    menuContentWidthRecordings = osdWidth * config.GetValue("menuWidthRecordings") / 100;
+    menuContentWidthSetup = osdWidth * config.GetValue("menuWidthSetup") / 100;
+    menuContentWidthFull = osdWidth - config.GetValue("widthScrollbar") - config.GetValue("spaceMenu");
+    menuContentWidthMinimum = Minimum(menuContentWidthMain,
+                                  menuContentWidthSchedules,
+                                  menuContentWidthChannels,
+                                  menuContentWidthTimers,
+                                  menuContentWidthRecordings,
+                                  menuContentWidthSetup);
+
+    menuItemWidthDefault = menuContentWidthFull - 4 * config.GetValue("spaceMenu");
+    menuItemWidthMain = menuContentWidthMain - 4 * config.GetValue("spaceMenu");
+    menuItemWidthSchedule = menuContentWidthSchedules - 4 * config.GetValue("spaceMenu");
+    menuItemWidthChannel = menuContentWidthChannels - 4 * config.GetValue("spaceMenu");
+    menuItemWidthTimer = menuContentWidthTimers - 4 * config.GetValue("spaceMenu");
+    menuItemWidthRecording = menuContentWidthRecordings - 4 * config.GetValue("spaceMenu");
+    menuItemWidthSetup = menuContentWidthSetup - 4 * config.GetValue("spaceMenu");
+    menuItemWidthTracks = osdWidth * config.GetValue("tracksWidth") / 100 - 4;
+    menuItemHeightMain = menuContentHeight / config.GetValue("numMainMenuItems") - config.GetValue("spaceMenu");
+    menuItemHeightSchedule = menuContentHeight / config.GetValue("numSchedulesMenuItems") - config.GetValue("spaceMenu");;
+    menuItemHeightDefault = menuContentHeight / config.GetValue("numDefaultMenuItems") - config.GetValue("spaceMenu");
+    menuItemHeightRecordings = menuContentHeight / config.GetValue("numRecordingsMenuItems") - config.GetValue("spaceMenu");
+    menuItemHeightTracks = config.GetValue("tracksItemHeight");
+
+    menuMainMenuIconSize = menuItemHeightMain - 2 * menuSpace;
+    cSize logoSize = ScaleToFit(1000,
+                                menuItemHeightSchedule - 2,
+                                config.GetValue("logoWidthOriginal"),
+                                config.GetValue("logoHeightOriginal"));
+    menuLogoWidth = logoSize.Width();
+    menuLogoHeight = logoSize.Height();
+    
+    cSize logoSizeVDRHeader = ScaleToFit(1000,
+                                menuHeaderHeight - 4,
+                                config.GetValue("menuHeaderLogoWidth"),
+                                config.GetValue("menuHeaderLogoHeight"));
+    menuHeaderVDRLogoWidth = logoSizeVDRHeader.Width();
+
+    menuButtonsBorder = menuFooterHeight / 6;
+    menuButtonWidth = (osdWidth / 4) - 2 * menuButtonsBorder;
+    menuButtonHeight = menuFooterHeight - 3 * menuButtonsBorder;
+
+    menuDiskUsageWidth = menuDiskUsageHeight = osdWidth  * config.GetValue("menuSizeDiskUsage") / 100;
+    menuTimersWidth = osdWidth  * config.GetValue("menuWidthRightItems") / 100;
+    cSize timersLogoSize = ScaleToFit(menuTimersWidth * config.GetValue("timersLogoWidth") / 100,
+                                1000,
+                                config.GetValue("logoWidthOriginal"),
+                                config.GetValue("logoHeightOriginal"));
+    menuTimersLogoWidth = timersLogoSize.Width();
+    menuTimersLogoHeight = timersLogoSize.Height();
+    
+    menuMessageWidth = 0.8 * osdWidth;
+    menuMessageHeight = 0.1 * osdHeight;
+}
+
+void cGeometryManager::SetDisplayChannelSizes(void) {
+    channelX = config.GetValue("channelBorderVertical");
+    channelWidth = osdWidth - 2 * config.GetValue("channelBorderVertical");
+    channelHeight = osdHeight * config.GetValue("channelHeight") / 100;
+    channelTop = osdHeight - channelHeight - config.GetValue("channelBorderBottom");
+
+    channelHeaderHeight = 0.2 * channelHeight;
+    channelFooterHeight = 0.2 * channelHeight;
+    channelContentHeight = channelHeight - channelHeaderHeight - channelFooterHeight;
+
+    int logoWidthTotalPercent = 16;
+    channelLogoWidthTotal = logoWidthTotalPercent * channelWidth /100;
+
+    int logoMaxWidth = logoMaxWidth = channelLogoWidthTotal - 10;
+    int logoMaxHeight;
+    if (config.GetValue("displayType") == dtGraphical) {
+        logoMaxHeight = channelHeight - channelHeaderHeight - 2;
+    } else {
+        logoMaxHeight = channelHeight - 2;
+    }
+    cSize logoSize = ScaleToFit(logoMaxWidth,
+                                logoMaxHeight,
+                                config.GetValue("logoWidthOriginal"),
+                                config.GetValue("logoHeightOriginal"));
+    channelLogoWidth = logoSize.Width();
+    channelLogoHeight = logoSize.Height();
+    channelLogoX = (channelLogoWidthTotal - channelLogoWidth) / 2;
+
+    switch (config.GetValue("logoVerticalAlignment")) {
+        case lvTop:
+            channelLogoY = channelTop + (channelHeight - channelHeaderHeight - channelLogoHeight)/2;
+            break;
+        case lvMiddle:
+            channelLogoY = channelTop + (channelHeight - channelLogoHeight)/2;
+            break;
+        case lvBottom:
+            channelLogoY = (channelTop + channelHeaderHeight) + (channelHeight - channelHeaderHeight - channelLogoHeight)/2;
+            break;
+    }
+
+    switch (config.GetValue("logoPosition")) {
+        case lpLeft:
+            channelContentX = channelLogoWidthTotal;
+            channelContentWidth = channelWidth - channelLogoWidthTotal;
+            break;
+        case lpRight:
+            channelContentX = 0;
+            channelContentWidth = channelWidth - channelLogoWidthTotal;
+            channelLogoX = channelContentWidth;
+            break;
+        case lpNone:
+            channelContentX = 0;
+            channelContentWidth = channelWidth;
+            break;
+    }
+
+    channelChannelNameWidth = channelContentWidth * 70 / 100;
+    channelDateWidth = channelContentWidth - channelChannelNameWidth;
+    channelProgressBarHeight = channelHeight * 0.1;
+    channelEpgInfoHeight = channelContentHeight - channelProgressBarHeight;
+    channelEpgInfoLineHeight = channelEpgInfoHeight / 4;
+    channelFooterY = channelTop + channelHeaderHeight + channelContentHeight;
+}
+
+void cGeometryManager::SetDisplayReplaySizes(void) {
+    replayHeight = osdHeight * config.GetValue("replayHeight") / 100;
+    replayWidth = osdWidth - 2 * config.GetValue("replayBorderVertical");
+    replayHeaderHeight = replayHeight * 0.2;
+    if (replayHeaderHeight%2 != 0)
+        replayHeaderHeight++;
+    replayFooterHeight = replayHeaderHeight;
+    replayResolutionSize = replayHeaderHeight - 10;
+    replayResolutionX = replayWidth - replayResolutionSize*3 - replayHeaderHeight/2;
+    replayResolutionY = replayHeight - replayFooterHeight;
+    replayInfo2Height = replayHeaderHeight;
+    replayProgressBarHeight = 0.1 * replayHeight;
+    if (replayProgressBarHeight%2 != 0)
+        replayProgressBarHeight++;
+    replayCurrentHeight = replayProgressBarHeight + config.GetValue("fontReplay");
+    replayControlsHeight = replayHeight - replayHeaderHeight - replayInfo2Height - replayFooterHeight - replayProgressBarHeight;
+    if (replayControlsHeight < 11)
+        replayControlsHeight = 11;
+    replayInfoWidth = 0.75 * replayWidth;
+    replayDateWidth = replayWidth - replayInfoWidth;
+
+    replayJumpX = (replayWidth - 4 * replayControlsHeight)/2 + 5*replayControlsHeight;
+    replayJumpY = replayHeaderHeight + replayInfo2Height + replayProgressBarHeight;
+    replayJumpWidth = replayWidth - replayJumpX;
+    replayJumpHeight = replayControlsHeight;
+
+    replayIconBorder = 5;
+    replayIconSize = min(replayControlsHeight - 2*replayIconBorder, 128);
+
+    replayMessageY = replayHeight - replayFooterHeight;
+    replayMessageWidth = replayWidth * 75 / 100;
+    replayMessageHeight = replayFooterHeight;
+}
+
+void cGeometryManager::SetDisplayMessageSizes(void) {
+    messageWidth = osdWidth * config.GetValue("messageWidth") / 100;
+    messageHeight = osdHeight * config.GetValue("messageHeight") / 100;
+}
+
+void cGeometryManager::SetDisplayTrackSizes(void) {
+    trackWidth = osdWidth * config.GetValue("tracksWidth") / 100;
+}
+
+void cGeometryManager::SetDisplayVolumeSizes(void) {
+    volumeWidth = osdWidth * config.GetValue("volumeWidth") / 100;
+    volumeHeight = osdHeight * config.GetValue("volumeHeight") / 100;
+    volumeLabelHeight = volumeHeight/3;
+    volumeProgressBarWidth = 0.9 * volumeWidth;
+    volumeProgressBarHeight = 0.3 * volumeHeight;
+    if (volumeProgressBarHeight%2 != 0)
+        volumeProgressBarHeight++;
+}
diff --git a/geometrymanager.h b/geometrymanager.h
new file mode 100644
index 0000000..9d0c387
--- /dev/null
+++ b/geometrymanager.h
@@ -0,0 +1,115 @@
+#ifndef __NOPACITY_GEOMETRYMANAGER_H
+#define __NOPACITY_GEOMETRYMANAGER_H
+
+enum eLogoPosition {lpNone = 0, lpLeft, lpRight};
+enum eLogoVerticalPosition {lvTop = 0, lvMiddle, lvBottom};
+enum eBackgroundStyle {bsTrans = 0, bsFull};
+
+class cGeometryManager {
+    private:
+        void SetOSDSize(void);
+        void SetDisplayMenuSizes(void);
+        void SetDisplayChannelSizes(void);
+        void SetDisplayReplaySizes(void);
+        void SetDisplayMessageSizes(void);
+        void SetDisplayTrackSizes(void);
+        void SetDisplayVolumeSizes(void);
+    public:
+        cGeometryManager();
+        ~cGeometryManager();
+        void SetGeometry(void);
+        bool GeometryChanged(void);
+        int osdWidth;
+        int osdHeight;
+        int osdLeft;
+        int osdTop;
+        //DisplayMenu Sizes
+        int menuSpace;
+        int menuWidthScrollbar;
+        int menuDateWidth;
+        int menuHeaderHeight;
+        int menuFooterHeight;
+        int menuContentHeight;
+        int menuContentWidthMain;
+        int menuContentWidthSchedules;
+        int menuContentWidthChannels;
+        int menuContentWidthTimers;
+        int menuContentWidthRecordings;
+        int menuContentWidthSetup;
+        int menuContentWidthFull;
+        int menuContentWidthMinimum;
+        int menuItemWidthDefault;
+        int menuItemWidthMain;
+        int menuItemWidthSchedule;
+        int menuItemWidthChannel;
+        int menuItemWidthTimer;
+        int menuItemWidthRecording;
+        int menuItemWidthSetup;
+        int menuItemWidthTracks;
+        int menuItemHeightMain;
+        int menuItemHeightSchedule;
+        int menuItemHeightDefault;
+        int menuItemHeightRecordings;
+        int menuItemHeightTracks;
+        int menuMainMenuIconSize;
+        int menuLogoWidth;
+        int menuLogoHeight;
+        int menuTimersLogoWidth;
+        int menuTimersLogoHeight;
+        int menuHeaderVDRLogoWidth;
+        int menuButtonsBorder;
+        int menuButtonWidth;
+        int menuButtonHeight;
+        int menuDiskUsageWidth;
+        int menuDiskUsageHeight;
+        int menuTimersWidth;
+        int menuMessageWidth;
+        int menuMessageHeight;
+        //DisplayChannel Sizes
+        int channelX, channelTop;
+        int channelWidth, channelHeight;
+        int channelHeaderHeight;
+        int channelFooterHeight;
+        int channelContentHeight;
+        int channelContentX, channelContentWidth;
+        int channelLogoWidthTotal;
+        int channelLogoX, channelLogoY;
+        int channelLogoWidth, channelLogoHeight;
+        int channelChannelNameWidth;
+        int channelDateWidth;
+        int channelFooterY;
+        int channelProgressBarHeight;
+        int channelEpgInfoHeight;
+        int channelEpgInfoLineHeight;
+        //DisplayReplay Sizes
+        int replayWidth;
+        int replayHeight;
+        int replayHeaderHeight;
+        int replayInfo2Height;
+        int replayProgressBarHeight;
+        int replayCurrentHeight;
+        int replayControlsHeight;
+        int replayFooterHeight;
+        int replayInfoWidth;
+        int replayDateWidth;
+        int replayIconSize, replayIconBorder;
+        int replayResolutionSize;
+        int replayResolutionX, replayResolutionY;
+        int replayJumpX, replayJumpY;
+        int replayJumpWidth, replayJumpHeight;
+        int replayMessageY;
+        int replayMessageWidth, replayMessageHeight;
+        //DisplayMessage Sizes
+        int messageWidth;
+        int messageHeight;
+        //DisplayTracks Sizes
+        int trackWidth;
+        //DisplayVolume Sizes
+        int volumeWidth;
+        int volumeHeight;
+        int volumeLabelHeight;
+        int volumeProgressBarWidth;
+        int volumeProgressBarHeight;
+};
+
+#endif //__NOPACITY_GEOMETRYMANAGER_H
\ No newline at end of file
diff --git a/helpers.c b/helpers.c
index 425ebd6..d4ed0bd 100644
--- a/helpers.c
+++ b/helpers.c
@@ -1,23 +1,26 @@
-static cOsd *CreateOsd(int Left, int Top, int Width, int Height) {
+#include <string>
+#include <sstream>
+#include <vector>
+#include "helpers.h"
+#include <vdr/skins.h>
+
+cOsd *CreateOsd(int Left, int Top, int Width, int Height) {
     cOsd *osd = cOsdProvider::NewOsd(Left, Top);
     if (osd) {
         tArea Area = { 0, 0, Width, Height,  32 };
-        if (osd->SetAreas(&Area, 1) == oeOk) {  
+        if (osd->SetAreas(&Area, 1) == oeOk) {
             return osd;
         }
     }
     return NULL;
 }
 
-static void DrawBlendedBackground(cPixmap *pixmap, tColor color, tColor colorBlending, bool fromTop) {
-    int width = pixmap->ViewPort().Width();
+void DrawBlendedBackground(cPixmap *pixmap, int xStart, int width, tColor color, tColor colorBlending, bool fromTop) {
     int height = pixmap->ViewPort().Height();
-    pixmap->Fill(color);
     int numSteps = 16;
     int alphaStep = 0x0F;
     int alpha = 0x00;
     int step, begin, end;
-    bool cont = true;
     if (fromTop) {
         step = 1;
         begin = 0;
@@ -28,16 +31,69 @@ static void DrawBlendedBackground(cPixmap *pixmap, tColor color, tColor colorBle
         end = height - numSteps;
     }
     tColor clr;
+    bool cont = true;
     for (int i = begin; cont; i = i + step) {
         clr = AlphaBlend(color, colorBlending, alpha);
-        pixmap->DrawRectangle(cRect(0,i,width,1), clr);
+        pixmap->DrawRectangle(cRect(xStart,i,width,1), clr);
         alpha += alphaStep;
-        if (i == end) 
+        if (i == end)
             cont = false;
     }
 }
 
-static int Minimum(int a, int b, int c, int d, int e, int f) {
+void DrawRoundedCorners(cPixmap *p, int radius, int x, int y, int width, int height) {
+    if (radius > 2) {
+        p->DrawEllipse(cRect(x, y, radius, radius), clrTransparent, -2);
+        p->DrawEllipse(cRect(x + width - radius, y , radius, radius), clrTransparent, -1);
+        p->DrawEllipse(cRect(x, y + height - radius, radius, radius), clrTransparent, -3);
+        p->DrawEllipse(cRect(x + width - radius, y + height - radius, radius, radius), clrTransparent, -4);
+    }
+}
+
+void DrawRoundedCornersWithBorder(cPixmap *p, tColor borderColor, int radius, int width, int height) {
+    if (radius < 3)
+        return;
+    p->DrawEllipse(cRect(0,0,radius,radius), borderColor, -2);
+    p->DrawEllipse(cRect(-1,-1,radius,radius), clrTransparent, -2);
+
+    p->DrawEllipse(cRect(width-radius,0,radius,radius), borderColor, -1);
+    p->DrawEllipse(cRect(width-radius+1,-1,radius,radius), clrTransparent, -1);
+
+    p->DrawEllipse(cRect(0,height-radius,radius,radius), borderColor, -3);
+    p->DrawEllipse(cRect(-1,height-radius+1,radius,radius), clrTransparent, -3);
+
+    p->DrawEllipse(cRect(width-radius,height-radius,radius,radius), borderColor, -4);
+    p->DrawEllipse(cRect(width-radius+1,height-radius+1,radius,radius), clrTransparent, -4);
+}
+
+cSize ScaleToFit(int widthMax, int heightMax, int widthOriginal, int heightOriginal) {
+    int width = 1;
+    int height = 1;
+
+    if ((widthMax == 0)||(heightMax==0)||(widthOriginal==0)||(heightOriginal==0))
+        return cSize(width, height);
+
+    if ((widthOriginal <= widthMax) && (heightOriginal <= heightMax)) {
+        width = widthOriginal;
+        height = heightOriginal;
+    } else if ((widthOriginal > widthMax) && (heightOriginal <= heightMax)) {
+        width = widthMax;
+        height = (double)width/(double)widthOriginal * heightOriginal;
+    } else if ((widthOriginal <= widthMax) && (heightOriginal > heightMax)) {
+        height = heightMax;
+        width = (double)height/(double)heightOriginal * widthOriginal;
+    } else {
+        width = widthMax;
+        height = (double)width/(double)widthOriginal * heightOriginal;
+        if (height > heightMax) {
+            height = heightMax;
+            width = (double)height/(double)heightOriginal * widthOriginal;
+        }
+    }
+    return cSize(width, height);
+}
+
+int Minimum(int a, int b, int c, int d, int e, int f) {
     int min = a;
     if (b < min) min = b;
     if (c < min) min = c;
@@ -45,4 +101,71 @@ static int Minimum(int a, int b, int c, int d, int e, int f) {
     if (e < min) min = e;
     if (f < min) min = f;
     return min;
-}
\ No newline at end of file
+}
+
+std::string CutText(std::string text, int width, const cFont *font) {
+    if (width <= font->Size())
+        return text.c_str();
+    cTextWrapper twText;
+    twText.Set(text.c_str(), font, width);
+    std::string cuttedTextNative = twText.GetLine(0);
+    std::stringstream sstrText;
+    sstrText << cuttedTextNative << "...";
+    std::string cuttedText = sstrText.str();
+    int actWidth = font->Width(cuttedText.c_str());
+    if (actWidth > width) {
+        int overlap = actWidth - width;
+        int charWidth = font->Width(".");
+        if (charWidth == 0)
+            charWidth = 1;
+        int cutChars = overlap / charWidth;
+        if (cutChars > 0) {
+            cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars);
+            std::stringstream sstrText2;
+            sstrText2 << cuttedTextNative << "...";
+            cuttedText = sstrText2.str();
+        }
+    }
+    return cuttedText;
+}
+
+std::string StrToLowerCase(std::string str) {
+    std::string lowerCase = str;
+    const int length = lowerCase.length();
+    for(int i=0; i < length; ++i) {
+        lowerCase[i] = std::tolower(lowerCase[i]);
+    }
+    return lowerCase;
+}
+
+// split: receives a char delimiter; returns a vector of strings
+// By default ignores repeated delimiters, unless argument rep == 1.
+std::vector<std::string>& splitstring::split(char delim, int rep) {
+    if (!flds.empty()) flds.clear();  // empty vector if necessary
+    std::string work = data();
+    std::string buf = "";
+    int i = 0;
+    while (i < work.length()) {
+        if (work[i] != delim)
+            buf += work[i];
+        else if (rep == 1) {
+            flds.push_back(buf);
+            buf = "";
+        } else if (buf.length() > 0) {
+            flds.push_back(buf);
+            buf = "";
+        }
+        i++;
+    }
+    if (!buf.empty())
+        flds.push_back(buf);
+    return flds;
+}
+
+cPlugin *GetScraperPlugin(void) {
+    static cPlugin *pScraper = cPluginManager::GetPlugin("scraper2vdr");
+    if( !pScraper ) // if it doesn't exit, try tvscraper
+        pScraper = cPluginManager::GetPlugin("tvscraper");
+    return pScraper;
+}
+
diff --git a/helpers.h b/helpers.h
new file mode 100644
index 0000000..c3e3eaf
--- /dev/null
+++ b/helpers.h
@@ -0,0 +1,24 @@
+#ifndef __HELPERS_H
+#define __HELPERS_H
+
+#include <vdr/osd.h>
+#include <vdr/plugin.h>
+
+cOsd *CreateOsd(int Left, int Top, int Width, int Height);
+void DrawBlendedBackground(cPixmap *pixmap, int xStart, int width, tColor color, tColor colorBlending, bool fromTop);
+void DrawRoundedCorners(cPixmap *p, int radius, int x, int y, int width, int height);
+void DrawRoundedCornersWithBorder(cPixmap *p, tColor borderColor, int radius, int width, int height);
+cSize ScaleToFit(int widthMax, int heightMax, int widthOriginal, int heightOriginal);
+int Minimum(int a, int b, int c, int d, int e, int f);
+std::string CutText(std::string text, int width, const cFont *font);
+std::string StrToLowerCase(std::string str);
+
+class splitstring : public std::string {
+    std::vector<std::string> flds;
+public:
+    splitstring(const char *s) : std::string(s) { };
+    std::vector<std::string>& split(char delim, int rep=0);
+};
+
+cPlugin *GetScraperPlugin(void);
+#endif // __HELPERS_H
diff --git a/icons/alternative/vdrlogo_gen2vdr.png b/icons/alternative/vdrlogo_gen2vdr.png
index 3abbd2f..72b6a0e 100644
Binary files a/icons/alternative/vdrlogo_gen2vdr.png and b/icons/alternative/vdrlogo_gen2vdr.png differ
diff --git a/icons/anthra/extraIcons/Applikationen.png b/icons/anthra/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c3b616
Binary files /dev/null and b/icons/anthra/extraIcons/Applikationen.png differ
diff --git a/icons/anthra/extraIcons/Audio.png b/icons/anthra/extraIcons/Audio.png
new file mode 100644
index 0000000..ff387fe
Binary files /dev/null and b/icons/anthra/extraIcons/Audio.png differ
diff --git a/icons/anthra/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/anthra/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3cdddc9
Binary files /dev/null and b/icons/anthra/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/anthra/extraIcons/Dienstprogramme.png b/icons/anthra/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..793aba6
Binary files /dev/null and b/icons/anthra/extraIcons/Dienstprogramme.png differ
diff --git a/icons/anthra/extraIcons/FireFox.png b/icons/anthra/extraIcons/FireFox.png
new file mode 100644
index 0000000..192fadc
Binary files /dev/null and b/icons/anthra/extraIcons/FireFox.png differ
diff --git a/icons/anthra/extraIcons/Info.png b/icons/anthra/extraIcons/Info.png
new file mode 100644
index 0000000..6737431
Binary files /dev/null and b/icons/anthra/extraIcons/Info.png differ
diff --git a/icons/anthra/extraIcons/Internet.png b/icons/anthra/extraIcons/Internet.png
new file mode 100644
index 0000000..f3db150
Binary files /dev/null and b/icons/anthra/extraIcons/Internet.png differ
diff --git a/icons/anthra/extraIcons/Medien.png b/icons/anthra/extraIcons/Medien.png
new file mode 100644
index 0000000..0ce2360
Binary files /dev/null and b/icons/anthra/extraIcons/Medien.png differ
diff --git a/icons/anthra/extraIcons/Rechner neu starten.png b/icons/anthra/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..5783ccf
Binary files /dev/null and b/icons/anthra/extraIcons/Rechner neu starten.png differ
diff --git a/icons/anthra/extraIcons/Remote wakeup.png b/icons/anthra/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..1cd2f6e
Binary files /dev/null and b/icons/anthra/extraIcons/Remote wakeup.png differ
diff --git a/icons/anthra/extraIcons/Server pausieren.png b/icons/anthra/extraIcons/Server pausieren.png
new file mode 100644
index 0000000..2e9321b
Binary files /dev/null and b/icons/anthra/extraIcons/Server pausieren.png differ
diff --git a/icons/anthra/extraIcons/Spiele.png b/icons/anthra/extraIcons/Spiele.png
new file mode 100644
index 0000000..8e07161
Binary files /dev/null and b/icons/anthra/extraIcons/Spiele.png differ
diff --git a/icons/anthra/extraIcons/System herunterfahren.png b/icons/anthra/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..e0234df
Binary files /dev/null and b/icons/anthra/extraIcons/System herunterfahren.png differ
diff --git a/icons/anthra/extraIcons/System.png b/icons/anthra/extraIcons/System.png
new file mode 100644
index 0000000..81d100e
Binary files /dev/null and b/icons/anthra/extraIcons/System.png differ
diff --git a/icons/anthra/extraIcons/Tools.png b/icons/anthra/extraIcons/Tools.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/anthra/extraIcons/Tools.png differ
diff --git a/icons/anthra/extraIcons/Tunderbird.png b/icons/anthra/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..5ae27e0
Binary files /dev/null and b/icons/anthra/extraIcons/Tunderbird.png differ
diff --git a/icons/anthra/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/anthra/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..cd7b81c
Binary files /dev/null and b/icons/anthra/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/anthra/extraIcons/VDR neu starten.png b/icons/anthra/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..14904ca
Binary files /dev/null and b/icons/anthra/extraIcons/VDR neu starten.png differ
diff --git a/icons/anthra/extraIcons/Video.png b/icons/anthra/extraIcons/Video.png
new file mode 100644
index 0000000..490ca4b
Binary files /dev/null and b/icons/anthra/extraIcons/Video.png differ
diff --git a/icons/anthra/extraIcons/Web.png b/icons/anthra/extraIcons/Web.png
new file mode 100644
index 0000000..20260e3
Binary files /dev/null and b/icons/anthra/extraIcons/Web.png differ
diff --git a/icons/anthra/extraIcons/XBMC.png b/icons/anthra/extraIcons/XBMC.png
new file mode 100644
index 0000000..c7c4c04
Binary files /dev/null and b/icons/anthra/extraIcons/XBMC.png differ
diff --git a/icons/anthra/extraIcons/Xterm.png b/icons/anthra/extraIcons/Xterm.png
new file mode 100644
index 0000000..fa75282
Binary files /dev/null and b/icons/anthra/extraIcons/Xterm.png differ
diff --git a/icons/anthra/extraIcons/audiovideo.png b/icons/anthra/extraIcons/audiovideo.png
new file mode 100644
index 0000000..726538d
Binary files /dev/null and b/icons/anthra/extraIcons/audiovideo.png differ
diff --git a/icons/anthra/extraIcons/markad_status.png b/icons/anthra/extraIcons/markad_status.png
new file mode 100644
index 0000000..4fdc7a4
Binary files /dev/null and b/icons/anthra/extraIcons/markad_status.png differ
diff --git a/icons/anthra/extraIcons/schneiden_abbrechen.png b/icons/anthra/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..b2e0bd3
Binary files /dev/null and b/icons/anthra/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/anthra/extraIcons/tux.png b/icons/anthra/extraIcons/tux.png
new file mode 100644
index 0000000..c5b4742
Binary files /dev/null and b/icons/anthra/extraIcons/tux.png differ
diff --git a/icons/anthra/extraIcons/usb.png b/icons/anthra/extraIcons/usb.png
new file mode 100644
index 0000000..c4db1d4
Binary files /dev/null and b/icons/anthra/extraIcons/usb.png differ
diff --git a/icons/anthra/extraIcons/vdrlogo.png b/icons/anthra/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..037a191
Binary files /dev/null and b/icons/anthra/extraIcons/vdrlogo.png differ
diff --git a/icons/anthra/extraIcons/yaicon_blue.png b/icons/anthra/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..2c49273
Binary files /dev/null and b/icons/anthra/extraIcons/yaicon_blue.png differ
diff --git a/icons/anthra/menuIcons/CAM.png b/icons/anthra/menuIcons/CAM.png
new file mode 100644
index 0000000..a394877
Binary files /dev/null and b/icons/anthra/menuIcons/CAM.png differ
diff --git a/icons/anthra/menuIcons/Channels.png b/icons/anthra/menuIcons/Channels.png
new file mode 100644
index 0000000..ba2ba78
Binary files /dev/null and b/icons/anthra/menuIcons/Channels.png differ
diff --git a/icons/anthra/menuIcons/Commands.png b/icons/anthra/menuIcons/Commands.png
new file mode 100644
index 0000000..c6a83ef
Binary files /dev/null and b/icons/anthra/menuIcons/Commands.png differ
diff --git a/icons/anthra/menuIcons/DVB.png b/icons/anthra/menuIcons/DVB.png
new file mode 100644
index 0000000..3789145
Binary files /dev/null and b/icons/anthra/menuIcons/DVB.png differ
diff --git a/icons/anthra/menuIcons/EPG.png b/icons/anthra/menuIcons/EPG.png
new file mode 100644
index 0000000..e868b90
Binary files /dev/null and b/icons/anthra/menuIcons/EPG.png differ
diff --git a/icons/anthra/menuIcons/LNB.png b/icons/anthra/menuIcons/LNB.png
new file mode 100644
index 0000000..896dd99
Binary files /dev/null and b/icons/anthra/menuIcons/LNB.png differ
diff --git a/icons/anthra/menuIcons/Miscellaneous.png b/icons/anthra/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..2a41c4d
Binary files /dev/null and b/icons/anthra/menuIcons/Miscellaneous.png differ
diff --git a/icons/anthra/menuIcons/OSD.png b/icons/anthra/menuIcons/OSD.png
new file mode 100644
index 0000000..8f571c6
Binary files /dev/null and b/icons/anthra/menuIcons/OSD.png differ
diff --git a/icons/anthra/menuIcons/Plugins.png b/icons/anthra/menuIcons/Plugins.png
new file mode 100644
index 0000000..3fcba70
Binary files /dev/null and b/icons/anthra/menuIcons/Plugins.png differ
diff --git a/icons/anthra/menuIcons/Recording.png b/icons/anthra/menuIcons/Recording.png
new file mode 100644
index 0000000..741b1af
Binary files /dev/null and b/icons/anthra/menuIcons/Recording.png differ
diff --git a/icons/anthra/menuIcons/Recordings.png b/icons/anthra/menuIcons/Recordings.png
new file mode 100644
index 0000000..79aeeb7
Binary files /dev/null and b/icons/anthra/menuIcons/Recordings.png differ
diff --git a/icons/anthra/menuIcons/Replay.png b/icons/anthra/menuIcons/Replay.png
new file mode 100644
index 0000000..621596c
Binary files /dev/null and b/icons/anthra/menuIcons/Replay.png differ
diff --git a/icons/anthra/menuIcons/Restart.png b/icons/anthra/menuIcons/Restart.png
new file mode 100644
index 0000000..aa23cd4
Binary files /dev/null and b/icons/anthra/menuIcons/Restart.png differ
diff --git a/icons/anthra/menuIcons/Schedule.png b/icons/anthra/menuIcons/Schedule.png
new file mode 100644
index 0000000..3a98cac
Binary files /dev/null and b/icons/anthra/menuIcons/Schedule.png differ
diff --git a/icons/anthra/menuIcons/Setup.png b/icons/anthra/menuIcons/Setup.png
new file mode 100644
index 0000000..d121148
Binary files /dev/null and b/icons/anthra/menuIcons/Setup.png differ
diff --git a/icons/anthra/menuIcons/StopRecording.png b/icons/anthra/menuIcons/StopRecording.png
new file mode 100644
index 0000000..ed83fbb
Binary files /dev/null and b/icons/anthra/menuIcons/StopRecording.png differ
diff --git a/icons/anthra/menuIcons/StopReplay.png b/icons/anthra/menuIcons/StopReplay.png
new file mode 100644
index 0000000..9192760
Binary files /dev/null and b/icons/anthra/menuIcons/StopReplay.png differ
diff --git a/icons/anthra/menuIcons/Timers.png b/icons/anthra/menuIcons/Timers.png
new file mode 100644
index 0000000..b866c36
Binary files /dev/null and b/icons/anthra/menuIcons/Timers.png differ
diff --git a/icons/anthra/pluginIcons/arghdirector.png b/icons/anthra/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..bbd221a
Binary files /dev/null and b/icons/anthra/pluginIcons/arghdirector.png differ
diff --git a/icons/anthra/pluginIcons/autostart.png b/icons/anthra/pluginIcons/autostart.png
new file mode 100644
index 0000000..6fdb1bb
Binary files /dev/null and b/icons/anthra/pluginIcons/autostart.png differ
diff --git a/icons/anthra/pluginIcons/avahi4vdr.png b/icons/anthra/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..044e71d
Binary files /dev/null and b/icons/anthra/pluginIcons/avahi4vdr.png differ
diff --git a/icons/anthra/pluginIcons/avards.png b/icons/anthra/pluginIcons/avards.png
new file mode 100644
index 0000000..cf8d037
Binary files /dev/null and b/icons/anthra/pluginIcons/avards.png differ
diff --git a/icons/anthra/pluginIcons/block.png b/icons/anthra/pluginIcons/block.png
new file mode 100644
index 0000000..86127c2
Binary files /dev/null and b/icons/anthra/pluginIcons/block.png differ
diff --git a/icons/anthra/pluginIcons/burn.png b/icons/anthra/pluginIcons/burn.png
new file mode 100644
index 0000000..305d7ff
Binary files /dev/null and b/icons/anthra/pluginIcons/burn.png differ
diff --git a/icons/anthra/pluginIcons/cdplayer.png b/icons/anthra/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..89a6c19
Binary files /dev/null and b/icons/anthra/pluginIcons/cdplayer.png differ
diff --git a/icons/anthra/pluginIcons/chanman.png b/icons/anthra/pluginIcons/chanman.png
new file mode 100644
index 0000000..a73e83c
Binary files /dev/null and b/icons/anthra/pluginIcons/chanman.png differ
diff --git a/icons/anthra/pluginIcons/check.png b/icons/anthra/pluginIcons/check.png
new file mode 100644
index 0000000..d487a24
Binary files /dev/null and b/icons/anthra/pluginIcons/check.png differ
diff --git a/icons/anthra/pluginIcons/conflictcheckonly.png b/icons/anthra/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..7f832bd
Binary files /dev/null and b/icons/anthra/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/anthra/pluginIcons/ddci.png b/icons/anthra/pluginIcons/ddci.png
new file mode 100644
index 0000000..4ad459c
Binary files /dev/null and b/icons/anthra/pluginIcons/ddci.png differ
diff --git a/icons/anthra/pluginIcons/devstatus.png b/icons/anthra/pluginIcons/devstatus.png
new file mode 100644
index 0000000..96c0ec1
Binary files /dev/null and b/icons/anthra/pluginIcons/devstatus.png differ
diff --git a/icons/anthra/pluginIcons/dummydevice.png b/icons/anthra/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..11fd707
Binary files /dev/null and b/icons/anthra/pluginIcons/dummydevice.png differ
diff --git a/icons/anthra/pluginIcons/duplicates.png b/icons/anthra/pluginIcons/duplicates.png
new file mode 100644
index 0000000..dc1be57
Binary files /dev/null and b/icons/anthra/pluginIcons/duplicates.png differ
diff --git a/icons/anthra/pluginIcons/dvbapi.png b/icons/anthra/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..b966461
Binary files /dev/null and b/icons/anthra/pluginIcons/dvbapi.png differ
diff --git a/icons/anthra/pluginIcons/dvbhddevice.png b/icons/anthra/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..b874297
Binary files /dev/null and b/icons/anthra/pluginIcons/dvbhddevice.png differ
diff --git a/icons/anthra/pluginIcons/dvbsddevice.png b/icons/anthra/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..106184e
Binary files /dev/null and b/icons/anthra/pluginIcons/dvbsddevice.png differ
diff --git a/icons/anthra/pluginIcons/dynamite.png b/icons/anthra/pluginIcons/dynamite.png
new file mode 100644
index 0000000..28ea35a
Binary files /dev/null and b/icons/anthra/pluginIcons/dynamite.png differ
diff --git a/icons/anthra/pluginIcons/eepg.png b/icons/anthra/pluginIcons/eepg.png
new file mode 100644
index 0000000..3938b96
Binary files /dev/null and b/icons/anthra/pluginIcons/eepg.png differ
diff --git a/icons/anthra/pluginIcons/epg2vdr.png b/icons/anthra/pluginIcons/epg2vdr.png
new file mode 100644
index 0000000..ac8757e
Binary files /dev/null and b/icons/anthra/pluginIcons/epg2vdr.png differ
diff --git a/icons/anthra/pluginIcons/epgsearch.png b/icons/anthra/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5eab415
Binary files /dev/null and b/icons/anthra/pluginIcons/epgsearch.png differ
diff --git a/icons/anthra/pluginIcons/epgsearchonly.png b/icons/anthra/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..b5186e7
Binary files /dev/null and b/icons/anthra/pluginIcons/epgsearchonly.png differ
diff --git a/icons/anthra/pluginIcons/epgsync.png b/icons/anthra/pluginIcons/epgsync.png
new file mode 100644
index 0000000..5c14009
Binary files /dev/null and b/icons/anthra/pluginIcons/epgsync.png differ
diff --git a/icons/anthra/pluginIcons/externalplayer.png b/icons/anthra/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..2bd67db
Binary files /dev/null and b/icons/anthra/pluginIcons/externalplayer.png differ
diff --git a/icons/anthra/pluginIcons/extrecmenu.png b/icons/anthra/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..6f613f1
Binary files /dev/null and b/icons/anthra/pluginIcons/extrecmenu.png differ
diff --git a/icons/anthra/pluginIcons/favorites.png b/icons/anthra/pluginIcons/favorites.png
new file mode 100644
index 0000000..409c852
Binary files /dev/null and b/icons/anthra/pluginIcons/favorites.png differ
diff --git a/icons/anthra/pluginIcons/femon.png b/icons/anthra/pluginIcons/femon.png
new file mode 100644
index 0000000..e87b711
Binary files /dev/null and b/icons/anthra/pluginIcons/femon.png differ
diff --git a/icons/anthra/pluginIcons/fepg.png b/icons/anthra/pluginIcons/fepg.png
new file mode 100644
index 0000000..65023ed
Binary files /dev/null and b/icons/anthra/pluginIcons/fepg.png differ
diff --git a/icons/anthra/pluginIcons/filebrowser.png b/icons/anthra/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..d3f90e0
Binary files /dev/null and b/icons/anthra/pluginIcons/filebrowser.png differ
diff --git a/icons/anthra/pluginIcons/fritzbox.png b/icons/anthra/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..7bfc229
Binary files /dev/null and b/icons/anthra/pluginIcons/fritzbox.png differ
diff --git a/icons/anthra/pluginIcons/graphlcd.png b/icons/anthra/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/anthra/pluginIcons/graphlcd.png differ
diff --git a/icons/anthra/pluginIcons/graphtft.png b/icons/anthra/pluginIcons/graphtft.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/anthra/pluginIcons/graphtft.png differ
diff --git a/icons/anthra/pluginIcons/image.png b/icons/anthra/pluginIcons/image.png
new file mode 100644
index 0000000..33644e0
Binary files /dev/null and b/icons/anthra/pluginIcons/image.png differ
diff --git a/icons/anthra/pluginIcons/imonlcd.png b/icons/anthra/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/anthra/pluginIcons/imonlcd.png differ
diff --git a/icons/anthra/pluginIcons/iptv.png b/icons/anthra/pluginIcons/iptv.png
new file mode 100644
index 0000000..4494ddc
Binary files /dev/null and b/icons/anthra/pluginIcons/iptv.png differ
diff --git a/icons/anthra/pluginIcons/lcdproc.png b/icons/anthra/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/anthra/pluginIcons/lcdproc.png differ
diff --git a/icons/anthra/pluginIcons/mailbox.png b/icons/anthra/pluginIcons/mailbox.png
new file mode 100644
index 0000000..1bc76e8
Binary files /dev/null and b/icons/anthra/pluginIcons/mailbox.png differ
diff --git a/icons/anthra/pluginIcons/makemkv.png b/icons/anthra/pluginIcons/makemkv.png
new file mode 100644
index 0000000..41cddf1
Binary files /dev/null and b/icons/anthra/pluginIcons/makemkv.png differ
diff --git a/icons/anthra/pluginIcons/markad.png b/icons/anthra/pluginIcons/markad.png
new file mode 100644
index 0000000..b3defaf
Binary files /dev/null and b/icons/anthra/pluginIcons/markad.png differ
diff --git a/icons/anthra/pluginIcons/mlist.png b/icons/anthra/pluginIcons/mlist.png
new file mode 100644
index 0000000..19c367f
Binary files /dev/null and b/icons/anthra/pluginIcons/mlist.png differ
diff --git a/icons/anthra/pluginIcons/music.png b/icons/anthra/pluginIcons/music.png
new file mode 100644
index 0000000..abb012e
Binary files /dev/null and b/icons/anthra/pluginIcons/music.png differ
diff --git a/icons/anthra/pluginIcons/noepg.png b/icons/anthra/pluginIcons/noepg.png
new file mode 100644
index 0000000..eb9410d
Binary files /dev/null and b/icons/anthra/pluginIcons/noepg.png differ
diff --git a/icons/anthra/pluginIcons/nordlichtsepg.png b/icons/anthra/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..3ee3fa2
Binary files /dev/null and b/icons/anthra/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/anthra/pluginIcons/osdteletext.png b/icons/anthra/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..664e770
Binary files /dev/null and b/icons/anthra/pluginIcons/osdteletext.png differ
diff --git a/icons/anthra/pluginIcons/peer.png b/icons/anthra/pluginIcons/peer.png
new file mode 100644
index 0000000..998d568
Binary files /dev/null and b/icons/anthra/pluginIcons/peer.png differ
diff --git a/icons/anthra/pluginIcons/pin.png b/icons/anthra/pluginIcons/pin.png
new file mode 100644
index 0000000..b4ae4f8
Binary files /dev/null and b/icons/anthra/pluginIcons/pin.png differ
diff --git a/icons/anthra/pluginIcons/play.png b/icons/anthra/pluginIcons/play.png
new file mode 100644
index 0000000..2848fc6
Binary files /dev/null and b/icons/anthra/pluginIcons/play.png differ
diff --git a/icons/anthra/pluginIcons/pvrinput.png b/icons/anthra/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..724f698
Binary files /dev/null and b/icons/anthra/pluginIcons/pvrinput.png differ
diff --git a/icons/anthra/pluginIcons/quickepgsearch.png b/icons/anthra/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..76a31f4
Binary files /dev/null and b/icons/anthra/pluginIcons/quickepgsearch.png differ
diff --git a/icons/anthra/pluginIcons/radio.png b/icons/anthra/pluginIcons/radio.png
new file mode 100644
index 0000000..193b7d4
Binary files /dev/null and b/icons/anthra/pluginIcons/radio.png differ
diff --git a/icons/anthra/pluginIcons/remote.png b/icons/anthra/pluginIcons/remote.png
new file mode 100644
index 0000000..7f46b1b
Binary files /dev/null and b/icons/anthra/pluginIcons/remote.png differ
diff --git a/icons/anthra/pluginIcons/remotetimers.png b/icons/anthra/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..fae3b79
Binary files /dev/null and b/icons/anthra/pluginIcons/remotetimers.png differ
diff --git a/icons/anthra/pluginIcons/rssreader.png b/icons/anthra/pluginIcons/rssreader.png
new file mode 100644
index 0000000..db538f0
Binary files /dev/null and b/icons/anthra/pluginIcons/rssreader.png differ
diff --git a/icons/anthra/pluginIcons/sc.png b/icons/anthra/pluginIcons/sc.png
new file mode 100644
index 0000000..2472d6c
Binary files /dev/null and b/icons/anthra/pluginIcons/sc.png differ
diff --git a/icons/anthra/pluginIcons/scraper2vdr.png b/icons/anthra/pluginIcons/scraper2vdr.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/anthra/pluginIcons/scraper2vdr.png differ
diff --git a/icons/anthra/pluginIcons/screenshot.png b/icons/anthra/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be9b4d5
Binary files /dev/null and b/icons/anthra/pluginIcons/screenshot.png differ
diff --git a/icons/anthra/pluginIcons/seduatmo.png b/icons/anthra/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/anthra/pluginIcons/seduatmo.png differ
diff --git a/icons/anthra/pluginIcons/skyselectfeeds.png b/icons/anthra/pluginIcons/skyselectfeeds.png
new file mode 100644
index 0000000..d81a024
Binary files /dev/null and b/icons/anthra/pluginIcons/skyselectfeeds.png differ
diff --git a/icons/anthra/pluginIcons/sleeptimer.png b/icons/anthra/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..cd4956f
Binary files /dev/null and b/icons/anthra/pluginIcons/sleeptimer.png differ
diff --git a/icons/anthra/pluginIcons/softhddevice.png b/icons/anthra/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..df13f2c
Binary files /dev/null and b/icons/anthra/pluginIcons/softhddevice.png differ
diff --git a/icons/anthra/pluginIcons/squeezebox.png b/icons/anthra/pluginIcons/squeezebox.png
new file mode 100644
index 0000000..2cd72ef
Binary files /dev/null and b/icons/anthra/pluginIcons/squeezebox.png differ
diff --git a/icons/anthra/pluginIcons/streamdev-server.png b/icons/anthra/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..e89ed8b
Binary files /dev/null and b/icons/anthra/pluginIcons/streamdev-server.png differ
diff --git a/icons/anthra/pluginIcons/systeminfo.png b/icons/anthra/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..b14763f
Binary files /dev/null and b/icons/anthra/pluginIcons/systeminfo.png differ
diff --git a/icons/anthra/pluginIcons/targavfd.png b/icons/anthra/pluginIcons/targavfd.png
new file mode 100644
index 0000000..e91b111
Binary files /dev/null and b/icons/anthra/pluginIcons/targavfd.png differ
diff --git a/icons/anthra/pluginIcons/trayopenng.png b/icons/anthra/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..6ebd17d
Binary files /dev/null and b/icons/anthra/pluginIcons/trayopenng.png differ
diff --git a/icons/anthra/pluginIcons/tvguide.png b/icons/anthra/pluginIcons/tvguide.png
new file mode 100644
index 0000000..968a37c
Binary files /dev/null and b/icons/anthra/pluginIcons/tvguide.png differ
diff --git a/icons/anthra/pluginIcons/tvm2vdr.png b/icons/anthra/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..47f9a91
Binary files /dev/null and b/icons/anthra/pluginIcons/tvm2vdr.png differ
diff --git a/icons/anthra/pluginIcons/tvscraper.png b/icons/anthra/pluginIcons/tvscraper.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/anthra/pluginIcons/tvscraper.png differ
diff --git a/icons/anthra/pluginIcons/undelete.png b/icons/anthra/pluginIcons/undelete.png
new file mode 100644
index 0000000..a53d50a
Binary files /dev/null and b/icons/anthra/pluginIcons/undelete.png differ
diff --git a/icons/anthra/pluginIcons/vdrboblight.png b/icons/anthra/pluginIcons/vdrboblight.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/anthra/pluginIcons/vdrboblight.png differ
diff --git a/icons/anthra/pluginIcons/weatherhd.png b/icons/anthra/pluginIcons/weatherhd.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/anthra/pluginIcons/weatherhd.png differ
diff --git a/icons/anthra/pluginIcons/weatherng.png b/icons/anthra/pluginIcons/weatherng.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/anthra/pluginIcons/weatherng.png differ
diff --git a/icons/anthra/pluginIcons/xmltv2vdr.png b/icons/anthra/pluginIcons/xmltv2vdr.png
new file mode 100644
index 0000000..ea73c74
Binary files /dev/null and b/icons/anthra/pluginIcons/xmltv2vdr.png differ
diff --git a/icons/anthra/pluginIcons/yaepghg.png b/icons/anthra/pluginIcons/yaepghg.png
new file mode 100644
index 0000000..53ce443
Binary files /dev/null and b/icons/anthra/pluginIcons/yaepghg.png differ
diff --git a/icons/anthra/skinElements/buttonblue.png b/icons/anthra/skinElements/buttonblue.png
new file mode 100644
index 0000000..3adb84c
Binary files /dev/null and b/icons/anthra/skinElements/buttonblue.png differ
diff --git a/icons/anthra/skinElements/buttongreen.png b/icons/anthra/skinElements/buttongreen.png
new file mode 100644
index 0000000..6a38242
Binary files /dev/null and b/icons/anthra/skinElements/buttongreen.png differ
diff --git a/icons/anthra/skinElements/buttonred.png b/icons/anthra/skinElements/buttonred.png
new file mode 100644
index 0000000..9f0424c
Binary files /dev/null and b/icons/anthra/skinElements/buttonred.png differ
diff --git a/icons/anthra/skinElements/buttonyellow.png b/icons/anthra/skinElements/buttonyellow.png
new file mode 100644
index 0000000..e18abcc
Binary files /dev/null and b/icons/anthra/skinElements/buttonyellow.png differ
diff --git a/icons/anthra/skinElements/channellogoback.png b/icons/anthra/skinElements/channellogoback.png
new file mode 100644
index 0000000..16c0203
Binary files /dev/null and b/icons/anthra/skinElements/channellogoback.png differ
diff --git a/icons/anthra/skinElements/displaychannelback.png b/icons/anthra/skinElements/displaychannelback.png
new file mode 100644
index 0000000..f870fd0
Binary files /dev/null and b/icons/anthra/skinElements/displaychannelback.png differ
diff --git a/icons/anthra/skinElements/displaychannelback_right.png b/icons/anthra/skinElements/displaychannelback_right.png
new file mode 100644
index 0000000..58f81e6
Binary files /dev/null and b/icons/anthra/skinElements/displaychannelback_right.png differ
diff --git a/icons/anthra/skinElements/displaychanneltop.png b/icons/anthra/skinElements/displaychanneltop.png
new file mode 100644
index 0000000..5eb929e
Binary files /dev/null and b/icons/anthra/skinElements/displaychanneltop.png differ
diff --git a/icons/anthra/skinElements/displaychanneltop_right.png b/icons/anthra/skinElements/displaychanneltop_right.png
new file mode 100644
index 0000000..4363104
Binary files /dev/null and b/icons/anthra/skinElements/displaychanneltop_right.png differ
diff --git a/icons/anthra/skinElements/displayreplayback.png b/icons/anthra/skinElements/displayreplayback.png
new file mode 100644
index 0000000..79ba3c6
Binary files /dev/null and b/icons/anthra/skinElements/displayreplayback.png differ
diff --git a/icons/anthra/skinElements/displayreplaytop.png b/icons/anthra/skinElements/displayreplaytop.png
new file mode 100644
index 0000000..285fc53
Binary files /dev/null and b/icons/anthra/skinElements/displayreplaytop.png differ
diff --git a/icons/anthra/skinElements/displayvolume.png b/icons/anthra/skinElements/displayvolume.png
new file mode 100644
index 0000000..0a10dc2
Binary files /dev/null and b/icons/anthra/skinElements/displayvolume.png differ
diff --git a/icons/anthra/skinElements/header_mirroredtop.png b/icons/anthra/skinElements/header_mirroredtop.png
new file mode 100644
index 0000000..a7f27ed
Binary files /dev/null and b/icons/anthra/skinElements/header_mirroredtop.png differ
diff --git a/icons/anthra/skinElements/headerback.png b/icons/anthra/skinElements/headerback.png
new file mode 100644
index 0000000..585285c
Binary files /dev/null and b/icons/anthra/skinElements/headerback.png differ
diff --git a/icons/anthra/skinElements/headerback_mirrored.png b/icons/anthra/skinElements/headerback_mirrored.png
new file mode 100644
index 0000000..585285c
Binary files /dev/null and b/icons/anthra/skinElements/headerback_mirrored.png differ
diff --git a/icons/anthra/skinElements/headertop.png b/icons/anthra/skinElements/headertop.png
new file mode 100644
index 0000000..b2643f9
Binary files /dev/null and b/icons/anthra/skinElements/headertop.png differ
diff --git a/icons/anthra/skinElements/menubutton.png b/icons/anthra/skinElements/menubutton.png
new file mode 100644
index 0000000..8398390
Binary files /dev/null and b/icons/anthra/skinElements/menubutton.png differ
diff --git a/icons/anthra/skinElements/menubuttonactive.png b/icons/anthra/skinElements/menubuttonactive.png
new file mode 100644
index 0000000..7e7a24b
Binary files /dev/null and b/icons/anthra/skinElements/menubuttonactive.png differ
diff --git a/icons/anthra/skinElements/menubuttondefault.png b/icons/anthra/skinElements/menubuttondefault.png
new file mode 100644
index 0000000..58592db
Binary files /dev/null and b/icons/anthra/skinElements/menubuttondefault.png differ
diff --git a/icons/anthra/skinElements/menubuttondefaultactive.png b/icons/anthra/skinElements/menubuttondefaultactive.png
new file mode 100644
index 0000000..7eb87ae
Binary files /dev/null and b/icons/anthra/skinElements/menubuttondefaultactive.png differ
diff --git a/icons/anthra/skinElements/menubuttontop.png b/icons/anthra/skinElements/menubuttontop.png
new file mode 100644
index 0000000..c92b81b
Binary files /dev/null and b/icons/anthra/skinElements/menubuttontop.png differ
diff --git a/icons/anthra/skinElements/messageError.png b/icons/anthra/skinElements/messageError.png
new file mode 100644
index 0000000..77b766d
Binary files /dev/null and b/icons/anthra/skinElements/messageError.png differ
diff --git a/icons/anthra/skinElements/messageInfo.png b/icons/anthra/skinElements/messageInfo.png
new file mode 100644
index 0000000..cb4fea6
Binary files /dev/null and b/icons/anthra/skinElements/messageInfo.png differ
diff --git a/icons/anthra/skinElements/messageStatus.png b/icons/anthra/skinElements/messageStatus.png
new file mode 100644
index 0000000..c1bb77d
Binary files /dev/null and b/icons/anthra/skinElements/messageStatus.png differ
diff --git a/icons/anthra/skinElements/messageWarning.png b/icons/anthra/skinElements/messageWarning.png
new file mode 100644
index 0000000..a27c628
Binary files /dev/null and b/icons/anthra/skinElements/messageWarning.png differ
diff --git a/icons/anthra/skinElements/scrollbar.png b/icons/anthra/skinElements/scrollbar.png
new file mode 100644
index 0000000..131d75f
Binary files /dev/null and b/icons/anthra/skinElements/scrollbar.png differ
diff --git a/icons/anthra/skinIcons/Channelseparator.png b/icons/anthra/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..b4cce1f
Binary files /dev/null and b/icons/anthra/skinIcons/Channelseparator.png differ
diff --git a/icons/anthra/skinIcons/DiskUsage.png b/icons/anthra/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..a6ca97c
Binary files /dev/null and b/icons/anthra/skinIcons/DiskUsage.png differ
diff --git a/icons/anthra/skinIcons/Thumbs.db b/icons/anthra/skinIcons/Thumbs.db
new file mode 100644
index 0000000..5e6dc7b
Binary files /dev/null and b/icons/anthra/skinIcons/Thumbs.db differ
diff --git a/icons/anthra/skinIcons/ac3.png b/icons/anthra/skinIcons/ac3.png
new file mode 100644
index 0000000..09bb555
Binary files /dev/null and b/icons/anthra/skinIcons/ac3.png differ
diff --git a/icons/anthra/skinIcons/activetimer.png b/icons/anthra/skinIcons/activetimer.png
new file mode 100644
index 0000000..77865e9
Binary files /dev/null and b/icons/anthra/skinIcons/activetimer.png differ
diff --git a/icons/anthra/skinIcons/activetimersmall.png b/icons/anthra/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..75fe9c7
Binary files /dev/null and b/icons/anthra/skinIcons/activetimersmall.png differ
diff --git a/icons/anthra/skinIcons/arrowLeftChannelSep.png b/icons/anthra/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..06dc063
Binary files /dev/null and b/icons/anthra/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/anthra/skinIcons/arrowRightChannelSep.png b/icons/anthra/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..4b3910b
Binary files /dev/null and b/icons/anthra/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/anthra/skinIcons/channeldelimiter.png b/icons/anthra/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..991b612
Binary files /dev/null and b/icons/anthra/skinIcons/channeldelimiter.png differ
diff --git a/icons/anthra/skinIcons/crypted.png b/icons/anthra/skinIcons/crypted.png
new file mode 100644
index 0000000..ae24b18
Binary files /dev/null and b/icons/anthra/skinIcons/crypted.png differ
diff --git a/icons/anthra/skinIcons/daydelimiter.png b/icons/anthra/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..5a75cf1
Binary files /dev/null and b/icons/anthra/skinIcons/daydelimiter.png differ
diff --git a/icons/anthra/skinIcons/defaultPoster.png b/icons/anthra/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..6c6653a
Binary files /dev/null and b/icons/anthra/skinIcons/defaultPoster.png differ
diff --git a/icons/anthra/skinIcons/discpercent.png b/icons/anthra/skinIcons/discpercent.png
new file mode 100644
index 0000000..f23c942
Binary files /dev/null and b/icons/anthra/skinIcons/discpercent.png differ
diff --git a/icons/anthra/skinIcons/dolbyoff.png b/icons/anthra/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..aa37873
Binary files /dev/null and b/icons/anthra/skinIcons/dolbyoff.png differ
diff --git a/icons/anthra/skinIcons/dolbyon.png b/icons/anthra/skinIcons/dolbyon.png
new file mode 100644
index 0000000..5281cb4
Binary files /dev/null and b/icons/anthra/skinIcons/dolbyon.png differ
diff --git a/icons/anthra/skinIcons/encrypted.png b/icons/anthra/skinIcons/encrypted.png
new file mode 100644
index 0000000..827d6c5
Binary files /dev/null and b/icons/anthra/skinIcons/encrypted.png differ
diff --git a/icons/anthra/skinIcons/fta.png b/icons/anthra/skinIcons/fta.png
new file mode 100644
index 0000000..55e6fab
Binary files /dev/null and b/icons/anthra/skinIcons/fta.png differ
diff --git a/icons/anthra/skinIcons/fwd.png b/icons/anthra/skinIcons/fwd.png
new file mode 100644
index 0000000..15a8e90
Binary files /dev/null and b/icons/anthra/skinIcons/fwd.png differ
diff --git a/icons/anthra/skinIcons/fwdInactive.png b/icons/anthra/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..4c821cf
Binary files /dev/null and b/icons/anthra/skinIcons/fwdInactive.png differ
diff --git a/icons/anthra/skinIcons/fwdx1.png b/icons/anthra/skinIcons/fwdx1.png
new file mode 100644
index 0000000..b5d23b9
Binary files /dev/null and b/icons/anthra/skinIcons/fwdx1.png differ
diff --git a/icons/anthra/skinIcons/fwdx2.png b/icons/anthra/skinIcons/fwdx2.png
new file mode 100644
index 0000000..ba72c99
Binary files /dev/null and b/icons/anthra/skinIcons/fwdx2.png differ
diff --git a/icons/anthra/skinIcons/fwdx3.png b/icons/anthra/skinIcons/fwdx3.png
new file mode 100644
index 0000000..8165492
Binary files /dev/null and b/icons/anthra/skinIcons/fwdx3.png differ
diff --git a/icons/anthra/skinIcons/hd1080i.png b/icons/anthra/skinIcons/hd1080i.png
new file mode 100644
index 0000000..815d528
Binary files /dev/null and b/icons/anthra/skinIcons/hd1080i.png differ
diff --git a/icons/anthra/skinIcons/hd1080i_rec.png b/icons/anthra/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..815d528
Binary files /dev/null and b/icons/anthra/skinIcons/hd1080i_rec.png differ
diff --git a/icons/anthra/skinIcons/hd720p.png b/icons/anthra/skinIcons/hd720p.png
new file mode 100644
index 0000000..22c0aad
Binary files /dev/null and b/icons/anthra/skinIcons/hd720p.png differ
diff --git a/icons/anthra/skinIcons/hd720p_rec.png b/icons/anthra/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..22c0aad
Binary files /dev/null and b/icons/anthra/skinIcons/hd720p_rec.png differ
diff --git a/icons/anthra/skinIcons/newrecording.png b/icons/anthra/skinIcons/newrecording.png
new file mode 100644
index 0000000..636bc63
Binary files /dev/null and b/icons/anthra/skinIcons/newrecording.png differ
diff --git a/icons/anthra/skinIcons/pause.png b/icons/anthra/skinIcons/pause.png
new file mode 100644
index 0000000..aaa7924
Binary files /dev/null and b/icons/anthra/skinIcons/pause.png differ
diff --git a/icons/anthra/skinIcons/pauseInactive.png b/icons/anthra/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..13a4d80
Binary files /dev/null and b/icons/anthra/skinIcons/pauseInactive.png differ
diff --git a/icons/anthra/skinIcons/play.png b/icons/anthra/skinIcons/play.png
new file mode 100644
index 0000000..35bbec6
Binary files /dev/null and b/icons/anthra/skinIcons/play.png differ
diff --git a/icons/anthra/skinIcons/playInactive.png b/icons/anthra/skinIcons/playInactive.png
new file mode 100644
index 0000000..5ea50f0
Binary files /dev/null and b/icons/anthra/skinIcons/playInactive.png differ
diff --git a/icons/anthra/skinIcons/radio.png b/icons/anthra/skinIcons/radio.png
new file mode 100644
index 0000000..e375acf
Binary files /dev/null and b/icons/anthra/skinIcons/radio.png differ
diff --git a/icons/anthra/skinIcons/recfolder.png b/icons/anthra/skinIcons/recfolder.png
new file mode 100644
index 0000000..15c7623
Binary files /dev/null and b/icons/anthra/skinIcons/recfolder.png differ
diff --git a/icons/anthra/skinIcons/recoff.png b/icons/anthra/skinIcons/recoff.png
new file mode 100644
index 0000000..74348ba
Binary files /dev/null and b/icons/anthra/skinIcons/recoff.png differ
diff --git a/icons/anthra/skinIcons/recon.png b/icons/anthra/skinIcons/recon.png
new file mode 100644
index 0000000..1101f87
Binary files /dev/null and b/icons/anthra/skinIcons/recon.png differ
diff --git a/icons/anthra/skinIcons/recordingcutted.png b/icons/anthra/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..ae5f5a5
Binary files /dev/null and b/icons/anthra/skinIcons/recordingcutted.png differ
diff --git a/icons/anthra/skinIcons/recordingdatetime.png b/icons/anthra/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..fc9694c
Binary files /dev/null and b/icons/anthra/skinIcons/recordingdatetime.png differ
diff --git a/icons/anthra/skinIcons/rew.png b/icons/anthra/skinIcons/rew.png
new file mode 100644
index 0000000..59ae03e
Binary files /dev/null and b/icons/anthra/skinIcons/rew.png differ
diff --git a/icons/anthra/skinIcons/rewInactive.png b/icons/anthra/skinIcons/rewInactive.png
new file mode 100644
index 0000000..8a3d0be
Binary files /dev/null and b/icons/anthra/skinIcons/rewInactive.png differ
diff --git a/icons/anthra/skinIcons/rewx1.png b/icons/anthra/skinIcons/rewx1.png
new file mode 100644
index 0000000..d50d806
Binary files /dev/null and b/icons/anthra/skinIcons/rewx1.png differ
diff --git a/icons/anthra/skinIcons/rewx2.png b/icons/anthra/skinIcons/rewx2.png
new file mode 100644
index 0000000..cad14c7
Binary files /dev/null and b/icons/anthra/skinIcons/rewx2.png differ
diff --git a/icons/anthra/skinIcons/rewx3.png b/icons/anthra/skinIcons/rewx3.png
new file mode 100644
index 0000000..5959308
Binary files /dev/null and b/icons/anthra/skinIcons/rewx3.png differ
diff --git a/icons/anthra/skinIcons/sd576i.png b/icons/anthra/skinIcons/sd576i.png
new file mode 100644
index 0000000..a486fbf
Binary files /dev/null and b/icons/anthra/skinIcons/sd576i.png differ
diff --git a/icons/anthra/skinIcons/sd576i_rec.png b/icons/anthra/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..9f8e88c
Binary files /dev/null and b/icons/anthra/skinIcons/sd576i_rec.png differ
diff --git a/icons/anthra/skinIcons/stereo.png b/icons/anthra/skinIcons/stereo.png
new file mode 100644
index 0000000..a3aa42d
Binary files /dev/null and b/icons/anthra/skinIcons/stereo.png differ
diff --git a/icons/anthra/skinIcons/stereooff.png b/icons/anthra/skinIcons/stereooff.png
new file mode 100644
index 0000000..6094194
Binary files /dev/null and b/icons/anthra/skinIcons/stereooff.png differ
diff --git a/icons/anthra/skinIcons/stereoon.png b/icons/anthra/skinIcons/stereoon.png
new file mode 100644
index 0000000..e01b745
Binary files /dev/null and b/icons/anthra/skinIcons/stereoon.png differ
diff --git a/icons/anthra/skinIcons/timerActive.png b/icons/anthra/skinIcons/timerActive.png
new file mode 100644
index 0000000..e4c936e
Binary files /dev/null and b/icons/anthra/skinIcons/timerActive.png differ
diff --git a/icons/anthra/skinIcons/timerInactive.png b/icons/anthra/skinIcons/timerInactive.png
new file mode 100644
index 0000000..a8c9164
Binary files /dev/null and b/icons/anthra/skinIcons/timerInactive.png differ
diff --git a/icons/anthra/skinIcons/timerRecording.png b/icons/anthra/skinIcons/timerRecording.png
new file mode 100644
index 0000000..1a81b6c
Binary files /dev/null and b/icons/anthra/skinIcons/timerRecording.png differ
diff --git a/icons/anthra/skinIcons/tracks.png b/icons/anthra/skinIcons/tracks.png
new file mode 100644
index 0000000..88c76b5
Binary files /dev/null and b/icons/anthra/skinIcons/tracks.png differ
diff --git a/icons/anthra/skinIcons/txtoff.png b/icons/anthra/skinIcons/txtoff.png
new file mode 100644
index 0000000..bec1abc
Binary files /dev/null and b/icons/anthra/skinIcons/txtoff.png differ
diff --git a/icons/anthra/skinIcons/txton.png b/icons/anthra/skinIcons/txton.png
new file mode 100644
index 0000000..d7b7333
Binary files /dev/null and b/icons/anthra/skinIcons/txton.png differ
diff --git a/icons/anthra/skinIcons/vdrlogo.png b/icons/anthra/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..3d6f219
Binary files /dev/null and b/icons/anthra/skinIcons/vdrlogo.png differ
diff --git a/icons/darkblue/skinElements/channellogoback.png b/icons/darkblue/skinElements/channellogoback.png
new file mode 100644
index 0000000..34fbdeb
Binary files /dev/null and b/icons/darkblue/skinElements/channellogoback.png differ
diff --git a/icons/darkgrey/menuIcons/CAM.png b/icons/darkgrey/menuIcons/CAM.png
new file mode 100644
index 0000000..c1d0e33
Binary files /dev/null and b/icons/darkgrey/menuIcons/CAM.png differ
diff --git a/icons/darkgrey/menuIcons/Channels.png b/icons/darkgrey/menuIcons/Channels.png
new file mode 100644
index 0000000..2874090
Binary files /dev/null and b/icons/darkgrey/menuIcons/Channels.png differ
diff --git a/icons/darkgrey/menuIcons/Commands.png b/icons/darkgrey/menuIcons/Commands.png
new file mode 100644
index 0000000..0440dff
Binary files /dev/null and b/icons/darkgrey/menuIcons/Commands.png differ
diff --git a/icons/darkgrey/menuIcons/DVB.png b/icons/darkgrey/menuIcons/DVB.png
new file mode 100644
index 0000000..69694ba
Binary files /dev/null and b/icons/darkgrey/menuIcons/DVB.png differ
diff --git a/icons/darkgrey/menuIcons/EPG.png b/icons/darkgrey/menuIcons/EPG.png
new file mode 100644
index 0000000..fe0c106
Binary files /dev/null and b/icons/darkgrey/menuIcons/EPG.png differ
diff --git a/icons/darkgrey/menuIcons/LNB.png b/icons/darkgrey/menuIcons/LNB.png
new file mode 100644
index 0000000..f6e1bdd
Binary files /dev/null and b/icons/darkgrey/menuIcons/LNB.png differ
diff --git a/icons/darkgrey/menuIcons/Miscellaneous.png b/icons/darkgrey/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..8f782ac
Binary files /dev/null and b/icons/darkgrey/menuIcons/Miscellaneous.png differ
diff --git a/icons/darkgrey/menuIcons/OSD.png b/icons/darkgrey/menuIcons/OSD.png
new file mode 100644
index 0000000..184b973
Binary files /dev/null and b/icons/darkgrey/menuIcons/OSD.png differ
diff --git a/icons/darkgrey/menuIcons/Plugins.png b/icons/darkgrey/menuIcons/Plugins.png
new file mode 100644
index 0000000..1acc944
Binary files /dev/null and b/icons/darkgrey/menuIcons/Plugins.png differ
diff --git a/icons/darkgrey/menuIcons/Recording.png b/icons/darkgrey/menuIcons/Recording.png
new file mode 100644
index 0000000..ee8e016
Binary files /dev/null and b/icons/darkgrey/menuIcons/Recording.png differ
diff --git a/icons/darkgrey/menuIcons/Recordings.png b/icons/darkgrey/menuIcons/Recordings.png
new file mode 100644
index 0000000..5b4da75
Binary files /dev/null and b/icons/darkgrey/menuIcons/Recordings.png differ
diff --git a/icons/darkgrey/menuIcons/Replay.png b/icons/darkgrey/menuIcons/Replay.png
new file mode 100644
index 0000000..cb31dff
Binary files /dev/null and b/icons/darkgrey/menuIcons/Replay.png differ
diff --git a/icons/darkgrey/menuIcons/Restart.png b/icons/darkgrey/menuIcons/Restart.png
new file mode 100644
index 0000000..688e179
Binary files /dev/null and b/icons/darkgrey/menuIcons/Restart.png differ
diff --git a/icons/darkgrey/menuIcons/Schedule.png b/icons/darkgrey/menuIcons/Schedule.png
new file mode 100644
index 0000000..b5a976a
Binary files /dev/null and b/icons/darkgrey/menuIcons/Schedule.png differ
diff --git a/icons/darkgrey/menuIcons/Setup.png b/icons/darkgrey/menuIcons/Setup.png
new file mode 100644
index 0000000..a7db1ad
Binary files /dev/null and b/icons/darkgrey/menuIcons/Setup.png differ
diff --git a/icons/darkgrey/menuIcons/StopRecording.png b/icons/darkgrey/menuIcons/StopRecording.png
new file mode 100644
index 0000000..b5d3d67
Binary files /dev/null and b/icons/darkgrey/menuIcons/StopRecording.png differ
diff --git a/icons/darkgrey/menuIcons/StopReplay.png b/icons/darkgrey/menuIcons/StopReplay.png
new file mode 100644
index 0000000..c555b96
Binary files /dev/null and b/icons/darkgrey/menuIcons/StopReplay.png differ
diff --git a/icons/darkgrey/menuIcons/Timers.png b/icons/darkgrey/menuIcons/Timers.png
new file mode 100644
index 0000000..5faf764
Binary files /dev/null and b/icons/darkgrey/menuIcons/Timers.png differ
diff --git a/icons/darkgrey/pluginIcons/admin.png b/icons/darkgrey/pluginIcons/admin.png
new file mode 100644
index 0000000..5c5d187
Binary files /dev/null and b/icons/darkgrey/pluginIcons/admin.png differ
diff --git a/icons/darkgrey/pluginIcons/arghdirector.png b/icons/darkgrey/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..99e70d1
Binary files /dev/null and b/icons/darkgrey/pluginIcons/arghdirector.png differ
diff --git a/icons/darkgrey/pluginIcons/autostart.png b/icons/darkgrey/pluginIcons/autostart.png
new file mode 100644
index 0000000..7ea8772
Binary files /dev/null and b/icons/darkgrey/pluginIcons/autostart.png differ
diff --git a/icons/darkgrey/pluginIcons/avahi4vdr.png b/icons/darkgrey/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..9342e3e
Binary files /dev/null and b/icons/darkgrey/pluginIcons/avahi4vdr.png differ
diff --git a/icons/darkgrey/pluginIcons/avards.png b/icons/darkgrey/pluginIcons/avards.png
new file mode 100644
index 0000000..4180ac2
Binary files /dev/null and b/icons/darkgrey/pluginIcons/avards.png differ
diff --git a/icons/darkgrey/pluginIcons/block.png b/icons/darkgrey/pluginIcons/block.png
new file mode 100644
index 0000000..71d0829
Binary files /dev/null and b/icons/darkgrey/pluginIcons/block.png differ
diff --git a/icons/darkgrey/pluginIcons/burn.png b/icons/darkgrey/pluginIcons/burn.png
new file mode 100644
index 0000000..677f41b
Binary files /dev/null and b/icons/darkgrey/pluginIcons/burn.png differ
diff --git a/icons/darkgrey/pluginIcons/cdplayer.png b/icons/darkgrey/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..932031a
Binary files /dev/null and b/icons/darkgrey/pluginIcons/cdplayer.png differ
diff --git a/icons/darkgrey/pluginIcons/chanman.png b/icons/darkgrey/pluginIcons/chanman.png
new file mode 100644
index 0000000..1867ef1
Binary files /dev/null and b/icons/darkgrey/pluginIcons/chanman.png differ
diff --git a/icons/darkgrey/pluginIcons/ddci.png b/icons/darkgrey/pluginIcons/ddci.png
new file mode 100644
index 0000000..8d85651
Binary files /dev/null and b/icons/darkgrey/pluginIcons/ddci.png differ
diff --git a/icons/darkgrey/pluginIcons/devstatus.png b/icons/darkgrey/pluginIcons/devstatus.png
new file mode 100644
index 0000000..f1acf80
Binary files /dev/null and b/icons/darkgrey/pluginIcons/devstatus.png differ
diff --git a/icons/darkgrey/pluginIcons/dummydevice.png b/icons/darkgrey/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..7d5f8a5
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dummydevice.png differ
diff --git a/icons/darkgrey/pluginIcons/duplicates.png b/icons/darkgrey/pluginIcons/duplicates.png
new file mode 100644
index 0000000..59e1aa9
Binary files /dev/null and b/icons/darkgrey/pluginIcons/duplicates.png differ
diff --git a/icons/darkgrey/pluginIcons/dvbapi.png b/icons/darkgrey/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..3685b51
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dvbapi.png differ
diff --git a/icons/darkgrey/pluginIcons/dvbhddevice.png b/icons/darkgrey/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..c6f202d
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dvbhddevice.png differ
diff --git a/icons/darkgrey/pluginIcons/dvbsddevice.png b/icons/darkgrey/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..e84cf32
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dvbsddevice.png differ
diff --git a/icons/darkgrey/pluginIcons/dynamite.png b/icons/darkgrey/pluginIcons/dynamite.png
new file mode 100644
index 0000000..7ed9507
Binary files /dev/null and b/icons/darkgrey/pluginIcons/dynamite.png differ
diff --git a/icons/darkgrey/pluginIcons/eepg.png b/icons/darkgrey/pluginIcons/eepg.png
new file mode 100644
index 0000000..00b24ee
Binary files /dev/null and b/icons/darkgrey/pluginIcons/eepg.png differ
diff --git a/icons/darkgrey/pluginIcons/epgfixer.png b/icons/darkgrey/pluginIcons/epgfixer.png
new file mode 100644
index 0000000..adb349f
Binary files /dev/null and b/icons/darkgrey/pluginIcons/epgfixer.png differ
diff --git a/icons/darkgrey/pluginIcons/epgsearch.png b/icons/darkgrey/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..b6b0691
Binary files /dev/null and b/icons/darkgrey/pluginIcons/epgsearch.png differ
diff --git a/icons/darkgrey/pluginIcons/epgsync.png b/icons/darkgrey/pluginIcons/epgsync.png
new file mode 100644
index 0000000..99c8e14
Binary files /dev/null and b/icons/darkgrey/pluginIcons/epgsync.png differ
diff --git a/icons/darkgrey/pluginIcons/externalplayer.png b/icons/darkgrey/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..4d37ccd
Binary files /dev/null and b/icons/darkgrey/pluginIcons/externalplayer.png differ
diff --git a/icons/darkgrey/pluginIcons/favorites.png b/icons/darkgrey/pluginIcons/favorites.png
new file mode 100644
index 0000000..32fc50c
Binary files /dev/null and b/icons/darkgrey/pluginIcons/favorites.png differ
diff --git a/icons/darkgrey/pluginIcons/femon.png b/icons/darkgrey/pluginIcons/femon.png
new file mode 100644
index 0000000..a4c3a03
Binary files /dev/null and b/icons/darkgrey/pluginIcons/femon.png differ
diff --git a/icons/darkgrey/pluginIcons/fepg.png b/icons/darkgrey/pluginIcons/fepg.png
new file mode 100644
index 0000000..6ef4729
Binary files /dev/null and b/icons/darkgrey/pluginIcons/fepg.png differ
diff --git a/icons/darkgrey/pluginIcons/filebrowser.png b/icons/darkgrey/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..972da52
Binary files /dev/null and b/icons/darkgrey/pluginIcons/filebrowser.png differ
diff --git a/icons/darkgrey/pluginIcons/fritzbox.png b/icons/darkgrey/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..ded9590
Binary files /dev/null and b/icons/darkgrey/pluginIcons/fritzbox.png differ
diff --git a/icons/darkgrey/pluginIcons/graphlcd.png b/icons/darkgrey/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..d3f3878
Binary files /dev/null and b/icons/darkgrey/pluginIcons/graphlcd.png differ
diff --git a/icons/darkgrey/pluginIcons/graphtft.png b/icons/darkgrey/pluginIcons/graphtft.png
new file mode 100644
index 0000000..42e7231
Binary files /dev/null and b/icons/darkgrey/pluginIcons/graphtft.png differ
diff --git a/icons/darkgrey/pluginIcons/image.png b/icons/darkgrey/pluginIcons/image.png
new file mode 100644
index 0000000..7162844
Binary files /dev/null and b/icons/darkgrey/pluginIcons/image.png differ
diff --git a/icons/darkgrey/pluginIcons/imonlcd.png b/icons/darkgrey/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..09eda8a
Binary files /dev/null and b/icons/darkgrey/pluginIcons/imonlcd.png differ
diff --git a/icons/darkgrey/pluginIcons/iptv.png b/icons/darkgrey/pluginIcons/iptv.png
new file mode 100644
index 0000000..44d1e67
Binary files /dev/null and b/icons/darkgrey/pluginIcons/iptv.png differ
diff --git a/icons/darkgrey/pluginIcons/lcdproc.png b/icons/darkgrey/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..d3373e8
Binary files /dev/null and b/icons/darkgrey/pluginIcons/lcdproc.png differ
diff --git a/icons/darkgrey/pluginIcons/markad.png b/icons/darkgrey/pluginIcons/markad.png
new file mode 100644
index 0000000..c8dcfca
Binary files /dev/null and b/icons/darkgrey/pluginIcons/markad.png differ
diff --git a/icons/darkgrey/pluginIcons/mlist.png b/icons/darkgrey/pluginIcons/mlist.png
new file mode 100644
index 0000000..0e0e228
Binary files /dev/null and b/icons/darkgrey/pluginIcons/mlist.png differ
diff --git a/icons/darkgrey/pluginIcons/noepg.png b/icons/darkgrey/pluginIcons/noepg.png
new file mode 100644
index 0000000..2c62e76
Binary files /dev/null and b/icons/darkgrey/pluginIcons/noepg.png differ
diff --git a/icons/darkgrey/pluginIcons/osdteletext.png b/icons/darkgrey/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..89f9d9f
Binary files /dev/null and b/icons/darkgrey/pluginIcons/osdteletext.png differ
diff --git a/icons/darkgrey/pluginIcons/remote.png b/icons/darkgrey/pluginIcons/remote.png
new file mode 100644
index 0000000..efe1bd7
Binary files /dev/null and b/icons/darkgrey/pluginIcons/remote.png differ
diff --git a/icons/darkgrey/pluginIcons/remotetimers.png b/icons/darkgrey/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..0c76d6c
Binary files /dev/null and b/icons/darkgrey/pluginIcons/remotetimers.png differ
diff --git a/icons/darkgrey/pluginIcons/rssreader.png b/icons/darkgrey/pluginIcons/rssreader.png
new file mode 100644
index 0000000..9c49355
Binary files /dev/null and b/icons/darkgrey/pluginIcons/rssreader.png differ
diff --git a/icons/darkgrey/pluginIcons/sc.png b/icons/darkgrey/pluginIcons/sc.png
new file mode 100644
index 0000000..6cbb946
Binary files /dev/null and b/icons/darkgrey/pluginIcons/sc.png differ
diff --git a/icons/darkgrey/pluginIcons/screenshot.png b/icons/darkgrey/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be95986
Binary files /dev/null and b/icons/darkgrey/pluginIcons/screenshot.png differ
diff --git a/icons/darkgrey/pluginIcons/seduatmo.png b/icons/darkgrey/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..6baf60a
Binary files /dev/null and b/icons/darkgrey/pluginIcons/seduatmo.png differ
diff --git a/icons/darkgrey/pluginIcons/sleeptimer.png b/icons/darkgrey/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..606966d
Binary files /dev/null and b/icons/darkgrey/pluginIcons/sleeptimer.png differ
diff --git a/icons/darkgrey/pluginIcons/softhddevice.png b/icons/darkgrey/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..a9c3c8e
Binary files /dev/null and b/icons/darkgrey/pluginIcons/softhddevice.png differ
diff --git a/icons/darkgrey/pluginIcons/streamdev.png b/icons/darkgrey/pluginIcons/streamdev.png
new file mode 100644
index 0000000..a7a6007
Binary files /dev/null and b/icons/darkgrey/pluginIcons/streamdev.png differ
diff --git a/icons/darkgrey/pluginIcons/systeminfo.png b/icons/darkgrey/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..c8cf4d0
Binary files /dev/null and b/icons/darkgrey/pluginIcons/systeminfo.png differ
diff --git a/icons/darkgrey/pluginIcons/targavfd.png b/icons/darkgrey/pluginIcons/targavfd.png
new file mode 100644
index 0000000..acb4fd9
Binary files /dev/null and b/icons/darkgrey/pluginIcons/targavfd.png differ
diff --git a/icons/darkgrey/pluginIcons/trayopenng.png b/icons/darkgrey/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..f96db92
Binary files /dev/null and b/icons/darkgrey/pluginIcons/trayopenng.png differ
diff --git a/icons/darkgrey/pluginIcons/tvguide.png b/icons/darkgrey/pluginIcons/tvguide.png
new file mode 100644
index 0000000..3bbb345
Binary files /dev/null and b/icons/darkgrey/pluginIcons/tvguide.png differ
diff --git a/icons/darkgrey/pluginIcons/undelete.png b/icons/darkgrey/pluginIcons/undelete.png
new file mode 100644
index 0000000..ebde04d
Binary files /dev/null and b/icons/darkgrey/pluginIcons/undelete.png differ
diff --git a/icons/darkgrey/pluginIcons/weatherng.png b/icons/darkgrey/pluginIcons/weatherng.png
new file mode 100644
index 0000000..7b19c38
Binary files /dev/null and b/icons/darkgrey/pluginIcons/weatherng.png differ
diff --git a/icons/darkgrey/skinElements/channellogoback.png b/icons/darkgrey/skinElements/channellogoback.png
new file mode 100644
index 0000000..40ab60f
Binary files /dev/null and b/icons/darkgrey/skinElements/channellogoback.png differ
diff --git a/icons/darkgrey/skinIcons/Channelseparator.png b/icons/darkgrey/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..a1a091c
Binary files /dev/null and b/icons/darkgrey/skinIcons/Channelseparator.png differ
diff --git a/icons/darkgrey/skinIcons/DiskUsage.png b/icons/darkgrey/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..23b5a4d
Binary files /dev/null and b/icons/darkgrey/skinIcons/DiskUsage.png differ
diff --git a/icons/darkgrey/skinIcons/activetimer.png b/icons/darkgrey/skinIcons/activetimer.png
new file mode 100644
index 0000000..f593f44
Binary files /dev/null and b/icons/darkgrey/skinIcons/activetimer.png differ
diff --git a/icons/darkgrey/skinIcons/activetimersmall.png b/icons/darkgrey/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..5484d62
Binary files /dev/null and b/icons/darkgrey/skinIcons/activetimersmall.png differ
diff --git a/icons/darkgrey/skinIcons/arrowLeftChannelSep.png b/icons/darkgrey/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..85e456c
Binary files /dev/null and b/icons/darkgrey/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/darkgrey/skinIcons/arrowRightChannelSep.png b/icons/darkgrey/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..d0d9825
Binary files /dev/null and b/icons/darkgrey/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/darkgrey/skinIcons/daydelimiter.png b/icons/darkgrey/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..0f46eb7
Binary files /dev/null and b/icons/darkgrey/skinIcons/daydelimiter.png differ
diff --git a/icons/darkgrey/skinIcons/encrypted.png b/icons/darkgrey/skinIcons/encrypted.png
new file mode 100644
index 0000000..d7783be
Binary files /dev/null and b/icons/darkgrey/skinIcons/encrypted.png differ
diff --git a/icons/skinIcons/fwd.png b/icons/darkgrey/skinIcons/fwd.png
similarity index 77%
copy from icons/skinIcons/fwd.png
copy to icons/darkgrey/skinIcons/fwd.png
index 13b4751..9f6dd48 100644
Binary files a/icons/skinIcons/fwd.png and b/icons/darkgrey/skinIcons/fwd.png differ
diff --git a/icons/darkgrey/skinIcons/fwdx1.png b/icons/darkgrey/skinIcons/fwdx1.png
new file mode 100644
index 0000000..93caa61
Binary files /dev/null and b/icons/darkgrey/skinIcons/fwdx1.png differ
diff --git a/icons/darkgrey/skinIcons/fwdx2.png b/icons/darkgrey/skinIcons/fwdx2.png
new file mode 100644
index 0000000..dc39d9f
Binary files /dev/null and b/icons/darkgrey/skinIcons/fwdx2.png differ
diff --git a/icons/darkgrey/skinIcons/fwdx3.png b/icons/darkgrey/skinIcons/fwdx3.png
new file mode 100644
index 0000000..89ae796
Binary files /dev/null and b/icons/darkgrey/skinIcons/fwdx3.png differ
diff --git a/icons/skinIcons/pause.png b/icons/darkgrey/skinIcons/pause.png
similarity index 75%
copy from icons/skinIcons/pause.png
copy to icons/darkgrey/skinIcons/pause.png
index e6577cf..f2977e1 100644
Binary files a/icons/skinIcons/pause.png and b/icons/darkgrey/skinIcons/pause.png differ
diff --git a/icons/skinIcons/play.png b/icons/darkgrey/skinIcons/play.png
similarity index 80%
copy from icons/skinIcons/play.png
copy to icons/darkgrey/skinIcons/play.png
index b0c8a18..2eebf44 100644
Binary files a/icons/skinIcons/play.png and b/icons/darkgrey/skinIcons/play.png differ
diff --git a/icons/darkgrey/skinIcons/recordingcutted.png b/icons/darkgrey/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..f23d185
Binary files /dev/null and b/icons/darkgrey/skinIcons/recordingcutted.png differ
diff --git a/icons/darkgrey/skinIcons/recordingdatetime.png b/icons/darkgrey/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..25b8e93
Binary files /dev/null and b/icons/darkgrey/skinIcons/recordingdatetime.png differ
diff --git a/icons/darkgrey/skinIcons/recordingfolder.png b/icons/darkgrey/skinIcons/recordingfolder.png
new file mode 100644
index 0000000..f952c4b
Binary files /dev/null and b/icons/darkgrey/skinIcons/recordingfolder.png differ
diff --git a/icons/skinIcons/rew.png b/icons/darkgrey/skinIcons/rew.png
similarity index 82%
copy from icons/skinIcons/rew.png
copy to icons/darkgrey/skinIcons/rew.png
index 7055823..4ef6241 100644
Binary files a/icons/skinIcons/rew.png and b/icons/darkgrey/skinIcons/rew.png differ
diff --git a/icons/darkgrey/skinIcons/rewx1.png b/icons/darkgrey/skinIcons/rewx1.png
new file mode 100644
index 0000000..dde466f
Binary files /dev/null and b/icons/darkgrey/skinIcons/rewx1.png differ
diff --git a/icons/darkgrey/skinIcons/rewx2.png b/icons/darkgrey/skinIcons/rewx2.png
new file mode 100644
index 0000000..fede1b5
Binary files /dev/null and b/icons/darkgrey/skinIcons/rewx2.png differ
diff --git a/icons/darkgrey/skinIcons/rewx3.png b/icons/darkgrey/skinIcons/rewx3.png
new file mode 100644
index 0000000..db43c59
Binary files /dev/null and b/icons/darkgrey/skinIcons/rewx3.png differ
diff --git a/icons/darkgrey/skinIcons/timerActive.png b/icons/darkgrey/skinIcons/timerActive.png
new file mode 100644
index 0000000..578991f
Binary files /dev/null and b/icons/darkgrey/skinIcons/timerActive.png differ
diff --git a/icons/darkgrey/skinIcons/timerInactive.png b/icons/darkgrey/skinIcons/timerInactive.png
new file mode 100644
index 0000000..1fa61c2
Binary files /dev/null and b/icons/darkgrey/skinIcons/timerInactive.png differ
diff --git a/icons/darkgrey/skinIcons/tracks.png b/icons/darkgrey/skinIcons/tracks.png
new file mode 100644
index 0000000..912149c
Binary files /dev/null and b/icons/darkgrey/skinIcons/tracks.png differ
diff --git a/icons/darkgrey/skinIcons/vdrlogo.png b/icons/darkgrey/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..7fff397
Binary files /dev/null and b/icons/darkgrey/skinIcons/vdrlogo.png differ
diff --git a/icons/darkred/menuIcons/Commands.png b/icons/darkred/menuIcons/Commands.png
index 7b38eef..0440dff 100644
Binary files a/icons/darkred/menuIcons/Commands.png and b/icons/darkred/menuIcons/Commands.png differ
diff --git a/icons/darkred/menuIcons/Setup.png b/icons/darkred/menuIcons/Setup.png
index c4c026c..a7db1ad 100644
Binary files a/icons/darkred/menuIcons/Setup.png and b/icons/darkred/menuIcons/Setup.png differ
diff --git a/icons/darkred/pluginIcons/admin.png b/icons/darkred/pluginIcons/admin.png
index 91bc7a1..5c5d187 100644
Binary files a/icons/darkred/pluginIcons/admin.png and b/icons/darkred/pluginIcons/admin.png differ
diff --git a/icons/darkred/pluginIcons/dvbhddevice.png b/icons/darkred/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..c6f202d
Binary files /dev/null and b/icons/darkred/pluginIcons/dvbhddevice.png differ
diff --git a/icons/darkred/pluginIcons/dvbsddevice.png b/icons/darkred/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..e84cf32
Binary files /dev/null and b/icons/darkred/pluginIcons/dvbsddevice.png differ
diff --git a/icons/darkred/pluginIcons/graphtft.png b/icons/darkred/pluginIcons/graphtft.png
new file mode 100644
index 0000000..42e7231
Binary files /dev/null and b/icons/darkred/pluginIcons/graphtft.png differ
diff --git a/icons/darkred/pluginIcons/nordlichtsepg.png b/icons/darkred/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..962acac
Binary files /dev/null and b/icons/darkred/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/darkred/pluginIcons/undelete.png b/icons/darkred/pluginIcons/undelete.png
new file mode 100644
index 0000000..ebde04d
Binary files /dev/null and b/icons/darkred/pluginIcons/undelete.png differ
diff --git a/icons/darkred/pluginIcons/weatherng.png b/icons/darkred/pluginIcons/weatherng.png
new file mode 100644
index 0000000..7b19c38
Binary files /dev/null and b/icons/darkred/pluginIcons/weatherng.png differ
diff --git a/icons/darkred/skinElements/channellogoback.png b/icons/darkred/skinElements/channellogoback.png
new file mode 100644
index 0000000..d81de2b
Binary files /dev/null and b/icons/darkred/skinElements/channellogoback.png differ
diff --git a/icons/darkred/skinIcons/Channelseparator.png b/icons/darkred/skinIcons/Channelseparator.png
index 03bf0d0..59a56d1 100644
Binary files a/icons/darkred/skinIcons/Channelseparator.png and b/icons/darkred/skinIcons/Channelseparator.png differ
diff --git a/icons/darkred/skinIcons/DiskUsage.png b/icons/darkred/skinIcons/DiskUsage.png
index 3fea7b4..23b5a4d 100644
Binary files a/icons/darkred/skinIcons/DiskUsage.png and b/icons/darkred/skinIcons/DiskUsage.png differ
diff --git a/icons/darkred/skinIcons/arrowLeftChannelSep.png b/icons/darkred/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..d251ac3
Binary files /dev/null and b/icons/darkred/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/darkred/skinIcons/arrowRightChannelSep.png b/icons/darkred/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..47d9626
Binary files /dev/null and b/icons/darkred/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/darkred/skinIcons/channelsymbols.png b/icons/darkred/skinIcons/channelsymbols.png
index 4ca060f..58b9f06 100644
Binary files a/icons/darkred/skinIcons/channelsymbols.png and b/icons/darkred/skinIcons/channelsymbols.png differ
diff --git a/icons/darkred/skinIcons/channelsymbols.png b/icons/darkred/skinIcons/channelsymbols1.png
similarity index 100%
copy from icons/darkred/skinIcons/channelsymbols.png
copy to icons/darkred/skinIcons/channelsymbols1.png
diff --git a/icons/darkred/skinIcons/crypted.png b/icons/darkred/skinIcons/crypted.png
new file mode 100644
index 0000000..3a0b10f
Binary files /dev/null and b/icons/darkred/skinIcons/crypted.png differ
diff --git a/icons/darkred/skinIcons/daydelimiter.png b/icons/darkred/skinIcons/daydelimiter.png
index 239093a..944aa0e 100644
Binary files a/icons/darkred/skinIcons/daydelimiter.png and b/icons/darkred/skinIcons/daydelimiter.png differ
diff --git a/icons/darkred/skinIcons/dolbyoff.png b/icons/darkred/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..40cf5e3
Binary files /dev/null and b/icons/darkred/skinIcons/dolbyoff.png differ
diff --git a/icons/darkred/skinIcons/dolbyon.png b/icons/darkred/skinIcons/dolbyon.png
new file mode 100644
index 0000000..1d10725
Binary files /dev/null and b/icons/darkred/skinIcons/dolbyon.png differ
diff --git a/icons/darkred/skinIcons/fta.png b/icons/darkred/skinIcons/fta.png
new file mode 100644
index 0000000..fd8d563
Binary files /dev/null and b/icons/darkred/skinIcons/fta.png differ
diff --git a/icons/darkred/skinIcons/fwdx1.png b/icons/darkred/skinIcons/fwdx1.png
new file mode 100644
index 0000000..b01657a
Binary files /dev/null and b/icons/darkred/skinIcons/fwdx1.png differ
diff --git a/icons/darkred/skinIcons/fwdx2.png b/icons/darkred/skinIcons/fwdx2.png
new file mode 100644
index 0000000..8ea9774
Binary files /dev/null and b/icons/darkred/skinIcons/fwdx2.png differ
diff --git a/icons/darkred/skinIcons/fwdx3.png b/icons/darkred/skinIcons/fwdx3.png
new file mode 100644
index 0000000..cab7859
Binary files /dev/null and b/icons/darkred/skinIcons/fwdx3.png differ
diff --git a/icons/darkred/skinIcons/hd1080i.png b/icons/darkred/skinIcons/hd1080i.png
index f717498..8a44156 100644
Binary files a/icons/darkred/skinIcons/hd1080i.png and b/icons/darkred/skinIcons/hd1080i.png differ
diff --git a/icons/darkred/skinIcons/hd1080i_rec.png b/icons/darkred/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..7c687d3
Binary files /dev/null and b/icons/darkred/skinIcons/hd1080i_rec.png differ
diff --git a/icons/darkred/skinIcons/hd720p.png b/icons/darkred/skinIcons/hd720p.png
index 93efca8..2fa9baf 100644
Binary files a/icons/darkred/skinIcons/hd720p.png and b/icons/darkred/skinIcons/hd720p.png differ
diff --git a/icons/darkred/skinIcons/hd720p_rec.png b/icons/darkred/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..6bd11e6
Binary files /dev/null and b/icons/darkred/skinIcons/hd720p_rec.png differ
diff --git a/icons/darkred/skinIcons/recoff.png b/icons/darkred/skinIcons/recoff.png
new file mode 100644
index 0000000..0748871
Binary files /dev/null and b/icons/darkred/skinIcons/recoff.png differ
diff --git a/icons/darkred/skinIcons/recon.png b/icons/darkred/skinIcons/recon.png
new file mode 100644
index 0000000..fcaf7da
Binary files /dev/null and b/icons/darkred/skinIcons/recon.png differ
diff --git a/icons/darkred/skinIcons/rewx1.png b/icons/darkred/skinIcons/rewx1.png
new file mode 100644
index 0000000..28263f0
Binary files /dev/null and b/icons/darkred/skinIcons/rewx1.png differ
diff --git a/icons/darkred/skinIcons/rewx2.png b/icons/darkred/skinIcons/rewx2.png
new file mode 100644
index 0000000..5c26b44
Binary files /dev/null and b/icons/darkred/skinIcons/rewx2.png differ
diff --git a/icons/darkred/skinIcons/rewx3.png b/icons/darkred/skinIcons/rewx3.png
new file mode 100644
index 0000000..60be17d
Binary files /dev/null and b/icons/darkred/skinIcons/rewx3.png differ
diff --git a/icons/darkred/skinIcons/sd576i.png b/icons/darkred/skinIcons/sd576i.png
index 6e3869f..2e313aa 100644
Binary files a/icons/darkred/skinIcons/sd576i.png and b/icons/darkred/skinIcons/sd576i.png differ
diff --git a/icons/darkred/skinIcons/sd576i_rec.png b/icons/darkred/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..2e313aa
Binary files /dev/null and b/icons/darkred/skinIcons/sd576i_rec.png differ
diff --git a/icons/darkred/skinIcons/stereooff.png b/icons/darkred/skinIcons/stereooff.png
new file mode 100644
index 0000000..74ed35e
Binary files /dev/null and b/icons/darkred/skinIcons/stereooff.png differ
diff --git a/icons/darkred/skinIcons/stereoon.png b/icons/darkred/skinIcons/stereoon.png
new file mode 100644
index 0000000..0861621
Binary files /dev/null and b/icons/darkred/skinIcons/stereoon.png differ
diff --git a/icons/darkred/skinIcons/tracks.png b/icons/darkred/skinIcons/tracks.png
index 0e4c219..912149c 100644
Binary files a/icons/darkred/skinIcons/tracks.png and b/icons/darkred/skinIcons/tracks.png differ
diff --git a/icons/darkred/skinIcons/txtoff.png b/icons/darkred/skinIcons/txtoff.png
new file mode 100644
index 0000000..4bcba3c
Binary files /dev/null and b/icons/darkred/skinIcons/txtoff.png differ
diff --git a/icons/darkred/skinIcons/txton.png b/icons/darkred/skinIcons/txton.png
new file mode 100644
index 0000000..ab33a20
Binary files /dev/null and b/icons/darkred/skinIcons/txton.png differ
diff --git a/icons/darkred/skinIcons/vdrlogo.png b/icons/darkred/skinIcons/vdrlogo.png
index 7d6d3d5..f3ba37a 100644
Binary files a/icons/darkred/skinIcons/vdrlogo.png and b/icons/darkred/skinIcons/vdrlogo.png differ
diff --git a/icons/darkredNG/extraIcons/Applikationen.png b/icons/darkredNG/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c3b616
Binary files /dev/null and b/icons/darkredNG/extraIcons/Applikationen.png differ
diff --git a/icons/darkredNG/extraIcons/Audio.png b/icons/darkredNG/extraIcons/Audio.png
new file mode 100644
index 0000000..ff387fe
Binary files /dev/null and b/icons/darkredNG/extraIcons/Audio.png differ
diff --git a/icons/darkredNG/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/darkredNG/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3cdddc9
Binary files /dev/null and b/icons/darkredNG/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/darkredNG/extraIcons/Dienstprogramme.png b/icons/darkredNG/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..793aba6
Binary files /dev/null and b/icons/darkredNG/extraIcons/Dienstprogramme.png differ
diff --git a/icons/darkredNG/extraIcons/FireFox.png b/icons/darkredNG/extraIcons/FireFox.png
new file mode 100644
index 0000000..192fadc
Binary files /dev/null and b/icons/darkredNG/extraIcons/FireFox.png differ
diff --git a/icons/darkredNG/extraIcons/Info.png b/icons/darkredNG/extraIcons/Info.png
new file mode 100644
index 0000000..6737431
Binary files /dev/null and b/icons/darkredNG/extraIcons/Info.png differ
diff --git a/icons/darkredNG/extraIcons/Internet.png b/icons/darkredNG/extraIcons/Internet.png
new file mode 100644
index 0000000..f3db150
Binary files /dev/null and b/icons/darkredNG/extraIcons/Internet.png differ
diff --git a/icons/darkredNG/extraIcons/Medien.png b/icons/darkredNG/extraIcons/Medien.png
new file mode 100644
index 0000000..0ce2360
Binary files /dev/null and b/icons/darkredNG/extraIcons/Medien.png differ
diff --git a/icons/darkredNG/extraIcons/Rechner neu starten.png b/icons/darkredNG/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..5783ccf
Binary files /dev/null and b/icons/darkredNG/extraIcons/Rechner neu starten.png differ
diff --git a/icons/darkredNG/extraIcons/Remote wakeup.png b/icons/darkredNG/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..1cd2f6e
Binary files /dev/null and b/icons/darkredNG/extraIcons/Remote wakeup.png differ
diff --git a/icons/darkredNG/extraIcons/Spiele.png b/icons/darkredNG/extraIcons/Spiele.png
new file mode 100644
index 0000000..8e07161
Binary files /dev/null and b/icons/darkredNG/extraIcons/Spiele.png differ
diff --git a/icons/darkredNG/extraIcons/System herunterfahren.png b/icons/darkredNG/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..e0234df
Binary files /dev/null and b/icons/darkredNG/extraIcons/System herunterfahren.png differ
diff --git a/icons/darkredNG/extraIcons/System.png b/icons/darkredNG/extraIcons/System.png
new file mode 100644
index 0000000..81d100e
Binary files /dev/null and b/icons/darkredNG/extraIcons/System.png differ
diff --git a/icons/darkredNG/extraIcons/Tools.png b/icons/darkredNG/extraIcons/Tools.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/darkredNG/extraIcons/Tools.png differ
diff --git a/icons/darkredNG/extraIcons/Tunderbird.png b/icons/darkredNG/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..5ae27e0
Binary files /dev/null and b/icons/darkredNG/extraIcons/Tunderbird.png differ
diff --git a/icons/darkredNG/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/darkredNG/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..cd7b81c
Binary files /dev/null and b/icons/darkredNG/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/darkredNG/extraIcons/VDR neu starten.png b/icons/darkredNG/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..14904ca
Binary files /dev/null and b/icons/darkredNG/extraIcons/VDR neu starten.png differ
diff --git a/icons/darkredNG/extraIcons/Video.png b/icons/darkredNG/extraIcons/Video.png
new file mode 100644
index 0000000..490ca4b
Binary files /dev/null and b/icons/darkredNG/extraIcons/Video.png differ
diff --git a/icons/darkredNG/extraIcons/Web.png b/icons/darkredNG/extraIcons/Web.png
new file mode 100644
index 0000000..20260e3
Binary files /dev/null and b/icons/darkredNG/extraIcons/Web.png differ
diff --git a/icons/darkredNG/extraIcons/XBMC.png b/icons/darkredNG/extraIcons/XBMC.png
new file mode 100644
index 0000000..c7c4c04
Binary files /dev/null and b/icons/darkredNG/extraIcons/XBMC.png differ
diff --git a/icons/darkredNG/extraIcons/Xterm.png b/icons/darkredNG/extraIcons/Xterm.png
new file mode 100644
index 0000000..fa75282
Binary files /dev/null and b/icons/darkredNG/extraIcons/Xterm.png differ
diff --git a/icons/darkredNG/extraIcons/audiovideo.png b/icons/darkredNG/extraIcons/audiovideo.png
new file mode 100644
index 0000000..726538d
Binary files /dev/null and b/icons/darkredNG/extraIcons/audiovideo.png differ
diff --git a/icons/darkredNG/extraIcons/markad_status.png b/icons/darkredNG/extraIcons/markad_status.png
new file mode 100644
index 0000000..4fdc7a4
Binary files /dev/null and b/icons/darkredNG/extraIcons/markad_status.png differ
diff --git a/icons/darkredNG/extraIcons/schneiden_abbrechen.png b/icons/darkredNG/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..b2e0bd3
Binary files /dev/null and b/icons/darkredNG/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/darkredNG/extraIcons/tux.png b/icons/darkredNG/extraIcons/tux.png
new file mode 100644
index 0000000..c5b4742
Binary files /dev/null and b/icons/darkredNG/extraIcons/tux.png differ
diff --git a/icons/darkredNG/extraIcons/usb.png b/icons/darkredNG/extraIcons/usb.png
new file mode 100644
index 0000000..c4db1d4
Binary files /dev/null and b/icons/darkredNG/extraIcons/usb.png differ
diff --git a/icons/darkredNG/extraIcons/vdrlogo.png b/icons/darkredNG/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..037a191
Binary files /dev/null and b/icons/darkredNG/extraIcons/vdrlogo.png differ
diff --git a/icons/darkredNG/extraIcons/yaicon_blue.png b/icons/darkredNG/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..2c49273
Binary files /dev/null and b/icons/darkredNG/extraIcons/yaicon_blue.png differ
diff --git a/icons/darkredNG/menuIcons/CAM.png b/icons/darkredNG/menuIcons/CAM.png
new file mode 100644
index 0000000..a394877
Binary files /dev/null and b/icons/darkredNG/menuIcons/CAM.png differ
diff --git a/icons/darkredNG/menuIcons/Channels.png b/icons/darkredNG/menuIcons/Channels.png
new file mode 100644
index 0000000..ba2ba78
Binary files /dev/null and b/icons/darkredNG/menuIcons/Channels.png differ
diff --git a/icons/darkredNG/menuIcons/Commands.png b/icons/darkredNG/menuIcons/Commands.png
new file mode 100644
index 0000000..c6a83ef
Binary files /dev/null and b/icons/darkredNG/menuIcons/Commands.png differ
diff --git a/icons/darkredNG/menuIcons/DVB.png b/icons/darkredNG/menuIcons/DVB.png
new file mode 100644
index 0000000..3789145
Binary files /dev/null and b/icons/darkredNG/menuIcons/DVB.png differ
diff --git a/icons/darkredNG/menuIcons/EPG.png b/icons/darkredNG/menuIcons/EPG.png
new file mode 100644
index 0000000..e868b90
Binary files /dev/null and b/icons/darkredNG/menuIcons/EPG.png differ
diff --git a/icons/darkredNG/menuIcons/LNB.png b/icons/darkredNG/menuIcons/LNB.png
new file mode 100644
index 0000000..896dd99
Binary files /dev/null and b/icons/darkredNG/menuIcons/LNB.png differ
diff --git a/icons/darkredNG/menuIcons/Miscellaneous.png b/icons/darkredNG/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..2a41c4d
Binary files /dev/null and b/icons/darkredNG/menuIcons/Miscellaneous.png differ
diff --git a/icons/darkredNG/menuIcons/OSD.png b/icons/darkredNG/menuIcons/OSD.png
new file mode 100644
index 0000000..8f571c6
Binary files /dev/null and b/icons/darkredNG/menuIcons/OSD.png differ
diff --git a/icons/darkredNG/menuIcons/Plugins.png b/icons/darkredNG/menuIcons/Plugins.png
new file mode 100644
index 0000000..3fcba70
Binary files /dev/null and b/icons/darkredNG/menuIcons/Plugins.png differ
diff --git a/icons/darkredNG/menuIcons/Recording.png b/icons/darkredNG/menuIcons/Recording.png
new file mode 100644
index 0000000..741b1af
Binary files /dev/null and b/icons/darkredNG/menuIcons/Recording.png differ
diff --git a/icons/darkredNG/menuIcons/Recordings.png b/icons/darkredNG/menuIcons/Recordings.png
new file mode 100644
index 0000000..79aeeb7
Binary files /dev/null and b/icons/darkredNG/menuIcons/Recordings.png differ
diff --git a/icons/darkredNG/menuIcons/Replay.png b/icons/darkredNG/menuIcons/Replay.png
new file mode 100644
index 0000000..621596c
Binary files /dev/null and b/icons/darkredNG/menuIcons/Replay.png differ
diff --git a/icons/darkredNG/menuIcons/Restart.png b/icons/darkredNG/menuIcons/Restart.png
new file mode 100644
index 0000000..aa23cd4
Binary files /dev/null and b/icons/darkredNG/menuIcons/Restart.png differ
diff --git a/icons/darkredNG/menuIcons/Schedule.png b/icons/darkredNG/menuIcons/Schedule.png
new file mode 100644
index 0000000..3a98cac
Binary files /dev/null and b/icons/darkredNG/menuIcons/Schedule.png differ
diff --git a/icons/darkredNG/menuIcons/Setup.png b/icons/darkredNG/menuIcons/Setup.png
new file mode 100644
index 0000000..d121148
Binary files /dev/null and b/icons/darkredNG/menuIcons/Setup.png differ
diff --git a/icons/darkredNG/menuIcons/StopRecording.png b/icons/darkredNG/menuIcons/StopRecording.png
new file mode 100644
index 0000000..ed83fbb
Binary files /dev/null and b/icons/darkredNG/menuIcons/StopRecording.png differ
diff --git a/icons/darkredNG/menuIcons/StopReplay.png b/icons/darkredNG/menuIcons/StopReplay.png
new file mode 100644
index 0000000..9192760
Binary files /dev/null and b/icons/darkredNG/menuIcons/StopReplay.png differ
diff --git a/icons/darkredNG/menuIcons/Timers.png b/icons/darkredNG/menuIcons/Timers.png
new file mode 100644
index 0000000..b866c36
Binary files /dev/null and b/icons/darkredNG/menuIcons/Timers.png differ
diff --git a/icons/darkredNG/pluginIcons/admin.png b/icons/darkredNG/pluginIcons/admin.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/darkredNG/pluginIcons/admin.png differ
diff --git a/icons/darkredNG/pluginIcons/arghdirector.png b/icons/darkredNG/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..bbd221a
Binary files /dev/null and b/icons/darkredNG/pluginIcons/arghdirector.png differ
diff --git a/icons/darkredNG/pluginIcons/autostart.png b/icons/darkredNG/pluginIcons/autostart.png
new file mode 100644
index 0000000..6fdb1bb
Binary files /dev/null and b/icons/darkredNG/pluginIcons/autostart.png differ
diff --git a/icons/darkredNG/pluginIcons/avahi4vdr.png b/icons/darkredNG/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..044e71d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/avahi4vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/avards.png b/icons/darkredNG/pluginIcons/avards.png
new file mode 100644
index 0000000..cf8d037
Binary files /dev/null and b/icons/darkredNG/pluginIcons/avards.png differ
diff --git a/icons/darkredNG/pluginIcons/block.png b/icons/darkredNG/pluginIcons/block.png
new file mode 100644
index 0000000..86127c2
Binary files /dev/null and b/icons/darkredNG/pluginIcons/block.png differ
diff --git a/icons/darkredNG/pluginIcons/burn.png b/icons/darkredNG/pluginIcons/burn.png
new file mode 100644
index 0000000..305d7ff
Binary files /dev/null and b/icons/darkredNG/pluginIcons/burn.png differ
diff --git a/icons/darkredNG/pluginIcons/cdplayer.png b/icons/darkredNG/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..89a6c19
Binary files /dev/null and b/icons/darkredNG/pluginIcons/cdplayer.png differ
diff --git a/icons/darkredNG/pluginIcons/chanman.png b/icons/darkredNG/pluginIcons/chanman.png
new file mode 100644
index 0000000..a73e83c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/chanman.png differ
diff --git a/icons/darkredNG/pluginIcons/check.png b/icons/darkredNG/pluginIcons/check.png
new file mode 100644
index 0000000..d487a24
Binary files /dev/null and b/icons/darkredNG/pluginIcons/check.png differ
diff --git a/icons/darkredNG/pluginIcons/conflictcheckonly.png b/icons/darkredNG/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..7f832bd
Binary files /dev/null and b/icons/darkredNG/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/darkredNG/pluginIcons/ddci.png b/icons/darkredNG/pluginIcons/ddci.png
new file mode 100644
index 0000000..4ad459c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/ddci.png differ
diff --git a/icons/darkredNG/pluginIcons/devstatus.png b/icons/darkredNG/pluginIcons/devstatus.png
new file mode 100644
index 0000000..96c0ec1
Binary files /dev/null and b/icons/darkredNG/pluginIcons/devstatus.png differ
diff --git a/icons/darkredNG/pluginIcons/dummydevice.png b/icons/darkredNG/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..11fd707
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dummydevice.png differ
diff --git a/icons/darkredNG/pluginIcons/duplicates.png b/icons/darkredNG/pluginIcons/duplicates.png
new file mode 100644
index 0000000..dc1be57
Binary files /dev/null and b/icons/darkredNG/pluginIcons/duplicates.png differ
diff --git a/icons/darkredNG/pluginIcons/dvbapi.png b/icons/darkredNG/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..b966461
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dvbapi.png differ
diff --git a/icons/darkredNG/pluginIcons/dvbhddevice.png b/icons/darkredNG/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..b874297
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dvbhddevice.png differ
diff --git a/icons/darkredNG/pluginIcons/dvbsddevice.png b/icons/darkredNG/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..106184e
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dvbsddevice.png differ
diff --git a/icons/darkredNG/pluginIcons/dynamite.png b/icons/darkredNG/pluginIcons/dynamite.png
new file mode 100644
index 0000000..28ea35a
Binary files /dev/null and b/icons/darkredNG/pluginIcons/dynamite.png differ
diff --git a/icons/darkredNG/pluginIcons/eepg.png b/icons/darkredNG/pluginIcons/eepg.png
new file mode 100644
index 0000000..3938b96
Binary files /dev/null and b/icons/darkredNG/pluginIcons/eepg.png differ
diff --git a/icons/darkredNG/pluginIcons/epg2vdr.png b/icons/darkredNG/pluginIcons/epg2vdr.png
new file mode 100644
index 0000000..ac8757e
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epg2vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/epgsearch.png b/icons/darkredNG/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5eab415
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epgsearch.png differ
diff --git a/icons/darkredNG/pluginIcons/epgsearchonly.png b/icons/darkredNG/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..b5186e7
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epgsearchonly.png differ
diff --git a/icons/darkredNG/pluginIcons/epgsync.png b/icons/darkredNG/pluginIcons/epgsync.png
new file mode 100644
index 0000000..5c14009
Binary files /dev/null and b/icons/darkredNG/pluginIcons/epgsync.png differ
diff --git a/icons/darkredNG/pluginIcons/externalplayer.png b/icons/darkredNG/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..2bd67db
Binary files /dev/null and b/icons/darkredNG/pluginIcons/externalplayer.png differ
diff --git a/icons/darkredNG/pluginIcons/extrecmenu.png b/icons/darkredNG/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..6f613f1
Binary files /dev/null and b/icons/darkredNG/pluginIcons/extrecmenu.png differ
diff --git a/icons/darkredNG/pluginIcons/favorites.png b/icons/darkredNG/pluginIcons/favorites.png
new file mode 100644
index 0000000..409c852
Binary files /dev/null and b/icons/darkredNG/pluginIcons/favorites.png differ
diff --git a/icons/darkredNG/pluginIcons/femon.png b/icons/darkredNG/pluginIcons/femon.png
new file mode 100644
index 0000000..e87b711
Binary files /dev/null and b/icons/darkredNG/pluginIcons/femon.png differ
diff --git a/icons/darkredNG/pluginIcons/fepg.png b/icons/darkredNG/pluginIcons/fepg.png
new file mode 100644
index 0000000..65023ed
Binary files /dev/null and b/icons/darkredNG/pluginIcons/fepg.png differ
diff --git a/icons/darkredNG/pluginIcons/filebrowser.png b/icons/darkredNG/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..d3f90e0
Binary files /dev/null and b/icons/darkredNG/pluginIcons/filebrowser.png differ
diff --git a/icons/darkredNG/pluginIcons/fritzbox.png b/icons/darkredNG/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..7bfc229
Binary files /dev/null and b/icons/darkredNG/pluginIcons/fritzbox.png differ
diff --git a/icons/darkredNG/pluginIcons/graphlcd.png b/icons/darkredNG/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/darkredNG/pluginIcons/graphlcd.png differ
diff --git a/icons/darkredNG/pluginIcons/graphtft.png b/icons/darkredNG/pluginIcons/graphtft.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/darkredNG/pluginIcons/graphtft.png differ
diff --git a/icons/darkredNG/pluginIcons/image.png b/icons/darkredNG/pluginIcons/image.png
new file mode 100644
index 0000000..33644e0
Binary files /dev/null and b/icons/darkredNG/pluginIcons/image.png differ
diff --git a/icons/darkredNG/pluginIcons/imonlcd.png b/icons/darkredNG/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/imonlcd.png differ
diff --git a/icons/darkredNG/pluginIcons/iptv.png b/icons/darkredNG/pluginIcons/iptv.png
new file mode 100644
index 0000000..4494ddc
Binary files /dev/null and b/icons/darkredNG/pluginIcons/iptv.png differ
diff --git a/icons/darkredNG/pluginIcons/lcdproc.png b/icons/darkredNG/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/lcdproc.png differ
diff --git a/icons/darkredNG/pluginIcons/mailbox.png b/icons/darkredNG/pluginIcons/mailbox.png
new file mode 100644
index 0000000..1bc76e8
Binary files /dev/null and b/icons/darkredNG/pluginIcons/mailbox.png differ
diff --git a/icons/darkredNG/pluginIcons/makemkv.png b/icons/darkredNG/pluginIcons/makemkv.png
new file mode 100644
index 0000000..41cddf1
Binary files /dev/null and b/icons/darkredNG/pluginIcons/makemkv.png differ
diff --git a/icons/darkredNG/pluginIcons/markad.png b/icons/darkredNG/pluginIcons/markad.png
new file mode 100644
index 0000000..b3defaf
Binary files /dev/null and b/icons/darkredNG/pluginIcons/markad.png differ
diff --git a/icons/darkredNG/pluginIcons/mlist.png b/icons/darkredNG/pluginIcons/mlist.png
new file mode 100644
index 0000000..19c367f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/mlist.png differ
diff --git a/icons/darkredNG/pluginIcons/music.png b/icons/darkredNG/pluginIcons/music.png
new file mode 100644
index 0000000..abb012e
Binary files /dev/null and b/icons/darkredNG/pluginIcons/music.png differ
diff --git a/icons/darkredNG/pluginIcons/noepg.png b/icons/darkredNG/pluginIcons/noepg.png
new file mode 100644
index 0000000..eb9410d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/noepg.png differ
diff --git a/icons/darkredNG/pluginIcons/nordlichtsepg.png b/icons/darkredNG/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..3ee3fa2
Binary files /dev/null and b/icons/darkredNG/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/darkredNG/pluginIcons/osdteletext.png b/icons/darkredNG/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..664e770
Binary files /dev/null and b/icons/darkredNG/pluginIcons/osdteletext.png differ
diff --git a/icons/darkredNG/pluginIcons/peer.png b/icons/darkredNG/pluginIcons/peer.png
new file mode 100644
index 0000000..998d568
Binary files /dev/null and b/icons/darkredNG/pluginIcons/peer.png differ
diff --git a/icons/darkredNG/pluginIcons/play.png b/icons/darkredNG/pluginIcons/play.png
new file mode 100644
index 0000000..2848fc6
Binary files /dev/null and b/icons/darkredNG/pluginIcons/play.png differ
diff --git a/icons/darkredNG/pluginIcons/pvrinput.png b/icons/darkredNG/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..724f698
Binary files /dev/null and b/icons/darkredNG/pluginIcons/pvrinput.png differ
diff --git a/icons/darkredNG/pluginIcons/quickepgsearch.png b/icons/darkredNG/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..76a31f4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/quickepgsearch.png differ
diff --git a/icons/darkredNG/pluginIcons/radio.png b/icons/darkredNG/pluginIcons/radio.png
new file mode 100644
index 0000000..193b7d4
Binary files /dev/null and b/icons/darkredNG/pluginIcons/radio.png differ
diff --git a/icons/darkredNG/pluginIcons/remote.png b/icons/darkredNG/pluginIcons/remote.png
new file mode 100644
index 0000000..7f46b1b
Binary files /dev/null and b/icons/darkredNG/pluginIcons/remote.png differ
diff --git a/icons/darkredNG/pluginIcons/remotetimers.png b/icons/darkredNG/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..fae3b79
Binary files /dev/null and b/icons/darkredNG/pluginIcons/remotetimers.png differ
diff --git a/icons/darkredNG/pluginIcons/rssreader.png b/icons/darkredNG/pluginIcons/rssreader.png
new file mode 100644
index 0000000..db538f0
Binary files /dev/null and b/icons/darkredNG/pluginIcons/rssreader.png differ
diff --git a/icons/darkredNG/pluginIcons/sc.png b/icons/darkredNG/pluginIcons/sc.png
new file mode 100644
index 0000000..2472d6c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/sc.png differ
diff --git a/icons/darkredNG/pluginIcons/screenshot.png b/icons/darkredNG/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be9b4d5
Binary files /dev/null and b/icons/darkredNG/pluginIcons/screenshot.png differ
diff --git a/icons/darkredNG/pluginIcons/seduatmo.png b/icons/darkredNG/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/seduatmo.png differ
diff --git a/icons/darkredNG/pluginIcons/skyselectfeeds.png b/icons/darkredNG/pluginIcons/skyselectfeeds.png
new file mode 100644
index 0000000..d81a024
Binary files /dev/null and b/icons/darkredNG/pluginIcons/skyselectfeeds.png differ
diff --git a/icons/darkredNG/pluginIcons/sleeptimer.png b/icons/darkredNG/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..cd4956f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/sleeptimer.png differ
diff --git a/icons/darkredNG/pluginIcons/softhddevice.png b/icons/darkredNG/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..df13f2c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/softhddevice.png differ
diff --git a/icons/darkredNG/pluginIcons/streamdev-server.png b/icons/darkredNG/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..e89ed8b
Binary files /dev/null and b/icons/darkredNG/pluginIcons/streamdev-server.png differ
diff --git a/icons/darkredNG/pluginIcons/systeminfo.png b/icons/darkredNG/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..b14763f
Binary files /dev/null and b/icons/darkredNG/pluginIcons/systeminfo.png differ
diff --git a/icons/darkredNG/pluginIcons/targavfd.png b/icons/darkredNG/pluginIcons/targavfd.png
new file mode 100644
index 0000000..e91b111
Binary files /dev/null and b/icons/darkredNG/pluginIcons/targavfd.png differ
diff --git a/icons/darkredNG/pluginIcons/trayopenng.png b/icons/darkredNG/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..6ebd17d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/trayopenng.png differ
diff --git a/icons/darkredNG/pluginIcons/tvguide.png b/icons/darkredNG/pluginIcons/tvguide.png
new file mode 100644
index 0000000..968a37c
Binary files /dev/null and b/icons/darkredNG/pluginIcons/tvguide.png differ
diff --git a/icons/darkredNG/pluginIcons/tvm2vdr.png b/icons/darkredNG/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..47f9a91
Binary files /dev/null and b/icons/darkredNG/pluginIcons/tvm2vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/tvscraper.png b/icons/darkredNG/pluginIcons/tvscraper.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/darkredNG/pluginIcons/tvscraper.png differ
diff --git a/icons/darkredNG/pluginIcons/undelete.png b/icons/darkredNG/pluginIcons/undelete.png
new file mode 100644
index 0000000..a53d50a
Binary files /dev/null and b/icons/darkredNG/pluginIcons/undelete.png differ
diff --git a/icons/darkredNG/pluginIcons/weatherng.png b/icons/darkredNG/pluginIcons/weatherng.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/darkredNG/pluginIcons/weatherng.png differ
diff --git a/icons/darkredNG/pluginIcons/xmltv2vdr.png b/icons/darkredNG/pluginIcons/xmltv2vdr.png
new file mode 100644
index 0000000..ea73c74
Binary files /dev/null and b/icons/darkredNG/pluginIcons/xmltv2vdr.png differ
diff --git a/icons/darkredNG/pluginIcons/yaepghg.png b/icons/darkredNG/pluginIcons/yaepghg.png
new file mode 100644
index 0000000..53ce443
Binary files /dev/null and b/icons/darkredNG/pluginIcons/yaepghg.png differ
diff --git a/icons/darkredNG/skinElements/buttonblue.png b/icons/darkredNG/skinElements/buttonblue.png
new file mode 100644
index 0000000..82dc634
Binary files /dev/null and b/icons/darkredNG/skinElements/buttonblue.png differ
diff --git a/icons/darkredNG/skinElements/buttongreen.png b/icons/darkredNG/skinElements/buttongreen.png
new file mode 100644
index 0000000..ce8fe22
Binary files /dev/null and b/icons/darkredNG/skinElements/buttongreen.png differ
diff --git a/icons/darkredNG/skinElements/buttonred.png b/icons/darkredNG/skinElements/buttonred.png
new file mode 100644
index 0000000..9660a3e
Binary files /dev/null and b/icons/darkredNG/skinElements/buttonred.png differ
diff --git a/icons/darkredNG/skinElements/buttonyellow.png b/icons/darkredNG/skinElements/buttonyellow.png
new file mode 100644
index 0000000..a51ea7a
Binary files /dev/null and b/icons/darkredNG/skinElements/buttonyellow.png differ
diff --git a/icons/darkredNG/skinElements/channellogoback.png b/icons/darkredNG/skinElements/channellogoback.png
new file mode 100644
index 0000000..79357af
Binary files /dev/null and b/icons/darkredNG/skinElements/channellogoback.png differ
diff --git a/icons/darkredNG/skinElements/displaychannelback.png b/icons/darkredNG/skinElements/displaychannelback.png
new file mode 100644
index 0000000..672144f
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychannelback.png differ
diff --git a/icons/darkredNG/skinElements/displaychannelback_right.png b/icons/darkredNG/skinElements/displaychannelback_right.png
new file mode 100644
index 0000000..cb7d4e7
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychannelback_right.png differ
diff --git a/icons/darkredNG/skinElements/displaychanneltop.png b/icons/darkredNG/skinElements/displaychanneltop.png
new file mode 100644
index 0000000..38a99f8
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychanneltop.png differ
diff --git a/icons/darkredNG/skinElements/displaychanneltop_right.png b/icons/darkredNG/skinElements/displaychanneltop_right.png
new file mode 100644
index 0000000..d156e51
Binary files /dev/null and b/icons/darkredNG/skinElements/displaychanneltop_right.png differ
diff --git a/icons/darkredNG/skinElements/displayreplayback.png b/icons/darkredNG/skinElements/displayreplayback.png
new file mode 100644
index 0000000..923dedb
Binary files /dev/null and b/icons/darkredNG/skinElements/displayreplayback.png differ
diff --git a/icons/darkredNG/skinElements/displayvolume.png b/icons/darkredNG/skinElements/displayvolume.png
new file mode 100644
index 0000000..8e81f14
Binary files /dev/null and b/icons/darkredNG/skinElements/displayvolume.png differ
diff --git a/icons/darkredNG/skinElements/header_mirroredback.png b/icons/darkredNG/skinElements/header_mirroredback.png
new file mode 100644
index 0000000..42919d9
Binary files /dev/null and b/icons/darkredNG/skinElements/header_mirroredback.png differ
diff --git a/icons/darkredNG/skinElements/header_mirroredtop.png b/icons/darkredNG/skinElements/header_mirroredtop.png
new file mode 100644
index 0000000..16053e9
Binary files /dev/null and b/icons/darkredNG/skinElements/header_mirroredtop.png differ
diff --git a/icons/darkredNG/skinElements/headerback.png b/icons/darkredNG/skinElements/headerback.png
new file mode 100644
index 0000000..dafff9e
Binary files /dev/null and b/icons/darkredNG/skinElements/headerback.png differ
diff --git a/icons/darkredNG/skinElements/headertop.png b/icons/darkredNG/skinElements/headertop.png
new file mode 100644
index 0000000..d6eb813
Binary files /dev/null and b/icons/darkredNG/skinElements/headertop.png differ
diff --git a/icons/darkredNG/skinElements/menubutton.png b/icons/darkredNG/skinElements/menubutton.png
new file mode 100644
index 0000000..4afbbbb
Binary files /dev/null and b/icons/darkredNG/skinElements/menubutton.png differ
diff --git a/icons/darkredNG/skinElements/menubuttonactive.png b/icons/darkredNG/skinElements/menubuttonactive.png
new file mode 100644
index 0000000..b461791
Binary files /dev/null and b/icons/darkredNG/skinElements/menubuttonactive.png differ
diff --git a/icons/darkredNG/skinElements/menubuttondefault.png b/icons/darkredNG/skinElements/menubuttondefault.png
new file mode 100644
index 0000000..9ef37ec
Binary files /dev/null and b/icons/darkredNG/skinElements/menubuttondefault.png differ
diff --git a/icons/darkredNG/skinElements/menubuttondefaultactive.png b/icons/darkredNG/skinElements/menubuttondefaultactive.png
new file mode 100644
index 0000000..09ab466
Binary files /dev/null and b/icons/darkredNG/skinElements/menubuttondefaultactive.png differ
diff --git a/icons/darkredNG/skinElements/messageError.png b/icons/darkredNG/skinElements/messageError.png
new file mode 100644
index 0000000..e6047f0
Binary files /dev/null and b/icons/darkredNG/skinElements/messageError.png differ
diff --git a/icons/darkredNG/skinElements/messageInfo.png b/icons/darkredNG/skinElements/messageInfo.png
new file mode 100644
index 0000000..d335003
Binary files /dev/null and b/icons/darkredNG/skinElements/messageInfo.png differ
diff --git a/icons/darkredNG/skinElements/messageStatus.png b/icons/darkredNG/skinElements/messageStatus.png
new file mode 100644
index 0000000..f455b5d
Binary files /dev/null and b/icons/darkredNG/skinElements/messageStatus.png differ
diff --git a/icons/darkredNG/skinElements/messageWarning.png b/icons/darkredNG/skinElements/messageWarning.png
new file mode 100644
index 0000000..32e1598
Binary files /dev/null and b/icons/darkredNG/skinElements/messageWarning.png differ
diff --git a/icons/darkredNG/skinElements/scrollbar.png b/icons/darkredNG/skinElements/scrollbar.png
new file mode 100644
index 0000000..2243776
Binary files /dev/null and b/icons/darkredNG/skinElements/scrollbar.png differ
diff --git a/icons/darkredNG/skinIcons/Channelseparator.png b/icons/darkredNG/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..90225ae
Binary files /dev/null and b/icons/darkredNG/skinIcons/Channelseparator.png differ
diff --git a/icons/darkredNG/skinIcons/DiskUsage.png b/icons/darkredNG/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..de1dfbb
Binary files /dev/null and b/icons/darkredNG/skinIcons/DiskUsage.png differ
diff --git a/icons/darkredNG/skinIcons/ac3.png b/icons/darkredNG/skinIcons/ac3.png
new file mode 100644
index 0000000..5b8614a
Binary files /dev/null and b/icons/darkredNG/skinIcons/ac3.png differ
diff --git a/icons/darkredNG/skinIcons/activetimer.png b/icons/darkredNG/skinIcons/activetimer.png
new file mode 100644
index 0000000..af4c33c
Binary files /dev/null and b/icons/darkredNG/skinIcons/activetimer.png differ
diff --git a/icons/darkredNG/skinIcons/activetimersmall.png b/icons/darkredNG/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..324ce85
Binary files /dev/null and b/icons/darkredNG/skinIcons/activetimersmall.png differ
diff --git a/icons/darkredNG/skinIcons/arrowLeftChannelSep.png b/icons/darkredNG/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..2c83c46
Binary files /dev/null and b/icons/darkredNG/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/darkredNG/skinIcons/arrowRightChannelSep.png b/icons/darkredNG/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..6ae7e00
Binary files /dev/null and b/icons/darkredNG/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/darkredNG/skinIcons/channeldelimiter.png b/icons/darkredNG/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..5212dae
Binary files /dev/null and b/icons/darkredNG/skinIcons/channeldelimiter.png differ
diff --git a/icons/darkredNG/skinIcons/crypted.png b/icons/darkredNG/skinIcons/crypted.png
new file mode 100644
index 0000000..8c7c351
Binary files /dev/null and b/icons/darkredNG/skinIcons/crypted.png differ
diff --git a/icons/darkredNG/skinIcons/daydelimiter.png b/icons/darkredNG/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..7ae6053
Binary files /dev/null and b/icons/darkredNG/skinIcons/daydelimiter.png differ
diff --git a/icons/darkredNG/skinIcons/defaultPoster.png b/icons/darkredNG/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..ba7e4df
Binary files /dev/null and b/icons/darkredNG/skinIcons/defaultPoster.png differ
diff --git a/icons/darkredNG/skinIcons/discpercent.png b/icons/darkredNG/skinIcons/discpercent.png
new file mode 100644
index 0000000..949fbc7
Binary files /dev/null and b/icons/darkredNG/skinIcons/discpercent.png differ
diff --git a/icons/darkredNG/skinIcons/dolbyoff - Kopie.png b/icons/darkredNG/skinIcons/dolbyoff - Kopie.png
new file mode 100644
index 0000000..ef4f17c
Binary files /dev/null and b/icons/darkredNG/skinIcons/dolbyoff - Kopie.png differ
diff --git a/icons/darkredNG/skinIcons/dolbyoff.png b/icons/darkredNG/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..895bd94
Binary files /dev/null and b/icons/darkredNG/skinIcons/dolbyoff.png differ
diff --git a/icons/darkredNG/skinIcons/dolbyon.png b/icons/darkredNG/skinIcons/dolbyon.png
new file mode 100644
index 0000000..555b409
Binary files /dev/null and b/icons/darkredNG/skinIcons/dolbyon.png differ
diff --git a/icons/darkredNG/skinIcons/encrypted.png b/icons/darkredNG/skinIcons/encrypted.png
new file mode 100644
index 0000000..2b6345a
Binary files /dev/null and b/icons/darkredNG/skinIcons/encrypted.png differ
diff --git a/icons/darkredNG/skinIcons/fta - Kopie.png b/icons/darkredNG/skinIcons/fta - Kopie.png
new file mode 100644
index 0000000..55e3789
Binary files /dev/null and b/icons/darkredNG/skinIcons/fta - Kopie.png differ
diff --git a/icons/darkredNG/skinIcons/fta.png b/icons/darkredNG/skinIcons/fta.png
new file mode 100644
index 0000000..5e5a1c4
Binary files /dev/null and b/icons/darkredNG/skinIcons/fta.png differ
diff --git a/icons/darkredNG/skinIcons/fwd.png b/icons/darkredNG/skinIcons/fwd.png
new file mode 100644
index 0000000..b12409d
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwd.png differ
diff --git a/icons/darkredNG/skinIcons/fwdInactive.png b/icons/darkredNG/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..cb551c2
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdInactive.png differ
diff --git a/icons/darkredNG/skinIcons/fwdx1.png b/icons/darkredNG/skinIcons/fwdx1.png
new file mode 100644
index 0000000..f4ef710
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdx1.png differ
diff --git a/icons/darkredNG/skinIcons/fwdx2.png b/icons/darkredNG/skinIcons/fwdx2.png
new file mode 100644
index 0000000..344a243
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdx2.png differ
diff --git a/icons/darkredNG/skinIcons/fwdx3.png b/icons/darkredNG/skinIcons/fwdx3.png
new file mode 100644
index 0000000..05d29e8
Binary files /dev/null and b/icons/darkredNG/skinIcons/fwdx3.png differ
diff --git a/icons/darkredNG/skinIcons/hd1080i.png b/icons/darkredNG/skinIcons/hd1080i.png
new file mode 100644
index 0000000..8a44156
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd1080i.png differ
diff --git a/icons/darkredNG/skinIcons/hd1080i_rec.png b/icons/darkredNG/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..7c687d3
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd1080i_rec.png differ
diff --git a/icons/darkredNG/skinIcons/hd720p.png b/icons/darkredNG/skinIcons/hd720p.png
new file mode 100644
index 0000000..2fa9baf
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd720p.png differ
diff --git a/icons/darkredNG/skinIcons/hd720p_rec.png b/icons/darkredNG/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..6bd11e6
Binary files /dev/null and b/icons/darkredNG/skinIcons/hd720p_rec.png differ
diff --git a/icons/darkredNG/skinIcons/newrecording.png b/icons/darkredNG/skinIcons/newrecording.png
new file mode 100644
index 0000000..b9166ba
Binary files /dev/null and b/icons/darkredNG/skinIcons/newrecording.png differ
diff --git a/icons/darkredNG/skinIcons/pause.png b/icons/darkredNG/skinIcons/pause.png
new file mode 100644
index 0000000..fc9ce48
Binary files /dev/null and b/icons/darkredNG/skinIcons/pause.png differ
diff --git a/icons/darkredNG/skinIcons/pauseInactive.png b/icons/darkredNG/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..f9a9d94
Binary files /dev/null and b/icons/darkredNG/skinIcons/pauseInactive.png differ
diff --git a/icons/darkredNG/skinIcons/play.png b/icons/darkredNG/skinIcons/play.png
new file mode 100644
index 0000000..0fa1c5a
Binary files /dev/null and b/icons/darkredNG/skinIcons/play.png differ
diff --git a/icons/darkredNG/skinIcons/playInactive.png b/icons/darkredNG/skinIcons/playInactive.png
new file mode 100644
index 0000000..7fb820a
Binary files /dev/null and b/icons/darkredNG/skinIcons/playInactive.png differ
diff --git a/icons/darkredNG/skinIcons/radio.png b/icons/darkredNG/skinIcons/radio.png
new file mode 100644
index 0000000..19116d8
Binary files /dev/null and b/icons/darkredNG/skinIcons/radio.png differ
diff --git a/icons/darkredNG/skinIcons/recfolder.png b/icons/darkredNG/skinIcons/recfolder.png
new file mode 100644
index 0000000..e3df65b
Binary files /dev/null and b/icons/darkredNG/skinIcons/recfolder.png differ
diff --git a/icons/darkredNG/skinIcons/recoff.png b/icons/darkredNG/skinIcons/recoff.png
new file mode 100644
index 0000000..f7355aa
Binary files /dev/null and b/icons/darkredNG/skinIcons/recoff.png differ
diff --git a/icons/darkredNG/skinIcons/recon.png b/icons/darkredNG/skinIcons/recon.png
new file mode 100644
index 0000000..9dd4d10
Binary files /dev/null and b/icons/darkredNG/skinIcons/recon.png differ
diff --git a/icons/darkredNG/skinIcons/recordingcutted.png b/icons/darkredNG/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..b90c9c1
Binary files /dev/null and b/icons/darkredNG/skinIcons/recordingcutted.png differ
diff --git a/icons/darkredNG/skinIcons/recordingdatetime.png b/icons/darkredNG/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..c77d1e3
Binary files /dev/null and b/icons/darkredNG/skinIcons/recordingdatetime.png differ
diff --git a/icons/darkredNG/skinIcons/rew.png b/icons/darkredNG/skinIcons/rew.png
new file mode 100644
index 0000000..134da85
Binary files /dev/null and b/icons/darkredNG/skinIcons/rew.png differ
diff --git a/icons/darkredNG/skinIcons/rewInactive.png b/icons/darkredNG/skinIcons/rewInactive.png
new file mode 100644
index 0000000..ce18386
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewInactive.png differ
diff --git a/icons/darkredNG/skinIcons/rewx1.png b/icons/darkredNG/skinIcons/rewx1.png
new file mode 100644
index 0000000..ffb79b1
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewx1.png differ
diff --git a/icons/darkredNG/skinIcons/rewx2.png b/icons/darkredNG/skinIcons/rewx2.png
new file mode 100644
index 0000000..00bbedd
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewx2.png differ
diff --git a/icons/darkredNG/skinIcons/rewx3.png b/icons/darkredNG/skinIcons/rewx3.png
new file mode 100644
index 0000000..b683ed3
Binary files /dev/null and b/icons/darkredNG/skinIcons/rewx3.png differ
diff --git a/icons/darkredNG/skinIcons/sd576i.png b/icons/darkredNG/skinIcons/sd576i.png
new file mode 100644
index 0000000..2e313aa
Binary files /dev/null and b/icons/darkredNG/skinIcons/sd576i.png differ
diff --git a/icons/darkredNG/skinIcons/sd576i_rec.png b/icons/darkredNG/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..2e313aa
Binary files /dev/null and b/icons/darkredNG/skinIcons/sd576i_rec.png differ
diff --git a/icons/darkredNG/skinIcons/stereo.png b/icons/darkredNG/skinIcons/stereo.png
new file mode 100644
index 0000000..7f3610d
Binary files /dev/null and b/icons/darkredNG/skinIcons/stereo.png differ
diff --git a/icons/darkredNG/skinIcons/stereooff.png b/icons/darkredNG/skinIcons/stereooff.png
new file mode 100644
index 0000000..abb2c80
Binary files /dev/null and b/icons/darkredNG/skinIcons/stereooff.png differ
diff --git a/icons/darkredNG/skinIcons/stereoon.png b/icons/darkredNG/skinIcons/stereoon.png
new file mode 100644
index 0000000..21c1b60
Binary files /dev/null and b/icons/darkredNG/skinIcons/stereoon.png differ
diff --git a/icons/darkredNG/skinIcons/timerActive.png b/icons/darkredNG/skinIcons/timerActive.png
new file mode 100644
index 0000000..28c2f81
Binary files /dev/null and b/icons/darkredNG/skinIcons/timerActive.png differ
diff --git a/icons/darkredNG/skinIcons/timerInactive.png b/icons/darkredNG/skinIcons/timerInactive.png
new file mode 100644
index 0000000..c4b1860
Binary files /dev/null and b/icons/darkredNG/skinIcons/timerInactive.png differ
diff --git a/icons/darkredNG/skinIcons/timerRecording.png b/icons/darkredNG/skinIcons/timerRecording.png
new file mode 100644
index 0000000..86dc66b
Binary files /dev/null and b/icons/darkredNG/skinIcons/timerRecording.png differ
diff --git a/icons/darkredNG/skinIcons/tracks.png b/icons/darkredNG/skinIcons/tracks.png
new file mode 100644
index 0000000..1e2547b
Binary files /dev/null and b/icons/darkredNG/skinIcons/tracks.png differ
diff --git a/icons/darkredNG/skinIcons/txtoff.png b/icons/darkredNG/skinIcons/txtoff.png
new file mode 100644
index 0000000..e928a56
Binary files /dev/null and b/icons/darkredNG/skinIcons/txtoff.png differ
diff --git a/icons/darkredNG/skinIcons/txton.png b/icons/darkredNG/skinIcons/txton.png
new file mode 100644
index 0000000..0361835
Binary files /dev/null and b/icons/darkredNG/skinIcons/txton.png differ
diff --git a/icons/darkredNG/skinIcons/vdrlogo.png b/icons/darkredNG/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..e168af6
Binary files /dev/null and b/icons/darkredNG/skinIcons/vdrlogo.png differ
diff --git a/icons/default/extraIcons/Applikationen.png b/icons/default/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c3b616
Binary files /dev/null and b/icons/default/extraIcons/Applikationen.png differ
diff --git a/icons/default/extraIcons/Audio.png b/icons/default/extraIcons/Audio.png
new file mode 100644
index 0000000..ff387fe
Binary files /dev/null and b/icons/default/extraIcons/Audio.png differ
diff --git a/icons/default/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/default/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3cdddc9
Binary files /dev/null and b/icons/default/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/default/extraIcons/Dienstprogramme.png b/icons/default/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..793aba6
Binary files /dev/null and b/icons/default/extraIcons/Dienstprogramme.png differ
diff --git a/icons/default/extraIcons/FireFox.png b/icons/default/extraIcons/FireFox.png
new file mode 100644
index 0000000..192fadc
Binary files /dev/null and b/icons/default/extraIcons/FireFox.png differ
diff --git a/icons/default/extraIcons/Info.png b/icons/default/extraIcons/Info.png
new file mode 100644
index 0000000..6737431
Binary files /dev/null and b/icons/default/extraIcons/Info.png differ
diff --git a/icons/default/extraIcons/Internet.png b/icons/default/extraIcons/Internet.png
new file mode 100644
index 0000000..f3db150
Binary files /dev/null and b/icons/default/extraIcons/Internet.png differ
diff --git a/icons/default/extraIcons/Medien.png b/icons/default/extraIcons/Medien.png
new file mode 100644
index 0000000..0ce2360
Binary files /dev/null and b/icons/default/extraIcons/Medien.png differ
diff --git a/icons/default/extraIcons/Rechner neu starten.png b/icons/default/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..5783ccf
Binary files /dev/null and b/icons/default/extraIcons/Rechner neu starten.png differ
diff --git a/icons/default/extraIcons/Remote wakeup.png b/icons/default/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..1cd2f6e
Binary files /dev/null and b/icons/default/extraIcons/Remote wakeup.png differ
diff --git a/icons/default/extraIcons/Spiele.png b/icons/default/extraIcons/Spiele.png
new file mode 100644
index 0000000..8e07161
Binary files /dev/null and b/icons/default/extraIcons/Spiele.png differ
diff --git a/icons/default/extraIcons/System herunterfahren.png b/icons/default/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..e0234df
Binary files /dev/null and b/icons/default/extraIcons/System herunterfahren.png differ
diff --git a/icons/default/extraIcons/System.png b/icons/default/extraIcons/System.png
new file mode 100644
index 0000000..81d100e
Binary files /dev/null and b/icons/default/extraIcons/System.png differ
diff --git a/icons/default/extraIcons/Tools.png b/icons/default/extraIcons/Tools.png
new file mode 100644
index 0000000..cf328ef
Binary files /dev/null and b/icons/default/extraIcons/Tools.png differ
diff --git a/icons/default/extraIcons/Tunderbird.png b/icons/default/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..5ae27e0
Binary files /dev/null and b/icons/default/extraIcons/Tunderbird.png differ
diff --git a/icons/default/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/default/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..cd7b81c
Binary files /dev/null and b/icons/default/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/default/extraIcons/VDR neu starten.png b/icons/default/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..14904ca
Binary files /dev/null and b/icons/default/extraIcons/VDR neu starten.png differ
diff --git a/icons/default/extraIcons/Video.png b/icons/default/extraIcons/Video.png
new file mode 100644
index 0000000..490ca4b
Binary files /dev/null and b/icons/default/extraIcons/Video.png differ
diff --git a/icons/default/extraIcons/Web.png b/icons/default/extraIcons/Web.png
new file mode 100644
index 0000000..20260e3
Binary files /dev/null and b/icons/default/extraIcons/Web.png differ
diff --git a/icons/default/extraIcons/XBMC.png b/icons/default/extraIcons/XBMC.png
new file mode 100644
index 0000000..c7c4c04
Binary files /dev/null and b/icons/default/extraIcons/XBMC.png differ
diff --git a/icons/default/extraIcons/Xterm.png b/icons/default/extraIcons/Xterm.png
new file mode 100644
index 0000000..fa75282
Binary files /dev/null and b/icons/default/extraIcons/Xterm.png differ
diff --git a/icons/default/extraIcons/audiovideo.png b/icons/default/extraIcons/audiovideo.png
new file mode 100644
index 0000000..726538d
Binary files /dev/null and b/icons/default/extraIcons/audiovideo.png differ
diff --git a/icons/default/extraIcons/markad_status.png b/icons/default/extraIcons/markad_status.png
new file mode 100644
index 0000000..4fdc7a4
Binary files /dev/null and b/icons/default/extraIcons/markad_status.png differ
diff --git a/icons/default/extraIcons/schneiden_abbrechen.png b/icons/default/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..b2e0bd3
Binary files /dev/null and b/icons/default/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/default/extraIcons/tux.png b/icons/default/extraIcons/tux.png
new file mode 100644
index 0000000..c5b4742
Binary files /dev/null and b/icons/default/extraIcons/tux.png differ
diff --git a/icons/default/extraIcons/usb.png b/icons/default/extraIcons/usb.png
new file mode 100644
index 0000000..c4db1d4
Binary files /dev/null and b/icons/default/extraIcons/usb.png differ
diff --git a/icons/default/extraIcons/vdrlogo.png b/icons/default/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..037a191
Binary files /dev/null and b/icons/default/extraIcons/vdrlogo.png differ
diff --git a/icons/default/extraIcons/yaicon_blue.png b/icons/default/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..2c49273
Binary files /dev/null and b/icons/default/extraIcons/yaicon_blue.png differ
diff --git a/icons/default/menuIcons/CAM.png b/icons/default/menuIcons/CAM.png
new file mode 100644
index 0000000..a394877
Binary files /dev/null and b/icons/default/menuIcons/CAM.png differ
diff --git a/icons/default/menuIcons/Channels.png b/icons/default/menuIcons/Channels.png
index faf8126..ba2ba78 100644
Binary files a/icons/default/menuIcons/Channels.png and b/icons/default/menuIcons/Channels.png differ
diff --git a/icons/default/menuIcons/Commands.png b/icons/default/menuIcons/Commands.png
index bebbe49..c6a83ef 100644
Binary files a/icons/default/menuIcons/Commands.png and b/icons/default/menuIcons/Commands.png differ
diff --git a/icons/default/menuIcons/DVB.png b/icons/default/menuIcons/DVB.png
new file mode 100644
index 0000000..3789145
Binary files /dev/null and b/icons/default/menuIcons/DVB.png differ
diff --git a/icons/default/menuIcons/EPG.png b/icons/default/menuIcons/EPG.png
new file mode 100644
index 0000000..e868b90
Binary files /dev/null and b/icons/default/menuIcons/EPG.png differ
diff --git a/icons/default/menuIcons/LNB.png b/icons/default/menuIcons/LNB.png
new file mode 100644
index 0000000..896dd99
Binary files /dev/null and b/icons/default/menuIcons/LNB.png differ
diff --git a/icons/default/menuIcons/Miscellaneous.png b/icons/default/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..2a41c4d
Binary files /dev/null and b/icons/default/menuIcons/Miscellaneous.png differ
diff --git a/icons/default/menuIcons/OSD.png b/icons/default/menuIcons/OSD.png
new file mode 100644
index 0000000..8f571c6
Binary files /dev/null and b/icons/default/menuIcons/OSD.png differ
diff --git a/icons/default/menuIcons/Plugins.png b/icons/default/menuIcons/Plugins.png
new file mode 100644
index 0000000..3fcba70
Binary files /dev/null and b/icons/default/menuIcons/Plugins.png differ
diff --git a/icons/default/menuIcons/Recording.png b/icons/default/menuIcons/Recording.png
new file mode 100644
index 0000000..741b1af
Binary files /dev/null and b/icons/default/menuIcons/Recording.png differ
diff --git a/icons/default/menuIcons/Recordings.png b/icons/default/menuIcons/Recordings.png
index 9d23ff4..79aeeb7 100644
Binary files a/icons/default/menuIcons/Recordings.png and b/icons/default/menuIcons/Recordings.png differ
diff --git a/icons/default/menuIcons/Replay.png b/icons/default/menuIcons/Replay.png
new file mode 100644
index 0000000..621596c
Binary files /dev/null and b/icons/default/menuIcons/Replay.png differ
diff --git a/icons/default/menuIcons/Restart.png b/icons/default/menuIcons/Restart.png
new file mode 100644
index 0000000..aa23cd4
Binary files /dev/null and b/icons/default/menuIcons/Restart.png differ
diff --git a/icons/default/menuIcons/Schedule.png b/icons/default/menuIcons/Schedule.png
index 396bb74..3a98cac 100644
Binary files a/icons/default/menuIcons/Schedule.png and b/icons/default/menuIcons/Schedule.png differ
diff --git a/icons/default/menuIcons/Setup.png b/icons/default/menuIcons/Setup.png
index 0746ae7..d121148 100644
Binary files a/icons/default/menuIcons/Setup.png and b/icons/default/menuIcons/Setup.png differ
diff --git a/icons/default/menuIcons/StopRecording.png b/icons/default/menuIcons/StopRecording.png
new file mode 100644
index 0000000..ed83fbb
Binary files /dev/null and b/icons/default/menuIcons/StopRecording.png differ
diff --git a/icons/default/menuIcons/StopReplay.png b/icons/default/menuIcons/StopReplay.png
new file mode 100644
index 0000000..9192760
Binary files /dev/null and b/icons/default/menuIcons/StopReplay.png differ
diff --git a/icons/default/menuIcons/Timers.png b/icons/default/menuIcons/Timers.png
index 1d43872..b866c36 100644
Binary files a/icons/default/menuIcons/Timers.png and b/icons/default/menuIcons/Timers.png differ
diff --git a/icons/default/pluginIcons/admin.png b/icons/default/pluginIcons/admin.png
index 17f3758..cf328ef 100644
Binary files a/icons/default/pluginIcons/admin.png and b/icons/default/pluginIcons/admin.png differ
diff --git a/icons/default/pluginIcons/arghdirector.png b/icons/default/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..bbd221a
Binary files /dev/null and b/icons/default/pluginIcons/arghdirector.png differ
diff --git a/icons/default/pluginIcons/autostart.png b/icons/default/pluginIcons/autostart.png
new file mode 100644
index 0000000..6fdb1bb
Binary files /dev/null and b/icons/default/pluginIcons/autostart.png differ
diff --git a/icons/default/pluginIcons/avahi4vdr.png b/icons/default/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..044e71d
Binary files /dev/null and b/icons/default/pluginIcons/avahi4vdr.png differ
diff --git a/icons/default/pluginIcons/avards.png b/icons/default/pluginIcons/avards.png
new file mode 100644
index 0000000..cf8d037
Binary files /dev/null and b/icons/default/pluginIcons/avards.png differ
diff --git a/icons/default/pluginIcons/block.png b/icons/default/pluginIcons/block.png
new file mode 100644
index 0000000..86127c2
Binary files /dev/null and b/icons/default/pluginIcons/block.png differ
diff --git a/icons/default/pluginIcons/burn.png b/icons/default/pluginIcons/burn.png
new file mode 100644
index 0000000..305d7ff
Binary files /dev/null and b/icons/default/pluginIcons/burn.png differ
diff --git a/icons/default/pluginIcons/cdplayer.png b/icons/default/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..89a6c19
Binary files /dev/null and b/icons/default/pluginIcons/cdplayer.png differ
diff --git a/icons/default/pluginIcons/chanman.png b/icons/default/pluginIcons/chanman.png
new file mode 100644
index 0000000..a73e83c
Binary files /dev/null and b/icons/default/pluginIcons/chanman.png differ
diff --git a/icons/default/pluginIcons/check.png b/icons/default/pluginIcons/check.png
new file mode 100644
index 0000000..d487a24
Binary files /dev/null and b/icons/default/pluginIcons/check.png differ
diff --git a/icons/default/pluginIcons/conflictcheckonly.png b/icons/default/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..7f832bd
Binary files /dev/null and b/icons/default/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/default/pluginIcons/ddci.png b/icons/default/pluginIcons/ddci.png
new file mode 100644
index 0000000..4ad459c
Binary files /dev/null and b/icons/default/pluginIcons/ddci.png differ
diff --git a/icons/default/pluginIcons/devstatus.png b/icons/default/pluginIcons/devstatus.png
new file mode 100644
index 0000000..96c0ec1
Binary files /dev/null and b/icons/default/pluginIcons/devstatus.png differ
diff --git a/icons/default/pluginIcons/dummydevice.png b/icons/default/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..11fd707
Binary files /dev/null and b/icons/default/pluginIcons/dummydevice.png differ
diff --git a/icons/default/pluginIcons/duplicates.png b/icons/default/pluginIcons/duplicates.png
new file mode 100644
index 0000000..dc1be57
Binary files /dev/null and b/icons/default/pluginIcons/duplicates.png differ
diff --git a/icons/default/pluginIcons/dvbapi.png b/icons/default/pluginIcons/dvbapi.png
new file mode 100644
index 0000000..b966461
Binary files /dev/null and b/icons/default/pluginIcons/dvbapi.png differ
diff --git a/icons/default/pluginIcons/dvbhddevice.png b/icons/default/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..b874297
Binary files /dev/null and b/icons/default/pluginIcons/dvbhddevice.png differ
diff --git a/icons/default/pluginIcons/dvbsddevice.png b/icons/default/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..106184e
Binary files /dev/null and b/icons/default/pluginIcons/dvbsddevice.png differ
diff --git a/icons/default/pluginIcons/dynamite.png b/icons/default/pluginIcons/dynamite.png
new file mode 100644
index 0000000..28ea35a
Binary files /dev/null and b/icons/default/pluginIcons/dynamite.png differ
diff --git a/icons/default/pluginIcons/eepg.png b/icons/default/pluginIcons/eepg.png
new file mode 100644
index 0000000..3938b96
Binary files /dev/null and b/icons/default/pluginIcons/eepg.png differ
diff --git a/icons/default/pluginIcons/epg2vdr.png b/icons/default/pluginIcons/epg2vdr.png
new file mode 100644
index 0000000..ac8757e
Binary files /dev/null and b/icons/default/pluginIcons/epg2vdr.png differ
diff --git a/icons/default/pluginIcons/epgsearch.png b/icons/default/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5eab415
Binary files /dev/null and b/icons/default/pluginIcons/epgsearch.png differ
diff --git a/icons/default/pluginIcons/epgsearchonly.png b/icons/default/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..b5186e7
Binary files /dev/null and b/icons/default/pluginIcons/epgsearchonly.png differ
diff --git a/icons/default/pluginIcons/epgsync.png b/icons/default/pluginIcons/epgsync.png
new file mode 100644
index 0000000..5c14009
Binary files /dev/null and b/icons/default/pluginIcons/epgsync.png differ
diff --git a/icons/default/pluginIcons/externalplayer.png b/icons/default/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..2bd67db
Binary files /dev/null and b/icons/default/pluginIcons/externalplayer.png differ
diff --git a/icons/default/pluginIcons/extrecmenu.png b/icons/default/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..6f613f1
Binary files /dev/null and b/icons/default/pluginIcons/extrecmenu.png differ
diff --git a/icons/default/pluginIcons/favorites.png b/icons/default/pluginIcons/favorites.png
new file mode 100644
index 0000000..409c852
Binary files /dev/null and b/icons/default/pluginIcons/favorites.png differ
diff --git a/icons/default/pluginIcons/femon.png b/icons/default/pluginIcons/femon.png
new file mode 100644
index 0000000..e87b711
Binary files /dev/null and b/icons/default/pluginIcons/femon.png differ
diff --git a/icons/default/pluginIcons/fepg.png b/icons/default/pluginIcons/fepg.png
new file mode 100644
index 0000000..65023ed
Binary files /dev/null and b/icons/default/pluginIcons/fepg.png differ
diff --git a/icons/default/pluginIcons/filebrowser.png b/icons/default/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..d3f90e0
Binary files /dev/null and b/icons/default/pluginIcons/filebrowser.png differ
diff --git a/icons/default/pluginIcons/fritzbox.png b/icons/default/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..7bfc229
Binary files /dev/null and b/icons/default/pluginIcons/fritzbox.png differ
diff --git a/icons/default/pluginIcons/graphlcd.png b/icons/default/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/default/pluginIcons/graphlcd.png differ
diff --git a/icons/default/pluginIcons/graphtft.png b/icons/default/pluginIcons/graphtft.png
new file mode 100644
index 0000000..39ffd35
Binary files /dev/null and b/icons/default/pluginIcons/graphtft.png differ
diff --git a/icons/default/pluginIcons/image.png b/icons/default/pluginIcons/image.png
new file mode 100644
index 0000000..33644e0
Binary files /dev/null and b/icons/default/pluginIcons/image.png differ
diff --git a/icons/default/pluginIcons/imonlcd.png b/icons/default/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/default/pluginIcons/imonlcd.png differ
diff --git a/icons/default/pluginIcons/iptv.png b/icons/default/pluginIcons/iptv.png
new file mode 100644
index 0000000..4494ddc
Binary files /dev/null and b/icons/default/pluginIcons/iptv.png differ
diff --git a/icons/default/pluginIcons/lcdproc.png b/icons/default/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..3d34fc4
Binary files /dev/null and b/icons/default/pluginIcons/lcdproc.png differ
diff --git a/icons/default/pluginIcons/mailbox.png b/icons/default/pluginIcons/mailbox.png
new file mode 100644
index 0000000..1bc76e8
Binary files /dev/null and b/icons/default/pluginIcons/mailbox.png differ
diff --git a/icons/default/pluginIcons/makemkv.png b/icons/default/pluginIcons/makemkv.png
new file mode 100644
index 0000000..41cddf1
Binary files /dev/null and b/icons/default/pluginIcons/makemkv.png differ
diff --git a/icons/default/pluginIcons/markad.png b/icons/default/pluginIcons/markad.png
new file mode 100644
index 0000000..b3defaf
Binary files /dev/null and b/icons/default/pluginIcons/markad.png differ
diff --git a/icons/default/pluginIcons/mlist.png b/icons/default/pluginIcons/mlist.png
new file mode 100644
index 0000000..19c367f
Binary files /dev/null and b/icons/default/pluginIcons/mlist.png differ
diff --git a/icons/default/pluginIcons/music.png b/icons/default/pluginIcons/music.png
new file mode 100644
index 0000000..abb012e
Binary files /dev/null and b/icons/default/pluginIcons/music.png differ
diff --git a/icons/default/pluginIcons/noepg.png b/icons/default/pluginIcons/noepg.png
new file mode 100644
index 0000000..eb9410d
Binary files /dev/null and b/icons/default/pluginIcons/noepg.png differ
diff --git a/icons/default/pluginIcons/nordlichtsepg.png b/icons/default/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..3ee3fa2
Binary files /dev/null and b/icons/default/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/default/pluginIcons/osdteletext.png b/icons/default/pluginIcons/osdteletext.png
index 0419706..664e770 100644
Binary files a/icons/default/pluginIcons/osdteletext.png and b/icons/default/pluginIcons/osdteletext.png differ
diff --git a/icons/default/pluginIcons/peer.png b/icons/default/pluginIcons/peer.png
new file mode 100644
index 0000000..998d568
Binary files /dev/null and b/icons/default/pluginIcons/peer.png differ
diff --git a/icons/default/pluginIcons/play.png b/icons/default/pluginIcons/play.png
new file mode 100644
index 0000000..2848fc6
Binary files /dev/null and b/icons/default/pluginIcons/play.png differ
diff --git a/icons/default/pluginIcons/pvrinput.png b/icons/default/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..724f698
Binary files /dev/null and b/icons/default/pluginIcons/pvrinput.png differ
diff --git a/icons/default/pluginIcons/quickepgsearch.png b/icons/default/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..76a31f4
Binary files /dev/null and b/icons/default/pluginIcons/quickepgsearch.png differ
diff --git a/icons/default/pluginIcons/radio.png b/icons/default/pluginIcons/radio.png
new file mode 100644
index 0000000..193b7d4
Binary files /dev/null and b/icons/default/pluginIcons/radio.png differ
diff --git a/icons/default/pluginIcons/remote.png b/icons/default/pluginIcons/remote.png
new file mode 100644
index 0000000..7f46b1b
Binary files /dev/null and b/icons/default/pluginIcons/remote.png differ
diff --git a/icons/default/pluginIcons/remotetimers.png b/icons/default/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..fae3b79
Binary files /dev/null and b/icons/default/pluginIcons/remotetimers.png differ
diff --git a/icons/default/pluginIcons/rssreader.png b/icons/default/pluginIcons/rssreader.png
new file mode 100644
index 0000000..db538f0
Binary files /dev/null and b/icons/default/pluginIcons/rssreader.png differ
diff --git a/icons/default/pluginIcons/sc.png b/icons/default/pluginIcons/sc.png
new file mode 100644
index 0000000..2472d6c
Binary files /dev/null and b/icons/default/pluginIcons/sc.png differ
diff --git a/icons/default/pluginIcons/screenshot.png b/icons/default/pluginIcons/screenshot.png
new file mode 100644
index 0000000..be9b4d5
Binary files /dev/null and b/icons/default/pluginIcons/screenshot.png differ
diff --git a/icons/default/pluginIcons/seduatmo.png b/icons/default/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..4b5292f
Binary files /dev/null and b/icons/default/pluginIcons/seduatmo.png differ
diff --git a/icons/default/pluginIcons/skyselectfeeds.png b/icons/default/pluginIcons/skyselectfeeds.png
new file mode 100644
index 0000000..d81a024
Binary files /dev/null and b/icons/default/pluginIcons/skyselectfeeds.png differ
diff --git a/icons/default/pluginIcons/sleeptimer.png b/icons/default/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..cd4956f
Binary files /dev/null and b/icons/default/pluginIcons/sleeptimer.png differ
diff --git a/icons/default/pluginIcons/softhddevice.png b/icons/default/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..df13f2c
Binary files /dev/null and b/icons/default/pluginIcons/softhddevice.png differ
diff --git a/icons/default/pluginIcons/streamdev-server.png b/icons/default/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..e89ed8b
Binary files /dev/null and b/icons/default/pluginIcons/streamdev-server.png differ
diff --git a/icons/default/pluginIcons/systeminfo.png b/icons/default/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..b14763f
Binary files /dev/null and b/icons/default/pluginIcons/systeminfo.png differ
diff --git a/icons/default/pluginIcons/targavfd.png b/icons/default/pluginIcons/targavfd.png
new file mode 100644
index 0000000..e91b111
Binary files /dev/null and b/icons/default/pluginIcons/targavfd.png differ
diff --git a/icons/default/pluginIcons/trayopenng.png b/icons/default/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..6ebd17d
Binary files /dev/null and b/icons/default/pluginIcons/trayopenng.png differ
diff --git a/icons/default/pluginIcons/tvguide.png b/icons/default/pluginIcons/tvguide.png
index 6c756b2..968a37c 100644
Binary files a/icons/default/pluginIcons/tvguide.png and b/icons/default/pluginIcons/tvguide.png differ
diff --git a/icons/default/pluginIcons/tvm2vdr.png b/icons/default/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..47f9a91
Binary files /dev/null and b/icons/default/pluginIcons/tvm2vdr.png differ
diff --git a/icons/default/pluginIcons/tvscraper.png b/icons/default/pluginIcons/tvscraper.png
new file mode 100644
index 0000000..a106cb5
Binary files /dev/null and b/icons/default/pluginIcons/tvscraper.png differ
diff --git a/icons/default/pluginIcons/undelete.png b/icons/default/pluginIcons/undelete.png
new file mode 100644
index 0000000..a53d50a
Binary files /dev/null and b/icons/default/pluginIcons/undelete.png differ
diff --git a/icons/default/pluginIcons/weatherng.png b/icons/default/pluginIcons/weatherng.png
new file mode 100644
index 0000000..a88f11d
Binary files /dev/null and b/icons/default/pluginIcons/weatherng.png differ
diff --git a/icons/default/pluginIcons/xmltv2vdr.png b/icons/default/pluginIcons/xmltv2vdr.png
new file mode 100644
index 0000000..ea73c74
Binary files /dev/null and b/icons/default/pluginIcons/xmltv2vdr.png differ
diff --git a/icons/default/pluginIcons/yaepghg.png b/icons/default/pluginIcons/yaepghg.png
new file mode 100644
index 0000000..53ce443
Binary files /dev/null and b/icons/default/pluginIcons/yaepghg.png differ
diff --git a/icons/default/skinElements/buttonblue.png b/icons/default/skinElements/buttonblue.png
new file mode 100644
index 0000000..d00e4d2
Binary files /dev/null and b/icons/default/skinElements/buttonblue.png differ
diff --git a/icons/default/skinElements/buttongreen.png b/icons/default/skinElements/buttongreen.png
new file mode 100644
index 0000000..8c05c08
Binary files /dev/null and b/icons/default/skinElements/buttongreen.png differ
diff --git a/icons/default/skinElements/buttonred.png b/icons/default/skinElements/buttonred.png
new file mode 100644
index 0000000..9367c9b
Binary files /dev/null and b/icons/default/skinElements/buttonred.png differ
diff --git a/icons/default/skinElements/buttonyellow.png b/icons/default/skinElements/buttonyellow.png
new file mode 100644
index 0000000..aff8758
Binary files /dev/null and b/icons/default/skinElements/buttonyellow.png differ
diff --git a/icons/default/skinElements/channellogoback.png b/icons/default/skinElements/channellogoback.png
new file mode 100644
index 0000000..b0e83b1
Binary files /dev/null and b/icons/default/skinElements/channellogoback.png differ
diff --git a/icons/default/skinElements/displaychannelback.png b/icons/default/skinElements/displaychannelback.png
new file mode 100644
index 0000000..1437384
Binary files /dev/null and b/icons/default/skinElements/displaychannelback.png differ
diff --git a/icons/default/skinElements/displaychannelback_right.png b/icons/default/skinElements/displaychannelback_right.png
new file mode 100644
index 0000000..98114bd
Binary files /dev/null and b/icons/default/skinElements/displaychannelback_right.png differ
diff --git a/icons/default/skinElements/displaychanneltop.png b/icons/default/skinElements/displaychanneltop.png
new file mode 100644
index 0000000..5108435
Binary files /dev/null and b/icons/default/skinElements/displaychanneltop.png differ
diff --git a/icons/default/skinElements/displaychanneltop_right.png b/icons/default/skinElements/displaychanneltop_right.png
new file mode 100644
index 0000000..ede398d
Binary files /dev/null and b/icons/default/skinElements/displaychanneltop_right.png differ
diff --git a/icons/default/skinElements/displayreplayback.png b/icons/default/skinElements/displayreplayback.png
new file mode 100644
index 0000000..d72931f
Binary files /dev/null and b/icons/default/skinElements/displayreplayback.png differ
diff --git a/icons/default/skinElements/displayreplaytop.png b/icons/default/skinElements/displayreplaytop.png
new file mode 100644
index 0000000..064347e
Binary files /dev/null and b/icons/default/skinElements/displayreplaytop.png differ
diff --git a/icons/default/skinElements/displayvolume.png b/icons/default/skinElements/displayvolume.png
new file mode 100644
index 0000000..a5c4c66
Binary files /dev/null and b/icons/default/skinElements/displayvolume.png differ
diff --git a/icons/default/skinElements/header_mirroredtop.png b/icons/default/skinElements/header_mirroredtop.png
new file mode 100644
index 0000000..6475b7a
Binary files /dev/null and b/icons/default/skinElements/header_mirroredtop.png differ
diff --git a/icons/default/skinElements/headertop.png b/icons/default/skinElements/headertop.png
new file mode 100644
index 0000000..2bc19a6
Binary files /dev/null and b/icons/default/skinElements/headertop.png differ
diff --git a/icons/default/skinElements/menubutton.png b/icons/default/skinElements/menubutton.png
new file mode 100644
index 0000000..0800a5e
Binary files /dev/null and b/icons/default/skinElements/menubutton.png differ
diff --git a/icons/default/skinElements/menubuttonactive.png b/icons/default/skinElements/menubuttonactive.png
new file mode 100644
index 0000000..caae104
Binary files /dev/null and b/icons/default/skinElements/menubuttonactive.png differ
diff --git a/icons/default/skinElements/menubuttondefault.png b/icons/default/skinElements/menubuttondefault.png
new file mode 100644
index 0000000..76735de
Binary files /dev/null and b/icons/default/skinElements/menubuttondefault.png differ
diff --git a/icons/default/skinElements/menubuttondefaultactive.png b/icons/default/skinElements/menubuttondefaultactive.png
new file mode 100644
index 0000000..70c0b8a
Binary files /dev/null and b/icons/default/skinElements/menubuttondefaultactive.png differ
diff --git a/icons/default/skinElements/menubuttontop.png b/icons/default/skinElements/menubuttontop.png
new file mode 100644
index 0000000..1b49cfd
Binary files /dev/null and b/icons/default/skinElements/menubuttontop.png differ
diff --git a/icons/default/skinElements/messageError.png b/icons/default/skinElements/messageError.png
new file mode 100644
index 0000000..a894992
Binary files /dev/null and b/icons/default/skinElements/messageError.png differ
diff --git a/icons/default/skinElements/messageInfo.png b/icons/default/skinElements/messageInfo.png
new file mode 100644
index 0000000..5f8e62a
Binary files /dev/null and b/icons/default/skinElements/messageInfo.png differ
diff --git a/icons/default/skinElements/messageStatus.png b/icons/default/skinElements/messageStatus.png
new file mode 100644
index 0000000..f4b83f4
Binary files /dev/null and b/icons/default/skinElements/messageStatus.png differ
diff --git a/icons/default/skinElements/messageWarning.png b/icons/default/skinElements/messageWarning.png
new file mode 100644
index 0000000..f073ed5
Binary files /dev/null and b/icons/default/skinElements/messageWarning.png differ
diff --git a/icons/default/skinElements/scrollbar.png b/icons/default/skinElements/scrollbar.png
new file mode 100644
index 0000000..f822555
Binary files /dev/null and b/icons/default/skinElements/scrollbar.png differ
diff --git a/icons/default/skinIcons/Channelseparator.png b/icons/default/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..ad92e2a
Binary files /dev/null and b/icons/default/skinIcons/Channelseparator.png differ
diff --git a/icons/default/skinIcons/DiskUsage.png b/icons/default/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..f40fcd9
Binary files /dev/null and b/icons/default/skinIcons/DiskUsage.png differ
diff --git a/icons/default/skinIcons/ac3.png b/icons/default/skinIcons/ac3.png
new file mode 100644
index 0000000..5b8614a
Binary files /dev/null and b/icons/default/skinIcons/ac3.png differ
diff --git a/icons/default/skinIcons/activetimer.png b/icons/default/skinIcons/activetimer.png
new file mode 100644
index 0000000..af4c33c
Binary files /dev/null and b/icons/default/skinIcons/activetimer.png differ
diff --git a/icons/default/skinIcons/activetimersmall.png b/icons/default/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..324ce85
Binary files /dev/null and b/icons/default/skinIcons/activetimersmall.png differ
diff --git a/icons/default/skinIcons/arrowLeftChannelSep.png b/icons/default/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..642cd78
Binary files /dev/null and b/icons/default/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/default/skinIcons/arrowRightChannelSep.png b/icons/default/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..1418671
Binary files /dev/null and b/icons/default/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/default/skinIcons/channeldelimiter.png b/icons/default/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..5212dae
Binary files /dev/null and b/icons/default/skinIcons/channeldelimiter.png differ
diff --git a/icons/default/skinIcons/crypted.png b/icons/default/skinIcons/crypted.png
new file mode 100644
index 0000000..1aec146
Binary files /dev/null and b/icons/default/skinIcons/crypted.png differ
diff --git a/icons/default/skinIcons/daydelimiter.png b/icons/default/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..7ae6053
Binary files /dev/null and b/icons/default/skinIcons/daydelimiter.png differ
diff --git a/icons/default/skinIcons/defaultPoster.png b/icons/default/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..ba7e4df
Binary files /dev/null and b/icons/default/skinIcons/defaultPoster.png differ
diff --git a/icons/default/skinIcons/discpercent.png b/icons/default/skinIcons/discpercent.png
new file mode 100644
index 0000000..949fbc7
Binary files /dev/null and b/icons/default/skinIcons/discpercent.png differ
diff --git a/icons/default/skinIcons/dolbyoff.png b/icons/default/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..ef4f17c
Binary files /dev/null and b/icons/default/skinIcons/dolbyoff.png differ
diff --git a/icons/default/skinIcons/dolbyon.png b/icons/default/skinIcons/dolbyon.png
new file mode 100644
index 0000000..1278abe
Binary files /dev/null and b/icons/default/skinIcons/dolbyon.png differ
diff --git a/icons/default/skinIcons/encrypted.png b/icons/default/skinIcons/encrypted.png
new file mode 100644
index 0000000..2b6345a
Binary files /dev/null and b/icons/default/skinIcons/encrypted.png differ
diff --git a/icons/default/skinIcons/fta.png b/icons/default/skinIcons/fta.png
new file mode 100644
index 0000000..55e3789
Binary files /dev/null and b/icons/default/skinIcons/fta.png differ
diff --git a/icons/default/skinIcons/fwd.png b/icons/default/skinIcons/fwd.png
new file mode 100644
index 0000000..3dea9d3
Binary files /dev/null and b/icons/default/skinIcons/fwd.png differ
diff --git a/icons/default/skinIcons/fwdInactive.png b/icons/default/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..cb551c2
Binary files /dev/null and b/icons/default/skinIcons/fwdInactive.png differ
diff --git a/icons/default/skinIcons/fwdx1.png b/icons/default/skinIcons/fwdx1.png
new file mode 100644
index 0000000..599256e
Binary files /dev/null and b/icons/default/skinIcons/fwdx1.png differ
diff --git a/icons/default/skinIcons/fwdx2.png b/icons/default/skinIcons/fwdx2.png
new file mode 100644
index 0000000..3eec356
Binary files /dev/null and b/icons/default/skinIcons/fwdx2.png differ
diff --git a/icons/default/skinIcons/fwdx3.png b/icons/default/skinIcons/fwdx3.png
new file mode 100644
index 0000000..f686658
Binary files /dev/null and b/icons/default/skinIcons/fwdx3.png differ
diff --git a/icons/default/skinIcons/hd1080i.png b/icons/default/skinIcons/hd1080i.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/default/skinIcons/hd1080i.png differ
diff --git a/icons/default/skinIcons/hd1080i_rec.png b/icons/default/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/default/skinIcons/hd1080i_rec.png differ
diff --git a/icons/default/skinIcons/hd720p.png b/icons/default/skinIcons/hd720p.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/default/skinIcons/hd720p.png differ
diff --git a/icons/default/skinIcons/hd720p_rec.png b/icons/default/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/default/skinIcons/hd720p_rec.png differ
diff --git a/icons/default/skinIcons/newrecording.png b/icons/default/skinIcons/newrecording.png
new file mode 100644
index 0000000..b9166ba
Binary files /dev/null and b/icons/default/skinIcons/newrecording.png differ
diff --git a/icons/default/skinIcons/pause.png b/icons/default/skinIcons/pause.png
new file mode 100644
index 0000000..cd8cad8
Binary files /dev/null and b/icons/default/skinIcons/pause.png differ
diff --git a/icons/default/skinIcons/pauseInactive.png b/icons/default/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..f9a9d94
Binary files /dev/null and b/icons/default/skinIcons/pauseInactive.png differ
diff --git a/icons/default/skinIcons/play.png b/icons/default/skinIcons/play.png
new file mode 100644
index 0000000..4cc0541
Binary files /dev/null and b/icons/default/skinIcons/play.png differ
diff --git a/icons/default/skinIcons/playInactive.png b/icons/default/skinIcons/playInactive.png
new file mode 100644
index 0000000..7fb820a
Binary files /dev/null and b/icons/default/skinIcons/playInactive.png differ
diff --git a/icons/default/skinIcons/radio.png b/icons/default/skinIcons/radio.png
new file mode 100644
index 0000000..19116d8
Binary files /dev/null and b/icons/default/skinIcons/radio.png differ
diff --git a/icons/default/skinIcons/recfolder.png b/icons/default/skinIcons/recfolder.png
new file mode 100644
index 0000000..e3df65b
Binary files /dev/null and b/icons/default/skinIcons/recfolder.png differ
diff --git a/icons/default/skinIcons/recoff.png b/icons/default/skinIcons/recoff.png
new file mode 100644
index 0000000..4f59218
Binary files /dev/null and b/icons/default/skinIcons/recoff.png differ
diff --git a/icons/default/skinIcons/recon.png b/icons/default/skinIcons/recon.png
new file mode 100644
index 0000000..14fe7be
Binary files /dev/null and b/icons/default/skinIcons/recon.png differ
diff --git a/icons/default/skinIcons/recordingcutted.png b/icons/default/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..b90c9c1
Binary files /dev/null and b/icons/default/skinIcons/recordingcutted.png differ
diff --git a/icons/default/skinIcons/recordingdatetime.png b/icons/default/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..c77d1e3
Binary files /dev/null and b/icons/default/skinIcons/recordingdatetime.png differ
diff --git a/icons/default/skinIcons/rew.png b/icons/default/skinIcons/rew.png
new file mode 100644
index 0000000..72408d0
Binary files /dev/null and b/icons/default/skinIcons/rew.png differ
diff --git a/icons/default/skinIcons/rewInactive.png b/icons/default/skinIcons/rewInactive.png
new file mode 100644
index 0000000..ce18386
Binary files /dev/null and b/icons/default/skinIcons/rewInactive.png differ
diff --git a/icons/default/skinIcons/rewx1.png b/icons/default/skinIcons/rewx1.png
new file mode 100644
index 0000000..333c30d
Binary files /dev/null and b/icons/default/skinIcons/rewx1.png differ
diff --git a/icons/default/skinIcons/rewx2.png b/icons/default/skinIcons/rewx2.png
new file mode 100644
index 0000000..c5d1084
Binary files /dev/null and b/icons/default/skinIcons/rewx2.png differ
diff --git a/icons/default/skinIcons/rewx3.png b/icons/default/skinIcons/rewx3.png
new file mode 100644
index 0000000..6ab7a8d
Binary files /dev/null and b/icons/default/skinIcons/rewx3.png differ
diff --git a/icons/default/skinIcons/sd576i.png b/icons/default/skinIcons/sd576i.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/default/skinIcons/sd576i.png differ
diff --git a/icons/default/skinIcons/sd576i_rec.png b/icons/default/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/default/skinIcons/sd576i_rec.png differ
diff --git a/icons/default/skinIcons/stereo.png b/icons/default/skinIcons/stereo.png
new file mode 100644
index 0000000..7f3610d
Binary files /dev/null and b/icons/default/skinIcons/stereo.png differ
diff --git a/icons/default/skinIcons/stereooff.png b/icons/default/skinIcons/stereooff.png
new file mode 100644
index 0000000..569a342
Binary files /dev/null and b/icons/default/skinIcons/stereooff.png differ
diff --git a/icons/default/skinIcons/stereoon.png b/icons/default/skinIcons/stereoon.png
new file mode 100644
index 0000000..eb838b9
Binary files /dev/null and b/icons/default/skinIcons/stereoon.png differ
diff --git a/icons/default/skinIcons/timerActive.png b/icons/default/skinIcons/timerActive.png
new file mode 100644
index 0000000..28c2f81
Binary files /dev/null and b/icons/default/skinIcons/timerActive.png differ
diff --git a/icons/default/skinIcons/timerInactive.png b/icons/default/skinIcons/timerInactive.png
new file mode 100644
index 0000000..c4b1860
Binary files /dev/null and b/icons/default/skinIcons/timerInactive.png differ
diff --git a/icons/default/skinIcons/timerRecording.png b/icons/default/skinIcons/timerRecording.png
new file mode 100644
index 0000000..86dc66b
Binary files /dev/null and b/icons/default/skinIcons/timerRecording.png differ
diff --git a/icons/default/skinIcons/tracks.png b/icons/default/skinIcons/tracks.png
new file mode 100644
index 0000000..1e2547b
Binary files /dev/null and b/icons/default/skinIcons/tracks.png differ
diff --git a/icons/default/skinIcons/txtoff.png b/icons/default/skinIcons/txtoff.png
new file mode 100644
index 0000000..3b2eac3
Binary files /dev/null and b/icons/default/skinIcons/txtoff.png differ
diff --git a/icons/default/skinIcons/txton.png b/icons/default/skinIcons/txton.png
new file mode 100644
index 0000000..148f9ef
Binary files /dev/null and b/icons/default/skinIcons/txton.png differ
diff --git a/icons/default/skinIcons/vdrlogo.png b/icons/default/skinIcons/vdrlogo.png
index 5574685..e168af6 100644
Binary files a/icons/default/skinIcons/vdrlogo.png and b/icons/default/skinIcons/vdrlogo.png differ
diff --git a/icons/extraIcons/Aufname_aktualisieren.png b/icons/extraIcons/Aufnahmen-Liste aktualisieren.png
similarity index 100%
rename from icons/extraIcons/Aufname_aktualisieren.png
rename to icons/extraIcons/Aufnahmen-Liste aktualisieren.png
diff --git a/icons/extraIcons/Rechner_neu_starten.png b/icons/extraIcons/Rechner neu starten.png
similarity index 100%
rename from icons/extraIcons/Rechner_neu_starten.png
rename to icons/extraIcons/Rechner neu starten.png
diff --git a/icons/extraIcons/usb_entfernen.png b/icons/extraIcons/USB Massenspeicher sicher entfernen.png
similarity index 100%
rename from icons/extraIcons/usb_entfernen.png
rename to icons/extraIcons/USB Massenspeicher sicher entfernen.png
diff --git a/icons/extraIcons/VDR_neu_starten.png b/icons/extraIcons/VDR neu starten.png
similarity index 100%
rename from icons/extraIcons/VDR_neu_starten.png
rename to icons/extraIcons/VDR neu starten.png
diff --git a/icons/extraIcons/xbmc.png b/icons/extraIcons/XBMC.png
similarity index 100%
rename from icons/extraIcons/xbmc.png
rename to icons/extraIcons/XBMC.png
diff --git a/icons/extraIcons/xterm.png b/icons/extraIcons/Xterm.png
similarity index 100%
rename from icons/extraIcons/xterm.png
rename to icons/extraIcons/Xterm.png
diff --git a/icons/extraIcons/AudioVideo.png b/icons/extraIcons/audiovideo.png
similarity index 100%
rename from icons/extraIcons/AudioVideo.png
rename to icons/extraIcons/audiovideo.png
diff --git a/icons/green/menuIcons/Commands.png b/icons/green/menuIcons/Commands.png
index 86bf018..e3e0634 100644
Binary files a/icons/green/menuIcons/Commands.png and b/icons/green/menuIcons/Commands.png differ
diff --git a/icons/green/menuIcons/Setup.png b/icons/green/menuIcons/Setup.png
index 0abeda0..0c7be03 100644
Binary files a/icons/green/menuIcons/Setup.png and b/icons/green/menuIcons/Setup.png differ
diff --git a/icons/green/pluginIcons/admin.png b/icons/green/pluginIcons/admin.png
index 6989268..6c251b0 100644
Binary files a/icons/green/pluginIcons/admin.png and b/icons/green/pluginIcons/admin.png differ
diff --git a/icons/green/skinElements/channellogoback.png b/icons/green/skinElements/channellogoback.png
new file mode 100644
index 0000000..6b8f730
Binary files /dev/null and b/icons/green/skinElements/channellogoback.png differ
diff --git a/icons/green/skinIcons/Channelseparator.png b/icons/green/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..5880e58
Binary files /dev/null and b/icons/green/skinIcons/Channelseparator.png differ
diff --git a/icons/green/skinIcons/DiskUsage.png b/icons/green/skinIcons/DiskUsage.png
index 5120eaf..b68eaff 100644
Binary files a/icons/green/skinIcons/DiskUsage.png and b/icons/green/skinIcons/DiskUsage.png differ
diff --git a/icons/green/skinIcons/arrowLeftChannelSep.png b/icons/green/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..9bdcdb4
Binary files /dev/null and b/icons/green/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/green/skinIcons/arrowRightChannelSep.png b/icons/green/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..3c380ba
Binary files /dev/null and b/icons/green/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/green/skinIcons/daydelimiter.png b/icons/green/skinIcons/daydelimiter.png
index cd17d09..4bdf5ed 100644
Binary files a/icons/green/skinIcons/daydelimiter.png and b/icons/green/skinIcons/daydelimiter.png differ
diff --git a/icons/green/skinIcons/fwd.png b/icons/green/skinIcons/fwd.png
index e54ab87..074c6f9 100644
Binary files a/icons/green/skinIcons/fwd.png and b/icons/green/skinIcons/fwd.png differ
diff --git a/icons/green/skinIcons/fwdx1.png b/icons/green/skinIcons/fwdx1.png
new file mode 100644
index 0000000..7cda81f
Binary files /dev/null and b/icons/green/skinIcons/fwdx1.png differ
diff --git a/icons/green/skinIcons/fwdx2.png b/icons/green/skinIcons/fwdx2.png
new file mode 100644
index 0000000..b978ecb
Binary files /dev/null and b/icons/green/skinIcons/fwdx2.png differ
diff --git a/icons/green/skinIcons/fwdx3.png b/icons/green/skinIcons/fwdx3.png
new file mode 100644
index 0000000..a2e9e58
Binary files /dev/null and b/icons/green/skinIcons/fwdx3.png differ
diff --git a/icons/green/skinIcons/pause.png b/icons/green/skinIcons/pause.png
index a3d7b8a..8c62785 100644
Binary files a/icons/green/skinIcons/pause.png and b/icons/green/skinIcons/pause.png differ
diff --git a/icons/green/skinIcons/play.png b/icons/green/skinIcons/play.png
index fcd91c9..487a33c 100644
Binary files a/icons/green/skinIcons/play.png and b/icons/green/skinIcons/play.png differ
diff --git a/icons/green/skinIcons/rew.png b/icons/green/skinIcons/rew.png
index 1983cfe..22f0f4e 100644
Binary files a/icons/green/skinIcons/rew.png and b/icons/green/skinIcons/rew.png differ
diff --git a/icons/green/skinIcons/rewx1.png b/icons/green/skinIcons/rewx1.png
new file mode 100644
index 0000000..b43191f
Binary files /dev/null and b/icons/green/skinIcons/rewx1.png differ
diff --git a/icons/green/skinIcons/rewx2.png b/icons/green/skinIcons/rewx2.png
new file mode 100644
index 0000000..c5d81fc
Binary files /dev/null and b/icons/green/skinIcons/rewx2.png differ
diff --git a/icons/green/skinIcons/rewx3.png b/icons/green/skinIcons/rewx3.png
new file mode 100644
index 0000000..d2631d5
Binary files /dev/null and b/icons/green/skinIcons/rewx3.png differ
diff --git a/icons/green/skinIcons/tracks.png b/icons/green/skinIcons/tracks.png
index 7565c0d..1768cac 100644
Binary files a/icons/green/skinIcons/tracks.png and b/icons/green/skinIcons/tracks.png differ
diff --git a/icons/green/skinIcons/vdrlogo.png b/icons/green/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..0d8ef13
Binary files /dev/null and b/icons/green/skinIcons/vdrlogo.png differ
diff --git a/icons/iceblue/extraIcons/Applikationen.png b/icons/iceblue/extraIcons/Applikationen.png
new file mode 100644
index 0000000..3c7906f
Binary files /dev/null and b/icons/iceblue/extraIcons/Applikationen.png differ
diff --git a/icons/iceblue/extraIcons/Audio.png b/icons/iceblue/extraIcons/Audio.png
new file mode 100644
index 0000000..98948ef
Binary files /dev/null and b/icons/iceblue/extraIcons/Audio.png differ
diff --git a/icons/iceblue/extraIcons/Aufnahmen-Liste aktualisieren.png b/icons/iceblue/extraIcons/Aufnahmen-Liste aktualisieren.png
new file mode 100644
index 0000000..3c66fb8
Binary files /dev/null and b/icons/iceblue/extraIcons/Aufnahmen-Liste aktualisieren.png differ
diff --git a/icons/iceblue/extraIcons/Dienstprogramme.png b/icons/iceblue/extraIcons/Dienstprogramme.png
new file mode 100644
index 0000000..aa9dd6e
Binary files /dev/null and b/icons/iceblue/extraIcons/Dienstprogramme.png differ
diff --git a/icons/iceblue/extraIcons/FireFox.png b/icons/iceblue/extraIcons/FireFox.png
new file mode 100644
index 0000000..1f2077d
Binary files /dev/null and b/icons/iceblue/extraIcons/FireFox.png differ
diff --git a/icons/iceblue/extraIcons/Info.png b/icons/iceblue/extraIcons/Info.png
new file mode 100644
index 0000000..491fa45
Binary files /dev/null and b/icons/iceblue/extraIcons/Info.png differ
diff --git a/icons/iceblue/extraIcons/Internet.png b/icons/iceblue/extraIcons/Internet.png
new file mode 100644
index 0000000..30574a9
Binary files /dev/null and b/icons/iceblue/extraIcons/Internet.png differ
diff --git a/icons/iceblue/extraIcons/Medien.png b/icons/iceblue/extraIcons/Medien.png
new file mode 100644
index 0000000..c5810bf
Binary files /dev/null and b/icons/iceblue/extraIcons/Medien.png differ
diff --git a/icons/iceblue/extraIcons/Rechner neu starten.png b/icons/iceblue/extraIcons/Rechner neu starten.png
new file mode 100644
index 0000000..fe51064
Binary files /dev/null and b/icons/iceblue/extraIcons/Rechner neu starten.png differ
diff --git a/icons/iceblue/extraIcons/Remote wakeup.png b/icons/iceblue/extraIcons/Remote wakeup.png
new file mode 100644
index 0000000..ee042d8
Binary files /dev/null and b/icons/iceblue/extraIcons/Remote wakeup.png differ
diff --git a/icons/iceblue/extraIcons/Spiele.png b/icons/iceblue/extraIcons/Spiele.png
new file mode 100644
index 0000000..2deb76b
Binary files /dev/null and b/icons/iceblue/extraIcons/Spiele.png differ
diff --git a/icons/iceblue/extraIcons/System herunterfahren.png b/icons/iceblue/extraIcons/System herunterfahren.png
new file mode 100644
index 0000000..b3ff3a4
Binary files /dev/null and b/icons/iceblue/extraIcons/System herunterfahren.png differ
diff --git a/icons/iceblue/extraIcons/System.png b/icons/iceblue/extraIcons/System.png
new file mode 100644
index 0000000..69d8cb1
Binary files /dev/null and b/icons/iceblue/extraIcons/System.png differ
diff --git a/icons/iceblue/extraIcons/Tools.png b/icons/iceblue/extraIcons/Tools.png
new file mode 100644
index 0000000..cc51154
Binary files /dev/null and b/icons/iceblue/extraIcons/Tools.png differ
diff --git a/icons/iceblue/extraIcons/Tunderbird.png b/icons/iceblue/extraIcons/Tunderbird.png
new file mode 100644
index 0000000..38b85af
Binary files /dev/null and b/icons/iceblue/extraIcons/Tunderbird.png differ
diff --git a/icons/iceblue/extraIcons/USB Massenspeicher sicher entfernen.png b/icons/iceblue/extraIcons/USB Massenspeicher sicher entfernen.png
new file mode 100644
index 0000000..7918b84
Binary files /dev/null and b/icons/iceblue/extraIcons/USB Massenspeicher sicher entfernen.png differ
diff --git a/icons/iceblue/extraIcons/VDR neu starten.png b/icons/iceblue/extraIcons/VDR neu starten.png
new file mode 100644
index 0000000..c976ff0
Binary files /dev/null and b/icons/iceblue/extraIcons/VDR neu starten.png differ
diff --git a/icons/iceblue/extraIcons/Video.png b/icons/iceblue/extraIcons/Video.png
new file mode 100644
index 0000000..84231f8
Binary files /dev/null and b/icons/iceblue/extraIcons/Video.png differ
diff --git a/icons/iceblue/extraIcons/Web.png b/icons/iceblue/extraIcons/Web.png
new file mode 100644
index 0000000..b526462
Binary files /dev/null and b/icons/iceblue/extraIcons/Web.png differ
diff --git a/icons/iceblue/extraIcons/XBMC.png b/icons/iceblue/extraIcons/XBMC.png
new file mode 100644
index 0000000..f66ab33
Binary files /dev/null and b/icons/iceblue/extraIcons/XBMC.png differ
diff --git a/icons/iceblue/extraIcons/Xterm.png b/icons/iceblue/extraIcons/Xterm.png
new file mode 100644
index 0000000..9f08a1b
Binary files /dev/null and b/icons/iceblue/extraIcons/Xterm.png differ
diff --git a/icons/iceblue/extraIcons/audiovideo.png b/icons/iceblue/extraIcons/audiovideo.png
new file mode 100644
index 0000000..c70ff4b
Binary files /dev/null and b/icons/iceblue/extraIcons/audiovideo.png differ
diff --git a/icons/iceblue/extraIcons/markad_status.png b/icons/iceblue/extraIcons/markad_status.png
new file mode 100644
index 0000000..bd5b56b
Binary files /dev/null and b/icons/iceblue/extraIcons/markad_status.png differ
diff --git a/icons/iceblue/extraIcons/schneiden_abbrechen.png b/icons/iceblue/extraIcons/schneiden_abbrechen.png
new file mode 100644
index 0000000..00332e2
Binary files /dev/null and b/icons/iceblue/extraIcons/schneiden_abbrechen.png differ
diff --git a/icons/iceblue/extraIcons/tux.png b/icons/iceblue/extraIcons/tux.png
new file mode 100644
index 0000000..ca5da03
Binary files /dev/null and b/icons/iceblue/extraIcons/tux.png differ
diff --git a/icons/iceblue/extraIcons/usb.png b/icons/iceblue/extraIcons/usb.png
new file mode 100644
index 0000000..7d46df6
Binary files /dev/null and b/icons/iceblue/extraIcons/usb.png differ
diff --git a/icons/iceblue/extraIcons/vdrlogo.png b/icons/iceblue/extraIcons/vdrlogo.png
new file mode 100644
index 0000000..8aa4ee8
Binary files /dev/null and b/icons/iceblue/extraIcons/vdrlogo.png differ
diff --git a/icons/iceblue/extraIcons/yaicon_blue.png b/icons/iceblue/extraIcons/yaicon_blue.png
new file mode 100644
index 0000000..4a2e53d
Binary files /dev/null and b/icons/iceblue/extraIcons/yaicon_blue.png differ
diff --git a/icons/iceblue/menuIcons/CAM.png b/icons/iceblue/menuIcons/CAM.png
new file mode 100644
index 0000000..4085804
Binary files /dev/null and b/icons/iceblue/menuIcons/CAM.png differ
diff --git a/icons/iceblue/menuIcons/Channels.png b/icons/iceblue/menuIcons/Channels.png
new file mode 100644
index 0000000..73b0019
Binary files /dev/null and b/icons/iceblue/menuIcons/Channels.png differ
diff --git a/icons/iceblue/menuIcons/Commands.png b/icons/iceblue/menuIcons/Commands.png
new file mode 100644
index 0000000..6bc3910
Binary files /dev/null and b/icons/iceblue/menuIcons/Commands.png differ
diff --git a/icons/iceblue/menuIcons/DVB.png b/icons/iceblue/menuIcons/DVB.png
new file mode 100644
index 0000000..8fd612a
Binary files /dev/null and b/icons/iceblue/menuIcons/DVB.png differ
diff --git a/icons/iceblue/menuIcons/EPG.png b/icons/iceblue/menuIcons/EPG.png
new file mode 100644
index 0000000..f1e9718
Binary files /dev/null and b/icons/iceblue/menuIcons/EPG.png differ
diff --git a/icons/iceblue/menuIcons/LNB.png b/icons/iceblue/menuIcons/LNB.png
new file mode 100644
index 0000000..b5ea15e
Binary files /dev/null and b/icons/iceblue/menuIcons/LNB.png differ
diff --git a/icons/iceblue/menuIcons/Miscellaneous.png b/icons/iceblue/menuIcons/Miscellaneous.png
new file mode 100644
index 0000000..52024d5
Binary files /dev/null and b/icons/iceblue/menuIcons/Miscellaneous.png differ
diff --git a/icons/iceblue/menuIcons/OSD.png b/icons/iceblue/menuIcons/OSD.png
new file mode 100644
index 0000000..3f91cfa
Binary files /dev/null and b/icons/iceblue/menuIcons/OSD.png differ
diff --git a/icons/iceblue/menuIcons/Plugins.png b/icons/iceblue/menuIcons/Plugins.png
new file mode 100644
index 0000000..0239f97
Binary files /dev/null and b/icons/iceblue/menuIcons/Plugins.png differ
diff --git a/icons/iceblue/menuIcons/Recording.png b/icons/iceblue/menuIcons/Recording.png
new file mode 100644
index 0000000..6511a0c
Binary files /dev/null and b/icons/iceblue/menuIcons/Recording.png differ
diff --git a/icons/iceblue/menuIcons/Recordings.png b/icons/iceblue/menuIcons/Recordings.png
new file mode 100644
index 0000000..2c95182
Binary files /dev/null and b/icons/iceblue/menuIcons/Recordings.png differ
diff --git a/icons/iceblue/menuIcons/Replay.png b/icons/iceblue/menuIcons/Replay.png
new file mode 100644
index 0000000..c667b40
Binary files /dev/null and b/icons/iceblue/menuIcons/Replay.png differ
diff --git a/icons/iceblue/menuIcons/Restart.png b/icons/iceblue/menuIcons/Restart.png
new file mode 100644
index 0000000..fe51064
Binary files /dev/null and b/icons/iceblue/menuIcons/Restart.png differ
diff --git a/icons/iceblue/menuIcons/Schedule.png b/icons/iceblue/menuIcons/Schedule.png
new file mode 100644
index 0000000..47e21de
Binary files /dev/null and b/icons/iceblue/menuIcons/Schedule.png differ
diff --git a/icons/iceblue/menuIcons/Setup.png b/icons/iceblue/menuIcons/Setup.png
new file mode 100644
index 0000000..69d8cb1
Binary files /dev/null and b/icons/iceblue/menuIcons/Setup.png differ
diff --git a/icons/iceblue/menuIcons/StopRecording.png b/icons/iceblue/menuIcons/StopRecording.png
new file mode 100644
index 0000000..7d04b0f
Binary files /dev/null and b/icons/iceblue/menuIcons/StopRecording.png differ
diff --git a/icons/iceblue/menuIcons/StopReplay.png b/icons/iceblue/menuIcons/StopReplay.png
new file mode 100644
index 0000000..1887be7
Binary files /dev/null and b/icons/iceblue/menuIcons/StopReplay.png differ
diff --git a/icons/iceblue/menuIcons/Timers.png b/icons/iceblue/menuIcons/Timers.png
new file mode 100644
index 0000000..d5ac0f0
Binary files /dev/null and b/icons/iceblue/menuIcons/Timers.png differ
diff --git a/icons/iceblue/pluginIcons/arghdirector.png b/icons/iceblue/pluginIcons/arghdirector.png
new file mode 100644
index 0000000..9f16505
Binary files /dev/null and b/icons/iceblue/pluginIcons/arghdirector.png differ
diff --git a/icons/iceblue/pluginIcons/autostart.png b/icons/iceblue/pluginIcons/autostart.png
new file mode 100644
index 0000000..a9abe13
Binary files /dev/null and b/icons/iceblue/pluginIcons/autostart.png differ
diff --git a/icons/iceblue/pluginIcons/avahi4vdr.png b/icons/iceblue/pluginIcons/avahi4vdr.png
new file mode 100644
index 0000000..2a3f94b
Binary files /dev/null and b/icons/iceblue/pluginIcons/avahi4vdr.png differ
diff --git a/icons/iceblue/pluginIcons/avards.png b/icons/iceblue/pluginIcons/avards.png
new file mode 100644
index 0000000..e71677d
Binary files /dev/null and b/icons/iceblue/pluginIcons/avards.png differ
diff --git a/icons/iceblue/pluginIcons/block.png b/icons/iceblue/pluginIcons/block.png
new file mode 100644
index 0000000..161a6b0
Binary files /dev/null and b/icons/iceblue/pluginIcons/block.png differ
diff --git a/icons/iceblue/pluginIcons/burn.png b/icons/iceblue/pluginIcons/burn.png
new file mode 100644
index 0000000..5f2df0c
Binary files /dev/null and b/icons/iceblue/pluginIcons/burn.png differ
diff --git a/icons/iceblue/pluginIcons/cdplayer.png b/icons/iceblue/pluginIcons/cdplayer.png
new file mode 100644
index 0000000..571cfe2
Binary files /dev/null and b/icons/iceblue/pluginIcons/cdplayer.png differ
diff --git a/icons/iceblue/pluginIcons/chanman.png b/icons/iceblue/pluginIcons/chanman.png
new file mode 100644
index 0000000..6eb08c2
Binary files /dev/null and b/icons/iceblue/pluginIcons/chanman.png differ
diff --git a/icons/iceblue/pluginIcons/check.png b/icons/iceblue/pluginIcons/check.png
new file mode 100644
index 0000000..7c6253e
Binary files /dev/null and b/icons/iceblue/pluginIcons/check.png differ
diff --git a/icons/iceblue/pluginIcons/conflictcheckonly.png b/icons/iceblue/pluginIcons/conflictcheckonly.png
new file mode 100644
index 0000000..00a2a01
Binary files /dev/null and b/icons/iceblue/pluginIcons/conflictcheckonly.png differ
diff --git a/icons/iceblue/pluginIcons/ddci.png b/icons/iceblue/pluginIcons/ddci.png
new file mode 100644
index 0000000..a60c265
Binary files /dev/null and b/icons/iceblue/pluginIcons/ddci.png differ
diff --git a/icons/iceblue/pluginIcons/devstatus.png b/icons/iceblue/pluginIcons/devstatus.png
new file mode 100644
index 0000000..3c70b21
Binary files /dev/null and b/icons/iceblue/pluginIcons/devstatus.png differ
diff --git a/icons/iceblue/pluginIcons/ding1.png b/icons/iceblue/pluginIcons/ding1.png
new file mode 100644
index 0000000..c432228
Binary files /dev/null and b/icons/iceblue/pluginIcons/ding1.png differ
diff --git a/icons/iceblue/pluginIcons/dummydevice.png b/icons/iceblue/pluginIcons/dummydevice.png
new file mode 100644
index 0000000..c29a2e1
Binary files /dev/null and b/icons/iceblue/pluginIcons/dummydevice.png differ
diff --git a/icons/iceblue/pluginIcons/duplicates.png b/icons/iceblue/pluginIcons/duplicates.png
new file mode 100644
index 0000000..e0e2066
Binary files /dev/null and b/icons/iceblue/pluginIcons/duplicates.png differ
diff --git a/icons/iceblue/pluginIcons/dvbhddevice.png b/icons/iceblue/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..f203ba5
Binary files /dev/null and b/icons/iceblue/pluginIcons/dvbhddevice.png differ
diff --git a/icons/iceblue/pluginIcons/dvbsddevice.png b/icons/iceblue/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..b0f8c65
Binary files /dev/null and b/icons/iceblue/pluginIcons/dvbsddevice.png differ
diff --git a/icons/iceblue/pluginIcons/dynamite.png b/icons/iceblue/pluginIcons/dynamite.png
new file mode 100644
index 0000000..45daade
Binary files /dev/null and b/icons/iceblue/pluginIcons/dynamite.png differ
diff --git a/icons/iceblue/pluginIcons/eepg.png b/icons/iceblue/pluginIcons/eepg.png
new file mode 100644
index 0000000..cd811b2
Binary files /dev/null and b/icons/iceblue/pluginIcons/eepg.png differ
diff --git a/icons/iceblue/pluginIcons/epgsearch.png b/icons/iceblue/pluginIcons/epgsearch.png
new file mode 100644
index 0000000..5c94368
Binary files /dev/null and b/icons/iceblue/pluginIcons/epgsearch.png differ
diff --git a/icons/iceblue/pluginIcons/epgsearchonly.png b/icons/iceblue/pluginIcons/epgsearchonly.png
new file mode 100644
index 0000000..de643ad
Binary files /dev/null and b/icons/iceblue/pluginIcons/epgsearchonly.png differ
diff --git a/icons/iceblue/pluginIcons/epgsync.png b/icons/iceblue/pluginIcons/epgsync.png
new file mode 100644
index 0000000..410940e
Binary files /dev/null and b/icons/iceblue/pluginIcons/epgsync.png differ
diff --git a/icons/iceblue/pluginIcons/externalplayer.png b/icons/iceblue/pluginIcons/externalplayer.png
new file mode 100644
index 0000000..249a22b
Binary files /dev/null and b/icons/iceblue/pluginIcons/externalplayer.png differ
diff --git a/icons/iceblue/pluginIcons/extrecmenu.png b/icons/iceblue/pluginIcons/extrecmenu.png
new file mode 100644
index 0000000..97dd5fd
Binary files /dev/null and b/icons/iceblue/pluginIcons/extrecmenu.png differ
diff --git a/icons/iceblue/pluginIcons/favorites.png b/icons/iceblue/pluginIcons/favorites.png
new file mode 100644
index 0000000..0a0f400
Binary files /dev/null and b/icons/iceblue/pluginIcons/favorites.png differ
diff --git a/icons/iceblue/pluginIcons/femon.png b/icons/iceblue/pluginIcons/femon.png
new file mode 100644
index 0000000..1663296
Binary files /dev/null and b/icons/iceblue/pluginIcons/femon.png differ
diff --git a/icons/iceblue/pluginIcons/fepg.png b/icons/iceblue/pluginIcons/fepg.png
new file mode 100644
index 0000000..c1276c4
Binary files /dev/null and b/icons/iceblue/pluginIcons/fepg.png differ
diff --git a/icons/iceblue/pluginIcons/filebrowser.png b/icons/iceblue/pluginIcons/filebrowser.png
new file mode 100644
index 0000000..caf2a97
Binary files /dev/null and b/icons/iceblue/pluginIcons/filebrowser.png differ
diff --git a/icons/iceblue/pluginIcons/fritzbox.png b/icons/iceblue/pluginIcons/fritzbox.png
new file mode 100644
index 0000000..6cf7413
Binary files /dev/null and b/icons/iceblue/pluginIcons/fritzbox.png differ
diff --git a/icons/iceblue/pluginIcons/graphlcd.png b/icons/iceblue/pluginIcons/graphlcd.png
new file mode 100644
index 0000000..781091f
Binary files /dev/null and b/icons/iceblue/pluginIcons/graphlcd.png differ
diff --git a/icons/iceblue/pluginIcons/graphtft.png b/icons/iceblue/pluginIcons/graphtft.png
new file mode 100644
index 0000000..67f877f
Binary files /dev/null and b/icons/iceblue/pluginIcons/graphtft.png differ
diff --git a/icons/iceblue/pluginIcons/image.png b/icons/iceblue/pluginIcons/image.png
new file mode 100644
index 0000000..06d37e9
Binary files /dev/null and b/icons/iceblue/pluginIcons/image.png differ
diff --git a/icons/iceblue/pluginIcons/imonlcd.png b/icons/iceblue/pluginIcons/imonlcd.png
new file mode 100644
index 0000000..7b30f53
Binary files /dev/null and b/icons/iceblue/pluginIcons/imonlcd.png differ
diff --git a/icons/iceblue/pluginIcons/iptv.png b/icons/iceblue/pluginIcons/iptv.png
new file mode 100644
index 0000000..d923a9d
Binary files /dev/null and b/icons/iceblue/pluginIcons/iptv.png differ
diff --git a/icons/iceblue/pluginIcons/lcdproc.png b/icons/iceblue/pluginIcons/lcdproc.png
new file mode 100644
index 0000000..47e21de
Binary files /dev/null and b/icons/iceblue/pluginIcons/lcdproc.png differ
diff --git a/icons/iceblue/pluginIcons/mailbox.png b/icons/iceblue/pluginIcons/mailbox.png
new file mode 100644
index 0000000..a44746d
Binary files /dev/null and b/icons/iceblue/pluginIcons/mailbox.png differ
diff --git a/icons/iceblue/pluginIcons/markad.png b/icons/iceblue/pluginIcons/markad.png
new file mode 100644
index 0000000..bd5b56b
Binary files /dev/null and b/icons/iceblue/pluginIcons/markad.png differ
diff --git a/icons/iceblue/pluginIcons/mlist.png b/icons/iceblue/pluginIcons/mlist.png
new file mode 100644
index 0000000..1a6278f
Binary files /dev/null and b/icons/iceblue/pluginIcons/mlist.png differ
diff --git a/icons/iceblue/pluginIcons/music.png b/icons/iceblue/pluginIcons/music.png
new file mode 100644
index 0000000..a5f100b
Binary files /dev/null and b/icons/iceblue/pluginIcons/music.png differ
diff --git a/icons/iceblue/pluginIcons/noepg3.png b/icons/iceblue/pluginIcons/noepg3.png
new file mode 100644
index 0000000..75d5c8c
Binary files /dev/null and b/icons/iceblue/pluginIcons/noepg3.png differ
diff --git a/icons/iceblue/pluginIcons/osdteletext.png b/icons/iceblue/pluginIcons/osdteletext.png
new file mode 100644
index 0000000..b21465a
Binary files /dev/null and b/icons/iceblue/pluginIcons/osdteletext.png differ
diff --git a/icons/iceblue/pluginIcons/pvrinput.png b/icons/iceblue/pluginIcons/pvrinput.png
new file mode 100644
index 0000000..89aec34
Binary files /dev/null and b/icons/iceblue/pluginIcons/pvrinput.png differ
diff --git a/icons/iceblue/pluginIcons/quickepgsearch.png b/icons/iceblue/pluginIcons/quickepgsearch.png
new file mode 100644
index 0000000..99d5d32
Binary files /dev/null and b/icons/iceblue/pluginIcons/quickepgsearch.png differ
diff --git a/icons/iceblue/pluginIcons/radio.png b/icons/iceblue/pluginIcons/radio.png
new file mode 100644
index 0000000..fa91c9b
Binary files /dev/null and b/icons/iceblue/pluginIcons/radio.png differ
diff --git a/icons/iceblue/pluginIcons/remote.png b/icons/iceblue/pluginIcons/remote.png
new file mode 100644
index 0000000..68368b4
Binary files /dev/null and b/icons/iceblue/pluginIcons/remote.png differ
diff --git a/icons/iceblue/pluginIcons/remotetimers.png b/icons/iceblue/pluginIcons/remotetimers.png
new file mode 100644
index 0000000..48cde95
Binary files /dev/null and b/icons/iceblue/pluginIcons/remotetimers.png differ
diff --git a/icons/iceblue/pluginIcons/rssreader.png b/icons/iceblue/pluginIcons/rssreader.png
new file mode 100644
index 0000000..efde03f
Binary files /dev/null and b/icons/iceblue/pluginIcons/rssreader.png differ
diff --git a/icons/iceblue/pluginIcons/sc.png b/icons/iceblue/pluginIcons/sc.png
new file mode 100644
index 0000000..2565498
Binary files /dev/null and b/icons/iceblue/pluginIcons/sc.png differ
diff --git a/icons/iceblue/pluginIcons/screenshot.png b/icons/iceblue/pluginIcons/screenshot.png
new file mode 100644
index 0000000..67da61e
Binary files /dev/null and b/icons/iceblue/pluginIcons/screenshot.png differ
diff --git a/icons/iceblue/pluginIcons/seduatmo.png b/icons/iceblue/pluginIcons/seduatmo.png
new file mode 100644
index 0000000..d9f3640
Binary files /dev/null and b/icons/iceblue/pluginIcons/seduatmo.png differ
diff --git a/icons/iceblue/pluginIcons/skyselect.png b/icons/iceblue/pluginIcons/skyselect.png
new file mode 100644
index 0000000..4f106cd
Binary files /dev/null and b/icons/iceblue/pluginIcons/skyselect.png differ
diff --git a/icons/iceblue/pluginIcons/sleeptimer.png b/icons/iceblue/pluginIcons/sleeptimer.png
new file mode 100644
index 0000000..e77a565
Binary files /dev/null and b/icons/iceblue/pluginIcons/sleeptimer.png differ
diff --git a/icons/iceblue/pluginIcons/softhddevice.png b/icons/iceblue/pluginIcons/softhddevice.png
new file mode 100644
index 0000000..f1de4df
Binary files /dev/null and b/icons/iceblue/pluginIcons/softhddevice.png differ
diff --git a/icons/iceblue/pluginIcons/streamdev-server.png b/icons/iceblue/pluginIcons/streamdev-server.png
new file mode 100644
index 0000000..430ec58
Binary files /dev/null and b/icons/iceblue/pluginIcons/streamdev-server.png differ
diff --git a/icons/iceblue/pluginIcons/systeminfo.png b/icons/iceblue/pluginIcons/systeminfo.png
new file mode 100644
index 0000000..ea3c0c7
Binary files /dev/null and b/icons/iceblue/pluginIcons/systeminfo.png differ
diff --git a/icons/iceblue/pluginIcons/targavfd.png b/icons/iceblue/pluginIcons/targavfd.png
new file mode 100644
index 0000000..34757d1
Binary files /dev/null and b/icons/iceblue/pluginIcons/targavfd.png differ
diff --git a/icons/iceblue/pluginIcons/trayopenng.png b/icons/iceblue/pluginIcons/trayopenng.png
new file mode 100644
index 0000000..e39fd61
Binary files /dev/null and b/icons/iceblue/pluginIcons/trayopenng.png differ
diff --git a/icons/iceblue/pluginIcons/tvguide.png b/icons/iceblue/pluginIcons/tvguide.png
new file mode 100644
index 0000000..7a2cee7
Binary files /dev/null and b/icons/iceblue/pluginIcons/tvguide.png differ
diff --git a/icons/iceblue/pluginIcons/tvm2vdr.png b/icons/iceblue/pluginIcons/tvm2vdr.png
new file mode 100644
index 0000000..1e3c81c
Binary files /dev/null and b/icons/iceblue/pluginIcons/tvm2vdr.png differ
diff --git a/icons/iceblue/pluginIcons/undelete.png b/icons/iceblue/pluginIcons/undelete.png
new file mode 100644
index 0000000..31947b5
Binary files /dev/null and b/icons/iceblue/pluginIcons/undelete.png differ
diff --git a/icons/iceblue/pluginIcons/weatherng.png b/icons/iceblue/pluginIcons/weatherng.png
new file mode 100644
index 0000000..53dc882
Binary files /dev/null and b/icons/iceblue/pluginIcons/weatherng.png differ
diff --git a/icons/iceblue/pluginIcons/xml2vdr.png b/icons/iceblue/pluginIcons/xml2vdr.png
new file mode 100644
index 0000000..1f604e4
Binary files /dev/null and b/icons/iceblue/pluginIcons/xml2vdr.png differ
diff --git a/icons/iceblue/skinIcons/Channelseparator.png b/icons/iceblue/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..22183c1
Binary files /dev/null and b/icons/iceblue/skinIcons/Channelseparator.png differ
diff --git a/icons/iceblue/skinIcons/DiskUsage.png b/icons/iceblue/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..7aaec7e
Binary files /dev/null and b/icons/iceblue/skinIcons/DiskUsage.png differ
diff --git a/icons/iceblue/skinIcons/ac3.png b/icons/iceblue/skinIcons/ac3.png
new file mode 100644
index 0000000..adbef68
Binary files /dev/null and b/icons/iceblue/skinIcons/ac3.png differ
diff --git a/icons/iceblue/skinIcons/activetimer.png b/icons/iceblue/skinIcons/activetimer.png
new file mode 100644
index 0000000..8ba66f7
Binary files /dev/null and b/icons/iceblue/skinIcons/activetimer.png differ
diff --git a/icons/iceblue/skinIcons/activetimersmall.png b/icons/iceblue/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..3cac59f
Binary files /dev/null and b/icons/iceblue/skinIcons/activetimersmall.png differ
diff --git a/icons/darkred/skinIcons/channelsymbols.png b/icons/iceblue/skinIcons/channelsymbols.png
similarity index 100%
copy from icons/darkred/skinIcons/channelsymbols.png
copy to icons/iceblue/skinIcons/channelsymbols.png
diff --git a/icons/iceblue/skinIcons/daydelimiter.png b/icons/iceblue/skinIcons/daydelimiter.png
new file mode 100644
index 0000000..a8a4712
Binary files /dev/null and b/icons/iceblue/skinIcons/daydelimiter.png differ
diff --git a/icons/iceblue/skinIcons/encrypted.png b/icons/iceblue/skinIcons/encrypted.png
new file mode 100644
index 0000000..bc93794
Binary files /dev/null and b/icons/iceblue/skinIcons/encrypted.png differ
diff --git a/icons/skinIcons/fwd.png b/icons/iceblue/skinIcons/fwd.png
similarity index 77%
copy from icons/skinIcons/fwd.png
copy to icons/iceblue/skinIcons/fwd.png
index 13b4751..7d0eb16 100644
Binary files a/icons/skinIcons/fwd.png and b/icons/iceblue/skinIcons/fwd.png differ
diff --git a/icons/iceblue/skinIcons/fwdInactive.png b/icons/iceblue/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..728b059
Binary files /dev/null and b/icons/iceblue/skinIcons/fwdInactive.png differ
diff --git a/icons/iceblue/skinIcons/newrecording.png b/icons/iceblue/skinIcons/newrecording.png
new file mode 100644
index 0000000..e7cf8cf
Binary files /dev/null and b/icons/iceblue/skinIcons/newrecording.png differ
diff --git a/icons/skinIcons/pause.png b/icons/iceblue/skinIcons/pause.png
similarity index 75%
copy from icons/skinIcons/pause.png
copy to icons/iceblue/skinIcons/pause.png
index e6577cf..9188b6b 100644
Binary files a/icons/skinIcons/pause.png and b/icons/iceblue/skinIcons/pause.png differ
diff --git a/icons/iceblue/skinIcons/pauseInactive.png b/icons/iceblue/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..3798a93
Binary files /dev/null and b/icons/iceblue/skinIcons/pauseInactive.png differ
diff --git a/icons/skinIcons/play.png b/icons/iceblue/skinIcons/play.png
similarity index 80%
copy from icons/skinIcons/play.png
copy to icons/iceblue/skinIcons/play.png
index b0c8a18..0a94023 100644
Binary files a/icons/skinIcons/play.png and b/icons/iceblue/skinIcons/play.png differ
diff --git a/icons/iceblue/skinIcons/playInactive.png b/icons/iceblue/skinIcons/playInactive.png
new file mode 100644
index 0000000..e7fe2c7
Binary files /dev/null and b/icons/iceblue/skinIcons/playInactive.png differ
diff --git a/icons/iceblue/skinIcons/recordingcutted.png b/icons/iceblue/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..f23d185
Binary files /dev/null and b/icons/iceblue/skinIcons/recordingcutted.png differ
diff --git a/icons/iceblue/skinIcons/recordingdatetime.png b/icons/iceblue/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..25b8e93
Binary files /dev/null and b/icons/iceblue/skinIcons/recordingdatetime.png differ
diff --git a/icons/iceblue/skinIcons/recordingfolder.png b/icons/iceblue/skinIcons/recordingfolder.png
new file mode 100644
index 0000000..f952c4b
Binary files /dev/null and b/icons/iceblue/skinIcons/recordingfolder.png differ
diff --git a/icons/skinIcons/rew.png b/icons/iceblue/skinIcons/rew.png
similarity index 82%
copy from icons/skinIcons/rew.png
copy to icons/iceblue/skinIcons/rew.png
index 7055823..6728d07 100644
Binary files a/icons/skinIcons/rew.png and b/icons/iceblue/skinIcons/rew.png differ
diff --git a/icons/iceblue/skinIcons/rewInactive.png b/icons/iceblue/skinIcons/rewInactive.png
new file mode 100644
index 0000000..7fd8cd2
Binary files /dev/null and b/icons/iceblue/skinIcons/rewInactive.png differ
diff --git a/icons/iceblue/skinIcons/signal.png b/icons/iceblue/skinIcons/signal.png
new file mode 100644
index 0000000..4f03c7a
Binary files /dev/null and b/icons/iceblue/skinIcons/signal.png differ
diff --git a/icons/iceblue/skinIcons/stereo.png b/icons/iceblue/skinIcons/stereo.png
new file mode 100644
index 0000000..9f3b3e5
Binary files /dev/null and b/icons/iceblue/skinIcons/stereo.png differ
diff --git a/icons/iceblue/skinIcons/timerActive.png b/icons/iceblue/skinIcons/timerActive.png
new file mode 100644
index 0000000..ec30010
Binary files /dev/null and b/icons/iceblue/skinIcons/timerActive.png differ
diff --git a/icons/iceblue/skinIcons/timerInactive.png b/icons/iceblue/skinIcons/timerInactive.png
new file mode 100644
index 0000000..3630d29
Binary files /dev/null and b/icons/iceblue/skinIcons/timerInactive.png differ
diff --git a/icons/skinIcons/timerRecording.png b/icons/iceblue/skinIcons/timerRecording.png
similarity index 93%
copy from icons/skinIcons/timerRecording.png
copy to icons/iceblue/skinIcons/timerRecording.png
index 3f253fb..dd1b062 100644
Binary files a/icons/skinIcons/timerRecording.png and b/icons/iceblue/skinIcons/timerRecording.png differ
diff --git a/icons/iceblue/skinIcons/tracks.png b/icons/iceblue/skinIcons/tracks.png
new file mode 100644
index 0000000..d8f1960
Binary files /dev/null and b/icons/iceblue/skinIcons/tracks.png differ
diff --git a/icons/iceblue/skinIcons/vdrlogo.png b/icons/iceblue/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..99a6365
Binary files /dev/null and b/icons/iceblue/skinIcons/vdrlogo.png differ
diff --git a/icons/iceblue/skinIcons/yavdrlogo.png b/icons/iceblue/skinIcons/yavdrlogo.png
new file mode 100644
index 0000000..81a830a
Binary files /dev/null and b/icons/iceblue/skinIcons/yavdrlogo.png differ
diff --git a/icons/light/menuIcons/Channels.png b/icons/light/menuIcons/Channels.png
new file mode 100644
index 0000000..a66188b
Binary files /dev/null and b/icons/light/menuIcons/Channels.png differ
diff --git a/icons/light/menuIcons/Commands.png b/icons/light/menuIcons/Commands.png
new file mode 100644
index 0000000..1108e3c
Binary files /dev/null and b/icons/light/menuIcons/Commands.png differ
diff --git a/icons/light/menuIcons/Recordings.png b/icons/light/menuIcons/Recordings.png
new file mode 100644
index 0000000..c9c3265
Binary files /dev/null and b/icons/light/menuIcons/Recordings.png differ
diff --git a/icons/light/menuIcons/Schedule.png b/icons/light/menuIcons/Schedule.png
new file mode 100644
index 0000000..5f4d619
Binary files /dev/null and b/icons/light/menuIcons/Schedule.png differ
diff --git a/icons/light/menuIcons/Setup.png b/icons/light/menuIcons/Setup.png
new file mode 100644
index 0000000..a82e5c7
Binary files /dev/null and b/icons/light/menuIcons/Setup.png differ
diff --git a/icons/light/menuIcons/Timers.png b/icons/light/menuIcons/Timers.png
new file mode 100644
index 0000000..7358106
Binary files /dev/null and b/icons/light/menuIcons/Timers.png differ
diff --git a/icons/light/skinIcons/Channelseparator.png b/icons/light/skinIcons/Channelseparator.png
new file mode 100644
index 0000000..fd215a2
Binary files /dev/null and b/icons/light/skinIcons/Channelseparator.png differ
diff --git a/icons/light/skinIcons/DiskUsage.png b/icons/light/skinIcons/DiskUsage.png
new file mode 100644
index 0000000..9b8cc8d
Binary files /dev/null and b/icons/light/skinIcons/DiskUsage.png differ
diff --git a/icons/light/skinIcons/ac3.png b/icons/light/skinIcons/ac3.png
new file mode 100644
index 0000000..f59e6b3
Binary files /dev/null and b/icons/light/skinIcons/ac3.png differ
diff --git a/icons/light/skinIcons/activetimer.png b/icons/light/skinIcons/activetimer.png
new file mode 100644
index 0000000..e944b00
Binary files /dev/null and b/icons/light/skinIcons/activetimer.png differ
diff --git a/icons/light/skinIcons/activetimersmall.png b/icons/light/skinIcons/activetimersmall.png
new file mode 100644
index 0000000..138ff35
Binary files /dev/null and b/icons/light/skinIcons/activetimersmall.png differ
diff --git a/icons/light/skinIcons/arrowLeftChannelSep.png b/icons/light/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..5f3ccd4
Binary files /dev/null and b/icons/light/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/light/skinIcons/arrowRightChannelSep.png b/icons/light/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..8c77fe4
Binary files /dev/null and b/icons/light/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/light/skinIcons/channeldelimiter.png b/icons/light/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..2580189
Binary files /dev/null and b/icons/light/skinIcons/channeldelimiter.png differ
diff --git a/icons/light/skinIcons/channelsymbols.png b/icons/light/skinIcons/channelsymbols.png
new file mode 100644
index 0000000..2ba023d
Binary files /dev/null and b/icons/light/skinIcons/channelsymbols.png differ
diff --git a/icons/light/skinIcons/crypted.png b/icons/light/skinIcons/crypted.png
new file mode 100644
index 0000000..1aec146
Binary files /dev/null and b/icons/light/skinIcons/crypted.png differ
diff --git a/icons/light/skinIcons/encrypted.png b/icons/light/skinIcons/encrypted.png
new file mode 100644
index 0000000..12f0870
Binary files /dev/null and b/icons/light/skinIcons/encrypted.png differ
diff --git a/icons/light/skinIcons/fta.png b/icons/light/skinIcons/fta.png
new file mode 100644
index 0000000..55e3789
Binary files /dev/null and b/icons/light/skinIcons/fta.png differ
diff --git a/icons/light/skinIcons/fwd.png b/icons/light/skinIcons/fwd.png
new file mode 100644
index 0000000..30aef68
Binary files /dev/null and b/icons/light/skinIcons/fwd.png differ
diff --git a/icons/light/skinIcons/fwdInactive.png b/icons/light/skinIcons/fwdInactive.png
new file mode 100644
index 0000000..185d579
Binary files /dev/null and b/icons/light/skinIcons/fwdInactive.png differ
diff --git a/icons/light/skinIcons/fwdx1.png b/icons/light/skinIcons/fwdx1.png
new file mode 100644
index 0000000..77af2ea
Binary files /dev/null and b/icons/light/skinIcons/fwdx1.png differ
diff --git a/icons/light/skinIcons/fwdx2.png b/icons/light/skinIcons/fwdx2.png
new file mode 100644
index 0000000..1340ded
Binary files /dev/null and b/icons/light/skinIcons/fwdx2.png differ
diff --git a/icons/light/skinIcons/fwdx3.png b/icons/light/skinIcons/fwdx3.png
new file mode 100644
index 0000000..2dca6af
Binary files /dev/null and b/icons/light/skinIcons/fwdx3.png differ
diff --git a/icons/light/skinIcons/hd1080i.png b/icons/light/skinIcons/hd1080i.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/light/skinIcons/hd1080i.png differ
diff --git a/icons/light/skinIcons/hd1080i_rec.png b/icons/light/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..1a863a9
Binary files /dev/null and b/icons/light/skinIcons/hd1080i_rec.png differ
diff --git a/icons/light/skinIcons/hd720p.png b/icons/light/skinIcons/hd720p.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/light/skinIcons/hd720p.png differ
diff --git a/icons/light/skinIcons/hd720p_rec.png b/icons/light/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..47317d8
Binary files /dev/null and b/icons/light/skinIcons/hd720p_rec.png differ
diff --git a/icons/light/skinIcons/newrecording.png b/icons/light/skinIcons/newrecording.png
new file mode 100644
index 0000000..51d5f86
Binary files /dev/null and b/icons/light/skinIcons/newrecording.png differ
diff --git a/icons/light/skinIcons/pause.png b/icons/light/skinIcons/pause.png
new file mode 100644
index 0000000..2e8ea5d
Binary files /dev/null and b/icons/light/skinIcons/pause.png differ
diff --git a/icons/light/skinIcons/pauseInactive.png b/icons/light/skinIcons/pauseInactive.png
new file mode 100644
index 0000000..fc1a34a
Binary files /dev/null and b/icons/light/skinIcons/pauseInactive.png differ
diff --git a/icons/light/skinIcons/play.png b/icons/light/skinIcons/play.png
new file mode 100644
index 0000000..b1b3a07
Binary files /dev/null and b/icons/light/skinIcons/play.png differ
diff --git a/icons/light/skinIcons/playInactive.png b/icons/light/skinIcons/playInactive.png
new file mode 100644
index 0000000..11134b9
Binary files /dev/null and b/icons/light/skinIcons/playInactive.png differ
diff --git a/icons/light/skinIcons/recfolder.png b/icons/light/skinIcons/recfolder.png
new file mode 100644
index 0000000..dcc7ee5
Binary files /dev/null and b/icons/light/skinIcons/recfolder.png differ
diff --git a/icons/light/skinIcons/recoff.png b/icons/light/skinIcons/recoff.png
new file mode 100644
index 0000000..8b9a02a
Binary files /dev/null and b/icons/light/skinIcons/recoff.png differ
diff --git a/icons/light/skinIcons/recon.png b/icons/light/skinIcons/recon.png
new file mode 100644
index 0000000..1f3df80
Binary files /dev/null and b/icons/light/skinIcons/recon.png differ
diff --git a/icons/light/skinIcons/recordingcutted.png b/icons/light/skinIcons/recordingcutted.png
new file mode 100644
index 0000000..325b21f
Binary files /dev/null and b/icons/light/skinIcons/recordingcutted.png differ
diff --git a/icons/light/skinIcons/recordingdatetime.png b/icons/light/skinIcons/recordingdatetime.png
new file mode 100644
index 0000000..f7f9471
Binary files /dev/null and b/icons/light/skinIcons/recordingdatetime.png differ
diff --git a/icons/light/skinIcons/rew.png b/icons/light/skinIcons/rew.png
new file mode 100644
index 0000000..97e2b43
Binary files /dev/null and b/icons/light/skinIcons/rew.png differ
diff --git a/icons/light/skinIcons/rewInactive.png b/icons/light/skinIcons/rewInactive.png
new file mode 100644
index 0000000..4935e97
Binary files /dev/null and b/icons/light/skinIcons/rewInactive.png differ
diff --git a/icons/light/skinIcons/rewx1.png b/icons/light/skinIcons/rewx1.png
new file mode 100644
index 0000000..9bf0367
Binary files /dev/null and b/icons/light/skinIcons/rewx1.png differ
diff --git a/icons/light/skinIcons/rewx2.png b/icons/light/skinIcons/rewx2.png
new file mode 100644
index 0000000..52fc211
Binary files /dev/null and b/icons/light/skinIcons/rewx2.png differ
diff --git a/icons/light/skinIcons/rewx3.png b/icons/light/skinIcons/rewx3.png
new file mode 100644
index 0000000..d6eef15
Binary files /dev/null and b/icons/light/skinIcons/rewx3.png differ
diff --git a/icons/light/skinIcons/rss.png b/icons/light/skinIcons/rss.png
new file mode 100644
index 0000000..6181dee
Binary files /dev/null and b/icons/light/skinIcons/rss.png differ
diff --git a/icons/light/skinIcons/sd576i.png b/icons/light/skinIcons/sd576i.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/light/skinIcons/sd576i.png differ
diff --git a/icons/light/skinIcons/sd576i_rec.png b/icons/light/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..994a7a2
Binary files /dev/null and b/icons/light/skinIcons/sd576i_rec.png differ
diff --git a/icons/light/skinIcons/stereo.png b/icons/light/skinIcons/stereo.png
new file mode 100644
index 0000000..3c63f7f
Binary files /dev/null and b/icons/light/skinIcons/stereo.png differ
diff --git a/icons/light/skinIcons/stereooff.png b/icons/light/skinIcons/stereooff.png
new file mode 100644
index 0000000..569a342
Binary files /dev/null and b/icons/light/skinIcons/stereooff.png differ
diff --git a/icons/light/skinIcons/stereoon.png b/icons/light/skinIcons/stereoon.png
new file mode 100644
index 0000000..eb838b9
Binary files /dev/null and b/icons/light/skinIcons/stereoon.png differ
diff --git a/icons/light/skinIcons/timerActive.png b/icons/light/skinIcons/timerActive.png
new file mode 100644
index 0000000..e62fd96
Binary files /dev/null and b/icons/light/skinIcons/timerActive.png differ
diff --git a/icons/light/skinIcons/timerInactive.png b/icons/light/skinIcons/timerInactive.png
new file mode 100644
index 0000000..27c5464
Binary files /dev/null and b/icons/light/skinIcons/timerInactive.png differ
diff --git a/icons/light/skinIcons/timerRecording.png b/icons/light/skinIcons/timerRecording.png
new file mode 100644
index 0000000..56d6027
Binary files /dev/null and b/icons/light/skinIcons/timerRecording.png differ
diff --git a/icons/light/skinIcons/tracks.png b/icons/light/skinIcons/tracks.png
new file mode 100644
index 0000000..3a1e577
Binary files /dev/null and b/icons/light/skinIcons/tracks.png differ
diff --git a/icons/light/skinIcons/txtoff.png b/icons/light/skinIcons/txtoff.png
new file mode 100644
index 0000000..3b2eac3
Binary files /dev/null and b/icons/light/skinIcons/txtoff.png differ
diff --git a/icons/light/skinIcons/txton.png b/icons/light/skinIcons/txton.png
new file mode 100644
index 0000000..148f9ef
Binary files /dev/null and b/icons/light/skinIcons/txton.png differ
diff --git a/icons/light/skinIcons/vdrlogo.png b/icons/light/skinIcons/vdrlogo.png
new file mode 100644
index 0000000..9f95176
Binary files /dev/null and b/icons/light/skinIcons/vdrlogo.png differ
diff --git a/icons/pluginIcons/Thumbs.db b/icons/pluginIcons/Thumbs.db
deleted file mode 100644
index 7fc5832..0000000
Binary files a/icons/pluginIcons/Thumbs.db and /dev/null differ
diff --git a/icons/pluginIcons/dvbhddevice.png b/icons/pluginIcons/dvbhddevice.png
new file mode 100644
index 0000000..4785264
Binary files /dev/null and b/icons/pluginIcons/dvbhddevice.png differ
diff --git a/icons/pluginIcons/dvbsddevice.png b/icons/pluginIcons/dvbsddevice.png
new file mode 100644
index 0000000..ff870d6
Binary files /dev/null and b/icons/pluginIcons/dvbsddevice.png differ
diff --git a/icons/pluginIcons/graphtft.png b/icons/pluginIcons/graphtft.png
new file mode 100644
index 0000000..66890af
Binary files /dev/null and b/icons/pluginIcons/graphtft.png differ
diff --git a/icons/pluginIcons/nordlichtsepg.png b/icons/pluginIcons/nordlichtsepg.png
new file mode 100644
index 0000000..c757b85
Binary files /dev/null and b/icons/pluginIcons/nordlichtsepg.png differ
diff --git a/icons/pluginIcons/undelete.png b/icons/pluginIcons/undelete.png
new file mode 100644
index 0000000..8deeaa9
Binary files /dev/null and b/icons/pluginIcons/undelete.png differ
diff --git a/icons/pluginIcons/weatherng.png b/icons/pluginIcons/weatherng.png
new file mode 100644
index 0000000..542773b
Binary files /dev/null and b/icons/pluginIcons/weatherng.png differ
diff --git a/icons/skinIcons/Channelseparator.png b/icons/skinIcons/Channelseparator.png
index 906d35d..a1a091c 100644
Binary files a/icons/skinIcons/Channelseparator.png and b/icons/skinIcons/Channelseparator.png differ
diff --git a/icons/skinIcons/DiskUsage.png b/icons/skinIcons/DiskUsage.png
index f9f8a35..49de3be 100644
Binary files a/icons/skinIcons/DiskUsage.png and b/icons/skinIcons/DiskUsage.png differ
diff --git a/icons/skinIcons/arrowLeftChannelSep.png b/icons/skinIcons/arrowLeftChannelSep.png
new file mode 100644
index 0000000..85e456c
Binary files /dev/null and b/icons/skinIcons/arrowLeftChannelSep.png differ
diff --git a/icons/skinIcons/arrowRightChannelSep.png b/icons/skinIcons/arrowRightChannelSep.png
new file mode 100644
index 0000000..d0d9825
Binary files /dev/null and b/icons/skinIcons/arrowRightChannelSep.png differ
diff --git a/icons/skinIcons/channeldelimiter.png b/icons/skinIcons/channeldelimiter.png
new file mode 100644
index 0000000..bb68db6
Binary files /dev/null and b/icons/skinIcons/channeldelimiter.png differ
diff --git a/icons/skinIcons/crypted.png b/icons/skinIcons/crypted.png
new file mode 100644
index 0000000..930ca26
Binary files /dev/null and b/icons/skinIcons/crypted.png differ
diff --git a/icons/skinIcons/daydelimiter.png b/icons/skinIcons/daydelimiter.png
index 85e2640..0f46eb7 100644
Binary files a/icons/skinIcons/daydelimiter.png and b/icons/skinIcons/daydelimiter.png differ
diff --git a/icons/skinIcons/defaultPoster.png b/icons/skinIcons/defaultPoster.png
new file mode 100644
index 0000000..2e889ad
Binary files /dev/null and b/icons/skinIcons/defaultPoster.png differ
diff --git a/icons/skinIcons/discpercent.png b/icons/skinIcons/discpercent.png
index 1c219c5..949fbc7 100644
Binary files a/icons/skinIcons/discpercent.png and b/icons/skinIcons/discpercent.png differ
diff --git a/icons/skinIcons/dolbyoff.png b/icons/skinIcons/dolbyoff.png
new file mode 100644
index 0000000..bc9990b
Binary files /dev/null and b/icons/skinIcons/dolbyoff.png differ
diff --git a/icons/skinIcons/dolbyon.png b/icons/skinIcons/dolbyon.png
new file mode 100644
index 0000000..a00cc43
Binary files /dev/null and b/icons/skinIcons/dolbyon.png differ
diff --git a/icons/skinIcons/fta.png b/icons/skinIcons/fta.png
new file mode 100644
index 0000000..010b128
Binary files /dev/null and b/icons/skinIcons/fta.png differ
diff --git a/icons/skinIcons/fwd.png b/icons/skinIcons/fwd.png
index 13b4751..9f6dd48 100644
Binary files a/icons/skinIcons/fwd.png and b/icons/skinIcons/fwd.png differ
diff --git a/icons/skinIcons/fwdInactive.png b/icons/skinIcons/fwdInactive.png
index 0092440..185d579 100644
Binary files a/icons/skinIcons/fwdInactive.png and b/icons/skinIcons/fwdInactive.png differ
diff --git a/icons/skinIcons/fwdx1.png b/icons/skinIcons/fwdx1.png
new file mode 100644
index 0000000..93caa61
Binary files /dev/null and b/icons/skinIcons/fwdx1.png differ
diff --git a/icons/skinIcons/fwdx2.png b/icons/skinIcons/fwdx2.png
new file mode 100644
index 0000000..dc39d9f
Binary files /dev/null and b/icons/skinIcons/fwdx2.png differ
diff --git a/icons/skinIcons/fwdx3.png b/icons/skinIcons/fwdx3.png
new file mode 100644
index 0000000..89ae796
Binary files /dev/null and b/icons/skinIcons/fwdx3.png differ
diff --git a/icons/skinIcons/hd1080i.png b/icons/skinIcons/hd1080i.png
index 21351ce..b3e2bc6 100644
Binary files a/icons/skinIcons/hd1080i.png and b/icons/skinIcons/hd1080i.png differ
diff --git a/icons/skinIcons/hd1080i_rec.png b/icons/skinIcons/hd1080i_rec.png
new file mode 100644
index 0000000..b3e2bc6
Binary files /dev/null and b/icons/skinIcons/hd1080i_rec.png differ
diff --git a/icons/skinIcons/hd720p.png b/icons/skinIcons/hd720p.png
index 1d91b7d..0a6024d 100644
Binary files a/icons/skinIcons/hd720p.png and b/icons/skinIcons/hd720p.png differ
diff --git a/icons/skinIcons/hd720p_rec.png b/icons/skinIcons/hd720p_rec.png
new file mode 100644
index 0000000..0a6024d
Binary files /dev/null and b/icons/skinIcons/hd720p_rec.png differ
diff --git a/icons/skinIcons/pause.png b/icons/skinIcons/pause.png
index e6577cf..f2977e1 100644
Binary files a/icons/skinIcons/pause.png and b/icons/skinIcons/pause.png differ
diff --git a/icons/skinIcons/pauseInactive.png b/icons/skinIcons/pauseInactive.png
index 602e556..fc1a34a 100644
Binary files a/icons/skinIcons/pauseInactive.png and b/icons/skinIcons/pauseInactive.png differ
diff --git a/icons/skinIcons/play.png b/icons/skinIcons/play.png
index b0c8a18..2eebf44 100644
Binary files a/icons/skinIcons/play.png and b/icons/skinIcons/play.png differ
diff --git a/icons/skinIcons/playInactive.png b/icons/skinIcons/playInactive.png
index 9612cb0..11134b9 100644
Binary files a/icons/skinIcons/playInactive.png and b/icons/skinIcons/playInactive.png differ
diff --git a/icons/skinIcons/radio.png b/icons/skinIcons/radio.png
index 3a90a3e..9e9bedd 100644
Binary files a/icons/skinIcons/radio.png and b/icons/skinIcons/radio.png differ
diff --git a/icons/skinIcons/recfolder.png b/icons/skinIcons/recfolder.png
new file mode 100644
index 0000000..90ab8de
Binary files /dev/null and b/icons/skinIcons/recfolder.png differ
diff --git a/icons/skinIcons/recoff.png b/icons/skinIcons/recoff.png
new file mode 100644
index 0000000..ed88cc5
Binary files /dev/null and b/icons/skinIcons/recoff.png differ
diff --git a/icons/skinIcons/recon.png b/icons/skinIcons/recon.png
new file mode 100644
index 0000000..33f9e73
Binary files /dev/null and b/icons/skinIcons/recon.png differ
diff --git a/icons/skinIcons/rew.png b/icons/skinIcons/rew.png
index 7055823..4ef6241 100644
Binary files a/icons/skinIcons/rew.png and b/icons/skinIcons/rew.png differ
diff --git a/icons/skinIcons/rewInactive.png b/icons/skinIcons/rewInactive.png
index 1ad9d6d..4935e97 100644
Binary files a/icons/skinIcons/rewInactive.png and b/icons/skinIcons/rewInactive.png differ
diff --git a/icons/skinIcons/rewx1.png b/icons/skinIcons/rewx1.png
new file mode 100644
index 0000000..dde466f
Binary files /dev/null and b/icons/skinIcons/rewx1.png differ
diff --git a/icons/skinIcons/rewx2.png b/icons/skinIcons/rewx2.png
new file mode 100644
index 0000000..fede1b5
Binary files /dev/null and b/icons/skinIcons/rewx2.png differ
diff --git a/icons/skinIcons/rewx3.png b/icons/skinIcons/rewx3.png
new file mode 100644
index 0000000..db43c59
Binary files /dev/null and b/icons/skinIcons/rewx3.png differ
diff --git a/icons/skinIcons/sd576i.png b/icons/skinIcons/sd576i.png
index 85c3657..4147ce9 100644
Binary files a/icons/skinIcons/sd576i.png and b/icons/skinIcons/sd576i.png differ
diff --git a/icons/skinIcons/sd576i_rec.png b/icons/skinIcons/sd576i_rec.png
new file mode 100644
index 0000000..4147ce9
Binary files /dev/null and b/icons/skinIcons/sd576i_rec.png differ
diff --git a/icons/skinIcons/stereooff.png b/icons/skinIcons/stereooff.png
new file mode 100644
index 0000000..368c62d
Binary files /dev/null and b/icons/skinIcons/stereooff.png differ
diff --git a/icons/skinIcons/stereoon.png b/icons/skinIcons/stereoon.png
new file mode 100644
index 0000000..ef6c7d2
Binary files /dev/null and b/icons/skinIcons/stereoon.png differ
diff --git a/icons/skinIcons/timerRecording.png b/icons/skinIcons/timerRecording.png
index 3f253fb..916c45e 100644
Binary files a/icons/skinIcons/timerRecording.png and b/icons/skinIcons/timerRecording.png differ
diff --git a/icons/skinIcons/tracks.png b/icons/skinIcons/tracks.png
index cf19b7e..d105956 100644
Binary files a/icons/skinIcons/tracks.png and b/icons/skinIcons/tracks.png differ
diff --git a/icons/skinIcons/txtoff.png b/icons/skinIcons/txtoff.png
new file mode 100644
index 0000000..8644d43
Binary files /dev/null and b/icons/skinIcons/txtoff.png differ
diff --git a/icons/skinIcons/txton.png b/icons/skinIcons/txton.png
new file mode 100644
index 0000000..3c6abd2
Binary files /dev/null and b/icons/skinIcons/txton.png differ
diff --git a/icons/skinIcons/vdrlogo.png b/icons/skinIcons/vdrlogo.png
index 44c7896..7fff397 100644
Binary files a/icons/skinIcons/vdrlogo.png and b/icons/skinIcons/vdrlogo.png differ
diff --git a/imagecache.c b/imagecache.c
new file mode 100644
index 0000000..29690c3
--- /dev/null
+++ b/imagecache.c
@@ -0,0 +1,679 @@
+#include <string>
+#include <sstream>
+#include <map>
+#include "imagecache.h"
+#include "config.h"
+#include "helpers.h"
+
+using namespace Magick;
+
+cImageCache::cImageCache() : cImageMagickWrapper() {
+    tempStaticLogo = NULL;
+    osdTheme = Setup.OSDTheme;
+}
+
+cImageCache::~cImageCache() {
+    Clear();
+    if (tempStaticLogo) {
+        delete tempStaticLogo;
+        tempStaticLogo = NULL;
+    }
+}
+
+void cImageCache::CreateCache(void) {
+    //Menu Icons
+    std::vector<std::pair<std::string, cPoint> > menuIcons = GetMenuIcons();
+    for (int i=0; i < menuIcons.size(); i++) {
+        std::string iconName = menuIcons[i].first;
+        cPoint iconSize = menuIcons[i].second;
+        bool success = LoadIcon(ctMenuIcon, iconName);
+        if (success)
+            InsertIntoIconCache(ctMenuIcon, iconName, iconSize.X(), iconSize.X());
+    }
+    //Skin Icons
+    std::vector<std::pair<std::string, sImgProperties> > skinIcons = GetSkinIcons();
+    for (int i=0; i < skinIcons.size(); i++) {
+        std::string iconName = skinIcons[i].first;
+        sImgProperties iconProps = skinIcons[i].second;
+        bool success = LoadIcon(ctSkinIcon, iconName);
+        if (success)
+            InsertIntoIconCache(ctSkinIcon, iconName, iconProps.width, iconProps.height, iconProps.preserveAspect);
+
+    }
+    //Channel Logos
+    if (config.GetValue("numLogosInitial") > 0) {
+        int channelsCached = 0;
+        for (const cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) {
+            if (channelsCached >= config.GetValue("numLogosInitial"))
+                break;
+            if (!channel->GroupSep()) {
+                bool success = LoadLogo(channel);
+                if (success) {
+                    channelsCached++;
+                    InsertIntoLogoCache(ctLogo, *channel->GetChannelID().ToString());
+                    InsertIntoLogoCache(ctLogoMenuItem, *channel->GetChannelID().ToString());
+                }
+            }
+
+        }
+    }
+}
+
+void cImageCache::CreateCacheDelayed(void) {
+    if (config.GetValue("displayType") == dtBlending)
+        CreateSkinElementsBlended();
+    else if (config.GetValue("displayType") == dtGraphical)
+        CreateSkinElementsGraphics();
+}
+
+bool cImageCache::ThemeChanged(void) {
+    if (osdTheme.compare(Setup.OSDTheme) != 0) {
+        osdTheme = Setup.OSDTheme;
+        return true;
+    }
+    return false;
+}
+
+void cImageCache::Reload(void) {
+    Clear();
+    CreateCache();
+    CreateCacheDelayed();
+}
+
+cImage *cImageCache::GetMenuIcon(std::string name) {
+    std::map<std::string, cImage*>::iterator hit = menuIconCache.find(name);
+    if (hit != menuIconCache.end()) {
+        return (cImage*)hit->second;
+    } else {
+        int iconWidth = geoManager->menuMainMenuIconSize;
+        int iconHeight = geoManager->menuMainMenuIconSize;
+        bool success = LoadIcon(ctMenuIcon, name);
+        if (success) {
+            InsertIntoIconCache(ctMenuIcon, name, iconWidth, iconHeight);
+            hit = menuIconCache.find(name);
+            if (hit != menuIconCache.end()) {
+                return (cImage*)hit->second;
+            }
+        }
+    }
+    return NULL;
+}
+
+cImage *cImageCache::GetSkinIcon(std::string name, int width, int height, bool preserveAspect) {
+    std::map<std::string, cImage*>::iterator hit = skinIconCache.find(name);
+    if (hit != skinIconCache.end()) {
+        return (cImage*)hit->second;
+    } else {
+        bool success = LoadIcon(ctSkinIcon, name);
+        if (success) {
+            InsertIntoIconCache(ctSkinIcon, name, width, height, preserveAspect);
+            hit = skinIconCache.find(name);
+            if (hit != skinIconCache.end()) {
+                return (cImage*)hit->second;
+            }
+        }
+    }
+    return NULL;
+}
+
+cImage *cImageCache::GetSkinElement(eSkinElementType type) {
+    std::map<eSkinElementType, cImage*>::iterator hit = skinElementCache.find(type);
+    if (hit != skinElementCache.end()) {
+        return (cImage*)hit->second;
+    }
+    return NULL;
+}
+
+cImage *cImageCache::GetLogo(eCacheType type, const cChannel *channel) {
+    if (!channel)
+        return NULL;
+
+    std::map<std::string, cImage*> *cache;
+    if (type == ctLogo)
+        cache = &logoCache;
+    else if (type == ctLogoMenuItem)
+        cache = &logoMenuItemCache;
+    else if (type == ctLogoTimer)
+        cache = &logoTimerCache;
+
+    std::map<std::string, cImage*>::iterator hit = cache->find(*channel->GetChannelID().ToString());
+
+    if (hit != cache->end()) {
+        return (cImage*)hit->second;
+    } else {
+        bool success = LoadLogo(channel);
+        if (success) {
+            if (config.GetValue("limitLogoCache") && (cache->size() >= config.GetValue("numLogosMax"))) {
+            //logo cache is full, don't cache anymore
+                cPoint logoSize = LogoSize(type);
+                int width = logoSize.X();
+                int height = logoSize.Y();
+                if (tempStaticLogo) {
+                    delete tempStaticLogo;
+                    tempStaticLogo = NULL;
+                }
+                tempStaticLogo = CreateImage(width, height);
+                return tempStaticLogo;
+            } else {
+            //add requested logo to cache
+                InsertIntoLogoCache(type, *channel->GetChannelID().ToString());
+                hit = cache->find(*channel->GetChannelID().ToString());
+                if (hit != cache->end()) {
+                    return (cImage*)hit->second;
+                }
+            }
+        }
+    }
+    return NULL;
+}
+
+cImage cImageCache::GetBackground(tColor back, tColor blend, int width, int height, bool flip) {
+    if (!flip)
+        CreateBackground(back, blend, width, height);
+    else
+        CreateBackgroundReverse(back, blend, width, height);
+    return CreateImageCopy();
+}
+
+std::string cImageCache::GetCacheSize(eCacheType type) {
+    std::stringstream result;
+    int sizeByte = 0;
+    int numImages = 0;
+    if ((type == ctMenuIcon) || (type == ctSkinIcon)) {
+        std::map<std::string, cImage*> *cache;
+        if (type == ctMenuIcon)
+            cache = &menuIconCache;
+        else if (type == ctSkinIcon)
+            cache = &skinIconCache;
+
+        for(std::map<std::string, cImage*>::const_iterator it = cache->begin(); it != cache->end(); it++) {
+            cImage *img = (cImage*)it->second;
+            sizeByte += img->Width() * img->Height() * sizeof(tColor);
+        }
+        numImages = cache->size();
+    } else if ((type == ctLogo) || (type == ctLogoMenuItem) || (type == ctLogoTimer)) {
+        std::map<std::string, cImage*> *cache;
+        if (type == ctLogo)
+            cache = &logoCache;
+        else if (type == ctLogoMenuItem)
+            cache = &logoMenuItemCache;
+        else if (type == ctLogoTimer)
+            cache = &logoTimerCache;
+
+        for(std::map<std::string, cImage*>::const_iterator it = cache->begin(); it != cache->end(); it++) {
+            cImage *img = (cImage*)it->second;
+            sizeByte += img->Width() * img->Height() * sizeof(tColor);
+        }
+        numImages = cache->size();
+    } else if (type == ctSkinElement) {
+        for(std::map<eSkinElementType, cImage*>::const_iterator it = skinElementCache.begin(); it != skinElementCache.end(); it++) {
+            cImage *img = (cImage*)it->second;
+            sizeByte += img->Width() * img->Height() * sizeof(tColor);
+        }
+        numImages = skinElementCache.size();
+    }
+
+    result << numImages << " " << tr("images") << " / " << sizeByte/1024 << " KByte";
+    return result.str();
+}
+
+std::vector<std::pair<std::string, cPoint> > cImageCache::GetMenuIcons(void) {
+    std::vector<std::pair<std::string, cPoint> > menuIcons;
+    //MainMenuIcons
+    std::vector<std::string> mainMenuIcons;
+    mainMenuIcons.push_back("menuIcons/Schedule");
+    mainMenuIcons.push_back("menuIcons/Channels");
+    mainMenuIcons.push_back("menuIcons/Timers");
+    mainMenuIcons.push_back("menuIcons/Recordings");
+    mainMenuIcons.push_back("menuIcons/Setup");
+    mainMenuIcons.push_back("menuIcons/Commands");
+    mainMenuIcons.push_back("menuIcons/OSD");
+    mainMenuIcons.push_back("menuIcons/EPG");
+    mainMenuIcons.push_back("menuIcons/DVB");
+    mainMenuIcons.push_back("menuIcons/LNB");
+    mainMenuIcons.push_back("menuIcons/CAM");
+    mainMenuIcons.push_back("menuIcons/Recording");
+    mainMenuIcons.push_back("menuIcons/Replay");
+    mainMenuIcons.push_back("menuIcons/Miscellaneous");
+    mainMenuIcons.push_back("menuIcons/Plugins");
+    mainMenuIcons.push_back("menuIcons/Restart");
+    int mainMenuIconSize = geoManager->menuMainMenuIconSize;
+    for (int i=0; i<mainMenuIcons.size(); i++) {
+        menuIcons.push_back(std::pair<std::string, cPoint>(mainMenuIcons[i], cPoint(mainMenuIconSize, mainMenuIconSize)));
+    }
+
+    //Plugin Icons
+    for (int i = 0; ; i++) {
+        cPlugin *p = cPluginManager::GetPlugin(i);
+        if (p) {
+            std::stringstream iconPlugin;
+            iconPlugin << "pluginIcons/" << p->Name();
+            menuIcons.push_back(std::pair<std::string, cPoint>(iconPlugin.str(), cPoint(mainMenuIconSize, mainMenuIconSize)));
+        } else
+            break;
+    }
+    return menuIcons;
+}
+
+std::vector<std::pair<std::string, sImgProperties> > cImageCache::GetSkinIcons(void) {
+    std::vector<std::pair<std::string, sImgProperties> > skinIcons;
+    //VDR Logo
+    sImgProperties props;
+    props.width = geoManager->menuHeaderVDRLogoWidth;
+    props.height = geoManager->menuHeaderHeight;
+    props.preserveAspect = true;
+    skinIcons.push_back(std::pair<std::string, sImgProperties>("skinIcons/vdrlogo", props));
+    //DiskUsage
+    int discUsageSize = geoManager->menuDiskUsageWidth;
+    props.width = props.height = discUsageSize*3/4;
+    props.preserveAspect = true;
+    skinIcons.push_back(std::pair<std::string, sImgProperties>("skinIcons/DiskUsage", props));
+    props.width = discUsageSize - 4;
+    props.height = discUsageSize/5;
+    props.preserveAspect = false;
+    skinIcons.push_back(std::pair<std::string, sImgProperties>("skinIcons/discpercent", props));
+    //menu header icons
+    std::vector<std::string> menuHeaderIcons;
+    menuHeaderIcons.push_back("menuIcons/Schedule");
+    menuHeaderIcons.push_back("menuIcons/Channels");
+    menuHeaderIcons.push_back("menuIcons/Timers");
+    menuHeaderIcons.push_back("menuIcons/Recordings");
+    menuHeaderIcons.push_back("menuIcons/Setup");
+    menuHeaderIcons.push_back("menuIcons/Commands");
+    props.width = geoManager->menuHeaderHeight-2;
+    props.height = geoManager->menuHeaderHeight-2;
+    props.preserveAspect = true;
+    for (int i=0; i<menuHeaderIcons.size(); i++) {
+        skinIcons.push_back(std::pair<std::string, sImgProperties>(menuHeaderIcons[i], props));
+    }
+
+    return skinIcons;
+}
+
+bool cImageCache::LoadIcon(eCacheType type, std::string name) {
+    bool success = false;
+    if (config.iconPathSet) {
+        cString iconPathTheme = cString::sprintf("%s%s/", *config.iconPath, Setup.OSDTheme);
+        success = LoadImage(name, *iconPathTheme, "png");
+        if (success) {
+            return true;
+        } else {
+            success = LoadImage(name, *config.iconPath, "png");
+            if (success) {
+                return true;
+            }
+        }
+    }
+    if (!success) {
+        cString iconPathTheme = cString::sprintf("%s%s/", *config.iconPathDefault, Setup.OSDTheme);
+        success = LoadImage(name, *iconPathTheme, "png");
+        if (success) {
+            return true;
+        } else {
+            success = LoadImage(name, *config.iconPathDefault, "png");
+            if (success) {
+                return true;
+            }
+        }
+    }
+    return false;
+}
+
+void cImageCache::InsertIntoIconCache(eCacheType type, std::string name, int width, int height, bool preserveAspect) {
+    cImage *image = CreateImage(width, height, preserveAspect);
+    if (type == ctMenuIcon)
+        menuIconCache.insert(std::pair<std::string, cImage*>(name, image));
+    else if (type == ctSkinIcon)
+        skinIconCache.insert(std::pair<std::string, cImage*>(name, image));
+}
+
+bool cImageCache::LoadLogo(const cChannel *channel) {
+    if (!channel)
+        return false;
+    std::string channelID = StrToLowerCase(*(channel->GetChannelID().ToString()));
+    std::string logoLower = StrToLowerCase(channel->Name());
+    bool success = false;
+    if (config.logoPathSet) {
+        cString logoThemePath = cString::sprintf("%s%s/", *config.logoPath, Setup.OSDTheme);
+        success = LoadImage(channelID.c_str(), *logoThemePath, *config.logoExtension);
+        if (success)
+            return true;
+        success = LoadImage(logoLower.c_str(), *logoThemePath, *config.logoExtension);
+        if (success)
+            return true;
+        success = LoadImage(channelID.c_str(), *config.logoPath, *config.logoExtension);
+        if (success)
+            return true;
+        success = LoadImage(logoLower.c_str(), *config.logoPath, *config.logoExtension);
+        if (success)
+            return true;
+    }
+    cString logoThemePath = cString::sprintf("%s%s/", *config.logoPathDefault, Setup.OSDTheme);
+    success = LoadImage(channelID.c_str(), *logoThemePath, *config.logoExtension);
+    if (success)
+        return true;
+    success = LoadImage(logoLower.c_str(), *logoThemePath, *config.logoExtension);
+    if (success)
+        return true;
+    success = LoadImage(channelID.c_str(), *config.logoPathDefault, *config.logoExtension);
+    if (success)
+        return true;
+    success = LoadImage(logoLower.c_str(), *config.logoPathDefault, *config.logoExtension);
+    if (success)
+        return true;
+
+    return false;
+}
+
+void cImageCache::InsertIntoLogoCache(eCacheType type, std::string channelID) {
+    cPoint logoSize = LogoSize(type);
+    int width = logoSize.X();
+    int height = logoSize.Y();
+    cImage *image = CreateImage(width, height);
+    if (type == ctLogo)
+        logoCache.insert(std::pair<std::string, cImage*>(channelID, image));
+    else if (type == ctLogoMenuItem)
+        logoMenuItemCache.insert(std::pair<std::string, cImage*>(channelID, image));
+    else if (type == ctLogoTimer)
+        logoTimerCache.insert(std::pair<std::string, cImage*>(channelID, image));
+}
+
+cPoint cImageCache::LogoSize(eCacheType type) {
+    int width, height;
+    switch (type) {
+        case ctLogo:
+            width = geoManager->channelLogoWidth;
+            height = geoManager->channelLogoHeight;
+            break;
+        case ctLogoMenuItem:
+            width = geoManager->menuLogoWidth;
+            height = geoManager->menuLogoHeight;
+            break;
+        case ctLogoTimer:
+            width = geoManager->menuTimersLogoWidth;
+            height = geoManager->menuTimersLogoHeight;
+            break;
+        default:
+            width = 1;
+            height = 1;
+    }
+    return cPoint(width, height);
+}
+
+void cImageCache::CreateSkinElementsBlended(void) {
+    //Default Menus
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthDefault-2, geoManager->menuItemHeightDefault-2);
+    InsertIntoSkinElementCache(seDefault);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthDefault-2, geoManager->menuItemHeightDefault-2);
+    InsertIntoSkinElementCache(seDefaultHigh);
+
+    //Main Menu
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthMain-2, geoManager->menuItemHeightMain-2);
+    InsertIntoSkinElementCache(seMain);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthMain-2, geoManager->menuItemHeightMain-2);
+    InsertIntoSkinElementCache(seMainHigh);
+
+    //Schedules Menu
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthSchedule-2, geoManager->menuItemHeightSchedule-2);
+    InsertIntoSkinElementCache(seSchedules);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthSchedule-2, geoManager->menuItemHeightSchedule-2);
+    InsertIntoSkinElementCache(seSchedulesHigh);
+
+    //Channels Menu
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthChannel-2, geoManager->menuItemHeightSchedule-2);
+    InsertIntoSkinElementCache(seChannels);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthChannel-2, geoManager->menuItemHeightSchedule-2);
+    InsertIntoSkinElementCache(seChannelsHigh);
+
+    //Recordings Menu
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthRecording-2, geoManager->menuItemHeightRecordings-2);
+    InsertIntoSkinElementCache(seRecordings);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthRecording-2, geoManager->menuItemHeightRecordings-2);
+    InsertIntoSkinElementCache(seRecordingsHigh);
+
+    //Timers Menu
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthTimer-2, geoManager->menuItemHeightSchedule-2);
+    InsertIntoSkinElementCache(seTimers);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthTimer-2, geoManager->menuItemHeightSchedule-2);
+    InsertIntoSkinElementCache(seTimersHigh);
+
+    //Setup Menu
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthSetup-2, geoManager->menuItemHeightMain-2);
+    InsertIntoSkinElementCache(seSetup);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthSetup-2, geoManager->menuItemHeightMain-2);
+    InsertIntoSkinElementCache(seSetupHigh);
+
+    //DisplayTracks
+    CreateBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), geoManager->menuItemWidthTracks-2, geoManager->menuItemHeightTracks-2);
+    InsertIntoSkinElementCache(seTracks);
+    CreateBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), geoManager->menuItemWidthTracks-2, geoManager->menuItemHeightTracks-2);
+    InsertIntoSkinElementCache(seTracksHigh);
+
+    //Color Buttons
+    CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonRed), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+    InsertIntoSkinElementCache(seButtonRed);
+    CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonGreen), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+    InsertIntoSkinElementCache(seButtonGreen);
+    CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonYellow), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+    InsertIntoSkinElementCache(seButtonYellow);
+    CreateBackground(Theme.Color(clrMenuBack), Theme.Color(clrButtonBlue), geoManager->menuButtonWidth-4, geoManager->menuButtonHeight-4);
+    InsertIntoSkinElementCache(seButtonBlue);
+
+    //Menu Header
+    bool mirrorHeader = (config.GetValue("menuAdjustLeft")) ? false : true;
+    CreateBackground(Theme.Color(clrMenuHeaderBlend), Theme.Color(clrMenuHeader), geoManager->osdWidth, geoManager->menuHeaderHeight, mirrorHeader);
+    InsertIntoSkinElementCache(seMenuHeader);
+    
+    //ChannelLogo Background
+    std::string imgChannelLogoBack = "skinElements/channellogoback";
+    bool success = LoadIcon(ctSkinElement, imgChannelLogoBack);
+    if (success)
+        InsertIntoSkinElementCache(seChannelLogoBack, geoManager->channelLogoWidth, geoManager->channelLogoHeight);
+
+}
+
+void cImageCache::CreateSkinElementsGraphics(void) {
+    bool success = false;
+
+    //Default Menus
+    std::string imgDefaultMenuItem = "skinElements/menubuttondefault";
+    std::string imgDefaultMenuItemActive = "skinElements/menubuttondefaultactive";
+    success = LoadIcon(ctSkinElement, imgDefaultMenuItem);
+    if (success)
+        InsertIntoSkinElementCache(seDefault, geoManager->menuItemWidthDefault, geoManager->menuItemHeightDefault);
+    success = LoadIcon(ctSkinElement, imgDefaultMenuItemActive);
+    if (success)
+        InsertIntoSkinElementCache(seDefaultHigh, geoManager->menuItemWidthDefault, geoManager->menuItemHeightDefault);
+
+    std::string imgMenuItem = "skinElements/menubutton";
+    std::string imgMenuItemActive = "skinElements/menubuttonactive";
+    std::string imgMenuItemTop = "skinElements/menubuttontop";
+    //Main Menu + Setup Menu + Schedules Menu + Channels Menu + Recordings Menu + Timers Menu + Tracks Menu
+    success = LoadIcon(ctSkinElement, imgMenuItem);
+    if (success) {
+        InsertIntoSkinElementCache(seMain, geoManager->menuItemWidthMain, geoManager->menuItemHeightMain);
+        InsertIntoSkinElementCache(seSetup, geoManager->menuItemWidthSetup, geoManager->menuItemHeightMain);
+        InsertIntoSkinElementCache(seSchedules, geoManager->menuItemWidthSchedule, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seChannels, geoManager->menuItemWidthChannel, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seRecordings, geoManager->menuItemWidthRecording, geoManager->menuItemHeightRecordings);
+        InsertIntoSkinElementCache(seTimers, geoManager->menuItemWidthTimer, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seTracks, geoManager->menuItemWidthTracks, geoManager->menuItemHeightTracks);
+    }
+    success = LoadIcon(ctSkinElement, imgMenuItemActive);
+    if (success) {
+        InsertIntoSkinElementCache(seMainHigh, geoManager->menuItemWidthMain, geoManager->menuItemHeightMain);
+        InsertIntoSkinElementCache(seSetupHigh, geoManager->menuItemWidthSetup, geoManager->menuItemHeightMain);
+        InsertIntoSkinElementCache(seSchedulesHigh, geoManager->menuItemWidthSchedule, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seChannelsHigh, geoManager->menuItemWidthChannel, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seRecordingsHigh, geoManager->menuItemWidthRecording, geoManager->menuItemHeightRecordings);
+        InsertIntoSkinElementCache(seTimersHigh, geoManager->menuItemWidthTimer, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seTracksHigh, geoManager->menuItemWidthTracks, geoManager->menuItemHeightTracks);
+    }
+    success = LoadIcon(ctSkinElement, imgMenuItemTop);
+    if (success) {
+        InsertIntoSkinElementCache(seMainTop, geoManager->menuItemWidthMain, geoManager->menuItemHeightMain);
+        InsertIntoSkinElementCache(seSetupTop, geoManager->menuItemWidthSetup, geoManager->menuItemHeightMain);
+        InsertIntoSkinElementCache(seSchedulesTop, geoManager->menuItemWidthSchedule, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seChannelsTop, geoManager->menuItemWidthChannel, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seRecordingsTop, geoManager->menuItemWidthRecording, geoManager->menuItemHeightRecordings);
+        InsertIntoSkinElementCache(seTimersTop, geoManager->menuItemWidthTimer, geoManager->menuItemHeightSchedule);
+        InsertIntoSkinElementCache(seTracksTop, geoManager->menuItemWidthTracks, geoManager->menuItemHeightTracks);
+    }
+
+    //Color Buttons
+    std::string imgButtonRed = "skinElements/buttonred";
+    std::string imgButtonGreen = "skinElements/buttongreen";
+    std::string imgButtonYellow = "skinElements/buttonyellow";
+    std::string imgButtonBlue = "skinElements/buttonblue";
+    success = LoadIcon(ctSkinElement, imgButtonRed);
+    if (success)
+        InsertIntoSkinElementCache(seButtonRed, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+    success = LoadIcon(ctSkinElement, imgButtonGreen);
+    if (success)
+        InsertIntoSkinElementCache(seButtonGreen, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+    success = LoadIcon(ctSkinElement, imgButtonYellow);
+    if (success)
+        InsertIntoSkinElementCache(seButtonYellow, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+    success = LoadIcon(ctSkinElement, imgButtonBlue);
+    if (success)
+        InsertIntoSkinElementCache(seButtonBlue, geoManager->menuButtonWidth, geoManager->menuButtonHeight);
+
+    //Menu Header
+    bool mirrorHeader = (config.GetValue("menuAdjustLeft")) ? false : true;
+    std::string imgHeaderTop, imgHeaderBack;
+    if (!mirrorHeader) {
+        imgHeaderTop = "skinElements/headertop";
+        imgHeaderBack = "skinElements/headerback";
+    } else {
+        imgHeaderTop = "skinElements/header_mirroredtop";
+        imgHeaderBack = "skinElements/header_mirroredback";
+    }
+    success = LoadIcon(ctSkinElement, imgHeaderTop);
+    if (success)
+        InsertIntoSkinElementCache(seMenuHeaderTop, geoManager->osdWidth, geoManager->menuHeaderHeight);
+    success = LoadIcon(ctSkinElement, imgHeaderBack);
+    if (success)
+        InsertIntoSkinElementCache(seMenuHeader, geoManager->osdWidth, geoManager->menuHeaderHeight);
+
+    //Messages Background + Menu Messages Background
+    std::string msgStatus = "skinElements/messageStatus";
+    std::string msgInfo = "skinElements/messageInfo";
+    std::string msgWarning = "skinElements/messageWarning";
+    std::string msgError = "skinElements/messageError";
+    success = LoadIcon(ctSkinElement, msgStatus);
+    if (success) {
+        InsertIntoSkinElementCache(seMessageStatus, geoManager->messageWidth, geoManager->messageHeight);
+        InsertIntoSkinElementCache(seMessageMenuStatus, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+    }
+    success = LoadIcon(ctSkinElement, msgInfo);
+    if (success) {
+        InsertIntoSkinElementCache(seMessageInfo, geoManager->messageWidth, geoManager->messageHeight);
+        InsertIntoSkinElementCache(seMessageMenuInfo, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+    }
+    success = LoadIcon(ctSkinElement, msgWarning);
+    if (success) {
+        InsertIntoSkinElementCache(seMessageWarning, geoManager->messageWidth, geoManager->messageHeight);
+        InsertIntoSkinElementCache(seMessageMenuWarning, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+    }
+    success = LoadIcon(ctSkinElement, msgError);
+    if (success) {
+        InsertIntoSkinElementCache(seMessageError, geoManager->messageWidth, geoManager->messageHeight);
+        InsertIntoSkinElementCache(seMessageMenuError, geoManager->menuMessageWidth, geoManager->menuMessageHeight);
+    }
+
+    //DisplayChannel Background and Foreground
+    std::string imgChannelBackground;
+    std::string imgChannelTop;
+    switch (config.GetValue("logoPosition")) {
+        case lpLeft:
+            imgChannelBackground = "skinElements/displaychannelback";
+            imgChannelTop = "skinElements/displaychanneltop";
+            break;
+        case lpRight:
+            imgChannelBackground = "skinElements/displaychannelback_right";
+            imgChannelTop = "skinElements/displaychanneltop_right";
+            break;
+        case lpNone:
+            imgChannelBackground = "skinElements/displayreplayback";
+            imgChannelTop = "skinElements/displayreplaytop";
+            break;
+    }
+    success = LoadIcon(ctSkinElement, imgChannelBackground);
+    if (success)
+        InsertIntoSkinElementCache(seChannelBackground, geoManager->channelWidth, geoManager->channelHeight);
+
+    success = LoadIcon(ctSkinElement, imgChannelTop);
+    if (success)
+        InsertIntoSkinElementCache(seChannelTop, geoManager->channelWidth, geoManager->channelHeight);
+
+    //ChannelLogo Background
+    std::string imgChannelLogoBack = "skinElements/channellogoback";
+    success = LoadIcon(ctSkinElement, imgChannelLogoBack);
+    if (success)
+        InsertIntoSkinElementCache(seChannelLogoBack, geoManager->channelLogoWidth, geoManager->channelLogoHeight);
+
+    //DisplayReplay Background and Foreground
+    std::string imgReplayBackground = "skinElements/displayreplayback";
+    success = LoadIcon(ctSkinElement, imgReplayBackground);
+    if (success)
+        InsertIntoSkinElementCache(seReplayBackground, geoManager->replayWidth, geoManager->replayHeight);
+    std::string imgReplayTop = "skinElements/displayreplaytop";
+    success = LoadIcon(ctSkinElement, imgReplayTop);
+    if (success)
+        InsertIntoSkinElementCache(seReplayTop, geoManager->replayWidth, geoManager->replayHeight);
+
+    //DisplayVolume Background
+    std::string imgVolumeBackground = "skinElements/displayvolume";
+    success = LoadIcon(ctSkinElement, imgVolumeBackground);
+    if (success)
+        InsertIntoSkinElementCache(seVolumeBackground, geoManager->volumeWidth, geoManager->volumeHeight);
+
+    //Scrolllbar
+    std::string imgScrollbar = "skinElements/scrollbar";
+    success = LoadIcon(ctSkinElement, imgScrollbar);
+    if (success)
+        InsertIntoSkinElementCache(seScrollbar, geoManager->menuWidthScrollbar, geoManager->menuContentHeight - 2 * geoManager->menuSpace);
+}
+
+void cImageCache::InsertIntoSkinElementCache(eSkinElementType type, int width, int height) {
+    cImage *image = CreateImage(width, height, false);
+    skinElementCache.insert(std::pair<eSkinElementType, cImage*>(type, image));
+}
+
+void cImageCache::Clear(void) {
+    for(std::map<std::string, cImage*>::const_iterator it = menuIconCache.begin(); it != menuIconCache.end(); it++) {
+        cImage *img = (cImage*)it->second;
+        delete img;
+    }
+    menuIconCache.clear();
+
+    for(std::map<std::string, cImage*>::const_iterator it = skinIconCache.begin(); it != skinIconCache.end(); it++) {
+        cImage *img = (cImage*)it->second;
+        delete img;
+    }
+    skinIconCache.clear();
+
+    for(std::map<eSkinElementType, cImage*>::const_iterator it = skinElementCache.begin(); it != skinElementCache.end(); it++) {
+        cImage *img = (cImage*)it->second;
+        delete img;
+    }
+    skinElementCache.clear();
+
+    for(std::map<std::string, cImage*>::const_iterator it = logoCache.begin(); it != logoCache.end(); it++) {
+        cImage *img = (cImage*)it->second;
+        delete img;
+    }
+    logoCache.clear();
+
+    for(std::map<std::string, cImage*>::const_iterator it = logoMenuItemCache.begin(); it != logoMenuItemCache.end(); it++) {
+        cImage *img = (cImage*)it->second;
+        delete img;
+    }
+    logoMenuItemCache.clear();
+
+    for(std::map<std::string, cImage*>::const_iterator it = logoTimerCache.begin(); it != logoTimerCache.end(); it++) {
+        cImage *img = (cImage*)it->second;
+        delete img;
+    }
+    logoTimerCache.clear();
+}
diff --git a/imagecache.h b/imagecache.h
new file mode 100644
index 0000000..54a106d
--- /dev/null
+++ b/imagecache.h
@@ -0,0 +1,113 @@
+#ifndef __NOPACITY_IMAGECACHE_H
+#define __NOPACITY_IMAGECACHE_H
+
+#define X_DISPLAY_MISSING
+
+#include <vdr/osd.h>
+#include <vdr/skins.h>
+#include <Magick++.h>
+#include <vector>
+#include "imagemagickwrapper.h"
+
+using namespace Magick;
+
+enum eCacheType {
+    ctMenuIcon = 0,
+    ctSkinIcon,
+    ctLogo,
+    ctLogoMenuItem,
+    ctLogoTimer,
+    ctSkinElement,
+};
+
+enum eSkinElementType {
+    seNone = -1,
+    seDefault = 0,
+    seDefaultHigh,
+    seMain,
+    seMainHigh,
+    seMainTop,
+    seSchedules,
+    seSchedulesHigh,
+    seSchedulesTop,
+    seChannels,
+    seChannelsHigh,
+    seChannelsTop,
+    seRecordings,
+    seRecordingsHigh,
+    seRecordingsTop,
+    seTimers,
+    seTimersHigh,
+    seTimersTop,
+    seSetup,
+    seSetupHigh,
+    seSetupTop,
+    seTracks,
+    seTracksHigh,
+    seTracksTop,
+    seButtonRed,
+    seButtonGreen,
+    seButtonYellow,
+    seButtonBlue,
+    seMenuHeader,
+    seMenuHeaderTop,
+    seChannelBackground,
+    seChannelTop,
+    seChannelLogoBack,
+    seReplayBackground,
+    seReplayTop,
+    seMessageStatus,
+    seMessageInfo,
+    seMessageWarning,
+    seMessageError,
+    seMessageMenuStatus,
+    seMessageMenuInfo,
+    seMessageMenuWarning,
+    seMessageMenuError,
+    seVolumeBackground,
+    seScrollbar,
+};
+
+struct sImgProperties {
+    int width;
+    int height;
+    bool preserveAspect;
+};
+
+class cImageCache : public cImageMagickWrapper {
+public:
+    cImageCache();
+    ~cImageCache();
+    void CreateCache(void);
+    void CreateCacheDelayed(void);
+    void Reload(void);
+    bool ThemeChanged(void);
+    cImage *GetMenuIcon(std::string name);
+    cImage *GetSkinIcon(std::string name, int width=0, int height=0, bool preserveAspect = true);
+    cImage *GetSkinElement(eSkinElementType type);
+    cImage *GetLogo(eCacheType type, const cChannel *channel);
+    cImage GetBackground(tColor back, tColor blend, int width, int height, bool flip = false);
+    std::string GetCacheSize(eCacheType type);
+private:
+    cImage *tempStaticLogo;
+    std::string osdTheme;
+    std::map<std::string, cImage*> menuIconCache;
+    std::map<std::string, cImage*> skinIconCache;
+    std::map<eSkinElementType, cImage*> skinElementCache;
+    std::map<std::string, cImage*> logoCache;
+    std::map<std::string, cImage*> logoMenuItemCache;
+    std::map<std::string, cImage*> logoTimerCache;
+    std::vector<std::pair<std::string, cPoint> > GetMenuIcons(void);
+    std::vector<std::pair<std::string, sImgProperties> > GetSkinIcons(void);
+    bool LoadIcon(eCacheType type, std::string name);
+    void InsertIntoIconCache(eCacheType type, std::string name, int width, int height, bool preserveAspect = true);
+    bool LoadLogo(const cChannel *channel);
+    void InsertIntoLogoCache(eCacheType type, std::string channelID);
+    cPoint LogoSize(eCacheType type);
+    void CreateSkinElementsBlended(void);
+    void CreateSkinElementsGraphics(void);
+    void InsertIntoSkinElementCache(eSkinElementType type, int width=0, int height=0);
+    void Clear(void);
+};
+
+#endif //__NOPACITY_IMAGECACHE_H
diff --git a/imageloader.c b/imageloader.c
index bfc4ce5..1ab4a1b 100644
--- a/imageloader.c
+++ b/imageloader.c
@@ -1,3 +1,5 @@
+#include "config.h"
+#include "helpers.h"
 #include "imageloader.h"
 #include <math.h>
 #include <string>
@@ -6,24 +8,34 @@
 
 using namespace Magick;
 
-cImageLoader::cImageLoader() {
-    InitializeMagick(NULL);
+cImageLoader::cImageLoader() : cImageMagickWrapper() {
 }
 
 cImageLoader::~cImageLoader() {
 }
 
-bool cImageLoader::LoadLogo(const char *logo, int width = config.logoWidth, int height = config.logoHeight) {
+cImage cImageLoader::GetImage() {
+    return CreateImageCopy();
+}
+
+bool cImageLoader::LoadLogo(const char *logo, int width, int height ) {
     if ((width == 0)||(height==0))
         return false;
-    std::string logoLower = logo;
-    toLowerCase(logoLower);
+    std::string logoLower = StrToLowerCase(logo);
     bool success = false;
     if (config.logoPathSet) {
-        success = LoadImage(logoLower.c_str(), config.logoPath, config.logoExtension);
+        //theme dependend logo
+        cString logoPath = cString::sprintf("%s%s/", *config.logoPath, Setup.OSDTheme);
+        success = LoadImage(logoLower.c_str(), *logoPath, *config.logoExtension);
+        if (!success)
+            success = LoadImage(logoLower.c_str(), *config.logoPath, *config.logoExtension);
     }
     if (!success) {
-        success = LoadImage(logoLower.c_str(), config.logoPathDefault, config.logoExtension);
+        //theme dependend logo
+        cString logoPath = cString::sprintf("%s%s/", *config.logoPathDefault, Setup.OSDTheme);
+        success = LoadImage(logoLower.c_str(), *logoPath, *config.logoExtension);
+        if (!success)
+            success = LoadImage(logoLower.c_str(), *config.logoPathDefault, *config.logoExtension);
     }
     if (!success)
         return false;
@@ -33,75 +45,23 @@ bool cImageLoader::LoadLogo(const char *logo, int width = config.logoWidth, int
     return true;
 }
 
-bool cImageLoader::LoadIcon(const char *cIcon, int size) {
-	if (size==0)
-        return false;
-    bool success = false;
-    if (config.iconPathSet) {
-        cString iconThemePath = cString::sprintf("%s%s/", *config.iconPath, Setup.OSDTheme);
-        success = LoadImage(cString(cIcon), iconThemePath, "png");
-        if (!success) {
-            success = LoadImage(cString(cIcon), config.iconPath, "png");
-        }
-    }
-    if (!success) {
-        cString iconThemePath = cString::sprintf("%s%s/", *config.iconPathDefault, Setup.OSDTheme);
-        success = LoadImage(cString(cIcon), iconThemePath, "png");
-        if (!success) {
-            success = LoadImage(cString(cIcon), config.iconPathDefault, "png");
-        }
-    }
-    if (!success)
-        return false;
-    buffer.sample(Geometry(size, size));
-    return true;
-}
-
-bool cImageLoader::LoadIcon(const char *cIcon, int width, int height, bool preserveAspect) {
-  try {
+bool cImageLoader::LoadEPGImage(int eventID) {
+    int width = config.GetValue("epgImageWidth");
+    int height = config.GetValue("epgImageHeight");
     if ((width == 0)||(height==0))
         return false;
     bool success = false;
-    if (config.iconPathSet) {
-        cString iconThemePath = cString::sprintf("%s%s/", *config.iconPath, Setup.OSDTheme);
-        success = LoadImage(cString(cIcon), iconThemePath, "png");
-        if (!success) {
-            success = LoadImage(cString(cIcon), config.iconPath, "png");
-        }
+    if (config.epgImagePathSet) {
+        success = LoadImage(*cString::sprintf("%d", eventID), *config.epgImagePath, "jpg");
     }
     if (!success) {
-        cString iconThemePath = cString::sprintf("%s%s/", *config.iconPathDefault, Setup.OSDTheme);
-        success = LoadImage(cString(cIcon), iconThemePath, "png");
-        if (!success) {
-            success = LoadImage(cString(cIcon), config.iconPathDefault, "png");
-        }
+        success = LoadImage(*cString::sprintf("%d", eventID), *config.epgImagePathDefault, "jpg");
     }
-    if (!success)
-        return false;
-    if (preserveAspect) {
-        buffer.sample(Geometry(width, height));
-    } else {
-        cString geometry = cString::sprintf("%dx%d!", width, height);
-        buffer.scale(Geometry(*geometry));
-    }
-    return true;
-  }
-  catch (...) {
-    return false;
-  }
-}
-
-bool cImageLoader::LoadEPGImage(int eventID) {
-    int width = config.epgImageWidth;
-    int height = config.epgImageHeight;
-    if ((width == 0)||(height==0))
-        return false;
-    bool success = false;
-    if (config.epgImagePathSet) {
-        success = LoadImage(cString::sprintf("%d", eventID), config.epgImagePath, "jpg");
+    if (!success && config.epgImagePathSet) {
+        success = LoadImage(*cString::sprintf("%d_0", eventID), *config.epgImagePath, "jpg");
     }
     if (!success) {
-        success = LoadImage(cString::sprintf("%d", eventID), config.epgImagePathDefault, "jpg");
+        success = LoadImage(*cString::sprintf("%d_0", eventID), *config.epgImagePathDefault, "jpg");
     }
     if (!success)
         return false;
@@ -112,16 +72,16 @@ bool cImageLoader::LoadEPGImage(int eventID) {
 }
 
 bool cImageLoader::LoadAdditionalEPGImage(cString name) {
-    int width = config.epgImageWidthLarge;
-    int height = config.epgImageHeightLarge;
+    int width = config.GetValue("epgImageWidthLarge");
+    int height = config.GetValue("epgImageHeightLarge");
     if ((width == 0)||(height==0))
         return false;
     bool success = false;
     if (config.epgImagePathSet) {
-        success = LoadImage(name, config.epgImagePath, "jpg");
+        success = LoadImage(*name, *config.epgImagePath, "jpg");
     }
     if (!success) {
-        success = LoadImage(name, config.epgImagePathDefault, "jpg");
+        success = LoadImage(*name, *config.epgImagePathDefault, "jpg");
     }
     if (!success)
         return false;
@@ -132,14 +92,14 @@ bool cImageLoader::LoadAdditionalEPGImage(cString name) {
 }
 
 bool cImageLoader::LoadRecordingImage(cString Path) {
-    int width = config.epgImageWidth;
-    int height = config.epgImageHeight;
+    int width = config.GetValue("epgImageWidth");
+    int height = config.GetValue("epgImageHeight");
     if ((width == 0)||(height==0))
         return false;
     cString recImage("");
     if (FirstImageInFolder(Path, "jpg", &recImage)) {
         recImage = cString::sprintf("/%s", *recImage);
-        if (!LoadImage(*recImage, Path, "jpg"))
+        if (!LoadImage(*recImage, *Path, "jpg"))
             return false;
         buffer.sample( Geometry(width, height));
         return true;
@@ -148,99 +108,59 @@ bool cImageLoader::LoadRecordingImage(cString Path) {
 }
 
 bool cImageLoader::LoadAdditionalRecordingImage(cString path, cString name) {
-    int width = config.epgImageWidthLarge;
-    int height = config.epgImageHeightLarge;
+    int width = config.GetValue("epgImageWidthLarge");
+    int height = config.GetValue("epgImageHeightLarge");
     if ((width == 0)||(height==0))
         return false;
-    if (LoadImage(name, path, "jpg")) {
+    if (LoadImage(*name, *path, "jpg")) {
         buffer.sample( Geometry(width, height));
         return true;
     }
     return false;
 }
 
-void cImageLoader::DrawBackground(tColor back, tColor blend, int width, int height, bool mirror) {
-    Color Back = Argb2Color(back);
-    Color Blend = Argb2Color(blend);
-    Image tmp(Geometry(width, height), Blend);
-    double arguments[9] = {0.0,(double)height,0.0,-1*(double)width,0.0,0.0,1.5*(double)width,0.0,1.0};
-    tmp.sparseColor(MatteChannel, BarycentricColorInterpolate, 9, arguments);
-    Image tmp2(Geometry(width, height), Back);
-    tmp.composite(tmp2, 0, 0, OverlayCompositeOp);
-    if (mirror)
-        tmp.flop();
-    buffer = tmp;
-}
-
-void cImageLoader::DrawBackground2(tColor back, tColor blend, int width, int height) {
-    Color Back = Argb2Color(back);
-    Color Blend = Argb2Color(blend);
-    Image tmp(Geometry(width, height), Blend);
-    double arguments[9] = {0.0,(double)height,0.0,-0.5*(double)width,0.0,0.0,0.75*(double)width,0.0,1.0};
-    tmp.sparseColor(MatteChannel, BarycentricColorInterpolate, 9, arguments);
-    Image tmp2(Geometry(width, height), Back);
-    tmp.composite(tmp2, 0, 0, OverlayCompositeOp);
-    buffer = tmp;
-}
-
-cImage cImageLoader::GetImage() {
-    int w, h;
-    w = buffer.columns();
-    h = buffer.rows();
-    cImage image (cSize(w, h));
-    const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
-    for (int iy = 0; iy < h; ++iy) {
-        for (int ix = 0; ix < w; ++ix) {
-            tColor col = (~int(pixels->opacity * 255 / MaxRGB) << 24) 
-            | (int(pixels->green * 255 / MaxRGB) << 8) 
-            | (int(pixels->red * 255 / MaxRGB) << 16) 
-            | (int(pixels->blue * 255 / MaxRGB) );
-            image.SetPixel(cPoint(ix, iy), col);
-            ++pixels;
-        }
+bool cImageLoader::LoadPoster(const char *poster, int width, int height) {
+    if (LoadImage(poster)) {
+        buffer.sample(Geometry(width, height));
+        return true;
     }
-    return image;
-}
-
-Color cImageLoader::Argb2Color(tColor col) {
-    tIndex alpha = (col & 0xFF000000) >> 24;
-    tIndex red = (col & 0x00FF0000) >> 16;
-    tIndex green = (col & 0x0000FF00) >> 8;
-    tIndex blue = (col & 0x000000FF);
-    Color color(MaxRGB*red/255, MaxRGB*green/255, MaxRGB*blue/255, MaxRGB*(0xFF-alpha)/255);
-    return color;
+    return false;
 }
 
-void cImageLoader::toLowerCase(std::string &str) {
-    const int length = str.length();
-    for(int i=0; i < length; ++i) {
-        str[i] = std::tolower(str[i]);
+bool cImageLoader::SearchRecordingPoster(cString recPath, cString &found) {
+    cString manualPoster = cString::sprintf("%s/cover_vdr.jpg", *recPath);
+    if (FileSize(*manualPoster) != -1) {
+        found = manualPoster;
+        return true;
     }
-}
-
-bool cImageLoader::LoadImage(cString FileName, cString Path, cString Extension) {
-    try {
-        cString File = cString::sprintf("%s%s.%s", *Path, *FileName, *Extension);
-        dsyslog("nopacity: trying to load: %s", *File);
-        buffer.read(*File);
-        dsyslog("nopacity: %s sucessfully loaded", *File);
-    } catch (...) {     
-        return false;
+    manualPoster = cString::sprintf("%s/../../../cover_vdr.jpg", *recPath);
+    if (FileSize(*manualPoster) != -1) {
+        found = manualPoster;
+        return true;
     }
-    return true;
+    manualPoster = cString::sprintf("%s/../../cover_vdr.jpg", *recPath);
+    if (FileSize(*manualPoster) != -1) {
+        found = manualPoster;
+        return true;
+    }
+    return false;
 }
 
 bool cImageLoader::FirstImageInFolder(cString Path, cString Extension, cString *recImage) {
-    DIR *folder;
+    DIR *folder = NULL;
     struct dirent *file;
     folder = opendir(Path);
+    if (!folder)
+        return false;
     while (file = readdir(folder)) {
         if (endswith(file->d_name, *Extension)) {
             std::string fileName = file->d_name;
-            if (fileName.length() > 4)
-                fileName = fileName.substr(0, fileName.length() - 4);
-            else
-                return false;
+            int strlen = fileName.length();
+            if (strlen < 8)
+                continue;
+            if (!fileName.compare(strlen-8, 8, "_vdr.jpg"))
+                continue;
+            fileName = fileName.substr(0, strlen - 4);
             *recImage = fileName.c_str();
             return true;
         }
diff --git a/imageloader.h b/imageloader.h
index a5a0b5f..2c080ba 100644
--- a/imageloader.h
+++ b/imageloader.h
@@ -6,29 +6,24 @@
 #include <vdr/osd.h>
 #include <vdr/skins.h>
 #include <Magick++.h>
+#include "imagemagickwrapper.h"
 
 using namespace Magick;
- 
-class cImageLoader {
+
+class cImageLoader : public cImageMagickWrapper {
 public:
     cImageLoader();
     ~cImageLoader();
     cImage GetImage();
-    bool LoadLogo(const char *logo, int width, int height);
-    bool LoadIcon(const char *cIcon, int size);
-    bool LoadIcon(const char *cIcon, int width, int height, bool preserveAspect = true);
+    bool LoadLogo(const char *logo, int width = config.GetValue("logoWidthOriginal"), int height = config.GetValue("logoHeightOriginal"));
     bool LoadEPGImage(int eventID);
     bool LoadAdditionalEPGImage(cString name);
     bool LoadRecordingImage(cString Path);
     bool LoadAdditionalRecordingImage(cString path, cString name);
-    void DrawBackground(tColor back, tColor blend, int width, int height, bool mirror = false);
-    void DrawBackground2(tColor back, tColor blend, int width, int height);
+    bool LoadPoster(const char *poster, int width, int height);
+    bool SearchRecordingPoster(cString recPath, cString &found);
 private:
-    Image buffer;
-    Color Argb2Color(tColor col);
-    void toLowerCase(std::string &str);
-    bool LoadImage(cString FileName, cString Path, cString Extension);
-	bool FirstImageInFolder(cString Path, cString Extension, cString *recImage);
+    bool FirstImageInFolder(cString Path, cString Extension, cString *recImage);
 };
 
 #endif //__NOPACITY_IMAGELOADER_H
diff --git a/imagemagickwrapper.c b/imagemagickwrapper.c
new file mode 100644
index 0000000..49fa221
--- /dev/null
+++ b/imagemagickwrapper.c
@@ -0,0 +1,162 @@
+#include <string>
+#include <sstream>
+#include "imagemagickwrapper.h"
+#include "config.h"
+#include "imagescaler.h"
+
+cImageMagickWrapper::cImageMagickWrapper() {
+    InitializeMagick(NULL);
+}
+
+cImageMagickWrapper::~cImageMagickWrapper() {
+}
+
+cImage *cImageMagickWrapper::CreateImage(int width, int height, bool preserveAspect) {
+    int w, h;
+    w = buffer.columns();
+    h = buffer.rows();
+    if (width == 0)
+        width = w;
+    if (height == 0)
+        height = h;
+    if (preserveAspect) {
+        unsigned scale_w = 1000 * width / w;
+        unsigned scale_h = 1000 * height / h;
+        if (scale_w > scale_h)
+          width = w * height / h;
+        else
+          height = h * width / w;
+    }
+    const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
+    cImage *image = new cImage(cSize(width, height));
+    tColor *imgData = (tColor *)image->Data();
+    if (w != width || h != height) {
+        ImageScaler scaler;
+        scaler.SetImageParameters(imgData, width, width, height, w, h);
+        for (const void *pixels_end = &pixels[w*h]; pixels < pixels_end; ++pixels)
+            scaler.PutSourcePixel(pixels->blue / ((MaxRGB + 1) / 256),
+                                  pixels->green / ((MaxRGB + 1) / 256),
+                                  pixels->red / ((MaxRGB + 1) / 256),
+                                  ~((unsigned char)(pixels->opacity / ((MaxRGB + 1) / 256))));
+        return image;
+    }
+    for (const void *pixels_end = &pixels[width*height]; pixels < pixels_end; ++pixels)
+        *imgData++ = ((~int(pixels->opacity / ((MaxRGB + 1) / 256)) << 24) |
+                      (int(pixels->green / ((MaxRGB + 1) / 256)) << 8) |
+                      (int(pixels->red / ((MaxRGB + 1) / 256)) << 16) |
+                      (int(pixels->blue / ((MaxRGB + 1) / 256)) ));
+    return image;
+}
+
+cImage cImageMagickWrapper::CreateImageCopy() {
+    int w, h;
+    w = buffer.columns();
+    h = buffer.rows();
+    cImage image (cSize(w, h));
+    const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
+    for (int iy = 0; iy < h; ++iy) {
+        for (int ix = 0; ix < w; ++ix) {
+            tColor col = (~int(pixels->opacity * 255 / MaxRGB) << 24)
+            | (int(pixels->green * 255 / MaxRGB) << 8)
+            | (int(pixels->red * 255 / MaxRGB) << 16)
+            | (int(pixels->blue * 255 / MaxRGB) );
+            image.SetPixel(cPoint(ix, iy), col);
+            ++pixels;
+        }
+    }
+    return image;
+}
+
+bool cImageMagickWrapper::LoadImage(std::string FileName, std::string Path, std::string Extension) {
+    try {
+        std::stringstream sstrImgFile;
+        sstrImgFile << Path << FileName << "." << Extension;
+        std::string imgFile = sstrImgFile.str();
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: trying to load: %s", imgFile.c_str());
+        buffer.read(imgFile.c_str());
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: %s sucessfully loaded", imgFile.c_str());
+    } catch( Magick::Warning &warning ) {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: Magick Warning: %s", warning.what());
+        return true;
+    } catch( Magick::Error &error ) {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: Magick Error: %s", error.what());
+        return false;
+    } catch(...) {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: an unknown Magick error occured during image loading");
+        return false;
+    }
+    return true;
+}
+
+bool cImageMagickWrapper::LoadImage(const char *fullpath) {
+    if ((fullpath == NULL) || (strlen(fullpath) < 5))
+        return false;
+    try {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: trying to load: %s", fullpath);
+        buffer.read(fullpath);
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: %s sucessfully loaded", fullpath);
+    } catch( Magick::Warning &warning ) {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: Magick Warning: %s", warning.what());
+        return true;
+    } catch( Magick::Error &error ) {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: Magick Error: %s", error.what());
+        return false;
+    } catch(...) {
+        if (config.GetValue("debugImageLoading"))
+            dsyslog("nopacity: an unknown Magick error occured during image loading");
+        return false;
+    }
+    return true;
+}
+
+Color cImageMagickWrapper::Argb2Color(tColor col) {
+    tIndex alpha = (col & 0xFF000000) >> 24;
+    tIndex red = (col & 0x00FF0000) >> 16;
+    tIndex green = (col & 0x0000FF00) >> 8;
+    tIndex blue = (col & 0x000000FF);
+    Color color(MaxRGB*red/255, MaxRGB*green/255, MaxRGB*blue/255, MaxRGB*(0xFF-alpha)/255);
+    return color;
+}
+
+void cImageMagickWrapper::CreateGradient(tColor back, tColor blend, int width, int height, double wfactor, double hfactor) {
+    Color Back = Argb2Color(back);
+    Color Blend = Argb2Color(blend);
+    int maxw = MaxRGB * wfactor;
+    int maxh = MaxRGB * hfactor;
+
+    Image imgblend(Geometry(width, height), Blend);
+    imgblend.modifyImage();
+    imgblend.type(TrueColorMatteType);
+    PixelPacket *pixels = imgblend.getPixels(0, 0, width, height);
+    for (int x = 0; x < width; x++) {
+        for (int y = 0; y < height; y++) {
+            PixelPacket *pixel = pixels + y * width + x;
+            int opacity = (maxw / width * x + maxh - maxh / height * y) / 2;
+            pixel->opacity = (opacity <= MaxRGB) ? opacity : MaxRGB;
+        }
+    }
+    imgblend.syncPixels();
+
+    Image imgback(Geometry(width, height), Back);
+    imgback.composite(imgblend, 0, 0, OverCompositeOp);
+
+    buffer = imgback;
+}
+
+void cImageMagickWrapper::CreateBackground(tColor back, tColor blend, int width, int height, bool mirror) {
+    CreateGradient(back, blend, width, height, 0.8, 0.8);
+    if (mirror)
+        buffer.flop();
+}
+void cImageMagickWrapper::CreateBackgroundReverse(tColor back, tColor blend, int width, int height) {
+    CreateGradient(back, blend, width, height, 1.3, 0.7);
+}
diff --git a/imagemagickwrapper.h b/imagemagickwrapper.h
new file mode 100644
index 0000000..5f9901e
--- /dev/null
+++ b/imagemagickwrapper.h
@@ -0,0 +1,28 @@
+#ifndef __NOPACITY_IMAGEMAGICKWRAPPER_H
+#define __NOPACITY_IMAGEMAGICKWRAPPER_H
+
+#define X_DISPLAY_MISSING
+
+#include <Magick++.h>
+#include <vdr/osd.h>
+
+using namespace Magick;
+
+class cImageMagickWrapper {
+private:
+    void CreateGradient(tColor back, tColor blend, int width, int height, double wfactor, double hfactor);
+public:
+    cImageMagickWrapper();
+    ~cImageMagickWrapper();
+protected:
+    Image buffer;
+    Color Argb2Color(tColor col);
+    cImage *CreateImage(int width, int height, bool preserveAspect = true);
+    cImage CreateImageCopy(void);
+    bool LoadImage(std::string FileName, std::string Path, std::string Extension);
+    bool LoadImage(const char *fullpath);
+    void CreateBackground(tColor back, tColor blend, int width, int height, bool mirror = false);
+    void CreateBackgroundReverse(tColor back, tColor blend, int width, int height);
+};
+
+#endif //__NOPACITY_IMAGEMAGICKWRAPPER_H
diff --git a/imagescaler.c b/imagescaler.c
new file mode 100644
index 0000000..cebe912
--- /dev/null
+++ b/imagescaler.c
@@ -0,0 +1,149 @@
+
+#include "imagescaler.h"
+
+#include <cstdlib>
+#include <cmath>
+
+ImageScaler::ImageScaler() :
+	m_memory(NULL),
+	m_hor_filters(NULL),
+	m_ver_filters(NULL),
+	m_buffer(NULL),
+	m_dst_image(NULL),
+	m_dst_stride(0),
+	m_dst_width(0),
+	m_dst_height(0),
+	m_src_width(0),
+	m_src_height(0),
+	m_src_x(0),
+	m_src_y(0),
+	m_dst_x(0),
+	m_dst_y(0) {
+}
+
+ImageScaler::~ImageScaler() {
+	if ( m_memory ) free( m_memory );
+}
+
+// sin(x)/(x)
+static float sincf( float x ) {
+	if ( fabsf(x) < 0.05f ) return 1.0f - (1.0f/6.0f)*x*x;  // taylor series approximation to avoid 0/0
+	return sin(x)/x;
+}
+
+static void CalculateFilters( ImageScaler::Filter *filters, int dst_size, int src_size ) {
+	const float fc = dst_size >= src_size ? 1.0f : ((float) dst_size)/((float) src_size);
+
+	for (int i = 0; i < dst_size; i++) {
+		const int    d          = 2*dst_size;                     // sample position denominator
+		const int    e          = (2*i+1) * src_size - dst_size;  // sample position enumerator
+		int          offset     =  e / d;                         // truncated sample position
+		const float  sub_offset = ((float) (e - offset*d)) / ((float) d);  // exact sample position is (float) e/d = offset + sub_offset
+
+		// calculate filter coefficients
+		float  h[4];
+		for (int j=0; j<4; j++) {
+			const float t = 3.14159265359f * (sub_offset+(1-j));
+			h[j] = sincf( fc * t ) * cosf( 0.25f * t );             // sinc-lowpass and cos-window
+		}
+
+		// ensure that filter does not reach out off image bounds:
+		while ( offset < 1 ) {
+			h[0] += h[1];
+			h[1] = h[2];
+			h[2] = h[3];
+			h[3] = 0.0f;
+			offset++;
+		}
+
+		while ( offset+3 > src_size ) {
+			h[3] += h[2];
+			h[2] = h[1];
+			h[1] = h[0];
+			h[0] = 0.0f;
+			offset--;
+		}
+
+		// coefficients are normalized to sum up to 2048
+		const float  norm = 2048.0f / ( h[0] + h[1] + h[2] + h[3] );
+
+		offset--;  // offset of fist used pixel
+
+		filters[i].m_offset = offset + 4;  // store offset of first unused pixel
+
+		for (int j=0; j<4; j++) {
+			const float t = norm * h[j];
+			filters[i].m_coeff[(offset+j) & 3] = (int) ((t > 0.0f) ?  (t+0.5f) : (t-0.5f));  // consider ring buffer index permutations
+		}
+	}
+
+	// set end marker
+	filters[dst_size].m_offset = (unsigned) -1;
+
+}
+
+void ImageScaler::SetImageParameters( unsigned *dst_image, unsigned dst_stride, unsigned dst_width, unsigned dst_height, unsigned src_width, unsigned src_height ) {
+	m_src_x = 0;
+	m_src_y = 0;
+	m_dst_x = 0;
+	m_dst_y = 0;
+
+	m_dst_image  = dst_image;
+	m_dst_stride = dst_stride;
+
+	// if image dimensions do not change we can keep the old filter coefficients
+	if ( (src_width == m_src_width) && (src_height == m_src_height) && (dst_width == m_dst_width) && (dst_height == m_dst_height) ) return;
+
+	m_dst_width  = dst_width;
+	m_dst_height = dst_height;
+	m_src_width  = src_width;
+	m_src_height = src_height;
+
+	if ( m_memory ) free( m_memory );
+
+	const unsigned  hor_filters_size = (m_dst_width  + 1) * sizeof(Filter);  // reserve one extra position for end marker
+	const unsigned  ver_filters_size = (m_dst_height + 1) * sizeof(Filter);
+	const unsigned  buffer_size      = 4 * m_dst_width * sizeof(TmpPixel);
+
+	char *p = (char *) malloc( hor_filters_size + ver_filters_size + buffer_size );
+
+	m_memory = p;
+
+	m_hor_filters = (Filter   *) p;  p += hor_filters_size;
+	m_ver_filters = (Filter   *) p;  p += ver_filters_size;
+	m_buffer      = (TmpPixel *) p;
+
+	CalculateFilters( m_hor_filters, m_dst_width , m_src_width  );
+	CalculateFilters( m_ver_filters, m_dst_height, m_src_height );
+}
+
+// shift range to 0..255 and clamp overflows
+static unsigned shift_clamp( int x ) {
+	x = ( x + (1<<21) ) >> 22;
+	if ( x <   0 ) return   0;
+	if ( x > 255 ) return 255;
+	return x;
+}
+
+void ImageScaler::NextSourceLine() {
+	m_dst_x = 0;
+	m_src_x = 0;
+	m_src_y++;
+
+	while ( m_ver_filters[m_dst_y].m_offset == m_src_y ) {
+		const int        h0  = m_ver_filters[m_dst_y].m_coeff[0];
+		const int        h1  = m_ver_filters[m_dst_y].m_coeff[1];
+		const int        h2  = m_ver_filters[m_dst_y].m_coeff[2];
+		const int        h3  = m_ver_filters[m_dst_y].m_coeff[3];
+		const TmpPixel  *src = m_buffer;
+		unsigned        *dst = m_dst_image + m_dst_stride * m_dst_y;
+
+		for (unsigned i=0; i<m_dst_width; i++) {
+			const ImageScaler::TmpPixel t( src[0]*h0 + src[1]*h1 + src[2]*h2 + src[3]*h3 );
+			src += 4;
+			dst[i] = shift_clamp(t[0]) | (shift_clamp(t[1])<<8) | (shift_clamp(t[2])<<16) | (shift_clamp(t[3])<<24);
+		}
+
+		m_dst_y++;
+	}
+}
diff --git a/imagescaler.h b/imagescaler.h
new file mode 100644
index 0000000..f2de6ba
--- /dev/null
+++ b/imagescaler.h
@@ -0,0 +1,97 @@
+#ifndef _ImageScaler_h
+#define _ImageScaler_h
+
+/*!
+ * this class scales images consisting of 4 components (RGBA)
+ * to an arbitrary size using a 4-tap filter
+ */
+class ImageScaler {
+public:
+
+	struct Filter {
+		unsigned  m_offset;
+		short     m_coeff[4];
+	};
+
+	ImageScaler();
+	~ImageScaler();
+
+	//! set destination image and source image size
+	void SetImageParameters( unsigned *dst_image, unsigned dst_stride, unsigned dst_width, unsigned dst_height, unsigned src_width, unsigned src_height );
+
+	/*! process one pixel of source image; destination image is written while input is processed
+	 * SetImageParameters() must be called first
+	 */
+	void PutSourcePixel( unsigned char c0, unsigned char c1, unsigned char c2, unsigned char c3 ) {
+		m_hbuf[ (m_src_x++) & 3 ].Set( c0, c1, c2, c3 );
+
+		TmpPixel      *bp = m_buffer + 4 * m_dst_x + (m_src_y & 3);
+		const Filter  *fh;
+
+		while ( (fh=m_hor_filters+m_dst_x)->m_offset == m_src_x ) {
+			*bp = m_hbuf[0]*fh->m_coeff[0] + m_hbuf[1]*fh->m_coeff[1] + m_hbuf[2]*fh->m_coeff[2] + m_hbuf[3]*fh->m_coeff[3];
+			m_dst_x++;
+			bp += 4;
+		}
+
+		if ( m_src_x == m_src_width ) NextSourceLine();
+	}
+
+private:
+
+	//! temporary image pixel class - a 4-element integer vector
+	class TmpPixel {
+	public:
+		TmpPixel() {
+		}
+
+		TmpPixel( int c0, int c1, int c2, int c3 ) {
+			Set(c0,c1,c2,c3);
+		}
+
+		void Set( int c0, int c1, int c2, int c3 ) {
+			m_comp[0] = c0;
+			m_comp[1] = c1;
+			m_comp[2] = c2;
+			m_comp[3] = c3;
+		}
+
+		TmpPixel operator*( int s ) const {
+			return TmpPixel( m_comp[0]*s, m_comp[1]*s, m_comp[2]*s, m_comp[3]*s );
+		}
+
+		TmpPixel operator+( const TmpPixel &x ) const {
+			return TmpPixel( m_comp[0] + x[0], m_comp[1] + x[1], m_comp[2] + x[2], m_comp[3] + x[3] );
+		}
+
+		// return component i=[0..3] - No range check!
+		int operator[](unsigned i) const {
+			return m_comp[i];
+		}
+
+	private:
+		int  m_comp[4];
+	};
+
+	//! this is called whenever one input line is processed completely
+	void NextSourceLine();
+
+	TmpPixel   m_hbuf[4];      //! ring buffer for 4 input pixels
+	char      *m_memory;       //! buffer container
+	Filter    *m_hor_filters;  //! buffer for horizontal filters (one for each output image column)
+	Filter    *m_ver_filters;  //! buffer for vertical   filters (one for each output image row)
+	TmpPixel  *m_buffer;       //! buffer contains 4 horizontally filtered input lines, multiplexed
+	unsigned  *m_dst_image;    //! pointer to destination image
+	unsigned   m_dst_stride;   //! destination image stride
+	unsigned   m_dst_width;    //! destination image width
+	unsigned   m_dst_height;   //! destination image height
+	unsigned   m_src_width;    //! source image width
+	unsigned   m_src_height;   //! source image height
+	unsigned   m_src_x;        //! x position of next source image pixel
+	unsigned   m_src_y;        //! y position of source image line currently beeing processed
+	unsigned   m_dst_x;        //! x position of next destination image pixel
+	unsigned   m_dst_y;        //! x position of next destination image line
+};
+
+#endif  // _ImageScaler_h
+
diff --git a/logoconverter/backgrounds/bg1.png b/logoconverter/backgrounds/bg1.png
new file mode 100644
index 0000000..6d0aac2
Binary files /dev/null and b/logoconverter/backgrounds/bg1.png differ
diff --git a/logoconverter/backgrounds/bg2.png b/logoconverter/backgrounds/bg2.png
new file mode 100644
index 0000000..36e519f
Binary files /dev/null and b/logoconverter/backgrounds/bg2.png differ
diff --git a/logoconverter/backgrounds/bg3.png b/logoconverter/backgrounds/bg3.png
new file mode 100644
index 0000000..a215bc2
Binary files /dev/null and b/logoconverter/backgrounds/bg3.png differ
diff --git a/logoconverter/backgrounds/bg4.png b/logoconverter/backgrounds/bg4.png
new file mode 100644
index 0000000..293210a
Binary files /dev/null and b/logoconverter/backgrounds/bg4.png differ
diff --git a/logoconverter/backgrounds/fg1.png b/logoconverter/backgrounds/fg1.png
new file mode 100644
index 0000000..6c7ab9d
Binary files /dev/null and b/logoconverter/backgrounds/fg1.png differ
diff --git a/logoconverter/backgrounds/fg2.png b/logoconverter/backgrounds/fg2.png
new file mode 100644
index 0000000..d9fce76
Binary files /dev/null and b/logoconverter/backgrounds/fg2.png differ
diff --git a/logoconverter/backgrounds/fg3.png b/logoconverter/backgrounds/fg3.png
new file mode 100644
index 0000000..0aabdff
Binary files /dev/null and b/logoconverter/backgrounds/fg3.png differ
diff --git a/logoconverter/backgrounds/fg4.png b/logoconverter/backgrounds/fg4.png
new file mode 100644
index 0000000..8193d76
Binary files /dev/null and b/logoconverter/backgrounds/fg4.png differ
diff --git a/logoconverter/make_background.sh b/logoconverter/make_background.sh
new file mode 100644
index 0000000..a2acbcb
--- /dev/null
+++ b/logoconverter/make_background.sh
@@ -0,0 +1,33 @@
+#!/bin/bash -e
+#set -x
+
+#CONFIG
+
+SOURCEDIR=/etc/vdr/plugins/skinnopacity/logos
+OUTPUTDIR=/etc/vdr/plugins/skinnopacity/logos_darkred
+FOREGROUND=/usr/local/src/VDR/PLUGINS/src/skinnopacity/logoconverter/backgrounds/fg4.png
+BACKGROUND=/usr/local/src/VDR/PLUGINS/src/skinnopacity/logoconverter/backgrounds/bg2.png
+
+#MAIN
+IFS=$'\n'
+FILES=$(find $SOURCEDIR -name *.png | sort)
+sedstring="s!$SOURCEDIR!$OUTPUTDIR!g"
+
+[ ! -d $SOURCEDIR ] && (echo "ERR: $SOURCEDIR1 not found"; exit 1);
+[ ! -f $FOREGROUND ] && (echo "ERR: $FOREGROUND not found"; exit 1);
+[ ! -f $BACKGROUND ] && (echo "ERR: $BACKGROUND not found"; exit 1);
+
+echo "Convert new logos to format $(basename $OUTPUTDIR)"
+for file in $FILES; do
+  targetdir=`dirname $file | sed -e $sedstring`
+  targetfile="$targetdir/$(basename $file)"
+  if [ ! -f $targetfile ] ; then
+    echo $targetfile
+    [ ! -d $targetdir ]  && mkdir -p $targetdir
+    convert +dither -background 'transparent' -resize '220x164' -extent '268x200' -gravity 'center' "$file" png:- 2> /dev/null | \
+      composite - $BACKGROUND png:- 2> /dev/null | \
+      composite -compose screen -blend 50x100 $FOREGROUND - "$targetfile" 2> /dev/null
+  fi
+done
+
+exit 0
diff --git a/menudetailview.c b/menudetailview.c
index 36165d2..e2a323a 100644
--- a/menudetailview.c
+++ b/menudetailview.c
@@ -1,491 +1,203 @@
 #include "menudetailview.h"
-#include "services/epgsearch.h"
-#include <sstream>
-#include <iostream>
-#include <dirent.h>
-#include <vector>
 
-cNopacityMenuDetailView::cNopacityMenuDetailView(cOsd *osd) {
+/********************************************************************************************
+* cNopacityDetailView
+********************************************************************************************/
+cNopacityDetailView::cNopacityDetailView(eDetailViewType detailViewType, cOsd *osd, cImageCache *imgCache) {
+    type = detailViewType;
     this->osd = osd;
-    hasScrollbar = false;
-}
-
-cNopacityMenuDetailView::~cNopacityMenuDetailView(void) {
-    delete font;
-    if (fontHeader)
-        delete fontHeader;
-    if (fontHeaderLarge)
-        delete fontHeaderLarge;
-}
-
-void cNopacityMenuDetailView::SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight) {
+    this->imgCache = imgCache;
+    ev = NULL;
+    rec = NULL;
+    text = NULL;
+    view = NULL;
+    x = 0;
+    width = 0;
+    height = 0;
+    top = 0;
+    border = 0;
+    headerHeight = 0;
+}
+
+cNopacityDetailView::~cNopacityDetailView(void) {
+    Cancel(-1);
+    while (Active())
+        cCondWait::SleepMs(10);
+    if (view)
+        delete view;
+}
+
+void cNopacityDetailView::SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight) {
     this->x = x;
     this->width = width;
     this->height = height;
     this->top = top;
     this->border = contentBorder;
     this->headerHeight = headerHeight;
-    contentHeight = height - headerHeight;
-}
-
-int cNopacityMenuDetailView::DrawTextWrapper(cTextWrapper *wrapper, int top) {
-    int linesText = wrapper->Lines();
-    int textHeight = font->Height();
-    int currentHeight = 0;
-    for (int i=0; i < linesText; i++) {
-        currentHeight = (i+1)*textHeight + top;
-        pixmapContent->DrawText(cPoint(2*border, currentHeight), wrapper->GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrTransparent, font);
-    }
-    return currentHeight + textHeight;
-}
-
-double cNopacityMenuDetailView::ScrollbarSize(void) {
-    double barSize = (double)contentHeight / (double)contentDrawPortHeight;
-    return barSize;
-}
-
-double cNopacityMenuDetailView::Offset(void) {
-    double offset;
-    if (((-1)*pixmapContent->DrawPort().Point().Y() + contentHeight + font->Height()) > contentDrawPortHeight)
-        offset = (double)1 - ScrollbarSize();
-    else
-        offset = (double)((-1)*pixmapContent->DrawPort().Point().Y())/(double)((-1)*pixmapContent->DrawPort().Point().Y() + contentHeight);
-    return offset;
-
 }
-bool cNopacityMenuDetailView::Scroll(bool Up, bool Page) {
 
-    int aktHeight = pixmapContent->DrawPort().Point().Y();
-    int totalHeight = pixmapContent->DrawPort().Height();
-    int screenHeight = pixmapContent->ViewPort().Height();
-    int lineHeight = font->Height();
-    bool scrolled = false;
-    if (Up) {
-        if (Page) {
-            int newY = aktHeight + screenHeight;
-            if (newY > 0)
-                newY = 0;
-            pixmapContent->SetDrawPortPoint(cPoint(0, newY));
-            scrolled = true;
-        } else {
-            if (aktHeight < 0) {
-                pixmapContent->SetDrawPortPoint(cPoint(0, aktHeight + lineHeight));
-                scrolled = true;
+void cNopacityDetailView::InitiateViewType(void) {
+    static cPlugin *pScraper = GetScraperPlugin();
+    ScraperGetEventType call;
+    switch (type) {
+        case dvEvent: {
+            if (!ev)
+                break;
+            call.event = ev;
+            if (!pScraper) {
+                view = new cNopacityEPGView(osd, imgCache);
+            } else if (pScraper->Service("GetEventType", &call)) {
+                if (call.type == tMovie) {
+                    view = new cNopacityMovieView(osd, imgCache, call.movieId);
+                } else if (call.type == tSeries) {
+                    view = new cNopacitySeriesView(osd, imgCache, call.seriesId, call.episodeId);
+                }
+            } else {
+                view = new cNopacityEPGView(osd, imgCache);                
             }
-        }
-    } else {
-        if (Page) {
-            int newY = aktHeight - screenHeight;
-            if ((-1)*newY > totalHeight - screenHeight)
-                newY = (-1)*(totalHeight - screenHeight);
-            pixmapContent->SetDrawPortPoint(cPoint(0, newY));
-            scrolled = true;
-        } else {
-            if (totalHeight - ((-1)*aktHeight + lineHeight) > screenHeight) {
-                pixmapContent->SetDrawPortPoint(cPoint(0, aktHeight - lineHeight));
-                scrolled = true;
+            view->SetTitle(ev->Title());
+            view->SetSubTitle(ev->ShortText());
+            view->SetInfoText(ev->Description());
+            cString dateTime;
+            time_t vps = ev->Vps();
+            if (vps) {
+                dateTime = cString::sprintf("%s  %s - %s (%d %s) VPS: %s", *ev->GetDateString(), *ev->GetTimeString(), *ev->GetEndTimeString(), ev->Duration()/60, tr("min"), *TimeString(vps));
+            } else {
+                dateTime = cString::sprintf("%s  %s - %s (%d %s)", *ev->GetDateString(), *ev->GetTimeString(), *ev->GetEndTimeString(), ev->Duration()/60, tr("min"));
             }
-        }
-    }
-    return scrolled;
-}
-
-//---------------cNopacityMenuDetailEventView---------------------
-
-cNopacityMenuDetailEventView::cNopacityMenuDetailEventView(cOsd *osd, const cEvent *Event) : cNopacityMenuDetailView(osd) {
-    event = Event;
-    numEPGPics = 0;
-}
-
-cNopacityMenuDetailEventView::~cNopacityMenuDetailEventView(void) {
-    osd->DestroyPixmap(pixmapHeader);
-    osd->DestroyPixmap(pixmapContent);
-    osd->DestroyPixmap(pixmapLogo);
-}
-
-void cNopacityMenuDetailEventView::CreatePixmaps(void) {
-    pixmapHeader =  osd->CreatePixmap(3, cRect(x, top, width, headerHeight));
-    pixmapContent = osd->CreatePixmap(3, cRect(x, top + headerHeight, width, contentHeight),
-                                         cRect(0, 0, width, contentDrawPortHeight));
-    pixmapLogo =    osd->CreatePixmap(4, cRect(x + border, top + max((headerHeight-config.logoHeight)/2,1), config.detailViewLogoWidth, config.detailViewLogoHeight));
-
-    pixmapHeader->Fill(clrTransparent);
-    pixmapHeader->DrawRectangle(cRect(0, headerHeight - 2, width, 2), Theme.Color(clrMenuBorder));
-    pixmapContent->Fill(clrTransparent);
-    pixmapLogo->Fill(clrTransparent);
-    
-}
-
-void cNopacityMenuDetailEventView::SetFonts(void) {
-    font = cFont::CreateFont(config.fontName, contentHeight / 25 + 3 + config.fontDetailView);
-    fontHeaderLarge = cFont::CreateFont(config.fontName, headerHeight / 4 + config.fontDetailViewHeaderLarge);
-    fontHeader = cFont::CreateFont(config.fontName, headerHeight / 6 + config.fontDetailViewHeader);
-}
-
-void cNopacityMenuDetailEventView::SetContent(void) {
-    if (event) {
-        content.Set(event->Description(), font, width - 4 * border);
-        if (config.displayRerunsDetailEPGView) {
-            LoadReruns();
-        }
-    }
-}
-
-void cNopacityMenuDetailEventView::SetContentHeight(void) {
-    int lineHeight = font->Height();
-    int linesContent = content.Lines() + 1;
-    if (config.displayRerunsDetailEPGView) {
-        linesContent+= reruns.Lines() + 2;
-    }
-    int heightContentText = linesContent * lineHeight;
-    
-    if (config.displayAdditionalEPGPictures) {
-        heightContentText += HeightEPGPics();
-    }
-
-    if (heightContentText > contentHeight) {
-        contentDrawPortHeight = heightContentText;
-        hasScrollbar = true;
-    } else {
-        contentDrawPortHeight = contentHeight;  
-    }
-}
-
-int cNopacityMenuDetailEventView::HeightEPGPics(void) {
-    int numPicsAvailable = 0;
-    for (int i=1; i <= config.numAdditionalEPGPictures; i++) {
-        cString epgimage;
-        if (config.epgImagePathSet) {
-            epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePath, event->EventID(), i);
-        } else {
-            epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePathDefault, event->EventID(), i);
-        }
-        FILE *fp = fopen(*epgimage, "r");
-        if (fp) {
-            numPicsAvailable = i;
-            fclose(fp);
-        } else {
-            break;
-        }
-    }
-    numEPGPics = numPicsAvailable;
-    int picsPerLine = width / (config.epgImageWidthLarge + border);
-    int picLines = numPicsAvailable / picsPerLine;
-    if (numPicsAvailable%picsPerLine != 0)
-        picLines++;
-    return picLines * (config.epgImageHeightLarge + border) + 2*border;
-}
-
-void cNopacityMenuDetailEventView::Render(void) {
-    DrawHeader();
-    int currentHight = DrawTextWrapper(&content, 0);
-    if (config.displayRerunsDetailEPGView) {
-        currentHight = DrawTextWrapper(&reruns, currentHight);
-    }
-    if (config.displayAdditionalEPGPictures) {
-        DrawEPGPictures(currentHight);
-    }
-}
-
-void cNopacityMenuDetailEventView::DrawHeader(void) {
-    cImageLoader imgLoader;
-    int logoWidth = config.detailViewLogoWidth;
-    cChannel *channel = Channels.GetByChannelID(event->ChannelID(), true);
-    if (channel && channel->Name() && imgLoader.LoadLogo(channel->Name(), logoWidth, config.detailViewLogoHeight)) {        
-        pixmapLogo->DrawImage(cPoint(0, max((headerHeight - config.detailViewLogoHeight - border)/2, 0)), imgLoader.GetImage());
-    }
-    int widthTextHeader = width - 4 * border - logoWidth;
-    if (imgLoader.LoadEPGImage(event->EventID())) {
-        pixmapHeader->DrawImage(cPoint(width - config.epgImageWidth - border, (headerHeight-config.epgImageHeight)/2), imgLoader.GetImage());
-        if (config.roundedCorners) {
-            int radius = config.cornerRadius;
-            int x = width - config.epgImageWidth - border;
-            int y = (headerHeight-config.epgImageHeight)/2;
-            pixmapHeader->DrawEllipse(cRect(x,y,radius,radius), clrTransparent, -2);
-            pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y,radius,radius), clrTransparent, -1);
-            pixmapHeader->DrawEllipse(cRect(x,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -3);
-            pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -4);
-        }
-        widthTextHeader -= config.epgImageWidth;
-    }
-
-    int lineHeight = fontHeaderLarge->Height();
-
-    cString dateTime = cString::sprintf("%s  %s - %s", *event->GetDateString(), *event->GetTimeString(), *event->GetEndTimeString());
-    pixmapHeader->DrawText(cPoint(logoWidth + 2*border, (lineHeight - fontHeader->Height())/2), *dateTime, Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
-
-    cTextWrapper title;
-    title.Set(event->Title(), fontHeaderLarge, widthTextHeader);
-    int currentLineHeight = lineHeight;
-    for (int i=0; i < title.Lines(); i++) {
-        pixmapHeader->DrawText(cPoint(logoWidth + 2*border, currentLineHeight), title.GetLine(i), Theme.Color(clrMenuFontDetailViewHeaderTitle), clrTransparent, fontHeaderLarge);
-        currentLineHeight += lineHeight;
-    }
-
-    cTextWrapper shortText;
-    shortText.Set(event->ShortText(), fontHeader, widthTextHeader);
-    currentLineHeight += (lineHeight - fontHeader->Height())/2;
-    for (int i=0; i < shortText.Lines(); i++) {
-        if ((currentLineHeight + fontHeader->Height()) < headerHeight) {
-            pixmapHeader->DrawText(cPoint(logoWidth + 2*border, currentLineHeight), shortText.GetLine(i), Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
-            currentLineHeight += fontHeader->Height();
-        } else
-            break;
-    }
-
-}
-
-void cNopacityMenuDetailEventView::LoadReruns(void) {
-    cPlugin *epgSearchPlugin = cPluginManager::GetPlugin("epgsearch");
-    if (epgSearchPlugin && !isempty(event->Title())) {
-        std::stringstream sstrReruns;
-        Epgsearch_searchresults_v1_0 data;
-        std::string strQuery = event->Title();
-        if (config.useSubtitleRerun > 0) {
-            if (config.useSubtitleRerun == 2 || !isempty(event->ShortText()))
-                strQuery += "~";
-            if (!isempty(event->ShortText()))
-                strQuery += event->ShortText();
-                data.useSubTitle = true;
-        } else {
-            data.useSubTitle = false;
-        }
-        data.query = (char *)strQuery.c_str();
-        data.mode = 0;
-        data.channelNr = 0;
-        data.useTitle = true;
-        data.useDescription = false;
-        
-        if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
-            cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList;
-            if (list && (list->Count() > 1)) {
-                sstrReruns << tr("RERUNS OF THIS SHOW") << ':' << std::endl;
-                int i = 0;
-                for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < config.numReruns; r = list->Next(r)) {
-                    if ((event->ChannelID() == r->event->ChannelID()) && (event->StartTime() == r->event->StartTime()))
-                        continue;
-                    i++;
-                    sstrReruns  << "- "
-                                << *DayDateTime(r->event->StartTime());
-                    cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
-                    if (channel)
-                        sstrReruns << " " << channel->ShortName(true);
-                    sstrReruns << ":  " << r->event->Title();
-                    if (!isempty(r->event->ShortText()))
-                        sstrReruns << "~" << r->event->ShortText();
-                    sstrReruns << std::endl;
+            view->SetDateTime(*dateTime);
+            view->SetChannel(Channels.GetByChannelID(ev->ChannelID(), true));
+            view->SetEventID(ev->EventID());
+            break; }
+        case dvRecording: {
+            if (!rec)
+                break;
+            call.recording = rec;
+            if (!pScraper) {
+                view = new cNopacityEPGView(osd, imgCache);
+            } else if (pScraper->Service("GetEventType", &call)) {
+                if (call.type == tMovie) {
+                    view = new cNopacityMovieView(osd, imgCache, call.movieId);
+                } else if (call.type == tSeries) {
+                    view = new cNopacitySeriesView(osd, imgCache, call.seriesId, call.episodeId);
                 }
-                delete list;
-            }
-        }
-        reruns.Set(sstrReruns.str().c_str(), font, width - 4 * border);
-    }
-}
-
-void cNopacityMenuDetailEventView::DrawEPGPictures(int height) {
-    int picsPerLine = width / (config.epgImageWidthLarge + border);
-    int currentX = border;
-    int currentY = height + border;
-    int currentPicsPerLine = 1;
-    cImageLoader imgLoader;
-    for (int i=1; i <= numEPGPics; i++) {
-        cString epgimage = cString::sprintf("%d_%d", event->EventID(), i);
-        if (imgLoader.LoadAdditionalEPGImage(epgimage)) {
-            pixmapContent->DrawImage(cPoint(currentX, currentY), imgLoader.GetImage());
-            if (config.roundedCorners) {
-                int radius = config.cornerRadius;
-                pixmapContent->DrawEllipse(cRect(currentX,currentY,radius,radius), clrTransparent, -2);
-                pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY,radius,radius), clrTransparent, -1);
-                pixmapContent->DrawEllipse(cRect(currentX,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -3);
-                pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -4);
+            } else {
+                view = new cNopacityEPGView(osd, imgCache);                
             }
-            if (currentPicsPerLine < picsPerLine) {
-                currentX += config.epgImageWidthLarge + border;
-                currentPicsPerLine++;
+            const cRecordingInfo *info = rec->Info();
+            if (info) {
+                view->SetTitle(info->Title());
+                view->SetSubTitle(info->ShortText());
+                view->SetInfoText(info->Description());
+                view->SetChannel(Channels.GetByChannelID(info->ChannelID(), true));
             } else {
-                currentX = border;
-                currentY += config.epgImageHeightLarge + border;
-                currentPicsPerLine = 1;
+                view->SetTitle(rec->Name());
             }
-        } else {
+            int recDuration = rec->LengthInSeconds();
+            recDuration = (recDuration>0)?(recDuration / 60):0;
+            cString dateTime = cString::sprintf("%s  %s (%d %s)", *DateString(rec->Start()), *TimeString(rec->Start()), recDuration, tr("min"));
+            view->SetDateTime(*dateTime);
+            view->SetRecFileName(rec->FileName());
+            break; }
+        case dvText:
+            view = new cNopacityTextView(osd, imgCache);
+            view->SetInfoText(text);
+            break;
+        default:
             break;
-        }
     }
 }
-
-//------------------cNopacityMenuDetailRecordingView------------------
-
-cNopacityMenuDetailRecordingView::cNopacityMenuDetailRecordingView(cOsd *osd, const cRecording *Recording) : cNopacityMenuDetailView(osd) {
-    recording = Recording;
-    info = Recording->Info();
-}
-
-cNopacityMenuDetailRecordingView::~cNopacityMenuDetailRecordingView(void) {
-    osd->DestroyPixmap(pixmapHeader);
-    osd->DestroyPixmap(pixmapContent);
+void cNopacityDetailView::KeyInput(bool Up, bool Page) {
+    if (Running())
+        return;
+    if (!view)
+        return;
+    if (Up && Page) {
+        view->KeyLeft();
+        view->Start();
+    } else if (!Up && Page) {
+        view->KeyRight();
+        view->Start();
+    } else if (Up && !Page) {
+        bool scrolled = view->KeyUp();
+        if (scrolled) {
+            view->DrawScrollbar();
+            osd->Flush();
+        }
+    }else if (!Up && !Page) {
+        bool scrolled = view->KeyDown();
+        if (scrolled) {
+            view->DrawScrollbar();
+            osd->Flush();
+        }
+    }
 }
 
-void cNopacityMenuDetailRecordingView::CreatePixmaps(void) {
-    pixmapHeader =  osd->CreatePixmap(3, cRect(x, top, width, headerHeight));
-    pixmapContent = osd->CreatePixmap(3, cRect(x, top + headerHeight, width, contentHeight),
-                                         cRect(0, 0, width, contentDrawPortHeight));
-
-    pixmapHeader->Fill(clrTransparent);
-    pixmapHeader->DrawRectangle(cRect(0, headerHeight - 2, width, 2), Theme.Color(clrMenuBorder));
-    pixmapContent->Fill(clrTransparent);
-}
+std::string cNopacityDetailView::LoadReruns(void) {
+    if (!ev)
+        return "";
+    
+    cPlugin *epgSearchPlugin = cPluginManager::GetPlugin("epgsearch");
+    if (!epgSearchPlugin)
+        return "";
 
-void cNopacityMenuDetailRecordingView::SetFonts(void) {
-    font = cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
-    fontHeaderLarge = cFont::CreateFont(config.fontName, headerHeight / 4 + config.fontDetailViewHeaderLarge);
-    fontHeader = cFont::CreateFont(config.fontName, headerHeight / 6 + config.fontDetailViewHeader);
-}
+    if (isempty(ev->Title()))
+        return "";
+    
+    std::stringstream sstrReruns;
+    sstrReruns << tr("Reruns of ") << "\"" << ev->Title() << "\":" << std::endl << std::endl;
 
-void cNopacityMenuDetailRecordingView::SetContent(void) {
-    if (recording) {
-        content.Set(recording->Info()->Description(), font, width - 4 * border);
-        LoadRecordingInformation();
-    }   
-}
+    Epgsearch_searchresults_v1_0 data;
+    std::string strQuery = ev->Title();
 
-void cNopacityMenuDetailRecordingView::SetContentHeight(void) {
-    int lineHeight = font->Height();
-    int linesContent = content.Lines() + 1;
-    linesContent+= additionalInfo.Lines() + 1;
-    int heightContentText = linesContent * lineHeight;
-    if (config.displayAdditionalRecEPGPictures) {
-        if (LoadEPGPics())
-            heightContentText += HeightEPGPics();
-    }
-    if (heightContentText > contentHeight) {
-        contentDrawPortHeight = heightContentText;
-        hasScrollbar = true;
+    if (config.GetValue("useSubtitleRerun") > 0) {
+        if (config.GetValue("useSubtitleRerun") == 2 && !isempty(ev->ShortText())) {
+            strQuery += "~";
+            strQuery += ev->ShortText();
+        }
+        data.useSubTitle = true;
     } else {
-        contentDrawPortHeight = contentHeight;  
+        data.useSubTitle = false;
     }
-}
-
-bool cNopacityMenuDetailRecordingView::LoadEPGPics(void) {
-    DIR *dirHandle;
-    struct dirent *dirEntry;
-    dirHandle = opendir(recording->FileName());
-    int picsFound = 0;
-    if (dirHandle != NULL) {
-        while ( 0 != (dirEntry = readdir(dirHandle))) {
-            if (endswith(dirEntry->d_name, "jpg")) { 
-                std::string fileName = dirEntry->d_name;
-                if (fileName.length() > 4) {
-                    fileName = fileName.substr(0, fileName.length() - 4);
-                    epgpics.push_back(fileName);
-                    picsFound++;
+    data.query = (char *)strQuery.c_str();
+    data.mode = 0;
+    data.channelNr = 0;
+    data.useTitle = true;
+    data.useDescription = false;
+
+    bool foundRerun = false;
+    if (epgSearchPlugin->Service("Epgsearch-searchresults-v1.0", &data)) {
+        cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList;
+        if (list && (list->Count() > 1)) {
+            foundRerun = true;
+            int i = 0;
+            for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < config.GetValue("numReruns"); r = list->Next(r)) {
+                if ((ev->ChannelID() == r->event->ChannelID()) && (ev->StartTime() == r->event->StartTime()))
+                    continue;
+                i++;
+                sstrReruns  << *DayDateTime(r->event->StartTime());
+                cChannel *channel = Channels.GetByChannelID(r->event->ChannelID(), true, true);
+                if (channel) {
+                    sstrReruns << ", " << trVDR("Channel") << " " << channel->Number() << ":";
+                    sstrReruns << " " << channel->ShortName(true);
                 }
+                sstrReruns << "\n" << r->event->Title();
+                if (!isempty(r->event->ShortText()))
+                    sstrReruns << "~" << r->event->ShortText();
+                sstrReruns << std::endl << std::endl;
             }
-            if (picsFound >= config.numAdditionalRecEPGPictures)
-                break;
-        }
-        closedir(dirHandle);
-    }
-    if (picsFound > 0)
-        return true;
-    return false;
-}
-
-int cNopacityMenuDetailRecordingView::HeightEPGPics(void) {
-    int numPicsAvailable = epgpics.size();
-    int picsPerLine = width / (config.epgImageWidthLarge + border);
-    int picLines = numPicsAvailable / picsPerLine;
-    if (numPicsAvailable%picsPerLine != 0)
-        picLines++;
-    return picLines * (config.epgImageHeightLarge + border) + 2*border;
-}
-
-void cNopacityMenuDetailRecordingView::DrawEPGPictures(int height) {
-    int picsPerLine = width / (config.epgImageWidthLarge + border);
-    int currentX = border;
-    int currentY = height + border;
-    int currentPicsPerLine = 1;
-    cImageLoader imgLoader;
-    for (unsigned i=0; i < epgpics.size(); i++) {
-        cString path = cString::sprintf("%s/", recording->FileName());
-        cString epgimage = epgpics.at(i).c_str();
-        if (imgLoader.LoadAdditionalRecordingImage(path, epgimage)) {
-            pixmapContent->DrawImage(cPoint(currentX, currentY), imgLoader.GetImage());
-            if (config.roundedCorners) {
-                int radius = config.cornerRadius;
-                pixmapContent->DrawEllipse(cRect(currentX,currentY,radius,radius), clrTransparent, -2);
-                pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY,radius,radius), clrTransparent, -1);
-                pixmapContent->DrawEllipse(cRect(currentX,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -3);
-                pixmapContent->DrawEllipse(cRect(currentX + config.epgImageWidthLarge - radius,currentY + config.epgImageHeightLarge - radius,radius,radius), clrTransparent, -4);
-            }
-            if (currentPicsPerLine < picsPerLine) {
-                currentX += config.epgImageWidthLarge + border;
-                currentPicsPerLine++;
-            } else {
-                currentX = border;
-                currentY += config.epgImageHeightLarge + border;
-                currentPicsPerLine = 1;
-            }
-        } else {
-            break;
+            delete list;
         }
     }
-}
 
-void cNopacityMenuDetailRecordingView::Render(void) {
-    DrawHeader();
-    int currentHeight = DrawTextWrapper(&content, 0);
-    currentHeight = DrawTextWrapper(&additionalInfo, currentHeight);
-    if (epgpics.size() > 0) {
-        DrawEPGPictures(currentHeight);
-    }
-}
-
-void cNopacityMenuDetailRecordingView::DrawHeader(void) {
-    cImageLoader imgLoader;
-	int widthTextHeader = width - 4 * border;
-    if (imgLoader.LoadRecordingImage(recording->FileName())) {
-        pixmapHeader->DrawImage(cPoint(width - config.epgImageWidth - border, (headerHeight-config.epgImageHeight)/2), imgLoader.GetImage());
-        if (config.roundedCorners) {
-            int radius = config.cornerRadius;
-            int x = width - config.epgImageWidth - border;
-            int y = (headerHeight-config.epgImageHeight)/2;
-            pixmapHeader->DrawEllipse(cRect(x,y,radius,radius), clrTransparent, -2);
-            pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y,radius,radius), clrTransparent, -1);
-            pixmapHeader->DrawEllipse(cRect(x,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -3);
-            pixmapHeader->DrawEllipse(cRect(x + config.epgImageWidth - radius,y + config.epgImageHeight - radius,radius,radius), clrTransparent, -4);
-        }
-        widthTextHeader -= config.epgImageWidth;
-    }
-    int lineHeight = fontHeaderLarge->Height();
-    cString dateTime = cString::sprintf("%s  %s", *DateString(recording->Start()), *TimeString(recording->Start()));
-	pixmapHeader->DrawText(cPoint(2*border, (lineHeight - fontHeader->Height())/2), *dateTime, Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
-    
-    const char *Title = info->Title();
-    if (isempty(Title))
-        Title = recording->Name();
-	cTextWrapper title;
-	title.Set(Title, fontHeaderLarge, widthTextHeader);
-    int currentLineHeight = lineHeight;
-	for (int i=0; i < title.Lines(); i++) {
-        pixmapHeader->DrawText(cPoint(2*border, currentLineHeight), title.GetLine(i), Theme.Color(clrMenuFontDetailViewHeaderTitle), clrTransparent, fontHeaderLarge);
-        currentLineHeight += lineHeight;
-    }
-	
-    if (!isempty(info->ShortText())) {
-        cTextWrapper shortText;
-        shortText.Set(info->ShortText(), fontHeader, widthTextHeader);
-        for (int i=0; i < shortText.Lines(); i++) {
-            if ((currentLineHeight + fontHeader->Height()) < headerHeight) {
-                pixmapHeader->DrawText(cPoint(2*border, currentLineHeight), shortText.GetLine(i), Theme.Color(clrMenuFontDetailViewHeader), clrTransparent, fontHeader);
-                currentLineHeight += fontHeader->Height();
-        } else
-            break;
-        }
+    if (!foundRerun) {
+        sstrReruns << std::endl << tr("No reruns found");        
     }
+    return sstrReruns.str();
 }
 
-void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
-    const cRecordingInfo *Info = recording->Info();
+std::string cNopacityDetailView::LoadRecordingInformation(void) {
+    const cRecordingInfo *Info = rec->Info();
     unsigned long long nRecSize = -1;
     unsigned long long nFileSize[1000];
     nFileSize[0] = 0;
@@ -494,10 +206,10 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
     cString filename;
     int rc = 0;
     do {
-        if (recording->IsPesRecording())
-            filename = cString::sprintf("%s/%03d.vdr", recording->FileName(), ++i);
+        if (rec->IsPesRecording())
+            filename = cString::sprintf("%s/%03d.vdr", rec->FileName(), ++i);
         else
-            filename = cString::sprintf("%s/%05d.ts", recording->FileName(), ++i);
+            filename = cString::sprintf("%s/%05d.ts", rec->FileName(), ++i);
         rc = stat(filename, &filebuf);
         if (rc == 0)
             nFileSize[i] = nFileSize[i-1] + filebuf.st_size;
@@ -509,8 +221,8 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
     nRecSize = nFileSize[i-1];
 
     cMarks marks;
-    bool fHasMarks = marks.Load(recording->FileName(), recording->FramesPerSecond(), recording->IsPesRecording()) && marks.Count();
-    cIndexFile *index = new cIndexFile(recording->FileName(), false, recording->IsPesRecording());
+    bool fHasMarks = marks.Load(rec->FileName(), rec->FramesPerSecond(), rec->IsPesRecording()) && marks.Count();
+    cIndexFile *index = new cIndexFile(rec->FileName(), false, rec->IsPesRecording());
 
     int nCutLength = 0;
     long nCutInFrame = 0;
@@ -554,8 +266,8 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
     if (channel)
         sstrInfo << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << std::endl;
     if (nRecSize < 0) {
-        if ((nRecSize = ReadSizeVdr(recording->FileName())) < 0) {
-            nRecSize = DirSizeMB(recording->FileName());
+        if ((nRecSize = ReadSizeVdr(rec->FileName())) < 0) {
+            nRecSize = DirSizeMB(rec->FileName());
         }
     }
     if (nRecSize >= 0) {
@@ -573,27 +285,59 @@ void cNopacityMenuDetailRecordingView::LoadRecordingInformation(void) {
         }
         sstrInfo << (const char*)strRecSize << std::endl;
     }
-    
+
     if (index) {
         int nLastIndex = index->Last();
         if (nLastIndex) {
             cString strLength;
             if (fHasMarks) {
-                strLength = cString::sprintf("%s: %s (%s %s)", tr("Length"), *IndexToHMSF(nLastIndex, false, recording->FramesPerSecond()), tr("cut"), *IndexToHMSF(nCutLength, false, recording->FramesPerSecond()));
+                strLength = cString::sprintf("%s: %s (%s %s)", tr("Length"), *IndexToHMSF(nLastIndex, false, rec->FramesPerSecond()), tr("cut"), *IndexToHMSF(nCutLength, false, rec->FramesPerSecond()));
             } else {
-                strLength = cString::sprintf("%s: %s", tr("Length"), *IndexToHMSF(nLastIndex, false, recording->FramesPerSecond()));
+                strLength = cString::sprintf("%s: %s", tr("Length"), *IndexToHMSF(nLastIndex, false, rec->FramesPerSecond()));
             }
             sstrInfo << (const char*)strLength << std::endl;
-            cString strBitrate = cString::sprintf("%s: %s\n%s: %.2f MBit/s (Video+Audio)", tr("Format"), recording->IsPesRecording() ? "PES" : "TS", tr("Est. bitrate"), (float)nRecSize / nLastIndex * recording->FramesPerSecond() * 8 / MEGABYTE(1));
+            cString strBitrate = cString::sprintf("%s: %s\n%s: %.2f MBit/s (Video+Audio)", tr("Format"), rec->IsPesRecording() ? "PES" : "TS", tr("Est. bitrate"), (float)nRecSize / nLastIndex * rec->FramesPerSecond() * 8 / MEGABYTE(1));
             sstrInfo << (const char*)strBitrate << std::endl;
         }
     }
     delete index;
-    
-    additionalInfo.Set(sstrInfo.str().c_str(), font, width - 4 * border);
+
+    if (Info) {
+        const char *aux = NULL;
+        aux = Info->Aux();
+        if (aux) {
+            std::string strAux = aux;
+            std::string auxEpgsearch = StripXmlTag(strAux, "epgsearch");
+            if (!auxEpgsearch.empty()) {
+                std::string searchTimer = StripXmlTag(auxEpgsearch, "searchtimer");
+                if (!searchTimer.empty()) {
+                    sstrInfo << tr("Search timer") << ": " << searchTimer << std::endl;
+                }
+            }
+        }
+    }
+
+    return sstrInfo.str();
 }
 
-int cNopacityMenuDetailRecordingView::ReadSizeVdr(const char *strPath) {
+std::string cNopacityDetailView::StripXmlTag(std::string &Line, const char *Tag) {
+        // set the search strings
+        std::stringstream strStart, strStop;
+        strStart << "<" << Tag << ">";
+        strStop << "</" << Tag << ">";
+        // find the strings
+        std::string::size_type locStart = Line.find(strStart.str());
+        std::string::size_type locStop = Line.find(strStop.str());
+        if (locStart == std::string::npos || locStop == std::string::npos)
+                return "";
+        // extract relevant text
+        int pos = locStart + strStart.str().size();
+        int len = locStop - pos;
+        return len < 0 ? "" : Line.substr(pos, len);
+}
+
+
+int cNopacityDetailView::ReadSizeVdr(const char *strPath) {
     int dirSize = -1;
     char buffer[20];
     char *strFilename = NULL;
@@ -613,46 +357,17 @@ int cNopacityMenuDetailRecordingView::ReadSizeVdr(const char *strPath) {
     return dirSize;
 }
 
-//---------------cNopacityMenuDetailTextView---------------------
-
-cNopacityMenuDetailTextView::cNopacityMenuDetailTextView(cOsd *osd, const char *text) : cNopacityMenuDetailView(osd) {
-    this->text = text;
-}
-
-cNopacityMenuDetailTextView::~cNopacityMenuDetailTextView(void) {
-    osd->DestroyPixmap(pixmapContent);
-}
-
-void cNopacityMenuDetailTextView::SetFonts(void) {
-    font = cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
-    fontHeaderLarge = NULL;
-    fontHeader = NULL;
-}
-
-void cNopacityMenuDetailTextView::SetContent(void) {
-    content.Set(text, font, width - 4 * border);
+void cNopacityDetailView::Action(void) {
+    InitiateViewType();
+    if (!view)
+        return;
+    view->SetGeometry(x, top, width, height, border, headerHeight);
+    view->SetFonts();
+    view->SetScrollbarPixmaps(scrollBar, scrollBarBack);
+    view->LoadMedia();
+    view->Start();
+    if (ev)
+        view->SetAdditionalInfoText(LoadReruns());
+    else if (rec)
+        view->SetAdditionalInfoText(LoadRecordingInformation());
 }
-
-void cNopacityMenuDetailTextView::SetContentHeight(void) {
-    int lineHeight = font->Height();
-    int linesContent = content.Lines() + 1;
-
-    int heightContentText = linesContent * lineHeight;
-    if (heightContentText > contentHeight) {
-        contentDrawPortHeight = heightContentText;
-        hasScrollbar = true;
-    } else {
-        contentDrawPortHeight = contentHeight;  
-    }
-}
-
-void cNopacityMenuDetailTextView::CreatePixmaps(void) {
-    pixmapContent = osd->CreatePixmap(3, cRect(x, top + headerHeight, width, contentHeight),
-                                         cRect(0, 0, width, contentDrawPortHeight));
-
-    pixmapContent->Fill(clrTransparent);
-}
-
-void cNopacityMenuDetailTextView::Render(void) {
-    DrawTextWrapper(&content, 0);
-}
\ No newline at end of file
diff --git a/menudetailview.h b/menudetailview.h
index 9fae59e..4f0d2af 100644
--- a/menudetailview.h
+++ b/menudetailview.h
@@ -1,87 +1,52 @@
 #ifndef __NOPACITY_MENUDETAILVIEW_H
 #define __NOPACITY_MENUDETAILVIEW_H
 
-class cNopacityMenuDetailView {
-protected:
-    cOsd *osd;
-    bool hasScrollbar;
-    int x, width, height, top;
-    int headerHeight;
-    int contentHeight;
-    int contentDrawPortHeight;
-    int border;
-    cFont *font, *fontHeader, *fontHeaderLarge;
-    cPixmap *pixmapHeader;
-    cPixmap *pixmapLogo;
-    cPixmap *pixmapContent;
-    cTextWrapper content;
-    int DrawTextWrapper(cTextWrapper *wrapper, int top);
-public:
-    cNopacityMenuDetailView(cOsd *osd);
-    virtual ~cNopacityMenuDetailView(void);
-    void SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight);
-    virtual void SetFonts(void) = 0;
-    bool Scrollable(void) {return hasScrollbar;}
-    double ScrollbarSize(void);
-    double Offset(void);
-    bool Scroll(bool Up, bool Page);
-    virtual void SetContent(void) = 0;
-    virtual void SetContentHeight(void) = 0;
-    virtual void CreatePixmaps(void) = 0;
-    virtual void Render(void) = 0;
-};
+#include <vdr/recording.h>
+#include <vdr/skins.h>
 
-class cNopacityMenuDetailEventView : public cNopacityMenuDetailView {
-private:
-    const cEvent *event;
-    cTextWrapper reruns;
-    int numEPGPics;
-    void DrawHeader(void);
-    void LoadReruns(void);
-    int HeightEPGPics(void);
-    void DrawEPGPictures(int height);
-public:
-    cNopacityMenuDetailEventView(cOsd *osd, const cEvent *Event);
-    virtual ~cNopacityMenuDetailEventView(void);
-    void SetContent(void);
-    void SetContentHeight(void);
-    void CreatePixmaps(void);
-    void SetFonts(void);
-    void Render(void);
-};
+#include <vector>
+#include <string>
+#include <sstream>
+#include "services/scraper2vdr.h"
+#include "services/epgsearch.h"
+#include "imagecache.h"
+#include "config.h"
+#include "detailview.h"
 
-class cNopacityMenuDetailRecordingView : public cNopacityMenuDetailView {
-private:
-    const cRecording *recording;
-    const cRecordingInfo *info;
-    cTextWrapper additionalInfo;
-    void DrawHeader(void);
-    void LoadRecordingInformation(void);
-    int ReadSizeVdr(const char *strPath);
-    std::vector<std::string> epgpics;
-    bool LoadEPGPics(void);
-    int HeightEPGPics(void);
-    void DrawEPGPictures(int height);
-public:
-    cNopacityMenuDetailRecordingView(cOsd *osd, const cRecording *Recording);
-    virtual ~cNopacityMenuDetailRecordingView(void);
-    void SetContent(void);
-    void SetContentHeight(void);
-    void CreatePixmaps(void);
-    void SetFonts(void);
-    void Render(void);
+enum eDetailViewType {
+    dvEvent = 0, 
+    dvRecording, 
+    dvText
 };
 
-class cNopacityMenuDetailTextView : public cNopacityMenuDetailView {
-private:
+class cNopacityDetailView : public cThread {
+protected:
+    eDetailViewType type;
+    cOsd *osd;
+    cImageCache *imgCache;
+    const cEvent *ev;
+    const cRecording *rec;
     const char *text;
+    cNopacityView *view;
+    cPixmap *scrollBar;
+    cPixmap *scrollBarBack;
+    int x, width, height, top, border;
+    int headerHeight;
+    void InitiateViewType(void);
+    std::string LoadReruns(void);
+    std::string LoadRecordingInformation(void);
+    std::string StripXmlTag(std::string &Line, const char *Tag);
+    int ReadSizeVdr(const char *strPath);
+    virtual void Action(void);
 public:
-    cNopacityMenuDetailTextView(cOsd *osd, const char *text);
-    virtual ~cNopacityMenuDetailTextView(void);
-    void SetContent(void);
-    void SetContentHeight(void);
-    void CreatePixmaps(void);
-    void SetFonts(void);
-    void Render(void);
+    cNopacityDetailView(eDetailViewType detailViewType, cOsd *osd, cImageCache *imgCache);
+    virtual ~cNopacityDetailView(void);
+    void SetGeometry(int x, int width, int height, int top, int contentBorder, int headerHeight);
+    void SetEvent(const cEvent *e) { ev = e; };
+    void SetRecording(const cRecording *r) { rec = r; };
+    void SetText(const char *t) { text = t; };
+    void SetScrollBar(cPixmap *s, cPixmap *sBack) { scrollBar = s; scrollBarBack = sBack; };
+    void KeyInput(bool Up, bool Page);
 };
+
 #endif //__NOPACITY_MENUDETAILVIEW_H
\ No newline at end of file
diff --git a/menuitem.c b/menuitem.c
index 8b207bd..0bf0e49 100644
--- a/menuitem.c
+++ b/menuitem.c
@@ -4,11 +4,15 @@
 #include <algorithm>
 #include <iostream>
 #include <vector>
+#include "config.h"
+#include "helpers.h"
+#include "imageloader.h"
 
 // cNopacityMenuItem  -------------
 
-cNopacityMenuItem::cNopacityMenuItem(cOsd *osd, const char *text, bool sel) {
+cNopacityMenuItem::cNopacityMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel) {
     this->osd = osd;
+    this->imgCache = imgCache;
     drawn = false;
     Text = text;
     selectable = sel;
@@ -17,8 +21,9 @@ cNopacityMenuItem::cNopacityMenuItem(cOsd *osd, const char *text, bool sel) {
     scrollable = false;
     itemTabs = NULL;
     tabWidth = NULL;
-    pixmapIcon = NULL;
+    pixmapStatic = NULL;
     pixmapTextScroller = NULL;
+    pixmapForeground = NULL;
     infoTextWindow = NULL;
 }
 
@@ -28,13 +33,16 @@ cNopacityMenuItem::~cNopacityMenuItem(void) {
         cCondWait::SleepMs(10);
     delete [] itemTabs;
     delete [] tabWidth;
-    osd->DestroyPixmap(pixmap);
-    if (pixmapIcon) {
-        osd->DestroyPixmap(pixmapIcon);
+    osd->DestroyPixmap(pixmapBackground);
+    if (pixmapStatic) {
+        osd->DestroyPixmap(pixmapStatic);
     }
     if (pixmapTextScroller) {
         osd->DestroyPixmap(pixmapTextScroller);
     }
+    if (pixmapForeground) {
+        osd->DestroyPixmap(pixmapForeground);
+    }
     if (infoTextWindow) {
         delete infoTextWindow;
     }
@@ -43,7 +51,7 @@ cNopacityMenuItem::~cNopacityMenuItem(void) {
 void cNopacityMenuItem::SetCurrent(bool cur) {
     wasCurrent = current;
     current = cur;
-} 
+}
 
 void cNopacityMenuItem::SetGeometry(int index, int top, int left, int width, int height, int spaceMenu) {
     this->index = index;
@@ -54,17 +62,21 @@ void cNopacityMenuItem::SetGeometry(int index, int top, int left, int width, int
     this->spaceMenu = spaceMenu;
 }
 
-void cNopacityMenuItem::CreatePixmap() {
-    pixmap = osd->CreatePixmap(3, cRect(left, top + index * (height + spaceMenu), width, height));
+void cNopacityMenuItem::CreatePixmapBackground() {
+    pixmapBackground = osd->CreatePixmap(3, cRect(left, top + index * (height + spaceMenu), width, height));
+}
+
+void cNopacityMenuItem::CreatePixmapForeground() {
+    pixmapForeground = osd->CreatePixmap(6, cRect(left, top + index * (height + spaceMenu), width, height));
 }
 
-void cNopacityMenuItem::CreatePixmapIcon(void) {
-    pixmapIcon = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), width, height));
-    pixmapIcon->Fill(clrTransparent);
+void cNopacityMenuItem::CreatePixmapStatic(void) {
+    pixmapStatic = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), width, height));
+    pixmapStatic->Fill(clrTransparent);
 }
 
 void cNopacityMenuItem::CreatePixmapTextScroller(int totalWidth) {
-    pixmapTextScroller = osd->CreatePixmap(4, cRect(left, top + index * (height + spaceMenu), width, height), cRect(0, 0, totalWidth+10, height));
+    pixmapTextScroller = osd->CreatePixmap(4, cRect(left, top + index * (height + spaceMenu), width, height), cRect(0, 0, totalWidth, height));
     pixmapTextScroller->Fill(clrTransparent);
 }
 
@@ -78,23 +90,35 @@ void cNopacityMenuItem::SetTabs(cString *tabs, int *tabWidths, int numtabs) {
     numTabs = numtabs;
 }
 
-void cNopacityMenuItem::SetBackgrounds(int *handleBackgrounds) {
-    this->handleBackgrounds = handleBackgrounds;
-}
-
-void cNopacityMenuItem::DrawDelimiter(const char *del, const char *icon, int handleBgrd) {
-    pixmap->Fill(Theme.Color(clrSeparatorBorder));
-    pixmap->DrawImage(cPoint(1, 1), handleBgrd);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrSeparatorBorder));
-    cImageLoader imgLoader;
+void cNopacityMenuItem::DrawDelimiter(const char *del, const char *icon, eSkinElementType seType) {
+    if ((config.GetValue("displayType") == dtBlending) && (seType != seNone)) {
+        pixmapBackground->Fill(Theme.Color(clrSeparatorBorder));
+        cImage *back = imgCache->GetSkinElement(seType);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrSeparatorBorder));
+    } else if ((config.GetValue("displayType") == dtGraphical) && (seType != seNone)) {
+        cImage *back = imgCache->GetSkinElement(seType);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        else
+            pixmapBackground->Fill(clrTransparent);
+        pixmapForeground->Fill(clrTransparent);
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrSeparatorBorder));
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrMenuItem));
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrSeparatorBorder));
+    }
     if (!drawn) {
-        if (imgLoader.LoadIcon(icon, config.iconHeight)) {
-            if (pixmapIcon == NULL) {
-                pixmapIcon = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), config.menuItemLogoWidth, config.menuItemLogoWidth));
-                pixmapIcon->Fill(clrTransparent);
+        cImage *imgIcon = imgCache->GetSkinIcon(icon, height-2*geoManager->menuSpace, height-2*geoManager->menuSpace);
+        if (imgIcon) {
+            if (pixmapStatic == NULL) {
+                pixmapStatic = osd->CreatePixmap(5, cRect(left, top + index * (height + spaceMenu), width, height));
+                pixmapStatic->Fill(clrTransparent);
             }
-            pixmapIcon->DrawImage(cPoint(1, (height - config.iconHeight) / 2), imgLoader.GetImage());
+            pixmapStatic->DrawImage(cPoint(geoManager->menuSpace, geoManager->menuSpace), *imgIcon);
         }
         drawn = true;
     }
@@ -105,20 +129,31 @@ void cNopacityMenuItem::DrawDelimiter(const char *del, const char *icon, int han
         if (delimiter.find_last_not_of("-") != std::string::npos)
             delimiter.erase(delimiter.find_last_not_of("-")+1);
     } catch (...) {}
-    int x = config.iconHeight + 3;
+    int x = height + 3;
     int y = (height - font->Height()) / 2;
-    pixmap->DrawText(cPoint(x, y), delimiter.c_str(), Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
+    pixmapStatic->DrawText(cPoint(x, y), delimiter.c_str(), Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
 }
 
 void cNopacityMenuItem::Action(void) {
-    int scrollDelay = config.menuScrollDelay * 1000;
+    bool carriageReturn = (config.GetValue("scrollMode") == 0) ? true : false;
+    int scrollDelta = 1;
+    int scrollDelay = config.GetValue("menuScrollDelay") * 1000;
     DoSleep(scrollDelay);
     cPixmap::Lock();
     if (Running())
         SetTextFull();
     cPixmap::Unlock();
     int drawPortX;
-    int FrameTime = config.menuScrollFrameTime;
+
+    int FrameTime = 0;
+    if (config.GetValue("menuScrollSpeed") == 1)
+        FrameTime = 50;
+    else if (config.GetValue("menuScrollSpeed") == 2)
+        FrameTime = 30;
+    else if (config.GetValue("menuScrollSpeed") == 3)
+        FrameTime = 15;
+    if (!Running())
+        return;
     int maxX = pixmapTextScroller->DrawPort().Width() - pixmapTextScroller->ViewPort().Width();
     bool doSleep = false;
     while (Running()) {
@@ -126,14 +161,26 @@ void cNopacityMenuItem::Action(void) {
             DoSleep(scrollDelay);
             doSleep = false;
         }
+        if (!Running())
+            return;
         uint64_t Now = cTimeMs::Now();
         cPixmap::Lock();
         drawPortX = pixmapTextScroller->DrawPort().X();
-        drawPortX -= 1;
+        drawPortX -= scrollDelta;
         cPixmap::Unlock();
+
         if (abs(drawPortX) > maxX) {
             DoSleep(scrollDelay);
-            drawPortX = 0;
+            if (carriageReturn)
+                drawPortX = 0;
+            else {
+                scrollDelta *= -1;
+                drawPortX -= scrollDelta;
+            }
+            doSleep = true;
+        }
+        if (!carriageReturn && (drawPortX == 0)) {
+            scrollDelta *= -1;
             doSleep = true;
         }
         cPixmap::Lock();
@@ -154,52 +201,84 @@ void cNopacityMenuItem::DoSleep(int duration) {
         cCondWait::SleepMs(sleepSlice);
 }
 
-std::string cNopacityMenuItem::CutText(std::string *text, int width, const cFont *font) {
-    cTextWrapper twText;
-    twText.Set(text->c_str(), font, width);
-    std::string cuttedTextNative = twText.GetLine(0);
-    std::stringstream sstrText;
-    sstrText << cuttedTextNative << "...";
-    std::string cuttedText = sstrText.str();
-    int actWidth = font->Width(cuttedText.c_str());
-    if (actWidth > width) {
-        int overlap = actWidth - width;
-        int charWidth = font->Width(".");
-        int cutChars = overlap / charWidth;
-        if (cutChars > 0) {
-            cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars);
-            std::stringstream sstrText2;
-            sstrText2 << cuttedTextNative << "...";
-            cuttedText = sstrText2.str();
-        }
-    }
-    return cuttedText;
-}
-
 void cNopacityMenuItem::DrawRoundedCorners(tColor borderColor) {
-    int radius = config.cornerRadius;
+    int radius = config.GetValue("cornerRadius");
+    if (radius < 3)
+        return;
+    pixmapBackground->DrawEllipse(cRect(0,0,radius,radius), borderColor, -2);
+    pixmapBackground->DrawEllipse(cRect(-1,-1,radius,radius), clrTransparent, -2);
 
-    pixmap->DrawEllipse(cRect(0,0,radius,radius), borderColor, -2);
-    pixmap->DrawEllipse(cRect(-1,-1,radius,radius), clrTransparent, -2);
+    pixmapBackground->DrawEllipse(cRect(width-radius,0,radius,radius), borderColor, -1);
+    pixmapBackground->DrawEllipse(cRect(width-radius+1,-1,radius,radius), clrTransparent, -1);
 
-    pixmap->DrawEllipse(cRect(width-radius,0,radius,radius), borderColor, -1);
-    pixmap->DrawEllipse(cRect(width-radius+1,-1,radius,radius), clrTransparent, -1);
+    pixmapBackground->DrawEllipse(cRect(0,height-radius,radius,radius), borderColor, -3);
+    pixmapBackground->DrawEllipse(cRect(-1,height-radius+1,radius,radius), clrTransparent, -3);
 
-    pixmap->DrawEllipse(cRect(0,height-radius,radius,radius), borderColor, -3);
-    pixmap->DrawEllipse(cRect(-1,height-radius+1,radius,radius), clrTransparent, -3);
+    pixmapBackground->DrawEllipse(cRect(width-radius,height-radius,radius,radius), borderColor, -4);
+    pixmapBackground->DrawEllipse(cRect(width-radius+1,height-radius+1,radius,radius), clrTransparent, -4);
+}
 
-    pixmap->DrawEllipse(cRect(width-radius,height-radius,radius,radius), borderColor, -4);
-    pixmap->DrawEllipse(cRect(width-radius+1,height-radius+1,radius,radius), clrTransparent, -4);
+void cNopacityMenuItem::DrawChannelLogoBackground(void) {
+    if (!config.GetValue("menuChannelLogoBackground"))
+        return;
+    int logoWidth = geoManager->menuLogoWidth;
+    pixmapBackground->DrawRectangle(cRect(4,6,logoWidth-4, height-12), Theme.Color(clrMenuChannelLogoBack));
 }
 
 // cNopacityMainMenuItem  -------------
-cNopacityMainMenuItem::cNopacityMainMenuItem(cOsd *osd, const char *text, bool sel, bool setup) : cNopacityMenuItem (osd, text, sel) {
+cNopacityMainMenuItem::cNopacityMainMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel, bool setup) : cNopacityMenuItem (osd, imgCache, text, sel) {
     this->isSetup = setup;
 }
 
 cNopacityMainMenuItem::~cNopacityMainMenuItem(void) {
 }
 
+void cNopacityMainMenuItem::DrawBackground(void) {
+    cImage *back = NULL;
+    if ((config.GetValue("displayType") == dtBlending) || (config.GetValue("displayType") == dtGraphical)){
+        eSkinElementType type;
+        if (!isSetup)
+            type = (current)?seMainHigh:seMain;
+        else
+            type = (current)?seSetupHigh:seSetup;
+        back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        }
+    }
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        }
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
+        }
+        eSkinElementType menuButtonTop;
+        if (!isSetup)
+            menuButtonTop = seMainTop;
+        else
+            menuButtonTop = seSetupTop;
+        cImage *fore = imgCache->GetSkinElement(menuButtonTop);
+        if (fore) {
+            pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+        } else {
+            pixmapForeground->Fill(clrTransparent);
+        }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    }
+}
+
 std::string cNopacityMainMenuItem::items[16] = { "Schedule", "Channels", "Timers", "Recordings", "Setup", "Commands",
                                                 "OSD", "EPG", "DVB", "LNB", "CAM", "Recording", "Replay", "Miscellaneous", "Plugins", "Restart"};
 
@@ -234,7 +313,7 @@ cString cNopacityMainMenuItem::GetIconName() {
                         return cString::sprintf("pluginIcons/%s", p->Name());
                     }
                 } catch (...) {}
-            } 
+            }
         } else
             break;
     }
@@ -243,11 +322,11 @@ cString cNopacityMainMenuItem::GetIconName() {
 
 void cNopacityMainMenuItem::CreatePixmapTextScroller(int totalWidth) {
     int pixmapLeft = left + 10;
-    if (config.useMenuIcons)
-        pixmapLeft += config.iconHeight;
+    if (config.GetValue("useMenuIcons"))
+        pixmapLeft += geoManager->menuMainMenuIconSize;
     int pixmapWidth = width - 10;
-    if (config.useMenuIcons)
-        pixmapWidth -= config.iconHeight;
+    if (config.GetValue("useMenuIcons"))
+        pixmapWidth -= geoManager->menuMainMenuIconSize;
     int drawPortWidth = totalWidth + 10;
     pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
     pixmapTextScroller->Fill(clrTransparent);
@@ -269,7 +348,7 @@ void cNopacityMainMenuItem::CreateText() {
         if (found) {
             if (!(s >= '0' && s <= '9')) {
                 doBreak = true;
-            }           
+            }
         }
         if (s >= '0' && s <= '9') {
             found = true;
@@ -284,7 +363,7 @@ void cNopacityMainMenuItem::CreateText() {
         menuEntry = skipspace(text.substr(i).c_str());
     } else {
         menuNumber = "";
-        menuEntry = text.c_str();       
+        menuEntry = text.c_str();
     }
     strEntry = *menuEntry;
 }
@@ -292,7 +371,7 @@ void cNopacityMainMenuItem::CreateText() {
 int cNopacityMainMenuItem::CheckScrollable(bool hasIcon) {
     int spaceLeft = spaceMenu;
     if (hasIcon)
-        spaceLeft += config.iconHeight;
+        spaceLeft += geoManager->menuMainMenuIconSize;
     int totalTextWidth = width - spaceLeft;
     int numberWidth = font->Width("xxx");
     int textWidth = font->Width(*menuEntry);
@@ -300,7 +379,7 @@ int cNopacityMainMenuItem::CheckScrollable(bool hasIcon) {
         scrollable = true;
         totalTextWidth = max(numberWidth + textWidth, totalTextWidth);
         strEntryFull = strEntry.c_str();
-        strEntry = CutText(&strEntry, width - spaceLeft - numberWidth, font);
+        strEntry = CutText(strEntry, width - spaceLeft - numberWidth, font);
     }
     return totalTextWidth;
 }
@@ -328,28 +407,19 @@ void cNopacityMainMenuItem::SetTextShort(void) {
 }
 
 void cNopacityMainMenuItem::Render() {
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    int handleBgrd;
-    if (!isSetup)
-        handleBgrd = (current)?handleBackgrounds[3]:handleBackgrounds[2];
-    else
-        handleBgrd = (current)?handleBackgrounds[13]:handleBackgrounds[12];
-    pixmap->DrawImage(cPoint(1, 1), handleBgrd);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    DrawBackground();
     if (selectable) {
-        if (config.useMenuIcons) {
+        if (config.GetValue("useMenuIcons")) {
             cString cIcon = GetIconName();
             if (!drawn) {
-                cImageLoader imgLoader;
-                if (imgLoader.LoadIcon(*cIcon, config.iconHeight)) {
-                    pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
-                }
+                cImage *imgIcon = imgCache->GetMenuIcon(*cIcon);
+                if (imgIcon)
+                    pixmapStatic->DrawImage(cPoint(geoManager->menuSpace, geoManager->menuSpace), *imgIcon);
                 drawn = true;
             }
         }
         SetTextShort();
-        if (current && scrollable && !Running() && config.menuScrollSpeed) {
+        if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
             Start();
         }
         if (wasCurrent && !current && scrollable && Running()) {
@@ -358,18 +428,19 @@ void cNopacityMainMenuItem::Render() {
             Cancel(-1);
         }
     } else {
-        DrawDelimiter(*itemTabs[1], "skinIcons/Channelseparator", handleBgrd);
+        DrawDelimiter(strEntry.c_str(), "skinIcons/channeldelimiter", (config.GetValue("displayType") != dtFlat)?seNone:(isSetup?seSetup:seMain));
     }
 }
 
 // cNopacityScheduleMenuItem  -------------
 
-cNopacityScheduleMenuItem::cNopacityScheduleMenuItem(cOsd *osd, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category) 
-: cNopacityMenuItem (osd, "", sel) {
+cNopacityScheduleMenuItem::cNopacityScheduleMenuItem(cOsd *osd, cImageCache *imgCache, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category, cRect *vidWin)
+                            : cNopacityMenuItem (osd, imgCache, "", sel) {
     this->category = category;
     this->Event = Event;
     this->Channel = Channel;
     this->TimerMatch = TimerMatch;
+    this->vidWin = vidWin;
     strDateTime = "";
     strTitle = "";
     strSubTitle = "";
@@ -387,8 +458,8 @@ void cNopacityScheduleMenuItem::CreatePixmapTextScroller(int totalWidth) {
     int pixmapLeft = left;
     int pixmapWidth = width;
     if (Channel) {
-        pixmapLeft += config.menuItemLogoWidth + 5;
-        pixmapWidth = pixmapWidth - config.menuItemLogoWidth - 5;
+        pixmapLeft += geoManager->menuLogoWidth + geoManager->menuSpace;
+        pixmapWidth = pixmapWidth - geoManager->menuLogoWidth - geoManager->menuSpace;
     }
     pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
     pixmapTextScroller->Fill(clrTransparent);
@@ -402,7 +473,7 @@ void cNopacityScheduleMenuItem::CreateText() {
     std::string dayNow = *WeekDayName(now);
     std::string dayEvent = *WeekDayName(Event->StartTime());
     if ((Event->StartTime() - now > 86400) || (dayNow != dayEvent))
-        sstrDateTime << dayEvent << " ";
+        sstrDateTime << dayEvent << " " << *ShortDateString(Event->StartTime()) << " ";
     sstrDateTime << *Event->GetTimeString();
     sstrDateTime << " - " << *Event->GetEndTimeString();
     strDateTime = sstrDateTime.str();
@@ -415,7 +486,7 @@ void cNopacityScheduleMenuItem::CreateText() {
 int cNopacityScheduleMenuItem::CheckScrollable(bool hasIcon) {
     int spaceLeft = spaceMenu;
     if (hasIcon)
-        spaceLeft += config.menuItemLogoWidth;
+        spaceLeft += geoManager->menuLogoWidth;
     int totalTextWidth = width - spaceLeft;
     if (font->Width(strTitle.c_str()) > (width - spaceLeft)) {
         scrollable = true;
@@ -423,7 +494,7 @@ int cNopacityScheduleMenuItem::CheckScrollable(bool hasIcon) {
         totalTextWidth = max(font->Width(strTitle.c_str()), totalTextWidth);
         strTitleFull = strTitle.c_str();
         strSubTitleFull = strSubTitle.c_str();
-        strTitle = CutText(&strTitle, width - spaceLeft, font);
+        strTitle = CutText(strTitle, width - spaceLeft, font);
     }
     if (fontSmall->Width(strSubTitle.c_str()) > (width - spaceLeft)) {
         if (!scrollable) {
@@ -433,7 +504,7 @@ int cNopacityScheduleMenuItem::CheckScrollable(bool hasIcon) {
         }
         scrollSubTitle = true;
         totalTextWidth = max(fontSmall->Width(strSubTitle.c_str()), totalTextWidth);
-        strSubTitle = CutText(&strSubTitle, width - spaceLeft, fontSmall);
+        strSubTitle = CutText(strSubTitle, width - spaceLeft, fontSmall);
     }
     return totalTextWidth;
 
@@ -454,22 +525,27 @@ void cNopacityScheduleMenuItem::SetTextShort(void) {
 }
 
 void cNopacityScheduleMenuItem::Render() {
-    int logoWidth = config.menuItemLogoWidth;
-    int logoHeight = config.menuItemLogoHeight;
+    int logoWidth = geoManager->menuLogoWidth;
+    int logoHeight = geoManager->menuLogoHeight;
     textLeft = 5;
     if (Channel && Channel->Name())
         textLeft = logoWidth + 10;
-    
+
     if (selectable) {
         titleY = (height - font->Height())/2 - 2;
         DrawBackground(textLeft);
-        DrawRemaining(textLeft, height*7/8, width - textLeft - 10);
+        if (Channel && Channel->Name())
+            DrawChannelLogoBackground();
+        int progressBarDelta = 0;
+        if (config.GetValue("displayType") == dtGraphical && textLeft < 20)
+            progressBarDelta = 10;
+        DrawRemaining(textLeft + progressBarDelta, height*7/8, width - textLeft - 20 - progressBarDelta);
         if (!drawn) {
             DrawLogo(logoWidth, logoHeight);
             drawn = true;
         }
         SetTextShort();
-        if (current && scrollable && !Running() && config.menuScrollSpeed) {
+        if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
             Start();
         }
         if (wasCurrent && !current && scrollable && Running()) {
@@ -483,45 +559,79 @@ void cNopacityScheduleMenuItem::Render() {
                 infoTextWindow = NULL;
             }
         if (current && Event) {
-            infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow);
-            infoTextWindow->SetGeometry(textWindow);
-            infoTextWindow->SetText(Event->Description());
-            infoTextWindow->Start();
+            if (config.GetValue("menuSchedulesWindowMode") == 0) {
+                //window mode
+                infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+                infoTextWindow->SetGeometry(textWindow);
+                infoTextWindow->SetText(Event->Description());
+                infoTextWindow->SetPoster(Event, NULL);
+                infoTextWindow->Start();
+            } else {
+                //fullscreen mode
+                infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, fontEPGWindowLarge);
+                infoTextWindow->SetGeometry(textWindow);
+                infoTextWindow->SetPoster(Event, NULL, true);
+                infoTextWindow->SetEvent(Event);
+            }
         }
     } else {
         if (Event) {
-            DrawDelimiter(Event->Title(), "skinIcons/daydelimiter", handleBackgrounds[4]);
+            DrawDelimiter(Event->Title(), "skinIcons/daydelimiter", (config.GetValue("displayType")!=dtFlat)?seSchedules:seNone);
         } else if (Channel) {
-            DrawDelimiter(Channel->Name(), "skinIcons/Channelseparator", handleBackgrounds[4]);
+            DrawDelimiter(Channel->Name(), "skinIcons/channeldelimiter", (config.GetValue("displayType")!=dtFlat)?seSchedules:seNone);
         }
     }
 }
 
 void cNopacityScheduleMenuItem::DrawBackground(int textLeft) {
-    int handleBgrd = (current)?handleBackgrounds[5]:handleBackgrounds[4];
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    pixmap->DrawImage(cPoint(1, 1), handleBgrd);
-    pixmap->DrawText(cPoint(textLeft, 3), strDateTime.c_str(), Theme.Color(clrMenuFontMenuItem), clrTransparent, font);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrMenuBorder));
-    if (TimerMatch == tmFull) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadIcon("skinIcons/activetimer", 64, 64)) {
-            pixmapIcon->DrawImage(cPoint(width - 66, 2), imgLoader.GetImage());
+    eSkinElementType type = (current)?seSchedulesHigh:seSchedules;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
         }
-    } else if (TimerMatch == tmPartial) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadIcon("skinIcons/activetimersmall", 32, 32)) {
-            pixmapIcon->DrawImage(cPoint(width - 34, 2), imgLoader.GetImage());
+        cImage *fore = imgCache->GetSkinElement(seSchedulesTop);
+        if (fore) {
+            pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+        } else {
+            pixmapForeground->Fill(clrTransparent);
         }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
     }
+
+    if (TimerMatch == tmFull) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/activetimer", 64, 64);
+        if (imgIcon)
+            pixmapStatic->DrawImage(cPoint(width - 66, 2), *imgIcon);
+    } else if (TimerMatch == tmPartial) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/activetimersmall", 32, 32);
+        if (imgIcon)
+            pixmapStatic->DrawImage(cPoint(width - 34, 2), *imgIcon);
+
+    }
+    tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+    pixmapStatic->DrawText(cPoint(textLeft, 3), strDateTime.c_str(), clrFont, clrTransparent, font);
 }
 
 void cNopacityScheduleMenuItem::DrawLogo(int logoWidth, int logoHeight) {
     if (Channel && Channel->Name()) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadLogo(Channel->Name(), logoWidth, logoHeight)) {
-            pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+        cImage *logo = imgCache->GetLogo(ctLogoMenuItem, Channel);
+        if (logo) {
+            pixmapStatic->DrawImage(cPoint(1,1), *logo);
         } else {
             cTextWrapper channel;
             channel.Set(Channel->Name(), font, logoWidth);
@@ -530,8 +640,8 @@ void cNopacityScheduleMenuItem::DrawLogo(int logoWidth, int logoHeight) {
             int heightChannel = lines * lineHeight;
             int y = (heightChannel>height)?0:(height-heightChannel)/2;
             for (int line = 0; line < lines; line++) {
-                pixmapIcon->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
-            }   
+                pixmapStatic->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
+            }
         }
     }
 }
@@ -547,27 +657,39 @@ void cNopacityScheduleMenuItem::DrawRemaining(int x, int y, int width) {
     if (total == 0)
         return;
     double percentSeen = (double)seen/total;
-    pixmap->DrawEllipse(cRect(x, y, 7, 7), Theme.Color(clrProgressBarBack));
-    pixmap->DrawEllipse(cRect(x+width, y, 7, 7), Theme.Color(clrProgressBarBack));
-    pixmap->DrawRectangle(cRect(x+4, y, width-1, 7), Theme.Color(clrProgressBarBack));
-    pixmap->DrawEllipse(cRect(x+1, y+1, 5, 5), Theme.Color(clrProgressBar));
+
+    tColor clrBack = (current)?Theme.Color(clrProgressBarBackHigh):Theme.Color(clrProgressBarBack);
+    tColor clrBar = (current)?Theme.Color(clrProgressBarHigh):Theme.Color(clrProgressBar);
+    pixmapBackground->DrawEllipse(cRect(x, y, 7, 7), clrBack);
+    pixmapBackground->DrawEllipse(cRect(x+width, y, 7, 7), clrBack);
+    pixmapBackground->DrawRectangle(cRect(x+4, y, width-1, 7), clrBack);
+    pixmapBackground->DrawEllipse(cRect(x+1, y+1, 5, 5), clrBar);
+
     if (percentSeen > 0.0)
-        pixmap->DrawEllipse(cRect(x+(width*percentSeen), y+1, 5, 5), Theme.Color(clrProgressBar));
-    pixmap->DrawRectangle(cRect(x+4, y+1, (width-1)*percentSeen, 5), Theme.Color(clrProgressBar));
+        pixmapBackground->DrawEllipse(cRect(x+(width*percentSeen), y+1, 5, 5), clrBar);
+    pixmapBackground->DrawRectangle(cRect(x+4, y+1, (width-1)*percentSeen, 5), clrBar);
 }
 
 // cNopacityChannelMenuItem  -------------
 
-cNopacityChannelMenuItem::cNopacityChannelMenuItem(cOsd *osd, const cChannel *Channel, bool sel) : cNopacityMenuItem (osd, "", sel) {
+cNopacityChannelMenuItem::cNopacityChannelMenuItem(cOsd *osd, cImageCache *imgCache, const cChannel *Channel, bool sel, cRect *vidWin) : cNopacityMenuItem (osd, imgCache, "", sel) {
     this->Channel = Channel;
+    this->vidWin = vidWin;
+    strEntry = "";
+    strEntryFull = "";
+    strChannelSource = "";
+    strChannelInfo = "";
+    strEpgInfo = "";
+    strEpgInfoFull = "";
+    strTimeInfo = "";
 }
 
 cNopacityChannelMenuItem::~cNopacityChannelMenuItem(void) {
 }
 
 void cNopacityChannelMenuItem::CreatePixmapTextScroller(int totalWidth) {
-    int pixmapLeft = left + config.menuItemLogoWidth + 10;
-    int pixmapWidth = width - config.menuItemLogoWidth - 10;
+    int pixmapLeft = left + geoManager->menuLogoWidth + geoManager->menuSpace;
+    int pixmapWidth = width - geoManager->menuLogoWidth - geoManager->menuSpace;
     int drawPortWidth = totalWidth + 10;
     pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
     pixmapTextScroller->Fill(clrTransparent);
@@ -575,77 +697,206 @@ void cNopacityChannelMenuItem::CreatePixmapTextScroller(int totalWidth) {
 
 void cNopacityChannelMenuItem::CreateText() {
     strEntry = cString::sprintf("%d %s", Channel->Number(), Channel->Name());
-    const cSource *source = Sources.Get(Channel->Source());
-    if (source)
-        strChannelSource = cString::sprintf("%s - %s", *cSource::ToString(source->Code()),  source->Description());
-    else
-        strChannelSource = "";
-    strChannelInfo = cString::sprintf("%s %d, %d MHz", tr("Transp."), Channel->Transponder(), Channel->Frequency());
+    if (config.GetValue("menuChannelDisplayMode") == 0) {
+        const cSource *source = Sources.Get(Channel->Source());
+        if (source)
+            strChannelSource = cString::sprintf("%s - %s", *cSource::ToString(source->Code()),  source->Description());
+        else
+            strChannelSource = "";
+        strChannelInfo = cString::sprintf("%s %d, %d MHz", tr("Transp."), Channel->Transponder(), Channel->Frequency()/1000);
+    } else {
+        readCurrentEPG();
+    }
 }
 
 int cNopacityChannelMenuItem::CheckScrollable(bool hasIcon) {
     int spaceLeft = spaceMenu;
     if (hasIcon)
-        spaceLeft += config.menuItemLogoWidth;
+        spaceLeft += geoManager->menuLogoWidth;
     int totalTextWidth = width - spaceLeft;
     if (font->Width(strEntry.c_str()) > (width - spaceLeft)) {
         scrollable = true;
         totalTextWidth = max(font->Width(strEntry.c_str()), totalTextWidth);
         strEntryFull = strEntry.c_str();
-        strEntry = CutText(&strEntry, width - spaceLeft, font);
-    }
+        strEntry = CutText(strEntry, width - spaceLeft, font);
+    } else
+        strEntryFull = strEntry;
+
+    if (fontSmall->Width(strEpgInfo.c_str()) > (width - spaceLeft)) {
+        scrollable = true;
+        totalTextWidth = max(fontSmall->Width(strEpgInfo.c_str()), totalTextWidth);
+        strEpgInfoFull = strEpgInfo.c_str();
+        strEpgInfo = CutText(strEpgInfo, width - spaceLeft, fontSmall);
+    } else
+        strEpgInfoFull = strEpgInfo;
+
     return totalTextWidth;
 }
 
 void cNopacityChannelMenuItem::SetTextFull(void) {
     tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
     pixmapTextScroller->Fill(clrTransparent);
-    pixmapTextScroller->DrawText(cPoint(5, (height/2 - font->Height())/2), strEntryFull.c_str(), clrFont, clrTransparent, font);
+    int heightChannelName = 0;
+    if (config.GetValue("menuChannelDisplayMode") == 2) {
+        heightChannelName = (height - font->Height())/2;
+    } else {
+        heightChannelName = (height/2 - font->Height())/2;
+    }
+    pixmapTextScroller->DrawText(cPoint(5, heightChannelName), strEntryFull.c_str(), clrFont, clrTransparent, font);
+    if (config.GetValue("menuChannelDisplayMode") == 1) {
+        int heightTimeInfo = 0;
+        int heightEPGInfo = 0;
+        if (config.GetValue("menuChannelDisplayTime")) {
+            heightTimeInfo = height/2 + (height/4 - fontSmall->Height())/2;
+            heightEPGInfo = 3*height/4 + (height/4 - fontSmall->Height())/2;
+        } else {
+            heightEPGInfo = height/2 + (height/4 - fontSmall->Height())/2;
+        }
+        if (config.GetValue("menuChannelDisplayTime")) {
+            pixmapTextScroller->DrawText(cPoint(5, heightTimeInfo), strTimeInfo.c_str(), clrFont, clrTransparent, fontSmall);
+        }
+        pixmapTextScroller->DrawText(cPoint(5, heightEPGInfo), strEpgInfoFull.c_str(), clrFont, clrTransparent, fontSmall);
+    }
 }
 
 void cNopacityChannelMenuItem::SetTextShort(void) {
     tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
     pixmapTextScroller->Fill(clrTransparent);
-    pixmapTextScroller->DrawText(cPoint(5, (height/2 - font->Height())/2), strEntry.c_str(), clrFont, clrTransparent, font);
-}
-
-void cNopacityChannelMenuItem::DrawBackground(int handleBackground) {
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    pixmap->DrawImage(cPoint(1, 1), handleBackground);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrMenuBorder));
-    
-    int encryptedSize = height/4-2;
-    int sourceX = config.menuItemLogoWidth + 15;
-
-    pixmap->DrawText(cPoint(sourceX, 3*height/4 + (height/4 - fontSmall->Height())/2), *strChannelInfo, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
-    if (Channel->Ca()) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadIcon("skinIcons/encrypted", encryptedSize)) {
-            pixmapIcon->DrawImage(cPoint(sourceX, height/2+1), imgLoader.GetImage());
-            sourceX += encryptedSize + 10;
+    int heightChannelName = 0;
+    if (config.GetValue("menuChannelDisplayMode") == 2) {
+        heightChannelName = (height - font->Height())/2;
+    } else {
+        heightChannelName = (height/2 - font->Height())/2;
+    }
+    pixmapTextScroller->DrawText(cPoint(5, heightChannelName), strEntry.c_str(), clrFont, clrTransparent, font);
+    if (config.GetValue("menuChannelDisplayMode") == 1) {
+        int heightTimeInfo = 0;
+        int heightEPGInfo = 0;
+        if (config.GetValue("menuChannelDisplayTime")) {
+            heightTimeInfo = height/2 + (height/4 - fontSmall->Height())/2;
+            heightEPGInfo = 3*height/4 + (height/4 - fontSmall->Height())/2;
+        } else {
+            heightEPGInfo = height/2 + (height/4 - fontSmall->Height())/2;
+        }
+        if (config.GetValue("menuChannelDisplayTime")) {
+            pixmapTextScroller->DrawText(cPoint(5, heightTimeInfo), strTimeInfo.c_str(), clrFont, clrTransparent, fontSmall);
         }
+        pixmapTextScroller->DrawText(cPoint(5, heightEPGInfo), strEpgInfo.c_str(), clrFont, clrTransparent, fontSmall);
     }
-    pixmap->DrawText(cPoint(sourceX, height/2 + (height/4 - fontSmall->Height())/2), *strChannelSource, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+}
+
+void cNopacityChannelMenuItem::DrawBackground(void) {
+    eSkinElementType type = (current)?seChannelsHigh:seChannels;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
+        }
+        cImage *fore = imgCache->GetSkinElement(seChannelsTop);
+        if (fore) {
+            pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+        } else {
+            pixmapForeground->Fill(clrTransparent);
+        }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    }
+
+    if (config.GetValue("menuChannelDisplayMode") == 0) {
+        int encryptedSize = height/4-2;
+        int sourceX = geoManager->menuLogoWidth + 15;
+        tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+        pixmapStatic->DrawText(cPoint(sourceX, 3*height/4 + (height/4 - fontSmall->Height())/2), *strChannelInfo, clrFont, clrTransparent, fontSmall);
+        if (Channel->Ca()) {
+            cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/encrypted", encryptedSize, encryptedSize);
+            if (imgIcon) {
+                pixmapStatic->DrawImage(cPoint(sourceX, height/2+1), *imgIcon);
+                sourceX += encryptedSize + 10;
+            }
+        }
+        pixmapStatic->DrawText(cPoint(sourceX, height/2 + (height/4 - fontSmall->Height())/2), *strChannelSource, clrFont, clrTransparent, fontSmall);
+    }
+}
+
+void cNopacityChannelMenuItem::readCurrentEPG(void) {
+    cSchedulesLock schedulesLock;
+    const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
+    const cSchedule *Schedule = NULL;
+	Schedule = schedules->GetSchedule(Channel);
+	if (!Schedule) {
+		strEpgInfo = tr("No EPG Information found");
+        strTimeInfo = "";
+	} else {
+        const cEvent *PresentEvent = Schedule->GetPresentEvent();
+        if (!PresentEvent) {
+            strEpgInfo = tr("No EPG Information found");
+            strTimeInfo = "";
+        } else {
+            strEpgInfo = PresentEvent->Title();
+            strTimeInfo = *cString::sprintf("%s - %s:", *PresentEvent->GetTimeString(), *PresentEvent->GetEndTimeString());
+        }
+    }
+}
+
+std::string cNopacityChannelMenuItem::readEPG(void) {
+    std::stringstream sstrText;
+    cSchedulesLock schedulesLock;
+    const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
+    const cSchedule *Schedule = NULL;
+	Schedule = schedules->GetSchedule(Channel);
+	if (!Schedule) {
+		sstrText << tr("No EPG Information found");
+	} else {
+        const cEvent *PresentEvent = Schedule->GetPresentEvent();
+        int i=0;
+        if (!PresentEvent) {
+            sstrText << tr("No EPG Information found");
+        } else {
+            for (const cEvent *event = PresentEvent; event; event = Schedule->Events()->Next(event)) {
+                if (event) {
+                    sstrText << *event->GetTimeString();
+                    sstrText << " ";
+                    sstrText << event->Title();
+                    if (event->ShortText() && (strlen(event->ShortText()) > 1))
+                        sstrText << " ~ " << event->ShortText();
+                    i++;
+                    if (i < config.GetValue("numEPGEntriesChannelsMenu"))
+                        sstrText << "\n";
+                    else
+                        break;
+                }
+            }
+        }
+    }
+    return sstrText.str();
 }
 
 void cNopacityChannelMenuItem::Render() {
-    
-    int handleBgrd = (current)?handleBackgrounds[7]:handleBackgrounds[6];
-    
     if (selectable) {                           //Channels
-        DrawBackground(handleBgrd);
-        int logoWidth = config.menuItemLogoWidth;
-        int logoHeight = config.menuItemLogoHeight;
+        DrawBackground();
+        DrawChannelLogoBackground();
         if (!drawn) {
-            cImageLoader imgLoader;
-            if (imgLoader.LoadLogo(Channel->Name(), logoWidth, logoHeight)) {
-                pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+            cImage *logo = imgCache->GetLogo(ctLogoMenuItem, Channel);
+            if (logo) {
+                pixmapStatic->DrawImage(cPoint(1,1), *logo);
             }
             drawn = true;
         }
         SetTextShort();
-        if (current && scrollable && !Running() && config.menuScrollSpeed) {
+        if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
             Start();
         }
         if (wasCurrent && !current && scrollable && Running()) {
@@ -653,23 +904,35 @@ void cNopacityChannelMenuItem::Render() {
             SetTextShort();
             Cancel(-1);
         }
+        if (wasCurrent)
+            if (infoTextWindow) {
+                delete infoTextWindow;
+                infoTextWindow = NULL;
+            }
+        if (current && Channel && (config.GetValue("menuChannelDisplayMode") == 0)) {
+            infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+            infoTextWindow->SetGeometry(textWindow);
+            infoTextWindow->SetText(readEPG().c_str());
+            infoTextWindow->Start();
+        }
     } else {                                    //Channelseparators
-        DrawDelimiter(Channel->Name(), "skinIcons/Channelseparator", handleBgrd);
+        DrawDelimiter(Channel->Name(), "skinIcons/channeldelimiter", (config.GetValue("displayType")!=dtFlat )?seChannels:seNone);
     }
 }
 
 // cNopacityTimerMenuItem  -------------
 
-cNopacityTimerMenuItem::cNopacityTimerMenuItem(cOsd *osd, const cTimer *Timer, bool sel) : cNopacityMenuItem (osd, "", sel) {
+cNopacityTimerMenuItem::cNopacityTimerMenuItem(cOsd *osd, cImageCache *imgCache, const cTimer *Timer, bool sel, cRect *vidWin) : cNopacityMenuItem (osd, imgCache, "", sel) {
     this->Timer = Timer;
+    this->vidWin = vidWin;
 }
 
 cNopacityTimerMenuItem::~cNopacityTimerMenuItem(void) {
 }
 
 void cNopacityTimerMenuItem::CreatePixmapTextScroller(int totalWidth) {
-    int pixmapLeft = left + config.menuItemLogoWidth + 10;
-    int pixmapWidth = width - config.menuItemLogoWidth - 10;
+    int pixmapLeft = left + geoManager->menuLogoWidth + geoManager->menuSpace;
+    int pixmapWidth = width - geoManager->menuLogoWidth - geoManager->menuSpace;
     int drawPortWidth = totalWidth + 10;
     pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
     pixmapTextScroller->Fill(clrTransparent);
@@ -700,19 +963,24 @@ std::string cNopacityTimerMenuItem::CreateDate(void) {
         strftime(buffer, sizeof(buffer), "%Y%m%d", &tm_r);
         day = buffer;
     }
-    return *cString::sprintf("%s%s%s (%02d:%02d-%02d:%02d)", *dayName, *dayName && **dayName ? " " : "", *day, Timer->Start() / 100, Timer->Start() % 100, Timer->Stop() / 100, Timer->Stop() % 100);
+    cString dateString;
+    if (Timer->Channel())
+        dateString = *cString::sprintf("%d - %s%s%s (%02d:%02d-%02d:%02d)", Timer->Channel()->Number(), *dayName, *dayName && **dayName ? " " : "", *day, Timer->Start() / 100, Timer->Start() % 100, Timer->Stop() / 100, Timer->Stop() % 100);
+    else
+        dateString = *cString::sprintf("%s%s%s (%02d:%02d-%02d:%02d)", *dayName, *dayName && **dayName ? " " : "", *day, Timer->Start() / 100, Timer->Start() % 100, Timer->Stop() / 100, Timer->Stop() % 100);
+    return *dateString;
 }
 
 int cNopacityTimerMenuItem::CheckScrollable(bool hasIcon) {
     int spaceLeft = spaceMenu;
     if (hasIcon)
-        spaceLeft += config.menuItemLogoWidth;
+        spaceLeft += geoManager->menuLogoWidth;
     int totalTextWidth = width - spaceLeft;
     if (font->Width(strEntry.c_str()) > (width - spaceLeft)) {
         scrollable = true;
         totalTextWidth = max(font->Width(strEntry.c_str()), totalTextWidth);
         strEntryFull = strEntry.c_str();
-        strEntry = CutText(&strEntry, width - spaceLeft, font);
+        strEntry = CutText(strEntry, width - spaceLeft, font);
     }
     return totalTextWidth;
 }
@@ -729,11 +997,35 @@ void cNopacityTimerMenuItem::SetTextShort(void) {
     pixmapTextScroller->DrawText(cPoint(0, height/2 + (height/2 - font->Height())/2), strEntry.c_str(), clrFont, clrTransparent, font);
 }
 
-void cNopacityTimerMenuItem::DrawBackground(int handleBackground, int textLeft) {
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    pixmap->DrawImage(cPoint(1, 1), handleBackground);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrMenuBorder));
+void cNopacityTimerMenuItem::DrawBackground(int textLeft) {
+    eSkinElementType type = (current)?seTimersHigh:seTimers;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
+        }
+        cImage *fore = imgCache->GetSkinElement(seTimersTop);
+        if (fore) {
+            pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+        } else {
+            pixmapForeground->Fill(clrTransparent);
+        }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    }
     int iconSize = height/2;
     cString iconName("");
     bool firstDay = false;
@@ -744,35 +1036,36 @@ void cNopacityTimerMenuItem::DrawBackground(int handleBackground, int textLeft)
         firstDay = true;
     } else if (Timer->Recording())
         iconName = "skinIcons/timerRecording";
-    else 
+    else
         iconName = "skinIcons/timerActive";
-    
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon(iconName, iconSize)) {
-        pixmapIcon->DrawImage(cPoint(textLeft, 0), imgLoader.GetImage());
-    }
+
+    cImage *imgIcon = imgCache->GetSkinIcon(*iconName, iconSize, iconSize);
+    if (imgIcon)
+        pixmapStatic->DrawImage(cPoint(textLeft, 0), *imgIcon);
+
     cString dateTime("");
     if (firstDay)
         dateTime = cString::sprintf("! %s", strDateTime.c_str());
     else
         dateTime = strDateTime.c_str();
-    pixmap->DrawText(cPoint(textLeft + iconSize, (height/2 - fontSmall->Height())/2), *dateTime, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+    tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+    pixmapStatic->DrawText(cPoint(textLeft + iconSize, (height/2 - fontSmall->Height())/2), *dateTime, clrFont, clrTransparent, fontSmall);
 }
 
 void cNopacityTimerMenuItem::Render() {
-    int handleBgrd = (current)?handleBackgrounds[11]:handleBackgrounds[10];
-    textLeft = config.menuItemLogoWidth + 10;
-    if (selectable) {                           
-        DrawBackground(handleBgrd, textLeft);
-        int logoWidth = config.menuItemLogoWidth;
-        int logoHeight = config.menuItemLogoHeight;
+    textLeft = geoManager->menuLogoWidth + geoManager->menuSpace;
+    if (selectable) {
+        DrawBackground(textLeft);
+        DrawChannelLogoBackground();
+        int logoWidth = geoManager->menuLogoWidth;
+        int logoHeight = geoManager->menuLogoHeight;
         if (!drawn) {
             DrawLogo(logoWidth, logoHeight);
             drawn = true;
         }
         if (!Running())
             SetTextShort();
-        if (current && scrollable && !Running() && config.menuScrollSpeed) {
+        if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
             Start();
         }
         if (wasCurrent && !current && scrollable && Running()) {
@@ -780,14 +1073,36 @@ void cNopacityTimerMenuItem::Render() {
             SetTextShort();
             Cancel(-1);
         }
+        if (wasCurrent)
+            if (infoTextWindow) {
+                delete infoTextWindow;
+                infoTextWindow = NULL;
+            }
+        const cEvent *Event = Timer->Event();
+        if (current && Event) {
+            if (config.GetValue("menuTimersWindowMode") == 0) {
+                //window mode
+                infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+                infoTextWindow->SetGeometry(textWindow);
+                infoTextWindow->SetText(Event->Description());
+                infoTextWindow->SetPoster(Event, NULL, false);
+                infoTextWindow->Start();
+            } else {
+                //fullscreen mode
+                infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, fontEPGWindowLarge);
+                infoTextWindow->SetGeometry(textWindow);
+                infoTextWindow->SetPoster(Event, NULL, true);
+                infoTextWindow->SetEvent(Event);
+            }
+        }
     }
 }
 
 void cNopacityTimerMenuItem::DrawLogo(int logoWidth, int logoHeight) {
     if (Timer && Timer->Channel() && Timer->Channel()->Name()) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadLogo(Timer->Channel()->Name(), logoWidth, logoHeight)) {
-            pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+        cImage *logo = imgCache->GetLogo(ctLogoMenuItem, Timer->Channel());
+        if (logo) {
+            pixmapStatic->DrawImage(cPoint(1,1), *logo);
         } else {
             cTextWrapper channel;
             channel.Set(Timer->Channel()->Name(), font, logoWidth);
@@ -796,19 +1111,26 @@ void cNopacityTimerMenuItem::DrawLogo(int logoWidth, int logoHeight) {
             int heightChannel = lines * lineHeight;
             int y = (heightChannel>height)?0:(height-heightChannel)/2;
             for (int line = 0; line < lines; line++) {
-                pixmapIcon->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
-            }   
+                pixmapStatic->DrawText(cPoint((logoWidth - font->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, font);
+            }
         }
     }
 }
 // cNopacityRecordingMenuItem  -------------
 
-cNopacityRecordingMenuItem::cNopacityRecordingMenuItem(cOsd *osd, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New) : cNopacityMenuItem (osd, "", sel) {
+cNopacityRecordingMenuItem::cNopacityRecordingMenuItem(cOsd *osd, cImageCache *imgCache, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New, cRect *vidWin) : cNopacityMenuItem (osd, imgCache, "", sel) {
     this->Recording = Recording;
     this->isFolder = isFolder;
     this->Level = Level;
     this->Total = Total;
     this->New = New;
+    this->vidWin = vidWin;
+    posterWidth = 0;
+    posterHeight = 0;
+    hasManualPoster = false;
+    manualPosterPath = "";
+    hasPoster = false;
+    hasThumb = false;
 }
 
 cNopacityRecordingMenuItem::~cNopacityRecordingMenuItem(void) {
@@ -818,15 +1140,8 @@ void cNopacityRecordingMenuItem::CreatePixmapTextScroller(int totalWidth) {
     int pixmapLeft = 0;
     int pixmapWidth = 0;
     int drawPortWidth = totalWidth + 10;
-
-    if (isFolder) {
-        pixmapLeft = left + 10 + config.menuRecFolderSize;
-        pixmapWidth = width - 10 - config.menuRecFolderSize;
-    } else {
-        pixmapLeft = left + 10;
-        pixmapWidth = width - 10;
-    }
-    
+    pixmapLeft = posterWidth + left + 20;
+    pixmapWidth = width - posterWidth - 20;
     pixmapTextScroller = osd->CreatePixmap(4, cRect(pixmapLeft, top + index * (height + spaceMenu), pixmapWidth, height), cRect(0, 0, drawPortWidth, height));
     pixmapTextScroller->Fill(clrTransparent);
 }
@@ -836,7 +1151,7 @@ void cNopacityRecordingMenuItem::CreateText() {
     try {
         std::vector<std::string> tokens;
         std::istringstream f(recName.c_str());
-        std::string s;    
+        std::string s;
         while (std::getline(f, s, FOLDERDELIMCHAR)) {
             tokens.push_back(s);
         }
@@ -849,6 +1164,28 @@ void cNopacityRecordingMenuItem::CreateText() {
     }
 }
 
+void cNopacityRecordingMenuItem::SetPoster(void) {
+    posterHeight = height - 10;
+    posterWidth = config.GetValue("posterWidth") * ((double)posterHeight / (double)config.GetValue("posterHeight"));
+    //check first if manually set poster exists
+    cString posterFound;
+    cImageLoader imgLoader;
+    hasManualPoster = imgLoader.SearchRecordingPoster(Recording->FileName(), posterFound);
+    if (hasManualPoster)
+        manualPosterPath = posterFound;
+    //no manually set poster found, check scraper
+    static cPlugin *pScraper = GetScraperPlugin();
+    if (pScraper) {
+        thumb.event = NULL;
+        thumb.recording = Recording;
+        if (pScraper->Service("GetPosterThumb", &thumb)) {
+            hasThumb = true;
+        } else {
+            hasThumb = false;
+        }
+    }
+}
+
 int cNopacityRecordingMenuItem::CheckScrollable(bool hasIcon) {
     int totalWidth = 0;
     if (isFolder)
@@ -859,30 +1196,26 @@ int cNopacityRecordingMenuItem::CheckScrollable(bool hasIcon) {
 }
 
 int cNopacityRecordingMenuItem::CheckScrollableRecording(void) {
-    int spaceLeft = spaceMenu;
+    int spaceLeft = spaceMenu + posterWidth + 15;
     int iconWidth = 0;
-    if (Recording->IsNew())
-        iconWidth += font->Height() + 10;
-    if (Recording->IsEdited())
-        iconWidth += font->Height() + 5;
     int totalTextWidth = width - spaceLeft;
     strRecNameFull = strRecName.c_str();
     if (font->Width(strRecName.c_str()) + iconWidth > (width - spaceLeft)) {
         scrollable = true;
         totalTextWidth = max(font->Width(strRecName.c_str()) + iconWidth, totalTextWidth);
-        strRecName = CutText(&strRecName, width - spaceLeft - iconWidth, font);
+        strRecName = CutText(strRecName, width - spaceLeft - iconWidth, font);
     }
     return totalTextWidth;
 }
 
 int cNopacityRecordingMenuItem::CheckScrollableFolder(void) {
-    int spaceLeft = spaceMenu + config.menuRecFolderSize;
+    int spaceLeft = spaceMenu + posterWidth + 15;
     int totalTextWidth = width - spaceLeft;
     strRecNameFull = strRecName.c_str();
     if (font->Width(strRecName.c_str()) > (width - spaceLeft)) {
         scrollable = true;
         totalTextWidth = max(font->Width(strRecName.c_str()), totalTextWidth);
-        strRecName = CutText(&strRecName, width - spaceLeft, font);
+        strRecName = CutText(strRecName, width - spaceLeft, font);
     }
     return totalTextWidth;
 }
@@ -895,24 +1228,53 @@ void cNopacityRecordingMenuItem::SetTextFull(void) {
         SetTextFullRecording();
 }
 
+void cNopacityRecordingMenuItem::DrawBackground(void) {
+    eSkinElementType type = (current)?seRecordingsHigh:seRecordings;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
+        }
+        cImage *fore = imgCache->GetSkinElement(seRecordingsTop);
+        if (fore) {
+            pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+        } else {
+            pixmapForeground->Fill(clrTransparent);
+        }
+
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    }
+}
+
 void cNopacityRecordingMenuItem::SetTextFullFolder(void) {
     tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
     pixmapTextScroller->Fill(clrTransparent);
-    DrawFolderIcon();
+    if (config.GetValue("useFolderPoster") && (hasPoster || hasThumb || hasManualPoster))
+        DrawPoster();
+    else
+        DrawFolderIcon();
     int heightRecName = (2*height/3 - font->Height())/2 + 10;
-    pixmapTextScroller->DrawText(cPoint(0, heightRecName), strRecNameFull.c_str(), clrFont, clrTransparent, font);
+    pixmapTextScroller->DrawText(cPoint(5, heightRecName), strRecNameFull.c_str(), clrFont, clrTransparent, font);
 }
 
 void cNopacityRecordingMenuItem::SetTextFullRecording(void) {
     tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
     pixmapTextScroller->Fill(clrTransparent);
     int textLeft = 5;
-    if (Recording->IsNew()) {
-        textLeft += DrawRecordingNewIcon();
-    }
-    if (Recording->IsEdited()) {
-        textLeft += DrawRecordingEditedIcon(textLeft);
-    }
     int heightRecName = (height / 2 - font->Height())/2;
     pixmapTextScroller->DrawText(cPoint(textLeft, heightRecName), strRecNameFull.c_str(), clrFont, clrTransparent, font);
 }
@@ -928,71 +1290,69 @@ void cNopacityRecordingMenuItem::SetTextShort(void) {
 void cNopacityRecordingMenuItem::SetTextShortFolder(void) {
     tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
     pixmapTextScroller->Fill(clrTransparent);
-    DrawFolderIcon();
+    if (config.GetValue("useFolderPoster") && (hasPoster || hasThumb || hasManualPoster))
+        DrawPoster();
+    else
+        DrawFolderIcon();
     int heightRecName = (2*height/3 - font->Height())/2 + 10;
-    pixmapTextScroller->DrawText(cPoint(0, heightRecName), strRecName.c_str(), clrFont, clrTransparent, font);
+    pixmapTextScroller->DrawText(cPoint(5, heightRecName), strRecName.c_str(), clrFont, clrTransparent, font);
 }
 
 void cNopacityRecordingMenuItem::SetTextShortRecording(void) {
     tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
     pixmapTextScroller->Fill(clrTransparent);
     int textLeft = 5;
-    if (Recording->IsNew()) {
-        textLeft += DrawRecordingNewIcon();
-    }
-    if (Recording->IsEdited()) {
-        textLeft += DrawRecordingEditedIcon(textLeft);
-    }
     int heightRecName = (height / 2 - font->Height())/2;
     pixmapTextScroller->DrawText(cPoint(textLeft, heightRecName), strRecName.c_str(), clrFont, clrTransparent, font);
 }
 
 
-int cNopacityRecordingMenuItem::DrawRecordingNewIcon(void) {
-    int iconNewSize = font->Height();
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/newrecording", iconNewSize)) {
-        int iconHeight = (height/2 - iconNewSize)/2;
-        pixmapTextScroller->DrawImage(cPoint(1, iconHeight), imgLoader.GetImage());
+void cNopacityRecordingMenuItem::DrawRecordingNewIcon(void) {
+    int iconNewSize = height/3;
+
+    cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/newrecording", iconNewSize, iconNewSize);
+    if (imgIcon) {
+        int iconX = pixmapStatic->ViewPort().Width() - iconNewSize;
+        int iconY = height/2;
+        pixmapStatic->DrawImage(cPoint(iconX, iconY), *imgIcon);
     }
-    return iconNewSize;
 }
 
-int cNopacityRecordingMenuItem::DrawRecordingEditedIcon(int startLeft) {
-    int iconEditedSize = font->Height() - 10;
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/recordingcutted", iconEditedSize)) {
-        int iconHeight = (height/2 - iconEditedSize)/2;
-        pixmapTextScroller->DrawImage(cPoint(startLeft + 5, iconHeight), imgLoader.GetImage());
+void cNopacityRecordingMenuItem::DrawRecordingEditedIcon(void) {
+    int iconCutSize = height/3;
+    cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recordingcutted", iconCutSize, iconCutSize);
+    if (imgIcon) {
+        int iconX = pixmapStatic->ViewPort().Width() - iconCutSize;
+        if (Recording->IsNew())
+            iconX -= iconCutSize;
+        int iconY = height/2;
+        pixmapStatic->DrawImage(cPoint(iconX, iconY), *imgIcon);
     }
-    return iconEditedSize + 5;
 }
 
 void cNopacityRecordingMenuItem::DrawFolderIcon(void) {
-    cImageLoader imgLoader;
-    if (imgLoader.LoadIcon("skinIcons/recordingfolder", config.menuRecFolderSize)) {
-        pixmapIcon->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+    cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/recfolder", posterWidth, posterHeight);
+    if (imgIcon) {
+        pixmapStatic->DrawImage(cPoint(10, 1), *imgIcon);
     }
 }
 
 void cNopacityRecordingMenuItem::DrawRecDateTime(void) {
-    int iconDateTimeSize = config.menuRecFolderSize / 2;
-    if (!drawn) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadIcon("skinIcons/recordingdatetime", iconDateTimeSize)) {
-            int iconHeight = height/2 + (height/2 - iconDateTimeSize)/2;
-            pixmapIcon->DrawImage(cPoint(3, iconHeight), imgLoader.GetImage());
-        }
-        drawn = true;
-    }
+    int left = posterWidth + 20;
+    pixmapStatic->DrawRectangle(cRect(left, 0, width, height), clrTransparent);
     const cEvent *Event = NULL;
     Event = Recording->Info()->GetEvent();
     cString strDateTime("");
     cString strDuration("");
     if (Event) {
-        cString strDate = Event->GetDateString();
+        std::string strDate = *(Event->GetDateString());
         cString strTime = Event->GetTimeString();
-        strDateTime = cString::sprintf("%s - %s", *strDate, *strTime);
+        if (strDate.find("1970") != std::string::npos) {
+            time_t start = Recording->Start();
+            strDateTime = cString::sprintf("%s %s", *DateString(start),*TimeString(start));
+        } else {
+            strDateTime = cString::sprintf("%s - %s", strDate.c_str(), *strTime);
+        }
         int duration = Event->Duration() / 60;
         int recDuration = Recording->LengthInSeconds();
         recDuration = (recDuration>0)?(recDuration / 60):0;
@@ -1000,34 +1360,58 @@ void cNopacityRecordingMenuItem::DrawRecDateTime(void) {
     }
 
     int textHeight = height/2 + (height/4 - fontSmall->Height())/2;
-    pixmapIcon->DrawText(cPoint(iconDateTimeSize + 10, textHeight), *strDateTime, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+    tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+    pixmapStatic->DrawText(cPoint(10 + left, textHeight), *strDateTime, clrFont, clrTransparent, fontSmall);
     textHeight += height/4;
-    pixmapIcon->DrawText(cPoint(iconDateTimeSize + 10, textHeight), *strDuration, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
-
+    pixmapStatic->DrawText(cPoint(10 + left, textHeight), *strDuration, clrFont, clrTransparent, fontSmall);
 }
 
 void cNopacityRecordingMenuItem::DrawFolderNewSeen(void) {
     int textHeight = 2*height/3 + (height/3 - fontSmall->Height())/2 - 10;
     cString strTotalNew = cString::sprintf("%d %s (%d %s)", Total, (Total > 1)?tr("recordings"):tr("recording"), New, tr("new"));
-    pixmapIcon->DrawText(cPoint(config.menuRecFolderSize + 10, textHeight), *strTotalNew, Theme.Color(clrMenuFontMenuItem), clrTransparent, fontSmall);
+    tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
+    pixmapStatic->DrawText(cPoint(posterWidth + 30, textHeight), *strTotalNew, clrFont, clrTransparent, fontSmall);
+}
+
+void cNopacityRecordingMenuItem::DrawPoster(void) {
+    cImageLoader imgLoader;
+    bool posterDrawn = false;
+    if (hasManualPoster) {
+        if (imgLoader.LoadPoster(*manualPosterPath, posterWidth, posterHeight)) {
+            posterDrawn = true;
+            pixmapStatic->DrawImage(cPoint(10, 5), imgLoader.GetImage());
+        }
+    } else if (hasThumb) {
+        if (imgLoader.LoadPoster(thumb.poster.path.c_str(), posterWidth, posterHeight)) {
+            posterDrawn = true;
+            pixmapStatic->DrawImage(cPoint(10, 5), imgLoader.GetImage());
+        }
+    }
+    if (!posterDrawn) {
+        cImage *imgIcon = imgCache->GetSkinIcon("skinIcons/defaultPoster", posterWidth, posterHeight);
+        if (imgIcon)
+            pixmapStatic->DrawImage(cPoint(10,5), *imgIcon);
+    }
 }
 
 void cNopacityRecordingMenuItem::Render() {
-    
-    int handleBgrd = (current)?handleBackgrounds[9]:handleBackgrounds[8];
-    if (selectable) {                           
-        pixmap->Fill(Theme.Color(clrMenuBorder));
-        pixmap->DrawImage(cPoint(1, 1), handleBgrd);
-        if (config.roundedCorners)
-            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    if (selectable) {
+        DrawBackground();
         if (isFolder) {
             DrawFolderNewSeen();
             SetTextShort();
         } else {
+            DrawPoster();
             DrawRecDateTime();
+            if (Recording->IsNew()) {
+                DrawRecordingNewIcon();
+            }
+            if (Recording->IsEdited()) {
+                DrawRecordingEditedIcon();
+            }
             SetTextShort();
         }
-        if (current && scrollable && !Running() && config.menuScrollSpeed) {
+        if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
             Start();
         }
         if (wasCurrent && !current && scrollable && Running()) {
@@ -1042,10 +1426,22 @@ void cNopacityRecordingMenuItem::Render() {
                     infoTextWindow = NULL;
                 }
             if (current) {
-                infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow);
-                infoTextWindow->SetGeometry(textWindow);
-                infoTextWindow->SetText(Recording->Info()->Description());
-                infoTextWindow->Start();
+                if (config.GetValue("menuRecordingsWindowMode") == 0) {
+                    //window mode
+                    infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, vidWin);
+                    infoTextWindow->SetGeometry(textWindow);
+                    infoTextWindow->SetText(Recording->Info()->Description());
+                    if (!infoTextWindow->SetManualPoster(Recording))
+                        infoTextWindow->SetPoster(NULL, Recording);
+                    infoTextWindow->Start();
+                } else {
+                    //fullscreen mode
+                    infoTextWindow = new cNopacityTextWindow(osd, fontEPGWindow, fontEPGWindowLarge);
+                    infoTextWindow->SetGeometry(textWindow);
+                    if (!infoTextWindow->SetManualPoster(Recording, true))
+                        infoTextWindow->SetPoster(NULL, Recording, true);
+                    infoTextWindow->SetRecording(Recording);
+                }
             }
         }
     }
@@ -1054,7 +1450,7 @@ void cNopacityRecordingMenuItem::Render() {
 
 // cNopacityDefaultMenuItem  -------------
 
-cNopacityDefaultMenuItem::cNopacityDefaultMenuItem(cOsd *osd, const char *text, bool sel) : cNopacityMenuItem (osd, text, sel) {
+cNopacityDefaultMenuItem::cNopacityDefaultMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel) : cNopacityMenuItem (osd, imgCache, text, sel) {
     scrollCol = -1;
 }
 
@@ -1062,15 +1458,40 @@ cNopacityDefaultMenuItem::~cNopacityDefaultMenuItem(void) {
 }
 
 bool cNopacityDefaultMenuItem::CheckProgressBar(const char *text) {
-    if (strlen(text) > 5 
-        && text[0] == '[' 
-        && ((text[1] == '|')||(text[1] == ' ')) 
-        && ((text[2] == '|')||(text[2] == ' ')) 
+    if (strlen(text) > 5
+        && text[0] == '['
+        && ((text[1] == '|')||(text[1] == ' '))
+        && ((text[2] == '|')||(text[2] == ' '))
         && text[strlen(text) - 1] == ']')
         return true;
     return false;
 }
 
+void cNopacityDefaultMenuItem::DrawBackground(void) {
+    eSkinElementType type = (current)?seDefaultHigh:seDefault;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
+        }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    }
+}
+
 void cNopacityDefaultMenuItem::DrawProgressBar(int x, int width, const char *bar, tColor color) {
     const char *p = bar + 1;
     bool isProgressbar = true;
@@ -1087,11 +1508,11 @@ void cNopacityDefaultMenuItem::DrawProgressBar(int x, int width, const char *bar
         }
     }
     if (isProgressbar) {
-        pixmap->DrawRectangle(cRect(x+5, height/4, width-10, height/2), color);
-        pixmap->DrawRectangle(cRect(x+7, height/4+2, width-14, height/2-4), Theme.Color(clrMenuItemBlend));
+        pixmapStatic->DrawRectangle(cRect(x+5, height/4, width-10, height/2), color);
+        pixmapStatic->DrawRectangle(cRect(x+7, height/4+2, width-14, height/2-4), clrTransparent);
         double progress = (double)now/(double)total;
-        pixmap->DrawRectangle(cRect(x+8, height/4+3, (width-16)*progress, height/2-6), color);
-        
+        pixmapStatic->DrawRectangle(cRect(x+8, height/4+3, (width-16)*progress, height/2-6), color);
+
     }
 }
 
@@ -1112,8 +1533,9 @@ void cNopacityDefaultMenuItem::SetTextShort(void) {
 int cNopacityDefaultMenuItem::CheckScrollable(bool hasIcon) {
     if (!selectable)
         return 0;
+    scrollable = false;
     int colWidth = 0;
-    int colTextWidth = 0; 
+    int colTextWidth = 0;
     for (int i=0; i<numTabs; i++) {
         if (tabWidth[i] > 0) {
             if (CheckProgressBar(*itemTabs[i]))
@@ -1133,8 +1555,20 @@ int cNopacityDefaultMenuItem::CheckScrollable(bool hasIcon) {
             break;
     }
     if (scrollable) {
-        pixmapTextScroller = osd->CreatePixmap(4, cRect(left + tabWidth[scrollCol], top + index * (height + spaceMenu), tabWidth[scrollCol+numTabs], height), cRect(0, 0, colTextWidth+10, height));
-        pixmapTextScroller->Fill(clrTransparent);
+        if (!pixmapTextScroller) {
+            pixmapTextScroller = osd->CreatePixmap(4, cRect(left + tabWidth[scrollCol], top + index * (height + spaceMenu), tabWidth[scrollCol+numTabs], height), cRect(0, 0, colTextWidth+10, height));
+            pixmapTextScroller->Fill(clrTransparent);
+        }
+    } else {
+        if (pixmapTextScroller) {
+            while (Running()) {
+                Cancel(-1);
+                DoSleep(10);
+            }
+            osd->DestroyPixmap(pixmapTextScroller);
+            pixmapTextScroller = NULL;
+            scrollCol = -1;
+        }
     }
     return 0;
 }
@@ -1157,25 +1591,30 @@ bool cNopacityDefaultMenuItem::DrawHeaderElement(void) {
         *(c2 + 1) = 0;
 
         int left = 5 + tabWidth[0];
-        pixmap->DrawText(cPoint(left, (height - font->Height()) / 2), c, Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
+        pixmapStatic->DrawText(cPoint(left, (height - font->Height()) / 2), c, Theme.Color(clrMenuFontMenuItemSep), clrTransparent, font);
         return true;
     }
     return false;
 }
 
 void cNopacityDefaultMenuItem::Render() {
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    int handleBgrd = (current)?handleBackgrounds[1]:handleBackgrounds[0];
-    tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrMenuFontMenuItem);
-    pixmap->DrawImage(cPoint(1, 1), handleBgrd);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    DrawBackground();
+    pixmapStatic->Fill(clrTransparent);
+
+    tColor clrFont;
+    if (current)
+        clrFont = Theme.Color(clrMenuFontMenuItemHigh);
+    else if (!selectable)
+        clrFont = Theme.Color(clrMenuFontMenuItemSep);
+    else
+        clrFont = Theme.Color(clrMenuFontMenuItem);
+
     if (!selectable && (strncmp(Text, "---", 3) == 0)) {
         if (DrawHeaderElement())
             return;
     }
     int colWidth = 0;
-    int colTextWidth = 0; 
+    int colTextWidth = 0;
     cString itemText("");
     for (int i=0; i<numTabs; i++) {
         if (tabWidth[i] > 0) {
@@ -1198,7 +1637,7 @@ void cNopacityDefaultMenuItem::Render() {
                     itemText = itemTabs[i];
                 }
                 if (i==0) posX += 5;
-                pixmap->DrawText(cPoint(posX, (height - font->Height()) / 2), *itemText, clrFont, clrTransparent, font);
+                pixmapStatic->DrawText(cPoint(posX, (height - font->Height()) / 2), *itemText, clrFont, clrTransparent, font);
             } else {
                 if (!Running())
                     SetTextShort();
@@ -1207,7 +1646,7 @@ void cNopacityDefaultMenuItem::Render() {
             break;
     }
 
-    if (current && scrollable && !Running() && config.menuScrollSpeed) {
+    if (current && scrollable && !Running() && config.GetValue("menuScrollSpeed")) {
         Start();
     }
     if (wasCurrent && !current && scrollable && Running()) {
@@ -1219,17 +1658,41 @@ void cNopacityDefaultMenuItem::Render() {
 
 // cNopacityTrackMenuItem  -------------
 
-cNopacityTrackMenuItem::cNopacityTrackMenuItem(cOsd *osd, const char *text) : cNopacityMenuItem (osd, text, true) {
+cNopacityTrackMenuItem::cNopacityTrackMenuItem(cOsd *osd, cImageCache *imgCache, const char *text) : cNopacityMenuItem (osd, imgCache, text, true) {
 }
 
 cNopacityTrackMenuItem::~cNopacityTrackMenuItem(void) {
 }
 
 void cNopacityTrackMenuItem::Render() {
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    int handleBgrd = (current)?handleBackgrounds[1]:handleBackgrounds[0];
-    pixmap->DrawImage(cPoint(1, 1), handleBgrd);
-    if (config.roundedCorners)
-        DrawRoundedCorners(Theme.Color(clrMenuBorder));
-    pixmap->DrawText(cPoint(5, (height - font->Height())/2), Text, Theme.Color(clrTracksFontButtons), clrTransparent, font);
+    eSkinElementType type = (current)?seTracksHigh:seTracks;
+    if (config.GetValue("displayType") == dtBlending) {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back)
+            pixmapBackground->DrawImage(cPoint(1, 1), *back);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    } else if (config.GetValue("displayType") == dtGraphical) {
+        cImage *back = imgCache->GetSkinElement(type);
+        if (back) {
+            pixmapBackground->DrawImage(cPoint(0, 0), *back);
+        } else {
+            pixmapBackground->Fill(clrTransparent);
+        }
+        cImage *fore = imgCache->GetSkinElement(seTracksTop);
+        if (fore) {
+            pixmapForeground->DrawImage(cPoint(0, 0), *fore);
+        } else {
+            pixmapForeground->Fill(clrTransparent);
+        }
+    } else {
+        pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+        tColor col = (current)?Theme.Color(clrMenuItemHigh):Theme.Color(clrMenuItem);
+        pixmapBackground->DrawRectangle(cRect(1, 1, width-2, height-2), col);
+        if (config.GetValue("roundedCorners"))
+            DrawRoundedCorners(Theme.Color(clrMenuBorder));
+    }
+    tColor clrFont = (current)?Theme.Color(clrMenuFontMenuItemHigh):Theme.Color(clrTracksFontButtons);
+    pixmapStatic->DrawText(cPoint(5, (height - font->Height())/2), Text, clrFont, clrTransparent, font);
 }
diff --git a/menuitem.h b/menuitem.h
index 3309986..536a77e 100644
--- a/menuitem.h
+++ b/menuitem.h
@@ -1,13 +1,18 @@
 #ifndef __NOPACITY_MENUITEM_H
 #define __NOPACITY_MENUITEM_H
 
+#include "textwindow.h"
+#include <string>
+#include "imagecache.h"
+
 class cNopacityMenuItem : public cListObject, public cThread {
 protected:
     cOsd *osd;
-    cPixmap *pixmap;
-    cPixmap *pixmapIcon;
+    cImageCache *imgCache;
+    cPixmap *pixmapBackground;
+    cPixmap *pixmapStatic;
     cPixmap *pixmapTextScroller;
-    int *handleBackgrounds;
+    cPixmap *pixmapForeground;
     const char *Text;
     bool selectable;
     bool current;
@@ -17,6 +22,7 @@ protected:
     cFont *font;
     cFont *fontSmall;
     cFont *fontEPGWindow;
+    cFont *fontEPGWindowLarge;
     int width, height;
     int top, left;
     int spaceMenu;
@@ -29,29 +35,31 @@ protected:
     cNopacityTextWindow *infoTextWindow;
     virtual void SetTextFull(void) {};
     virtual void SetTextShort(void) {};
-    void DrawDelimiter(const char *del, const char *icon, int handleBgrd);
+    void DrawDelimiter(const char *del, const char *icon, eSkinElementType seType);
+    void DrawRoundedCorners(tColor borderColor);
+    void DrawChannelLogoBackground(void);
     virtual void Action(void);
     void DoSleep(int duration);
-    std::string CutText(std::string *text, int width, const cFont *font);
-    void DrawRoundedCorners(tColor borderColor);
 public:
-    cNopacityMenuItem(cOsd *osd, const char *text, bool sel);
+    cNopacityMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel);
     virtual ~cNopacityMenuItem(void);
-    void CreatePixmap();
-    void CreatePixmapIcon(void);
+    void CreatePixmapBackground();
+    void CreatePixmapForeground();
+    void CreatePixmapStatic(void);
     virtual void CreatePixmapTextScroller(int totalWidth);
     void SetGeometry(int index, int top, int left, int width, int height, int spaceMenu);
     void SetFont(cFont *font) {this->font = font;}
     void SetFontSmall(cFont *fontSmall) {this->fontSmall = fontSmall;}
     void SetFontEPGWindow(cFont *font) {this->fontEPGWindow = font;}
-    void SetCurrent(bool cur); 
-    void SetAlpha(int alpha) {this->pixmap->SetAlpha(alpha);}
-    void SetAlphaIcon(int alpha) {if (pixmapIcon) this->pixmapIcon->SetAlpha(alpha);}
+    void SetFontEPGWindowLarge(cFont *font) {this->fontEPGWindowLarge = font;}
+    void SetCurrent(bool cur);
+    void SetAlpha(int alpha) {this->pixmapBackground->SetAlpha(alpha);}
+    void SetAlphaIcon(int alpha) {if (pixmapStatic) this->pixmapStatic->SetAlpha(alpha);}
     void SetAlphaText(int alpha) {if (pixmapTextScroller) this->pixmapTextScroller->SetAlpha(alpha);}
     void SetTabs(cString *tabs, int *tabWidths, int numtabs);
-    void SetBackgrounds(int *handleBackgrounds);
     void SetTextWindow(cRect *window) {textWindow = window;};
     virtual void CreateText(void) {};
+    virtual void SetPoster(void) {};
     virtual int CheckScrollable(bool hasIcon) {return 0;};
     virtual void Render() = 0;
 };
@@ -65,10 +73,11 @@ private:
     std::string strEntryFull;
     static std::string items[16];
     cString GetIconName();
+    void DrawBackground(void);
     void SetTextFull(void);
     void SetTextShort(void);
 public:
-    cNopacityMainMenuItem(cOsd *osd, const char *text, bool sel, bool setup);
+    cNopacityMainMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel, bool setup);
     ~cNopacityMainMenuItem(void);
     void CreatePixmapTextScroller(int totalWidth);
     void CreateText(void);
@@ -82,6 +91,7 @@ private:
     const cEvent *Event;
     const cChannel *Channel;
     eTimerMatch TimerMatch;
+    cRect *vidWin;
     std::string strDateTime;
     std::string strTitle;
     std::string strSubTitle;
@@ -96,7 +106,7 @@ private:
     void SetTextFull(void);
     void SetTextShort(void);
 public:
-    cNopacityScheduleMenuItem(cOsd *osd, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category);
+    cNopacityScheduleMenuItem(cOsd *osd, cImageCache *imgCache, const cEvent *Event, const cChannel *Channel, eTimerMatch TimerMatch, bool sel, eMenuCategory category, cRect *vidWin);
     ~cNopacityScheduleMenuItem(void);
     void CreatePixmapTextScroller(int totalWidth);
     void CreateText(void);
@@ -111,11 +121,17 @@ private:
     std::string strEntryFull;
     cString strChannelSource;
     cString strChannelInfo;
+    std::string strEpgInfo;
+    std::string strEpgInfoFull;
+    std::string strTimeInfo;
+    cRect *vidWin;
     void SetTextFull(void);
     void SetTextShort(void);
-    void DrawBackground(int handleBackground);
+    void DrawBackground(void);
+    void readCurrentEPG(void);
+    std::string readEPG(void);
 public:
-    cNopacityChannelMenuItem(cOsd *osd, const cChannel *Channel, bool sel);
+    cNopacityChannelMenuItem(cOsd *osd, cImageCache *imgCache, const cChannel *Channel, bool sel, cRect *vidWin);
     ~cNopacityChannelMenuItem(void);
     void CreatePixmapTextScroller(int totalWidth);
     void CreateText(void);
@@ -129,13 +145,14 @@ private:
     std::string strEntry;
     std::string strEntryFull;
     std::string strDateTime;
+    cRect *vidWin;
     void SetTextFull(void);
     void SetTextShort(void);
-    void DrawBackground(int handleBackground, int textLeft);
+    void DrawBackground(int textLeft);
     void DrawLogo(int logoWidth, int logoHeight);
     std::string CreateDate(void);
 public:
-    cNopacityTimerMenuItem(cOsd *osd, const cTimer *Timer, bool sel);
+    cNopacityTimerMenuItem(cOsd *osd, cImageCache *imgCache, const cTimer *Timer, bool sel, cRect *vidWin);
     ~cNopacityTimerMenuItem(void);
     void CreatePixmapTextScroller(int totalWidth);
     void CreateText(void);
@@ -147,7 +164,14 @@ class cNopacityRecordingMenuItem : public cNopacityMenuItem {
 private:
     const cRecording *Recording;
     bool isFolder;
+    bool hasManualPoster;
+    cString manualPosterPath;
+    bool hasPoster;
+    bool hasThumb;
+    int posterWidth, posterHeight;
+    ScraperGetPosterThumb thumb;
     int Level, Total, New;
+    cRect *vidWin;
     std::string strRecName;
     std::string strRecNameFull;
     void SetTextFull(void);
@@ -156,18 +180,21 @@ private:
     void SetTextShortFolder(void);
     void SetTextFullRecording(void);
     void SetTextShortRecording(void);
-    int DrawRecordingNewIcon(void);
-    int DrawRecordingEditedIcon(int startLeft);
+    void DrawBackground(void);
+    void DrawRecordingNewIcon(void);
+    void DrawRecordingEditedIcon(void);
     void DrawFolderIcon(void);
     void DrawRecDateTime(void);
     void DrawFolderNewSeen(void);
+    void DrawPoster(void);
     int CheckScrollableRecording(void);
     int CheckScrollableFolder(void);
 public:
-    cNopacityRecordingMenuItem(cOsd *osd, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New);
+    cNopacityRecordingMenuItem(cOsd *osd, cImageCache *imgCache, const cRecording *Recording, bool sel, bool isFolder, int Level, int Total, int New, cRect *vidWin);
     ~cNopacityRecordingMenuItem(void);
     void CreatePixmapTextScroller(int totalWidth);
     void CreateText(void);
+    void SetPoster(void);
     int CheckScrollable(bool hasIcon);
     void Render();
 };
@@ -175,6 +202,7 @@ public:
 class cNopacityDefaultMenuItem : public cNopacityMenuItem {
 private:
     bool CheckProgressBar(const char *text);
+    void DrawBackground(void);
     void DrawProgressBar(int x, int width, const char *bar, tColor color);
     bool DrawHeaderElement(void);
     std::string strEntry;
@@ -183,7 +211,7 @@ private:
     void SetTextFull(void);
     void SetTextShort(void);
 public:
-    cNopacityDefaultMenuItem(cOsd *osd, const char *text, bool sel);
+    cNopacityDefaultMenuItem(cOsd *osd, cImageCache *imgCache, const char *text, bool sel);
     ~cNopacityDefaultMenuItem(void);
     int CheckScrollable(bool hasIcon);
     void Render();
@@ -192,7 +220,7 @@ public:
 class cNopacityTrackMenuItem : public cNopacityMenuItem {
 private:
 public:
-    cNopacityTrackMenuItem(cOsd *osd, const char *text);
+    cNopacityTrackMenuItem(cOsd *osd, cImageCache *imgCache, const char *text);
     ~cNopacityTrackMenuItem(void);
     void Render();
 };
diff --git a/nopacity.c b/nopacity.c
index 63ea93f..f75d3b9 100644
--- a/nopacity.c
+++ b/nopacity.c
@@ -1,150 +1,29 @@
 #include <vdr/osd.h>
 #include <vdr/menu.h>
 
-static cTheme Theme;
-
-//COMMON
-#define CLR_TRANSBLACK          0xDD000000
-#define CLR_TRANSBLACK2         0xB0000000
-#define CLR_DARKBLUE            0xDD003DF5
-#define CLR_DARKBLUE2           0xB0003DF5
-#define CLR_WHITE               0xFFFFFFFF
-#define CLR_BRIGHTBLUE          0xFF0066FF
-#define CLR_GRAY                0xFF858585
-
-//CHANNELS
-#define CLR_PROGRESSBARBACK     0xDD858585
-#define CLR_PROGRESSBARBLEND    0xDD80B3FF
-#define CLR_CHANNELSYMBOLOFF    0xDD858585
-#define CLR_CHANNELRECACTIVE    0xDDFF0000
-
-//REPLAY
-#define CLR_REPLAYCURRENTTOTAL  0xFF003DF5
-#define CLR_REST                0xDD858585
-#define CLR_EXPOSED             0xFF000000
-#define CLR_CURRENT             0x90FFFFFF
-#define CLR_MARKS               0xFF000000
-
-//MENU
-#define CLR_MENUSCROLLBARBACK   0x40003DF5
-#define CLR_MENUITEM            0xEE444444
-#define CLR_MENUITEMBLEND       0x90000000
-#define CLR_MENUITEMHIGHBLEND   0xEE0033FF
-#define CLR_SEPARATORBORDER     0xEE444444
-#define CLR_DISKALERT           0xDDFF0000
-#define CLR_MENUHEADER		     0xDD000000
-#define CLR_MENUHEADERBLEND     0xEE0033FF
-
-//BUTTONS
-#define CLR_BUTTONRED           0x99BB0000
-#define CLR_BUTTONREDBORDER     0xFFBB0000
-#define CLR_BUTTONGREEN         0x9900BB00
-#define CLR_BUTTONGREENBORDER   0xFF00BB00
-#define CLR_BUTTONYELLOW        0x99BBBB00
-#define CLR_BUTTONYELLOWBORDER  0xFFBBBB00
-#define CLR_BUTTONBLUE          0x990000BB
-#define CLR_BUTTONBLUEBORDER    0xFF0000BB
-
-//MESSAGES
-#define CLR_MESSAGESTATUS       0x900000FF
-#define CLR_MESSAGEINFO         0x90009900
-#define CLR_MESSAGEWARNING      0x90BBBB00
-#define CLR_MESSAGEERROR        0x90BB0000
-
-//CHANNELS
-THEME_CLR(Theme, clrChannelBackground,      CLR_TRANSBLACK2);
-THEME_CLR(Theme, clrChannelBackBlend,       CLR_DARKBLUE2);
-THEME_CLR(Theme, clrChannelHead,            CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrChannelEPG,             CLR_WHITE);
-THEME_CLR(Theme, clrChannelEPGInfo,         CLR_GRAY);
-THEME_CLR(Theme, clrProgressBar,            CLR_DARKBLUE);
-THEME_CLR(Theme, clrProgressBarBack,        CLR_PROGRESSBARBACK);
-THEME_CLR(Theme, clrProgressBarBlend,       CLR_PROGRESSBARBLEND);
-THEME_CLR(Theme, clrChannelSymbolOn,        CLR_DARKBLUE);
-THEME_CLR(Theme, clrChannelSymbolOff,       CLR_CHANNELSYMBOLOFF);
-THEME_CLR(Theme, clrChannelRecActive,       CLR_CHANNELRECACTIVE);
-//REPLAY
-THEME_CLR(Theme, clrReplayBackground,       CLR_TRANSBLACK2);
-THEME_CLR(Theme, clrReplayBackBlend,        CLR_DARKBLUE2);
-THEME_CLR(Theme, clrReplayHead,             CLR_WHITE);
-THEME_CLR(Theme, clrReplayDescription,      CLR_GRAY);
-THEME_CLR(Theme, clrReplayCurrentTotal,     CLR_REPLAYCURRENTTOTAL);
-THEME_CLR(Theme, clrReplayProgressSeen,     CLR_DARKBLUE);
-THEME_CLR(Theme, clrReplayProgressRest,     CLR_REST);
-THEME_CLR(Theme, clrReplayProgressSelected, CLR_EXPOSED);
-THEME_CLR(Theme, clrReplayProgressMark,     CLR_MARKS);
-THEME_CLR(Theme, clrReplayProgressCurrent,  CLR_CURRENT);
-THEME_CLR(Theme, clrReplayHighlightIcon,    CLR_DARKBLUE);
-//TRACKS
-THEME_CLR(Theme, clrTracksFontHead,         CLR_GRAY);
-THEME_CLR(Theme, clrTracksFontButtons,      CLR_WHITE);
-//Volume
-THEME_CLR(Theme, clrVolumeFont,             CLR_GRAY);
-//MENU
-THEME_CLR(Theme, clrMenuBack,               CLR_TRANSBLACK);
-THEME_CLR(Theme, clrMenuBorder,             CLR_DARKBLUE);
-THEME_CLR(Theme, clrMenuScrollBar,          CLR_DARKBLUE);
-THEME_CLR(Theme, clrMenuScrollBarBack,      CLR_MENUSCROLLBARBACK);
-THEME_CLR(Theme, clrMenuItem,               CLR_MENUITEM);
-THEME_CLR(Theme, clrMenuItemBlend,          CLR_MENUITEMBLEND);
-THEME_CLR(Theme, clrMenuItemHigh,           CLR_TRANSBLACK);
-THEME_CLR(Theme, clrMenuItemHighBlend,      CLR_MENUITEMHIGHBLEND);
-THEME_CLR(Theme, clrSeparatorBorder,        CLR_SEPARATORBORDER);
-THEME_CLR(Theme, clrDiskAlert,              CLR_DISKALERT);
-THEME_CLR(Theme, clrMenuFontHeader,         CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDate,           CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDiscUsage,      CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontButton,         CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontTimers,         CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontTimersHeader,   CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontMessages,       CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDetailViewText, CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontDetailViewHeader, CLR_GRAY);
-THEME_CLR(Theme, clrMenuFontDetailViewHeaderTitle, CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrMenuFontMenuItem,       CLR_WHITE);
-THEME_CLR(Theme, clrMenuFontMenuItemHigh,   CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrMenuFontMenuItemTitle,  CLR_BRIGHTBLUE);
-THEME_CLR(Theme, clrMenuFontMenuItemSep,    CLR_GRAY);
-THEME_CLR(Theme, clrMenuHeader,             CLR_MENUHEADER);
-THEME_CLR(Theme, clrMenuHeaderBlend,        CLR_MENUHEADERBLEND);
-
-//BUTTONS
-THEME_CLR(Theme, clrButtonRed,              CLR_BUTTONRED);
-THEME_CLR(Theme, clrButtonRedBorder,        CLR_BUTTONREDBORDER);
-THEME_CLR(Theme, clrButtonGreen,            CLR_BUTTONGREEN);
-THEME_CLR(Theme, clrButtonGreenBorder,      CLR_BUTTONGREENBORDER);
-THEME_CLR(Theme, clrButtonYellow,           CLR_BUTTONYELLOW);
-THEME_CLR(Theme, clrButtonYellowBorder,     CLR_BUTTONYELLOWBORDER);
-THEME_CLR(Theme, clrButtonBlue,             CLR_BUTTONBLUE);
-THEME_CLR(Theme, clrButtonBlueBorder,       CLR_BUTTONBLUEBORDER);
-//MESSAGES
-THEME_CLR(Theme, clrMessageFont,            CLR_WHITE);
-THEME_CLR(Theme, clrMessageStatus,          CLR_MESSAGESTATUS);
-THEME_CLR(Theme, clrMessageInfo,            CLR_MESSAGEINFO);
-THEME_CLR(Theme, clrMessageWarning,         CLR_MESSAGEWARNING);
-THEME_CLR(Theme, clrMessageError,           CLR_MESSAGEERROR);
-THEME_CLR(Theme, clrMessageBlend,           CLR_TRANSBLACK);
-
-#include "config.c"
-cNopacityConfig config;
-#include "setup.c"
-#include "imageloader.c"
 #include "nopacity.h"
-#include "helpers.c"
-#include "displaychannel.c"
-#include "textwindow.c"
-#include "timers.c"
-#include "menuitem.c"
-#include "menudetailview.c"
-#include "displaymenuview.c"
-#include "displaymenu.c"
-#include "displayreplay.c"
-#include "displayvolume.c"
-#include "displaytracks.c"
-#include "displaymessage.c"
-
-cNopacity::cNopacity(void) : cSkin("nOpacity", &::Theme) {
-    config.setDynamicValues();
+#include "config.h"
+#include "displaychannel.h"
+#include "displaymenuview.h"
+#include "displaymenu.h"
+#include "displayreplay.h"
+#include "displayvolume.h"
+#include "displaytracks.h"
+#include "displaymessage.h"
+
+cNopacity::cNopacity(cImageCache *imgCache) : cSkin("nOpacity", &::Theme) {
+    displayMenu = NULL;
+    config.LoadThemeSpecificConfigs();
+    config.SetThemeSpecificDefaults();
+    config.SetThemeSetup();
+    config.SetPathes();
+    config.SetFontName();
+    geoManager = new cGeometryManager();
+    geoManager->SetGeometry();
+    fontManager = new cFontManager();
+    fontManager->SetFonts();
+    this->imgCache = imgCache;
+    imgCache->CreateCache();
 }
 
 const char *cNopacity::Description(void) {
@@ -152,26 +31,48 @@ const char *cNopacity::Description(void) {
 }
 
 cSkinDisplayChannel *cNopacity::DisplayChannel(bool WithInfo) {
-  return new cNopacityDisplayChannel(WithInfo);
+    ReloadCaches();
+    return new cNopacityDisplayChannel(imgCache, WithInfo);
 }
 
 cSkinDisplayMenu *cNopacity::DisplayMenu(void) {
-  return new cNopacityDisplayMenu;
+    ReloadCaches();
+    cNopacityDisplayMenu *menu = new cNopacityDisplayMenu(imgCache);
+    displayMenu = menu;
+    return menu;
 }
 
 cSkinDisplayReplay *cNopacity::DisplayReplay(bool ModeOnly) {
-  return new cNopacityDisplayReplay(ModeOnly);
+  ReloadCaches();
+  return new cNopacityDisplayReplay(imgCache, ModeOnly);
 }
 
 cSkinDisplayVolume *cNopacity::DisplayVolume(void) {
-  return new cNopacityDisplayVolume;
+  ReloadCaches();
+  return new cNopacityDisplayVolume(imgCache);
 }
 
 cSkinDisplayTracks *cNopacity::DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) {
-  return new cNopacityDisplayTracks(Title, NumTracks, Tracks);
+  ReloadCaches();
+  return new cNopacityDisplayTracks(imgCache, Title, NumTracks, Tracks);
 }
 
 cSkinDisplayMessage *cNopacity::DisplayMessage(void) {
-  return new cNopacityDisplayMessage;
+  ReloadCaches();
+  return new cNopacityDisplayMessage(imgCache);
 }
 
+void cNopacity::ReloadCaches(void) {
+    if (geoManager->GeometryChanged() || imgCache->ThemeChanged()) {
+        int start = cTimeMs::Now();
+        config.LoadDefaults();
+        config.SetThemeSpecificDefaults();
+        config.SetThemeSetup();
+        config.SetFontName();
+        geoManager->SetGeometry();
+        fontManager->DeleteFonts();
+        fontManager->SetFonts();
+        imgCache->Reload();
+        dsyslog("nopacity: Cache reloaded in %d ms", int(cTimeMs::Now()-start));
+    }
+}
diff --git a/nopacity.h b/nopacity.h
index 8144ee0..5b20654 100644
--- a/nopacity.h
+++ b/nopacity.h
@@ -3,10 +3,17 @@
 
 #include <vdr/skins.h>
 #include <vdr/videodir.h>
+#include "imagecache.h"
+
+class cNopacityDisplayMenu;
 
 class cNopacity : public cSkin {
+private:
+  cNopacityDisplayMenu *displayMenu;
+  cImageCache *imgCache;
+  void ReloadCaches(void);
 public:
-  cNopacity(void);
+  cNopacity(cImageCache *imgCache);
   virtual const char *Description(void);
   virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo);
   virtual cSkinDisplayMenu *DisplayMenu(void);
@@ -15,4 +22,5 @@ public:
   virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
   virtual cSkinDisplayMessage *DisplayMessage(void);
   };
+
 #endif //__NOPACITY_H
diff --git a/po/ca_ES.po b/po/ca_ES.po
new file mode 100644
index 0000000..d2c04ca
--- /dev/null
+++ b/po/ca_ES.po
@@ -0,0 +1,702 @@
+# VDR plugin language source file.
+# Copyright (C) 2012
+# This file is distributed under the same license as the PACKAGE package.
+# louis, 2012.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: skinnopacity 0.0.1\n"
+"Report-Msgid-Bugs-To: <see README>\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
+"PO-Revision-Date: 2013-03-19 22:56+0100\n"
+"Last-Translator: Gabychan <gbonich at gmail.com>\n"
+"Language-Team: \n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Català\n"
+"X-Poedit-Country: Catalunya\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+msgid "No Cast available"
+msgstr ""
+
+msgid "Cast"
+msgstr ""
+
+msgid "EPG Info"
+msgstr ""
+
+msgid "Reruns"
+msgstr ""
+
+msgid "Recording Information"
+msgstr ""
+
+msgid "Image Galery"
+msgstr ""
+
+msgid "TheTVDB Info"
+msgstr ""
+
+msgid "TheTVDB Information"
+msgstr ""
+
+msgid "Episode"
+msgstr ""
+
+msgid "Season"
+msgstr ""
+
+msgid "Episode Overview"
+msgstr ""
+
+msgid "First aired"
+msgstr ""
+
+msgid "Guest Stars"
+msgstr ""
+
+msgid "TheMovieDB Rating"
+msgstr ""
+
+msgid "Series Overview"
+msgstr ""
+
+msgid "Genre"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "TheMovieDB Information"
+msgstr ""
+
+msgid "Original Title"
+msgstr ""
+
+msgid "Tagline"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "yes"
+msgstr "sí"
+
+msgid "no"
+msgstr "no"
+
+msgid "Adult"
+msgstr ""
+
+msgid "Collection"
+msgstr ""
+
+msgid "Budget"
+msgstr ""
+
+msgid "Revenue"
+msgstr ""
+
+msgid "Homepage"
+msgstr ""
+
+msgid "Release Date"
+msgstr ""
+
+msgid "Runtime"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "TheMovieDB Popularity"
+msgstr ""
+
+msgid "TheMovieDB Vote Average"
+msgstr ""
+
+msgid "free"
+msgstr "lliure"
+
+msgid "Volume"
+msgstr "Volum"
+
+msgid "images"
+msgstr "imatges"
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr ""
+
+msgid "No reruns found"
+msgstr ""
+
+msgid "Size"
+msgstr "Mida"
+
+msgid "cut"
+msgstr "retalla"
+
+msgid "Length"
+msgstr "Durada"
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Est. bitrate"
+msgstr "Bitrate estimat"
+
+msgid "Search timer"
+msgstr "Cerca timer"
+
+msgid "Transp."
+msgstr "Transponedor"
+
+msgid "No EPG Information found"
+msgstr "No hi ha informació EPG"
+
+msgid "Duration"
+msgstr "Durada"
+
+msgid "recording"
+msgstr "gravació"
+
+msgid "recordings"
+msgstr "gravacions"
+
+msgid "new"
+msgstr "nou"
+
+msgid "Font"
+msgstr "Font"
+
+msgid "VDR Menu: Common Settings"
+msgstr "Menu VDR: Preferències"
+
+msgid "VDR Menu: Main and Setup Menu"
+msgstr "Menu VDR: Menú principal i configuració"
+
+msgid "VDR Menu: Schedules Menu"
+msgstr "Menu VDR: Menú programació"
+
+msgid "VDR Menu: Channels Menu"
+msgstr "Menu VDR: Menú canals"
+
+msgid "VDR Menu: Timers Menu"
+msgstr "Menu VDR: Menú timer"
+
+msgid "VDR Menu: Recordings Menu"
+msgstr "Menu VDR: Menu gravacions"
+
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr ""
+
+msgid "Channel Switching"
+msgstr "Canvi de canal"
+
+msgid "Replay"
+msgstr "Reproducció"
+
+msgid "Audio Tracks"
+msgstr "Pistes d'àudio"
+
+msgid "Messages"
+msgstr "Missatges"
+
+msgid "Image Caching"
+msgstr "Cache d'imatge"
+
+msgid "right"
+msgstr "dreta"
+
+msgid "left"
+msgstr "esquerra"
+
+msgid "Carriage Return"
+msgstr "Retorn"
+
+msgid "Forward and Back again"
+msgstr "Avançar i retrocedir de nou"
+
+msgid "off"
+msgstr "off"
+
+msgid "slow"
+msgstr "lent"
+
+msgid "medium"
+msgstr "normal"
+
+msgid "fast"
+msgstr "ràpid"
+
+msgid "auto"
+msgstr "auto"
+
+msgid "Create Log Messages for image loading"
+msgstr "Crea Log d'imatges carregades"
+
+msgid "Number of Default Menu Entries per Page"
+msgstr "Nombre d'entrades de menú per pàgina"
+
+msgid "Adjust Font Size - Default Menu Item"
+msgstr "Ajust Mida de la Font - Opció de Menú"
+
+msgid "Adjustment of narrow menus"
+msgstr "Ajust dels menús limitats"
+
+msgid "Scale Video size to fit into menu window"
+msgstr "Ajust de la mida de video a la finestra del menú"
+
+msgid "Header Height (Percent of OSD Height)"
+msgstr "Alçada de la capçalera (% Alçada OSD)"
+
+msgid "Footer Height (Percent of OSD Height)"
+msgstr "Alçada del peu de pàgina (% Alçada OSD)"
+
+msgid "Rounded Corners for menu items and buttons"
+msgstr "Cantells rodons als elements de menú i botons"
+
+msgid "Radius of rounded corners"
+msgstr "Radi dels cantells rodons"
+
+msgid "Use Channel Logo background"
+msgstr "Utilitza logo del canal de fons"
+
+msgid "Fade-In Time in ms (Zero for switching off fading)"
+msgstr "Fosa d'entrada, temps en ms (0 per desactivació)"
+
+msgid "Menu Items Scroll Style"
+msgstr "Estil del Menu desplaçament"
+
+msgid "Menu Items Scrolling Speed"
+msgstr "Velocitat desplaçament elements de menú"
+
+msgid "Menu Items Scrolling Delay in s"
+msgstr "Retard desplaçament elements de menú en s"
+
+msgid "Adjust Font Size - Header"
+msgstr "Ajusta mida de la Font - capçalera"
+
+msgid "Adjust Font Size - Date"
+msgstr "Ajusta mida de la Font - Data"
+
+msgid "Adjust Font Size - Color Buttons"
+msgstr "Ajusta mida de la Font - Botons de color"
+
+msgid "Adjust Font Size - Messages"
+msgstr "Ajusta mida de la Font - Missatges"
+
+msgid "Adjust Font Size - Detail View Text"
+msgstr "Ajusta mida de la Font - Vista detall del text"
+
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr "Ajusta mida de la Font -  Vista detall text petit"
+
+msgid "Adjust Font Size - Detail View Header"
+msgstr "Ajusta mida de la Font - Vista detall capçalera"
+
+msgid "Adjust Font Size - Detail View Header Large"
+msgstr "Ajusta mida de la Font - Vista més detall capçalera"
+
+msgid "\"VDR\" plus VDR version"
+msgstr "\"VDR\" versió plus VDR"
+
+msgid "only VDR version"
+msgstr "només versió VDR"
+
+msgid "no title"
+msgstr "sense títol"
+
+msgid "free time in hours"
+msgstr "temps lliure en hores"
+
+msgid "free space in GB"
+msgstr "espai lliure en GB"
+
+msgid "small without logo"
+msgstr "petit sense logo"
+
+msgid "Use narrow main menu"
+msgstr "Utilitza menú principal limitat"
+
+msgid "Width (Percent of OSD Width)"
+msgstr "Amplada (% amplada OSD)"
+
+msgid "Use narrow setup menu"
+msgstr "Utilitza configuració limitada"
+
+msgid "Number of entires per page"
+msgstr "Nombre d'entrades per pàgina"
+
+msgid "Use menu icons"
+msgstr "Utilitza menú d'icones"
+
+msgid "Main menu title style"
+msgstr "Estil de títol al menú principal"
+
+msgid "Display Disk Usage"
+msgstr "Mostra Ús del disc"
+
+msgid "Size (square, Percent of OSD Width)"
+msgstr "Mida (quadrat, % amplada OSD)"
+
+msgid "Free Disc Display"
+msgstr "Mostra espai lliure al disc"
+
+msgid "Adjust Font Size - free"
+msgstr "Ajusta mida de la Font - lliure"
+
+msgid "Adjust Font Size - percent"
+msgstr "Ajusta mida de la Font - percentatge"
+
+msgid "Display Timers"
+msgstr "Mostra timers"
+
+msgid "Maximum number of Timers"
+msgstr "Nombre màxim de timers"
+
+msgid "Width of Timers (Percent of OSD Width)"
+msgstr "Amplada dels timers (% amplada OSD)"
+
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr "Ample dels Logos Canal (% Amplada temporitzador)"
+
+msgid "Adjust Font Size - Title"
+msgstr "Ajusta mida de la Font - Títol"
+
+msgid "Show Timer Conflicts"
+msgstr "Mostra conflictes timers"
+
+msgid "Header Logo Width"
+msgstr "Amplada logo capçalera"
+
+msgid "Header Logo Height"
+msgstr "Alçada logo capçalera"
+
+msgid "Adjust Font Size - Menu Items"
+msgstr "Ajusta mida de la font - Elements de menú"
+
+msgid "window"
+msgstr "finestre"
+
+msgid "full screen"
+msgstr "pantalla completa"
+
+msgid "Use narrow menu"
+msgstr "Utilitza menú limitat"
+
+msgid "Mode of EPG Window"
+msgstr "Mode pantalla EPG"
+
+msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
+msgstr "Fosa d'entrada finestra EPG, temps en ms (0 per desactivació)"
+
+msgid "EPG Window Display Delay in s"
+msgstr "Temps visualització finestra EPG en s"
+
+msgid "EPG Window Scroll Delay in s"
+msgstr "Temps retard desplaçament finestra EPG en s"
+
+msgid "EPG Window Text Scrolling Speed"
+msgstr "Velocitat desplaçament text finestra EPG"
+
+msgid "Height of EPG Info Window (Percent of OSD Height)"
+msgstr "Alçada Finestra Info EPG (% alçada OSD)"
+
+msgid "Adjust Font Size - Menu Item"
+msgstr "Ajusta mida de la Font - Element de menú"
+
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Ajusta mida de la Font - Element petit de menú"
+
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Ajusta mida de la Font - Finestra Info EPG"
+
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr "Ajusta mida de la Font - Finestra Info EPG encapçalament "
+
+msgid "Transponder Information"
+msgstr "Informació Transponedor"
+
+msgid "Current Schedule"
+msgstr "Programació actual"
+
+msgid "Plain Channels"
+msgstr "Canals plans"
+
+msgid "Menu Items display mode"
+msgstr "Mode visualització Elements de menú"
+
+msgid "Display schedules with time info"
+msgstr "Veure horaris amb informació en temps"
+
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr "Nombre d'entrades EPG a la Finestra de Programació"
+
+msgid "never"
+msgstr "mai"
+
+msgid "always"
+msgstr "sempre"
+
+msgid "only if no tvscraper media available"
+msgstr "Sols si tvscraper media no disponible"
+
+msgid "Mode of recording Window"
+msgstr "Mode de gravació"
+
+msgid "Border around detailed recording view"
+msgstr "Vora al voltant de vista registre detallat"
+
+msgid "Use folder poster if available"
+msgstr "Utilitzeu carpeta cartell si està disponible"
+
+msgid "Width of manually set recording poster"
+msgstr "Ample del cartell de gravació ajustat manualment"
+
+msgid "Height of manually set recording poster"
+msgstr "Alçada del cartell de gravació ajustat manualment"
+
+msgid "if exists"
+msgstr "si existeix"
+
+msgid "Border around view"
+msgstr ""
+
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr ""
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Number of reruns to display"
+msgstr "Nombre de reemissions a mostrar"
+
+msgid "Use Subtitle for reruns"
+msgstr "Utilitza subtítols a les reemissions"
+
+msgid "EPG Image Width"
+msgstr ""
+
+msgid "EPG Image Height"
+msgstr ""
+
+msgid "Large EPG Image Width"
+msgstr ""
+
+msgid "Large EPG Image Height"
+msgstr ""
+
+msgid "transparent channel logo"
+msgstr "Logo del canal transparent"
+
+msgid "full osd width"
+msgstr "Amplada total OSD"
+
+msgid "do not display"
+msgstr "no mostrar"
+
+msgid "top"
+msgstr ""
+
+msgid "middle"
+msgstr ""
+
+msgid "bottom"
+msgstr ""
+
+msgid "show elapsed time"
+msgstr "mostra temps transcorregut"
+
+msgid "show remaining time"
+msgstr "mostra temps restant"
+
+msgid "Height of Channel Display (Percent of OSD Height)"
+msgstr "Alçada Visualització Canal (% alçada OSD)"
+
+msgid "Left & Right Border Width"
+msgstr "Amplada vores esquerra i dreta"
+
+msgid "Bottom Border Height"
+msgstr "Alçada vora botó"
+
+msgid "Background Transparency in Percent"
+msgstr "Transparència de fons en percentatge"
+
+msgid "Background Style"
+msgstr "Estil del Fons"
+
+msgid "Rounded Corners"
+msgstr "Cantells rodons"
+
+msgid "Vertical Channel Logo Alignment"
+msgstr ""
+
+msgid "Channel Logo Position"
+msgstr "Posició Logo Canal"
+
+msgid "Channel Logo original Width"
+msgstr "Amplada Original Logo del canal"
+
+msgid "Channel Logo original Height"
+msgstr "Alçada Original Logo del canal"
+
+msgid "Kind of time display for current schedule"
+msgstr "Tipus de visualització per la programació actual"
+
+msgid "Display Signal Strength & Quality"
+msgstr "Mostra qualitat i intensitat del senyal"
+
+msgid "Display Channel Source & Rec. Info"
+msgstr ""
+
+msgid "Display Poster or Fanart from TVScraper"
+msgstr "Mostra Poster o Fanart de TVScraper"
+
+msgid "Border in Pixel"
+msgstr "Final del Pixel"
+
+msgid "Display previous and next Channel Group"
+msgstr "Mostra grups de canals anterior i posterior"
+
+msgid "Adjust Font Size - EPG Text"
+msgstr "Ajusta mida de la Font - Text EPG"
+
+msgid "Adjust Font Size - EPG Infotext"
+msgstr "Ajusta mida de la Font - Infotext EPG"
+
+msgid "Adjust Font Size - Channel Source Info"
+msgstr "Ajusta mide de la Font - Info del Canal"
+
+msgid "Adjust Font Size - Channel Group"
+msgstr "Ajusta mida de la Font - Grup de canals"
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr "Ajusta mida de la Font - Post/Ant Grup Canals"
+
+msgid "Height of Replay Display (Percent of OSD Height)"
+msgstr "Alçada Visualització Reproducció (% alcada OSD)"
+
+msgid "Adjust Font Size - Text"
+msgstr "Ajusta mida de la Font - Text"
+
+msgid "Width of Tracks Display (Percent of OSD Width)"
+msgstr "Amplada Visualització Pistes (% amplada OSD)"
+
+msgid "Height of Track Items (in pixels)"
+msgstr "Alçada Elements de Pistes (en píxels)"
+
+msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
+msgstr "Posició (0: bot. central, 1: bot. esq., ... , 7: bot. dret)"
+
+msgid "Border Left / Right"
+msgstr "Vora esquerra / dreta"
+
+msgid "Border Top / Bottom"
+msgstr "Vora superior / inferior"
+
+msgid "Adjust Font Size - Buttons"
+msgstr "Ajusta mida de la Font - Botons"
+
+msgid "Width of Message Display (Percent of OSD Height)"
+msgstr "Amplada del missatge (% Amplada OSD)"
+
+msgid "Height of Message Display (Percent of OSD Height)"
+msgstr "Alçada del missatge (% alçada OSD)"
+
+msgid "Adjust Font Size"
+msgstr "Ajusta mida de la Font"
+
+msgid "Volume Display"
+msgstr "Mostra volum"
+
+msgid "Width of Volume Display (Percent of OSD Height)"
+msgstr "Amplada Visualització volum (% Amplada OSD)"
+
+msgid "Height of Volume Display (Percent of OSD Height)"
+msgstr "Alçada Visualització volum (% Alçada OSD)"
+
+msgid "Limit Logo Cache"
+msgstr "Limit Cache Logo"
+
+msgid "Maximal number of logos to cache"
+msgstr "Màxim nombre de logos a la cache"
+
+msgid "Number of  logos to cache at start"
+msgstr "Nombre de logos a la cache al començar"
+
+msgid "Cache Sizes"
+msgstr "Mida cache"
+
+msgid "Menu Icon cache"
+msgstr "Menu cache icona"
+
+msgid "Skin Icon image cache"
+msgstr "Pell Icona imatge cache"
+
+msgid "Logo cache"
+msgstr "Cache Logo"
+
+msgid "Menu Item Logo cache"
+msgstr "Element Menu cache Logo"
+
+msgid "Timer Logo cache"
+msgstr "Cache Timer logo"
+
+msgid "Background Images cache"
+msgstr "Cache imatges de fons"
+
+msgid "conflict"
+msgstr "conflicte"
+
+msgid "conflicts"
+msgstr "conflictes"
+
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Mostra imatges EPG addicionals a vista detallada gravacions"
+
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Nombre d'imatges EPG a mostrar"
+
+#~ msgid "Border around detailed EPG view"
+#~ msgstr "Vora al voltant de vista detallada EPG"
+
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Mostra Reemissions a vista detallada EPG"
+
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Mostra imatges addicionals a vista detallada EPG"
+
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "Amplada imatges a vista detallada EPG"
+
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "Alçada imatges a vista detallada EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "Amplada imatges addicionals a vista detallada EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "Alçada imatges addicionals a vista detallada EPG"
+
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "REEMISSIONS"
+
+#~ msgid "Actors"
+#~ msgstr "Actors"
+
+#~ msgid "Display Channel Source information"
+#~ msgstr "Mostra informació del canal"
diff --git a/po/de_DE.po b/po/de_DE.po
index 7b753ac..350c532 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: skinnopacity 0.0.1\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-03-24 11:09+0100\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
 "PO-Revision-Date: 2012-11-11 17:49+0200\n"
 "Last-Translator: louis\n"
 "Language-Team: \n"
@@ -17,14 +17,125 @@ msgstr ""
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "No Cast available"
+msgstr "Keine Besetzung vorhanden"
+
+msgid "Cast"
+msgstr "Besetzung"
+
+msgid "EPG Info"
+msgstr "EPG Info"
+
+msgid "Reruns"
+msgstr "Wiederholungen"
+
+msgid "Recording Information"
+msgstr "Aufnahme Infos"
+
+msgid "Image Galery"
+msgstr "Bildergalerie"
+
+msgid "TheTVDB Info"
+msgstr "TheTVDB Info"
+
+msgid "TheTVDB Information"
+msgstr "TheTVDB Information"
+
+msgid "Episode"
+msgstr "Episode"
+
+msgid "Season"
+msgstr "Staffel"
+
+msgid "Episode Overview"
+msgstr "Episodenüberblick"
+
+msgid "First aired"
+msgstr "Erstausstrahlung"
+
+msgid "Guest Stars"
+msgstr "Gast Stars"
+
+msgid "TheMovieDB Rating"
+msgstr "TheMovieDB Wertung"
+
+msgid "Series Overview"
+msgstr "Serienüberblick"
+
+msgid "Genre"
+msgstr "Genre"
+
+msgid "Network"
+msgstr "Sendeanstalt"
+
+msgid "Status"
+msgstr "Status"
+
+msgid "TheMovieDB Information"
+msgstr "TheMovieDB Information"
+
+msgid "Original Title"
+msgstr "Original Titel"
+
+msgid "Tagline"
+msgstr "Zusammenfassung"
+
+msgid "Overview"
+msgstr "Überblick"
+
+msgid "yes"
+msgstr "ja"
+
+msgid "no"
+msgstr "nein"
+
+msgid "Adult"
+msgstr "Nur für Erwachsene"
+
+msgid "Collection"
+msgstr "Kollektion"
+
+msgid "Budget"
+msgstr "Budget"
+
+msgid "Revenue"
+msgstr "Einnahmen"
+
+msgid "Homepage"
+msgstr "Homepage"
+
+msgid "Release Date"
+msgstr "Veröffentlicht"
+
+msgid "Runtime"
+msgstr "Laufzeit"
+
+msgid "minutes"
+msgstr "Minuten"
+
+msgid "TheMovieDB Popularity"
+msgstr "TheMovieDB Popularität"
+
+msgid "TheMovieDB Vote Average"
+msgstr "TheMovieDB durchschnittliche Bewertung"
+
 msgid "free"
 msgstr "frei"
 
 msgid "Volume"
 msgstr "Lautstärke"
 
-msgid "RERUNS OF THIS SHOW"
-msgstr "Wiederholungen dieser Sendung"
+msgid "images"
+msgstr "Bilder"
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr "Wiederholungen der Sendung "
+
+msgid "No reruns found"
+msgstr "Keine Wiederholungen gefunden"
 
 msgid "Size"
 msgstr "Größe"
@@ -41,15 +152,18 @@ msgstr "Format"
 msgid "Est. bitrate"
 msgstr "Geschätzte Bitrate"
 
+msgid "Search timer"
+msgstr "Suchtimer"
+
 msgid "Transp."
 msgstr "Transp."
 
+msgid "No EPG Information found"
+msgstr "Keine EPG Informationen verfügbar"
+
 msgid "Duration"
 msgstr "Dauer"
 
-msgid "min"
-msgstr "min"
-
 msgid "recording"
 msgstr "Aufnahme"
 
@@ -80,6 +194,9 @@ msgstr "VDR Menü: Timer Menü"
 msgid "VDR Menu: Recordings Menu"
 msgstr "VDR Menü: Aufzeichnungs Menü"
 
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr "Detaillierte EPG- & Aufnahmeansicht"
+
 msgid "Channel Switching"
 msgstr "Kanalwechsel"
 
@@ -92,12 +209,21 @@ msgstr "Audio Spuren"
 msgid "Messages"
 msgstr "Nachrichten"
 
+msgid "Image Caching"
+msgstr "Bilder Cache"
+
 msgid "right"
 msgstr "rechts"
 
 msgid "left"
 msgstr "links"
 
+msgid "Carriage Return"
+msgstr "Wagenrücklauf"
+
+msgid "Forward and Back again"
+msgstr "Vor- und wieder Rückwärts"
+
 msgid "off"
 msgstr "aus"
 
@@ -110,6 +236,12 @@ msgstr "mittel"
 msgid "fast"
 msgstr "schnell"
 
+msgid "auto"
+msgstr "auto"
+
+msgid "Create Log Messages for image loading"
+msgstr "Log Nachrichten beim Bilder laden erzeugen"
+
 msgid "Number of Default Menu Entries per Page"
 msgstr "Anzahl der Default-Menüelemente pro Seite"
 
@@ -125,9 +257,6 @@ msgstr "TV-Bildgröße in Menüfenster einpassen"
 msgid "Header Height (Percent of OSD Height)"
 msgstr "Header Höhe (in % der OSD Höhe)"
 
-msgid "Header Icon Size (Square Header Menu Icons)"
-msgstr "Größe der quadratischen Headericons"
-
 msgid "Footer Height (Percent of OSD Height)"
 msgstr "Footer Höhe (in % der OSD Höhe)"
 
@@ -137,9 +266,15 @@ msgstr "Abgerundete Ecken für Menüelemente und Buttons"
 msgid "Radius of rounded corners"
 msgstr "Radius der abgerundeten Ecken"
 
+msgid "Use Channel Logo background"
+msgstr "Hintergrund für Kanallogos benutzen"
+
 msgid "Fade-In Time in ms (Zero for switching off fading)"
 msgstr "Fade-In Zeit in ms (Null zum Abschalten)"
 
+msgid "Menu Items Scroll Style"
+msgstr "Scrollstil der Menüelemente"
+
 msgid "Menu Items Scrolling Speed"
 msgstr "Scroll Geschwindigkeit der Menüelemente"
 
@@ -161,6 +296,9 @@ msgstr "Schriftgröße anpassen - Nachrichten"
 msgid "Adjust Font Size - Detail View Text"
 msgstr "Schriftgröße anpassen - Text EPG Detailanzeige"
 
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr "Schriftgröße anpassen - Text EPG Detailanzeige klein"
+
 msgid "Adjust Font Size - Detail View Header"
 msgstr "Schriftgröße anpassen - Header EPG Detailanzeige"
 
@@ -176,6 +314,15 @@ msgstr "nur VDR Version"
 msgid "no title"
 msgstr "kein Titel"
 
+msgid "free time in hours"
+msgstr "freie Zeit in Stunden"
+
+msgid "free space in GB"
+msgstr "freier Platz in GB"
+
+msgid "small without logo"
+msgstr "klein ohne Logo"
+
 msgid "Use narrow main menu"
 msgstr "Schmales Hauptmenü verwenden"
 
@@ -185,12 +332,12 @@ msgstr "Breite (% der OSD Breite)"
 msgid "Use narrow setup menu"
 msgstr "Schmales Setup Menü verwenden"
 
+msgid "Number of entires per page"
+msgstr "Menüelemente pro Seite"
+
 msgid "Use menu icons"
 msgstr "Menü Icons benutzen"
 
-msgid "Icon Size (Square)"
-msgstr "Icon Größe (quadratisch)"
-
 msgid "Main menu title style"
 msgstr "Titel Stil im Hauptmenü"
 
@@ -200,6 +347,9 @@ msgstr "Festplattenstatus anzeigen"
 msgid "Size (square, Percent of OSD Width)"
 msgstr "Größe (quadr., % der OSD Breite)"
 
+msgid "Free Disc Display"
+msgstr "Anzeige des verfügbaren Plattenplatzes"
+
 msgid "Adjust Font Size - free"
 msgstr "Schriftgröße anpassen - frei"
 
@@ -215,11 +365,8 @@ msgstr "Maximale Timer Anzahl"
 msgid "Width of Timers (Percent of OSD Width)"
 msgstr "Breite der Timer (% der OSD Breite)"
 
-msgid "Channel Logo Width"
-msgstr "Breite der Kanallogos"
-
-msgid "Channel Logo Height"
-msgstr "Höhe der Kanallogos"
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr "Channel Logo Breite (% der Timer Breite)"
 
 msgid "Adjust Font Size - Title"
 msgstr "Schriftgröße anpassen - Titel"
@@ -236,18 +383,18 @@ msgstr "Header Logo Höhe"
 msgid "Adjust Font Size - Menu Items"
 msgstr "Schriftgröße anpassen - Menüelemente"
 
-msgid "never"
-msgstr "nie"
-
-msgid "if exists"
-msgstr "falls vorhanden"
+msgid "window"
+msgstr "Fenster"
 
-msgid "always"
-msgstr "immer"
+msgid "full screen"
+msgstr "Vollbild"
 
 msgid "Use narrow menu"
 msgstr "Schmales Menü verwenden"
 
+msgid "Mode of EPG Window"
+msgstr "EPG Fenster Modus"
+
 msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
 msgstr "Fade-In Zeit des EPG Fensters in ms (Null zum Abschalten)"
 
@@ -263,57 +410,111 @@ msgstr "Text Scroll Geschwindigkeit des EPG Fensters"
 msgid "Height of EPG Info Window (Percent of OSD Height)"
 msgstr "Höhe des EPG Info Fensters (% der OSD Höhe)"
 
-msgid "Display Reruns in detailed EPG View"
-msgstr "Wiederholungen in der detailierten EPG Ansicht anzeigen"
+msgid "Adjust Font Size - Menu Item"
+msgstr "Schriftgröße anpassen - Menüelement"
 
-msgid "Number of reruns to display"
-msgstr "Anzahl der dargestellten Wiederholungen"
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Schriftgröße anpassen - Menüelement klein"
 
-msgid "Use Subtitle for reruns"
-msgstr "Untertitel für Wiederholungssuche nutzen"
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Schriftgröße anpassen - EPG Infofenster"
 
-msgid "Display additional EPG Pictures in detailed EPG View"
-msgstr "Weitere EPG Bilder in der detaillierten EPG Ansicht anzeigen"
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr "Schriftgröße anpassen - EPG Infofenster Header"
 
-msgid "Number of EPG pictures to display"
-msgstr "Anzahl der zusätzlichen EPG Bilder"
+msgid "Transponder Information"
+msgstr "Transponder Information"
 
-msgid "Detail EPG View Logo Width"
-msgstr "Breite der Kanallogos in der EPG Detailanzeige"
+msgid "Current Schedule"
+msgstr "Aktuelles Programm"
 
-msgid "Detail EPG View Logo Height"
-msgstr "Höhe der Kanallogos in der EPG Detailanzeige"
+msgid "Plain Channels"
+msgstr "Nur Kanäle"
 
-msgid "Detail EPG View EPG Image Width"
-msgstr "Breite der EPG Bilder in der EPG Detailanzeige"
+msgid "Menu Items display mode"
+msgstr "Anzeigemodus Menüelemente"
 
-msgid "Detail EPG View EPG Image Height"
-msgstr "Höhe der EPG Bilder in der EPG Detailanzeige"
+msgid "Display schedules with time info"
+msgstr "Programm mit Zeitinformation anzeigen"
 
-msgid "Detail EPG View additional EPG Image Width"
-msgstr "Breite der zusätzlichen EPG Bilder"
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr "Anzahl der EPG Einträge im Programm Info Fenster"
 
-msgid "Detail EPG View additional EPG Image Height"
-msgstr "Höhe der zusätzlichen EPG Bilder"
+msgid "never"
+msgstr "nie"
 
-msgid "Adjust Font Size - Menu Item"
-msgstr "Schriftgröße anpassen - Menüelement"
+msgid "always"
+msgstr "immer"
 
-msgid "Adjust Font Size - Menu Item Small"
-msgstr "Schriftgröße anpassen - Menüelement klein"
+msgid "only if no tvscraper media available"
+msgstr "falls keine tvscraper medien verfügbar"
 
-msgid "Adjust Font Size - EPG Info Window"
-msgstr "Schriftgröße anpassen - EPG Infofenster"
+msgid "Mode of recording Window"
+msgstr "Aufnahme Fenster Modus"
+
+msgid "Border around detailed recording view"
+msgstr "Rahmen um detailierte Aufnahmeansicht"
+
+msgid "Use folder poster if available"
+msgstr "Zeige Poster für Ordner falls verfügbar"
+
+msgid "Width of manually set recording poster"
+msgstr "Breite der manuell gesetzen Poster"
+
+msgid "Height of manually set recording poster"
+msgstr "Höhe der manuell gesetzten Poster"
+
+msgid "if exists"
+msgstr "falls vorhanden"
+
+msgid "Border around view"
+msgstr "Rahmen um Ansicht"
+
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr "Scroll Geschwindigkeit mit hoch / runter (Anz. Zeilen)"
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr "Header Höhe in det. EPG Ansicht (% OSD Höhe)"
 
-msgid "Display additional EPG Pictures in detailed recording View"
-msgstr "Weitere EPG Bilder in der detaillierten Aufnahmeansicht anzeigen"
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr "Header Höhe in det. Aufnahmeansicht (% der OSD Höhe)"
 
-msgid "Folder Icon Size"
-msgstr "Order Icon Größe"
+msgid "Number of reruns to display"
+msgstr "Anzahl der dargestellten Wiederholungen"
+
+msgid "Use Subtitle for reruns"
+msgstr "Untertitel für Wiederholungssuche nutzen"
+
+msgid "EPG Image Width"
+msgstr "EPG Bild Breite"
+
+msgid "EPG Image Height"
+msgstr "EPG Bild Höhe"
+
+msgid "Large EPG Image Width"
+msgstr "Großes EPG Bild Breite"
+
+msgid "Large EPG Image Height"
+msgstr "Großes EPG Bild Höhe"
+
+msgid "transparent channel logo"
+msgstr "Kanallogo transparent"
+
+msgid "full osd width"
+msgstr "volle OSD Breite"
 
 msgid "do not display"
 msgstr "nicht anzeigen"
 
+msgid "top"
+msgstr "oben"
+
+msgid "middle"
+msgstr "mittig"
+
+msgid "bottom"
+msgstr "unten"
+
 msgid "show elapsed time"
 msgstr "vergangene Zeit anzeigen"
 
@@ -329,11 +530,26 @@ msgstr "Breite des linken und rechten Rands"
 msgid "Bottom Border Height"
 msgstr "Höhe des unteren Rands"
 
+msgid "Background Transparency in Percent"
+msgstr "Hintergrundtransparenz in %"
+
+msgid "Background Style"
+msgstr "Hintergrund Stil"
+
+msgid "Rounded Corners"
+msgstr "Abgerundete Ecken"
+
+msgid "Vertical Channel Logo Alignment"
+msgstr "Vertikale Ausrichtung des Kanallogos"
+
 msgid "Channel Logo Position"
 msgstr "Kanallogo Position"
 
-msgid "Channel Logo Border"
-msgstr "Rand um die Kanallogos"
+msgid "Channel Logo original Width"
+msgstr "Kanallogo original Breite"
+
+msgid "Channel Logo original Height"
+msgstr "Kanallogo original Höhe"
 
 msgid "Kind of time display for current schedule"
 msgstr "Art der Zeitanzeige für die laufende Sendung"
@@ -341,11 +557,17 @@ msgstr "Art der Zeitanzeige für die laufende Sendung"
 msgid "Display Signal Strength & Quality"
 msgstr "Signalstärke- und Qualität anzeigen"
 
-msgid "Screen Resolution Icon Size"
-msgstr "Größe des Icons zur Anzeige der Bildschirmauflösung"
+msgid "Display Channel Source & Rec. Info"
+msgstr "Kanal- und Aufnahmeinfo anzeigen"
 
-msgid "Status Icons Size"
-msgstr "Status Icon Größe"
+msgid "Display Poster or Fanart from TVScraper"
+msgstr "Poster bzw. Fanart von TVScraper anzeigen"
+
+msgid "Border in Pixel"
+msgstr "Rahmen in Pixel"
+
+msgid "Display previous and next Channel Group"
+msgstr "Vorherige und nächste Kanalgruppe anzeigen"
 
 msgid "Adjust Font Size - EPG Text"
 msgstr "Schriftgröße anpassen - EPG Text"
@@ -353,6 +575,15 @@ msgstr "Schriftgröße anpassen - EPG Text"
 msgid "Adjust Font Size - EPG Infotext"
 msgstr "Schriftgröße anpassen - EPG Infotext"
 
+msgid "Adjust Font Size - Channel Source Info"
+msgstr "Schriftgröße anpassen - Kanalquelleninfo"
+
+msgid "Adjust Font Size - Channel Group"
+msgstr "Schriftgräße Anpassen - Kanalgruppen"
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr "Schriftgräße Anpassen - vorh./nächste Kanalgruppe"
+
 msgid "Height of Replay Display (Percent of OSD Height)"
 msgstr "Höhe der Wiedergabe Anzeige (% der OSD Höhe)"
 
@@ -368,12 +599,12 @@ msgstr "Höhe der Track Elemente (in Pixel)"
 msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
 msgstr "Position (0: unten mitte, 1: unten links, ... , 7: unten rechts)"
 
-msgid "Border Top / Bottom"
-msgstr "Rand oben und unten"
-
 msgid "Border Left / Right"
 msgstr "Rand links und rechts"
 
+msgid "Border Top / Bottom"
+msgstr "Rand oben und unten"
+
 msgid "Adjust Font Size - Buttons"
 msgstr "Schriftgröße anpassen - Buttons"
 
@@ -395,8 +626,71 @@ msgstr "Breite der Lautstärken Anzeige (% der OSD Breite)"
 msgid "Height of Volume Display (Percent of OSD Height)"
 msgstr "Höhe der Lautstärken Anzeige (% der OSD Höhe)"
 
+msgid "Limit Logo Cache"
+msgstr "Logo Cache beschränken"
+
+msgid "Maximal number of logos to cache"
+msgstr "Maximale Anzahl Logos"
+
+msgid "Number of  logos to cache at start"
+msgstr "Anzahl der zu cachenden Logos beim Start"
+
+msgid "Cache Sizes"
+msgstr "Cache Größe"
+
+msgid "Menu Icon cache"
+msgstr "Menü Icon Cache"
+
+msgid "Skin Icon image cache"
+msgstr "Skin Icon Cache"
+
+msgid "Logo cache"
+msgstr "Logo Cache"
+
+msgid "Menu Item Logo cache"
+msgstr "Menüelement Logo Cache"
+
+msgid "Timer Logo cache"
+msgstr "Timer Logo Cache"
+
+msgid "Background Images cache"
+msgstr "Hintergrundbilder Cache"
+
 msgid "conflict"
 msgstr "Konflikt"
 
 msgid "conflicts"
 msgstr "Konflikte"
+
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Weitere EPG Bilder in der detaillierten Aufnahmeansicht anzeigen"
+
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Anzahl der zusätzlichen EPG Bilder"
+
+#~ msgid "Border around detailed EPG view"
+#~ msgstr "Rahmen um detailierte EPG Ansicht"
+
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Wiederholungen in der detailierten EPG Ansicht anzeigen"
+
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Weitere EPG Bilder in der detaillierten EPG Ansicht anzeigen"
+
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "Breite der EPG Bilder in der EPG Detailanzeige"
+
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "Höhe der EPG Bilder in der EPG Detailanzeige"
+
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "Breite der zusätzlichen EPG Bilder"
+
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "Höhe der zusätzlichen EPG Bilder"
+
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "Wiederholungen dieser Sendung"
+
+#~ msgid "Actors"
+#~ msgstr "Schauspieler"
diff --git a/po/it_IT.po b/po/it_IT.po
index 6d356fb..54ec2ac 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: skinnopacity 0.0.1\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-03-24 11:09+0100\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
 "PO-Revision-Date: 2013-03-19 22:56+0100\n"
 "Last-Translator: Diego Pierotto <vdr-italian at tiscali.it>\n"
 "Language-Team: \n"
@@ -20,14 +20,125 @@ msgstr ""
 "X-Poedit-Country: ITALY\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
+msgid "No Cast available"
+msgstr ""
+
+msgid "Cast"
+msgstr ""
+
+msgid "EPG Info"
+msgstr ""
+
+msgid "Reruns"
+msgstr ""
+
+msgid "Recording Information"
+msgstr ""
+
+msgid "Image Galery"
+msgstr ""
+
+msgid "TheTVDB Info"
+msgstr ""
+
+msgid "TheTVDB Information"
+msgstr ""
+
+msgid "Episode"
+msgstr ""
+
+msgid "Season"
+msgstr ""
+
+msgid "Episode Overview"
+msgstr ""
+
+msgid "First aired"
+msgstr ""
+
+msgid "Guest Stars"
+msgstr ""
+
+msgid "TheMovieDB Rating"
+msgstr ""
+
+msgid "Series Overview"
+msgstr ""
+
+msgid "Genre"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "TheMovieDB Information"
+msgstr ""
+
+msgid "Original Title"
+msgstr ""
+
+msgid "Tagline"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "yes"
+msgstr ""
+
+msgid "no"
+msgstr ""
+
+msgid "Adult"
+msgstr ""
+
+msgid "Collection"
+msgstr ""
+
+msgid "Budget"
+msgstr ""
+
+msgid "Revenue"
+msgstr ""
+
+msgid "Homepage"
+msgstr ""
+
+msgid "Release Date"
+msgstr ""
+
+msgid "Runtime"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "TheMovieDB Popularity"
+msgstr ""
+
+msgid "TheMovieDB Vote Average"
+msgstr ""
+
 msgid "free"
 msgstr "disponibili"
 
 msgid "Volume"
 msgstr "Volume"
 
-msgid "RERUNS OF THIS SHOW"
-msgstr "REPLICHE DI QUESTO SPETTACOLO"
+msgid "images"
+msgstr ""
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr ""
+
+msgid "No reruns found"
+msgstr ""
 
 msgid "Size"
 msgstr "Dimensione"
@@ -44,15 +155,18 @@ msgstr "Formato"
 msgid "Est. bitrate"
 msgstr "Bitrate estimato"
 
+msgid "Search timer"
+msgstr ""
+
 msgid "Transp."
 msgstr "Transponder"
 
+msgid "No EPG Information found"
+msgstr ""
+
 msgid "Duration"
 msgstr "Durata"
 
-msgid "min"
-msgstr "min"
-
 msgid "recording"
 msgstr "registrazione"
 
@@ -83,6 +197,9 @@ msgstr "Menu VDR: Menu timer"
 msgid "VDR Menu: Recordings Menu"
 msgstr "Menu VDR: Menu registrazioni"
 
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr ""
+
 msgid "Channel Switching"
 msgstr "Cambio canale"
 
@@ -95,12 +212,21 @@ msgstr "Tracce audio"
 msgid "Messages"
 msgstr "Messaggi"
 
+msgid "Image Caching"
+msgstr ""
+
 msgid "right"
 msgstr "destra"
 
 msgid "left"
 msgstr "sinistra"
 
+msgid "Carriage Return"
+msgstr ""
+
+msgid "Forward and Back again"
+msgstr ""
+
 msgid "off"
 msgstr "disattivo"
 
@@ -113,6 +239,12 @@ msgstr "medio"
 msgid "fast"
 msgstr "veloce"
 
+msgid "auto"
+msgstr ""
+
+msgid "Create Log Messages for image loading"
+msgstr ""
+
 msgid "Number of Default Menu Entries per Page"
 msgstr "Numero di voci per pagina menu predefinito"
 
@@ -128,9 +260,6 @@ msgstr "Scala dimensione video nel menu finestra"
 msgid "Header Height (Percent of OSD Height)"
 msgstr "Altezza intestazione (% altezza OSD)"
 
-msgid "Header Icon Size (Square Header Menu Icons)"
-msgstr "Dim. icona intestazione (icone menu intestazione quadrato)"
-
 msgid "Footer Height (Percent of OSD Height)"
 msgstr "Altezza piè pagina (% altezza OSD)"
 
@@ -140,9 +269,15 @@ msgstr "Angoli smussati per voci menu e tasti"
 msgid "Radius of rounded corners"
 msgstr "Raggio angoli smussati"
 
+msgid "Use Channel Logo background"
+msgstr ""
+
 msgid "Fade-In Time in ms (Zero for switching off fading)"
 msgstr "Tempo comparsa in ms (0 per disattivazione)"
 
+msgid "Menu Items Scroll Style"
+msgstr ""
+
 msgid "Menu Items Scrolling Speed"
 msgstr "Velocità scorrimento voci menu"
 
@@ -164,6 +299,9 @@ msgstr "Adatta dim. caratteri - Messaggi"
 msgid "Adjust Font Size - Detail View Text"
 msgstr "Adatta dim. caratteri - Testo vista dettagli"
 
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr ""
+
 msgid "Adjust Font Size - Detail View Header"
 msgstr "Adatta dim. caratteri - Intestazione vista dettagli"
 
@@ -179,6 +317,15 @@ msgstr ""
 msgid "no title"
 msgstr ""
 
+msgid "free time in hours"
+msgstr ""
+
+msgid "free space in GB"
+msgstr ""
+
+msgid "small without logo"
+msgstr ""
+
 msgid "Use narrow main menu"
 msgstr "Usa menu principale ridotto"
 
@@ -188,12 +335,12 @@ msgstr "Larghezza (% larghezza OSD)"
 msgid "Use narrow setup menu"
 msgstr "Usa menu opzioni ridotto"
 
+msgid "Number of entires per page"
+msgstr ""
+
 msgid "Use menu icons"
 msgstr "Usa icone menu"
 
-msgid "Icon Size (Square)"
-msgstr "Dim. icona (quadrato)"
-
 msgid "Main menu title style"
 msgstr ""
 
@@ -203,6 +350,9 @@ msgstr "Mostra utilizzo disco"
 msgid "Size (square, Percent of OSD Width)"
 msgstr "Dimensione (quadrato, % larghezza OSD)"
 
+msgid "Free Disc Display"
+msgstr ""
+
 msgid "Adjust Font Size - free"
 msgstr "Adatta dim. caratteri - Disponibili"
 
@@ -218,11 +368,8 @@ msgstr ""
 msgid "Width of Timers (Percent of OSD Width)"
 msgstr "Larghezza di Timer (% larghezza OSD)"
 
-msgid "Channel Logo Width"
-msgstr "Larghezza logo canale"
-
-msgid "Channel Logo Height"
-msgstr "Altezza logo canale"
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr ""
 
 msgid "Adjust Font Size - Title"
 msgstr "Adatta dim. caratteri - Titolo"
@@ -239,18 +386,18 @@ msgstr "Altezza logo intestazione"
 msgid "Adjust Font Size - Menu Items"
 msgstr "Adatta dim. caratteri - Voci menu"
 
-msgid "never"
-msgstr "mai"
-
-msgid "if exists"
-msgstr "se esiste"
+msgid "window"
+msgstr ""
 
-msgid "always"
-msgstr "sempre"
+msgid "full screen"
+msgstr ""
 
 msgid "Use narrow menu"
 msgstr "Usa menu ridotto"
 
+msgid "Mode of EPG Window"
+msgstr ""
+
 msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
 msgstr "Tempo comparsa finestra EPG in ms (0 per disattivazione)"
 
@@ -266,57 +413,111 @@ msgstr "Velocità scorrimento testo finestra EPG"
 msgid "Height of EPG Info Window (Percent of OSD Height)"
 msgstr "Altezza di Finestra info EPG (% altezza OSD)"
 
-msgid "Display Reruns in detailed EPG View"
-msgstr "Mostra repliche in vista dettagli EPG"
+msgid "Adjust Font Size - Menu Item"
+msgstr "Adatta dim. caratteri - Voce menu"
+
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Adatta dim. caratteri - Voce menu piccolo"
 
-msgid "Number of reruns to display"
-msgstr "Numero di repliche da mostrare"
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Adatta dim. caratteri - Finestra info EPG"
 
-msgid "Use Subtitle for reruns"
-msgstr "Usa sottotitoli per repliche"
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr ""
+
+msgid "Transponder Information"
+msgstr ""
 
-msgid "Display additional EPG Pictures in detailed EPG View"
-msgstr "Mostra immagini EPG aggiuntivo in vista dettagli EPG"
+msgid "Current Schedule"
+msgstr ""
 
-msgid "Number of EPG pictures to display"
-msgstr "Numero di immagini EPG da mostrare"
+msgid "Plain Channels"
+msgstr ""
 
-msgid "Detail EPG View Logo Width"
-msgstr "Larghezza logo vista dettagli EPG"
+msgid "Menu Items display mode"
+msgstr ""
 
-msgid "Detail EPG View Logo Height"
-msgstr "Altezza logo vista dettagli EPG"
+msgid "Display schedules with time info"
+msgstr ""
 
-msgid "Detail EPG View EPG Image Width"
-msgstr "Larghezza immagine vista dettagli EPG"
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr ""
 
-msgid "Detail EPG View EPG Image Height"
-msgstr "Altezza immagine vista dettagli EPG"
+msgid "never"
+msgstr "mai"
 
-msgid "Detail EPG View additional EPG Image Width"
-msgstr "Larghezza immagine EPG aggiuntivo vista dettagli EPG"
+msgid "always"
+msgstr "sempre"
 
-msgid "Detail EPG View additional EPG Image Height"
-msgstr "Altezza immagine EPG aggiuntivo vista dettagli EPG"
+msgid "only if no tvscraper media available"
+msgstr ""
 
-msgid "Adjust Font Size - Menu Item"
-msgstr "Adatta dim. caratteri - Voce menu"
+msgid "Mode of recording Window"
+msgstr ""
 
-msgid "Adjust Font Size - Menu Item Small"
-msgstr "Adatta dim. caratteri - Voce menu piccolo"
+msgid "Border around detailed recording view"
+msgstr ""
 
-msgid "Adjust Font Size - EPG Info Window"
-msgstr "Adatta dim. caratteri - Finestra info EPG"
+msgid "Use folder poster if available"
+msgstr ""
 
-msgid "Display additional EPG Pictures in detailed recording View"
-msgstr "Mostra immagini EPG aggiuntivo nella vista dettagli registrazione"
+msgid "Width of manually set recording poster"
+msgstr ""
+
+msgid "Height of manually set recording poster"
+msgstr ""
+
+msgid "if exists"
+msgstr "se esiste"
+
+msgid "Border around view"
+msgstr ""
+
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr ""
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Number of reruns to display"
+msgstr "Numero di repliche da mostrare"
+
+msgid "Use Subtitle for reruns"
+msgstr "Usa sottotitoli per repliche"
+
+msgid "EPG Image Width"
+msgstr ""
+
+msgid "EPG Image Height"
+msgstr ""
 
-msgid "Folder Icon Size"
-msgstr "Dim. icona cartella"
+msgid "Large EPG Image Width"
+msgstr ""
+
+msgid "Large EPG Image Height"
+msgstr ""
+
+msgid "transparent channel logo"
+msgstr ""
+
+msgid "full osd width"
+msgstr ""
 
 msgid "do not display"
 msgstr "non mostrare"
 
+msgid "top"
+msgstr ""
+
+msgid "middle"
+msgstr ""
+
+msgid "bottom"
+msgstr ""
+
 msgid "show elapsed time"
 msgstr ""
 
@@ -332,11 +533,26 @@ msgstr "Larghezza bordi sinistro e destro"
 msgid "Bottom Border Height"
 msgstr "Altezza bordo inferiore"
 
+msgid "Background Transparency in Percent"
+msgstr ""
+
+msgid "Background Style"
+msgstr ""
+
+msgid "Rounded Corners"
+msgstr ""
+
+msgid "Vertical Channel Logo Alignment"
+msgstr ""
+
 msgid "Channel Logo Position"
 msgstr "Posizione logo canale"
 
-msgid "Channel Logo Border"
-msgstr "Bordo logo canale"
+msgid "Channel Logo original Width"
+msgstr ""
+
+msgid "Channel Logo original Height"
+msgstr ""
 
 msgid "Kind of time display for current schedule"
 msgstr ""
@@ -344,11 +560,17 @@ msgstr ""
 msgid "Display Signal Strength & Quality"
 msgstr "Mostra qualità e intensità segnale"
 
-msgid "Screen Resolution Icon Size"
-msgstr "Dim. icona risoluzione schermo"
+msgid "Display Channel Source & Rec. Info"
+msgstr ""
+
+msgid "Display Poster or Fanart from TVScraper"
+msgstr ""
+
+msgid "Border in Pixel"
+msgstr ""
 
-msgid "Status Icons Size"
-msgstr "Dim. icone stato"
+msgid "Display previous and next Channel Group"
+msgstr ""
 
 msgid "Adjust Font Size - EPG Text"
 msgstr "Adatta dim. caratteri - Testo EPG"
@@ -356,6 +578,15 @@ msgstr "Adatta dim. caratteri - Testo EPG"
 msgid "Adjust Font Size - EPG Infotext"
 msgstr "Adatta dim. caratteri - Info testo EPG"
 
+msgid "Adjust Font Size - Channel Source Info"
+msgstr ""
+
+msgid "Adjust Font Size - Channel Group"
+msgstr ""
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr ""
+
 msgid "Height of Replay Display (Percent of OSD Height)"
 msgstr "Altezza di Mostra riproduzione (% altezza OSD)"
 
@@ -371,12 +602,12 @@ msgstr ""
 msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
 msgstr "Posizione (0: basso centrale, 1: basso sin., ... , 7: basso destra)"
 
-msgid "Border Top / Bottom"
-msgstr "Bordo superiore / inferiore"
-
 msgid "Border Left / Right"
 msgstr "Bordo sinistro / destro"
 
+msgid "Border Top / Bottom"
+msgstr "Bordo superiore / inferiore"
+
 msgid "Adjust Font Size - Buttons"
 msgstr "Adatta dim. caratteri - Tasti"
 
@@ -398,8 +629,65 @@ msgstr "Larghezza di Mostra volume (% altezza OSD)"
 msgid "Height of Volume Display (Percent of OSD Height)"
 msgstr "Altezza di Mostra volume (% altezza OSD)"
 
+msgid "Limit Logo Cache"
+msgstr ""
+
+msgid "Maximal number of logos to cache"
+msgstr ""
+
+msgid "Number of  logos to cache at start"
+msgstr ""
+
+msgid "Cache Sizes"
+msgstr ""
+
+msgid "Menu Icon cache"
+msgstr ""
+
+msgid "Skin Icon image cache"
+msgstr ""
+
+msgid "Logo cache"
+msgstr ""
+
+msgid "Menu Item Logo cache"
+msgstr ""
+
+msgid "Timer Logo cache"
+msgstr ""
+
+msgid "Background Images cache"
+msgstr ""
+
 msgid "conflict"
 msgstr "conflitto"
 
 msgid "conflicts"
 msgstr "conflitti"
+
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Mostra immagini EPG aggiuntivo nella vista dettagli registrazione"
+
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Numero di immagini EPG da mostrare"
+
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Mostra repliche in vista dettagli EPG"
+
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Mostra immagini EPG aggiuntivo in vista dettagli EPG"
+
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "Larghezza immagine vista dettagli EPG"
+
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "Altezza immagine vista dettagli EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "Larghezza immagine EPG aggiuntivo vista dettagli EPG"
+
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "Altezza immagine EPG aggiuntivo vista dettagli EPG"
+
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "REPLICHE DI QUESTO SPETTACOLO"
diff --git a/po/sk_SK.po b/po/sk_SK.po
index dceb7e4..0c77330 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -6,19 +6,118 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vdr-skinnopacity 0.0.6\n"
+"Project-Id-Version: vdr-skinnopacity\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-03-24 11:09+0100\n"
-"PO-Revision-Date: 2013-03-12 15:59+0100\n"
+"POT-Creation-Date: 2014-05-24 15:11+0200\n"
+"PO-Revision-Date: 2013-11-11 20:52+0100\n"
 "Last-Translator: Milan Hrala <hrala.milan at gmail.com>\n"
 "Language-Team: \n"
 "Language: sk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Slovak\n"
-"X-Poedit-Country: SLOVAKIA\n"
-"X-Poedit-SourceCharset: iso-8859-2\n"
+
+msgid "No Cast available"
+msgstr ""
+
+msgid "Cast"
+msgstr ""
+
+msgid "EPG Info"
+msgstr ""
+
+msgid "Reruns"
+msgstr ""
+
+msgid "Recording Information"
+msgstr ""
+
+msgid "Image Galery"
+msgstr ""
+
+msgid "TheTVDB Info"
+msgstr ""
+
+msgid "TheTVDB Information"
+msgstr ""
+
+msgid "Episode"
+msgstr ""
+
+msgid "Season"
+msgstr ""
+
+msgid "Episode Overview"
+msgstr ""
+
+msgid "First aired"
+msgstr ""
+
+msgid "Guest Stars"
+msgstr ""
+
+msgid "TheMovieDB Rating"
+msgstr ""
+
+msgid "Series Overview"
+msgstr ""
+
+msgid "Genre"
+msgstr ""
+
+msgid "Network"
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid "TheMovieDB Information"
+msgstr ""
+
+msgid "Original Title"
+msgstr ""
+
+msgid "Tagline"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "yes"
+msgstr "�no"
+
+msgid "no"
+msgstr "nie"
+
+msgid "Adult"
+msgstr ""
+
+msgid "Collection"
+msgstr ""
+
+msgid "Budget"
+msgstr ""
+
+msgid "Revenue"
+msgstr ""
+
+msgid "Homepage"
+msgstr ""
+
+msgid "Release Date"
+msgstr ""
+
+msgid "Runtime"
+msgstr ""
+
+msgid "minutes"
+msgstr ""
+
+msgid "TheMovieDB Popularity"
+msgstr ""
+
+msgid "TheMovieDB Vote Average"
+msgstr ""
 
 msgid "free"
 msgstr "vo�n�"
@@ -26,14 +125,23 @@ msgstr "vo
 msgid "Volume"
 msgstr "Hlasitos�"
 
-msgid "RERUNS OF THIS SHOW"
-msgstr "Repr�za"
+msgid "images"
+msgstr "obr�zkov"
+
+msgid "min"
+msgstr "min"
+
+msgid "Reruns of "
+msgstr ""
+
+msgid "No reruns found"
+msgstr ""
 
 msgid "Size"
 msgstr "Ve�kos�"
 
 msgid "cut"
-msgstr "vystrihn��"
+msgstr "zostrihan�"
 
 msgid "Length"
 msgstr "D�ka"
@@ -44,20 +152,23 @@ msgstr "Form
 msgid "Est. bitrate"
 msgstr "Odhadovan� prenosov� r�chlos�"
 
+msgid "Search timer"
+msgstr "Vyh�ada� pl�n"
+
 msgid "Transp."
 msgstr "Transp."
 
+msgid "No EPG Information found"
+msgstr "Nena�li sa EPG inform�cie"
+
 msgid "Duration"
 msgstr "D�ka"
 
-msgid "min"
-msgstr "min"
-
 msgid "recording"
 msgstr "nahrat�"
 
 msgid "recordings"
-msgstr "Nahr�vky"
+msgstr "nahr�vky"
 
 msgid "new"
 msgstr "nov�"
@@ -69,25 +180,28 @@ msgid "VDR Menu: Common Settings"
 msgstr "VDR ponuka: V�eobecn� nastavenia"
 
 msgid "VDR Menu: Main and Setup Menu"
-msgstr "VDR ponuka: hlavn� ponuka a ponuka nastavenia"
+msgstr "VDR ponuka: hlavn� ponuka a ponuka Nastavenie"
 
 msgid "VDR Menu: Schedules Menu"
-msgstr "VDR ponuka: ponuka tv program"
+msgstr "VDR ponuka: TV program"
 
 msgid "VDR Menu: Channels Menu"
-msgstr "VDR ponuka: ponuka kan�lov"
+msgstr "VDR ponuka: Kan�ly"
 
 msgid "VDR Menu: Timers Menu"
-msgstr "VDR ponuka: ponuka pl�nov nahr�vania"
+msgstr "VDR ponuka: Pl�ny nahr�vania"
 
 msgid "VDR Menu: Recordings Menu"
-msgstr "VDR ponuka: ponuka nahr�viek"
+msgstr "VDR ponuka: Nahr�vky"
+
+msgid "VDR Menu: Detailed EPG & Recordings View"
+msgstr ""
 
 msgid "Channel Switching"
-msgstr "Prepn�� kan�l"
+msgstr "Prep�nanie kan�lu"
 
 msgid "Replay"
-msgstr "Pehr�vanie nahr�vok"
+msgstr "Prehr�vanie nahr�vok"
 
 msgid "Audio Tracks"
 msgstr "Zvukov� stopa"
@@ -95,12 +209,21 @@ msgstr "Zvukov
 msgid "Messages"
 msgstr "Spr�vy"
 
+msgid "Image Caching"
+msgstr "Vyrovn�vacia pam� obr�zkov"
+
 msgid "right"
 msgstr "vpravo"
 
 msgid "left"
 msgstr "v�avo"
 
+msgid "Carriage Return"
+msgstr "vpred a znova od za�iatku"
+
+msgid "Forward and Back again"
+msgstr "vpred a zase sp�"
+
 msgid "off"
 msgstr "vypnut�"
 
@@ -113,6 +236,12 @@ msgstr "stredne"
 msgid "fast"
 msgstr "r�chlo"
 
+msgid "auto"
+msgstr "automaticky"
+
+msgid "Create Log Messages for image loading"
+msgstr "Vytvori� protokolovanie spr�v pre na��tanie obr�zka"
+
 msgid "Number of Default Menu Entries per Page"
 msgstr "Po�et polo�iek z�kladn�ho menu na str�nke"
 
@@ -128,9 +257,6 @@ msgstr "Zmeni
 msgid "Header Height (Percent of OSD Height)"
 msgstr "V��ka hlavi�ky (percento z �asti OSD v��ky)"
 
-msgid "Header Icon Size (Square Header Menu Icons)"
-msgstr "Ve�kos� ikony hlavi�ky (ikona hlavi�ky do �tvorca)"
-
 msgid "Footer Height (Percent of OSD Height)"
 msgstr "V��ka z�p�tia (percento z �asti OSD v��ky)"
 
@@ -140,9 +266,15 @@ msgstr "Zaoblen
 msgid "Radius of rounded corners"
 msgstr "Polomer zaoblenia rohov"
 
+msgid "Use Channel Logo background"
+msgstr ""
+
 msgid "Fade-In Time in ms (Zero for switching off fading)"
 msgstr "�as efektu zmiznutia v ms (nula vypn��)"
 
+msgid "Menu Items Scroll Style"
+msgstr "�t�l rolovania menu polo�iek"
+
 msgid "Menu Items Scrolling Speed"
 msgstr "R�chlos� rolovania polo�iek menu"
 
@@ -164,6 +296,9 @@ msgstr "Nastavenie ve
 msgid "Adjust Font Size - Detail View Text"
 msgstr "Nastavenie ve�kosti p�sma - Podrobn� zobrazenie textu"
 
+msgid "Adjust Font Size - Detail View Text Small"
+msgstr "Prisp�sobenie ve�kosti p�sma - Podrobn� zobrazenie mal�ho textu"
+
 msgid "Adjust Font Size - Detail View Header"
 msgstr "Nastavenie ve�kosti p�sma - Podrobn� zobrazenie hlavi�ky"
 
@@ -171,13 +306,22 @@ msgid "Adjust Font Size - Detail View Header Large"
 msgstr "Nastavenie ve�kosti p�sma - Podrobn� zobrazenie ve�kej hlavi�ky"
 
 msgid "\"VDR\" plus VDR version"
-msgstr ""
+msgstr "\"VDR\" plus VDR verzia"
 
 msgid "only VDR version"
-msgstr ""
+msgstr "iba VDR verzia"
 
 msgid "no title"
-msgstr ""
+msgstr "�iadny n�zov"
+
+msgid "free time in hours"
+msgstr "vo�n� �as v hodin�ch"
+
+msgid "free space in GB"
+msgstr "vo�n� miesto v GB"
+
+msgid "small without logo"
+msgstr "mal� bez loga"
 
 msgid "Use narrow main menu"
 msgstr "�zke hlavn� menu"
@@ -188,14 +332,14 @@ msgstr "
 msgid "Use narrow setup menu"
 msgstr "�zke menu nastavenia"
 
+msgid "Number of entires per page"
+msgstr "Po�et polo�iek na stranu"
+
 msgid "Use menu icons"
 msgstr "Pou�i� ikony ponuky"
 
-msgid "Icon Size (Square)"
-msgstr "Ve�kos� ikony (do �tvorca)"
-
 msgid "Main menu title style"
-msgstr ""
+msgstr "�t�l n�zvu hlavn�ho menu"
 
 msgid "Display Disk Usage"
 msgstr "Zobrazi� vyu�itie disku"
@@ -203,29 +347,29 @@ msgstr "Zobrazi
 msgid "Size (square, Percent of OSD Width)"
 msgstr "Ve�kos� (do �tvorca, percento z OSD ��rky)"
 
+msgid "Free Disc Display"
+msgstr "Zobrazi� vyu�itie disku"
+
 msgid "Adjust Font Size - free"
-msgstr "Nastavenie ve�kos�i p�sma - vo�n�"
+msgstr "Nastavenie ve�kosti p�sma - vo�n�"
 
 msgid "Adjust Font Size - percent"
-msgstr "Nastavenie ve�kos�i p�sma - percento"
+msgstr "Nastavenie ve�kosti p�sma - percento"
 
 msgid "Display Timers"
-msgstr "Zobrazen� pl�ny nahr�vania"
+msgstr "Zobrazi� pl�ny nahr�vania"
 
 msgid "Maximum number of Timers"
-msgstr ""
+msgstr "Maxim�lny po�et zobrazen�ch pl�nov"
 
 msgid "Width of Timers (Percent of OSD Width)"
 msgstr "��rka zobrazen�ho pl�nu nahr�vania (Percento s OSD ��rky)"
 
-msgid "Channel Logo Width"
-msgstr "��rka loga kan�lu"
-
-msgid "Channel Logo Height"
-msgstr "V��ka loga kan�lu"
+msgid "Width of Channel Logos (Percent of Timer Width)"
+msgstr "��rka loga kan�lov (Percento z ��rky pl�nu)"
 
 msgid "Adjust Font Size - Title"
-msgstr "Nastavenie ve�kos�i p�sma - N�zov"
+msgstr "Nastavenie ve�kosti p�sma - N�zov"
 
 msgid "Show Timer Conflicts"
 msgstr "Zobrazi� konflikty pl�nu nahr�vania"
@@ -237,20 +381,20 @@ msgid "Header Logo Height"
 msgstr "V��ka loga hlavi�ky"
 
 msgid "Adjust Font Size - Menu Items"
-msgstr "Nastavenie ve�kos�i p�sma - Polo�ky menu"
-
-msgid "never"
-msgstr "nikdy"
+msgstr "Nastavenie ve�kosti p�sma - Polo�ky menu"
 
-msgid "if exists"
-msgstr "ak je k dispoz�cii"
+msgid "window"
+msgstr "v okienku"
 
-msgid "always"
-msgstr "v�dy"
+msgid "full screen"
+msgstr "na celej obrazovke"
 
 msgid "Use narrow menu"
 msgstr "Pou�i� �zku ponuku"
 
+msgid "Mode of EPG Window"
+msgstr "Sp�sob zobrazenia EPG okna"
+
 msgid "EPG Window Fade-In Time in ms (Zero for switching off fading)"
 msgstr "�as efektu zmiznutia EPG okna v ms (nula vypne efekt)"
 
@@ -266,117 +410,201 @@ msgstr "R
 msgid "Height of EPG Info Window (Percent of OSD Height)"
 msgstr "V��ka informa�n�ho EPG okna (Percent z OSD v��ky)"
 
-msgid "Display Reruns in detailed EPG View"
-msgstr "Zobrazi� repr�zy v podrobnostiach EPG"
+msgid "Adjust Font Size - Menu Item"
+msgstr "Nastavenie ve�kosti p�sma - polo�ky ponuky"
 
-msgid "Number of reruns to display"
-msgstr "Po�et repr�z na zobrazenie"
+msgid "Adjust Font Size - Menu Item Small"
+msgstr "Nastavenie ve�kosti p�sma - Mal� polo�ky ponuky"
 
-msgid "Use Subtitle for reruns"
-msgstr "Pou�i� titulky pre repr�zu"
+msgid "Adjust Font Size - EPG Info Window"
+msgstr "Nastavenie ve�kosti p�sma - EPG informa�n� okno"
 
-msgid "Display additional EPG Pictures in detailed EPG View"
-msgstr "Zobrazi� viac obr�zkov v podrobnostiach EPG"
+msgid "Adjust Font Size - EPG Info Window Header"
+msgstr "Nastavenie ve�kosti p�sma - Hlavi�ka EPG info okna"
 
-msgid "Number of EPG pictures to display"
-msgstr "Po�et EPG obr�zkov na obazovke"
+msgid "Transponder Information"
+msgstr "s inform�ciami o transport�ri"
 
-msgid "Detail EPG View Logo Width"
-msgstr "��rka loga v podrobnom zobrazen� EPG"
+msgid "Current Schedule"
+msgstr "s aktu�lnou rel�ciou"
 
-msgid "Detail EPG View Logo Height"
-msgstr "V��ka loga v podrobnom zobrazen� EPG"
+msgid "Plain Channels"
+msgstr "iba kan�ly"
 
-msgid "Detail EPG View EPG Image Width"
-msgstr "��rka obr�zku v podrobnom zobrazen� EPG"
+msgid "Menu Items display mode"
+msgstr "Re�im zobrazenia menu polo�iek"
 
-msgid "Detail EPG View EPG Image Height"
-msgstr "V��ka obr�zku v podrobnom zobrazen� EPG"
+msgid "Display schedules with time info"
+msgstr "Zobrazi� rel�ciu s �asom vysielania"
 
-msgid "Detail EPG View additional EPG Image Width"
-msgstr "��rka �al�ieho obr�zku v podrobnom zobrazen� EPG"
+msgid "Number of EPG Entries in Schedules Info Window"
+msgstr "Po�et EPG polo�iek v okne TV programu"
 
-msgid "Detail EPG View additional EPG Image Height"
-msgstr "V��ka �al�ieho obr�zku v podrobnom zobrazen� EPG"
+msgid "never"
+msgstr "nikdy"
 
-msgid "Adjust Font Size - Menu Item"
-msgstr "Nastavenie ve�kos�i p�sma - polo�ky ponuky"
+msgid "always"
+msgstr "v�dy"
 
-msgid "Adjust Font Size - Menu Item Small"
-msgstr "Nastavenie ve�kos�i p�sma - Mal� polo�ky ponuky"
+msgid "only if no tvscraper media available"
+msgstr "iba ak je tvscraper dostupn�"
 
-msgid "Adjust Font Size - EPG Info Window"
-msgstr "Nastavenie ve�kos�i p�sma - EPG informa�n� okno"
+msgid "Mode of recording Window"
+msgstr "Sp�sob zobrazenia okna nahr�vok"
+
+msgid "Border around detailed recording view"
+msgstr "Okraj okolo podrobn�ho zobrazenia nahr�vky"
+
+msgid "Use folder poster if available"
+msgstr "Pou�i� zlo�ku plag�t ak je k dispoz�cii"
+
+msgid "Width of manually set recording poster"
+msgstr "Ru�ne nastavi� ��rku plag�tov nahr�vok"
+
+msgid "Height of manually set recording poster"
+msgstr "Ru�ne nastavi� v��ku plag�tov nahr�vok"
+
+msgid "if exists"
+msgstr "ak je k dispoz�cii"
+
+msgid "Border around view"
+msgstr ""
 
-msgid "Display additional EPG Pictures in detailed recording View"
-msgstr "Zobrazi� �al�ie EPG obr�zky v podrobnom zobrazen� nahr�vky"
+msgid "Scroll Speed with up / down (number of lines)"
+msgstr ""
+
+msgid "Header Height detailed EPG view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Header Height detailed recording view (Perc. of OSD Height)"
+msgstr ""
+
+msgid "Number of reruns to display"
+msgstr "Po�et repr�z na zobrazenie"
+
+msgid "Use Subtitle for reruns"
+msgstr "Pou�i� titulky pre repr�zu"
 
-msgid "Folder Icon Size"
-msgstr "Ve�kos� ikony prie�inku"
+msgid "EPG Image Width"
+msgstr ""
+
+msgid "EPG Image Height"
+msgstr ""
+
+msgid "Large EPG Image Width"
+msgstr ""
+
+msgid "Large EPG Image Height"
+msgstr ""
+
+msgid "transparent channel logo"
+msgstr "priesvitn� logo kan�lu"
+
+msgid "full osd width"
+msgstr "cel� OSD ��rka"
 
 msgid "do not display"
 msgstr "nezobrazova�"
 
-msgid "show elapsed time"
+msgid "top"
 msgstr ""
 
-msgid "show remaining time"
+msgid "middle"
 msgstr ""
 
-msgid "Height of Channel Display (Percent of OSD Height)"
+msgid "bottom"
 msgstr ""
 
+msgid "show elapsed time"
+msgstr "zobrazi� uplynul� �as"
+
+msgid "show remaining time"
+msgstr "zobrazi� zost�vaj�ci �as"
+
+msgid "Height of Channel Display (Percent of OSD Height)"
+msgstr "V��ka zobrazen�ho kan�lu"
+
 msgid "Left & Right Border Width"
 msgstr "��rka �av�ho a prav�ho okraja"
 
 msgid "Bottom Border Height"
 msgstr "V��ka spodn�ho okraja"
 
+msgid "Background Transparency in Percent"
+msgstr "Prieh�adnos� pozadia v percent�ch"
+
+msgid "Background Style"
+msgstr "�t�l pozadia"
+
+msgid "Rounded Corners"
+msgstr "Zaoblen� rohy"
+
+msgid "Vertical Channel Logo Alignment"
+msgstr ""
+
 msgid "Channel Logo Position"
 msgstr "Poz�cia loga kan�lu"
 
-msgid "Channel Logo Border"
-msgstr "Okraj loga kan�lu"
+msgid "Channel Logo original Width"
+msgstr "P�vodn� ��rka loga kan�la"
+
+msgid "Channel Logo original Height"
+msgstr "P�vodn� v��ka loga kan�la"
 
 msgid "Kind of time display for current schedule"
-msgstr ""
+msgstr "Druh zobrazenia �asu pre aktu�lnu rel�ciu"
 
 msgid "Display Signal Strength & Quality"
 msgstr "Zobrazi� silu a kvalitu sign�lu"
 
-msgid "Screen Resolution Icon Size"
-msgstr "Ve�kos� ikony rozl�enia obrazovky"
+msgid "Display Channel Source & Rec. Info"
+msgstr ""
+
+msgid "Display Poster or Fanart from TVScraper"
+msgstr "Zobrazenie plag�tu alebo Fanartu z TVScraper"
 
-msgid "Status Icons Size"
-msgstr "Ve�kos� ik�n panelu �loh"
+msgid "Border in Pixel"
+msgstr "Okraj v pixeloch"
+
+msgid "Display previous and next Channel Group"
+msgstr "Zobrazi� predch�dzaj�cu a nasleduj�cu skupinu kan�lu"
 
 msgid "Adjust Font Size - EPG Text"
-msgstr "Nastavenie ve�kos�i p�sma - EPG text"
+msgstr "Nastavenie ve�kosti p�sma - EPG text"
 
 msgid "Adjust Font Size - EPG Infotext"
-msgstr "Nastavenie ve�kos�i p�sma - EPG informa�n� text"
+msgstr "Nastavenie ve�kosti p�sma - EPG informa�n� text"
+
+msgid "Adjust Font Size - Channel Source Info"
+msgstr "Nastavenie ve�kosti p�sma - Info zdroja kan�la"
+
+msgid "Adjust Font Size - Channel Group"
+msgstr "Nastavenie ve�kosti p�sma - Skupina kan�lu"
+
+msgid "Adjust Font Size - Next/Prev Channel Group"
+msgstr "Nastavenie ve�kosti p�sma - Predch�dzaj�ca/nasleduj�ca skupina kan�lu"
 
 msgid "Height of Replay Display (Percent of OSD Height)"
-msgstr ""
+msgstr "V��ka zobrazenia prehr�vania (Percento s OSD v��ky)"
 
 msgid "Adjust Font Size - Text"
-msgstr "Nastavenie ve�kos�i p�sma - textu"
+msgstr "Nastavenie ve�kosti p�sma - textu"
 
 msgid "Width of Tracks Display (Percent of OSD Width)"
 msgstr "��rka zobrazenia v�beru stopy (Percent z OSD ��rky)"
 
 msgid "Height of Track Items (in pixels)"
-msgstr ""
+msgstr "V��ka polo�iek zvukov�ch st�p (v pixeloch)"
 
 msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
 msgstr "Poz�cia (0: dole uprostred, 1: v�avo dole, ... , 7: vpravo dole)"
 
-msgid "Border Top / Bottom"
-msgstr "okraje navrchu / na spodku"
-
 msgid "Border Left / Right"
 msgstr "Okraje v�avo / vpravo"
 
+msgid "Border Top / Bottom"
+msgstr "okraje navrchu / na spodku"
+
 msgid "Adjust Font Size - Buttons"
 msgstr "Nastavenie ve�kosti p�sma - Tla��tka"
 
@@ -384,7 +612,7 @@ msgid "Width of Message Display (Percent of OSD Height)"
 msgstr "��rka zobrazenej spr�vy (percento z �asti OSD)"
 
 msgid "Height of Message Display (Percent of OSD Height)"
-msgstr ""
+msgstr "V��ka zobrazenej spr�vy (Percento s OSD v��ky)"
 
 msgid "Adjust Font Size"
 msgstr "Nastavenie ve�kosti p�sma"
@@ -396,136 +624,76 @@ msgid "Width of Volume Display (Percent of OSD Height)"
 msgstr "��rka zobrazenia hlasitosti (Percent z OSD ��rky)"
 
 msgid "Height of Volume Display (Percent of OSD Height)"
-msgstr ""
+msgstr "V��ka zobrazenia hlasitosti (Percento z OSD v��ky)"
 
-msgid "conflict"
-msgstr "konflikt"
+msgid "Limit Logo Cache"
+msgstr "Limit vyrovn�vacej pam�te loga"
 
-msgid "conflicts"
-msgstr "konflikty"
-
-#~ msgid "Hight of Channel Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia (Percento z OSD v��ky)"
-
-#~ msgid "Hight of Replay Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia prehr�vania (Percent z OSD v��ky)"
-
-#~ msgid "Hight of Message Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenej spr�vy (percento z �asti OSD v��ky)"
-
-#~ msgid "Hight of Volume Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia hlasitosti (Percent z OSD v��ky)"
-
-#~ msgid "Hight of Tracks Display (Percent of OSD Height)"
-#~ msgstr "V��ka zobrazenia v�beru stopy (Percent z OSD v��ky)"
-
-#~ msgid "VDR Menu: Dimensions Settings"
-#~ msgstr "VDR menu: Nastavenie ve�kosti"
-
-#~ msgid "VDR Menu: Font Sizes"
-#~ msgstr "VDR menu: Ve�kos� p�sma"
-
-#~ msgid "Use narrow schedules menu"
-#~ msgstr "�zke menu tv programu"
-
-#~ msgid "Use narrow channel menu"
-#~ msgstr "�zke menu kak�lov"
-
-#~ msgid "Use narrow timer menu"
-#~ msgstr "�zke menu pl�nov nahr�vania"
-
-#~ msgid "Use narrow recording menu"
-#~ msgstr "�zke menu nahr�viek"
+msgid "Maximal number of logos to cache"
+msgstr "Maxim�lny po�et l�g do pam�te"
 
-#~ msgid "Display Disk Usage in main menu"
-#~ msgstr "Stav disku v hlavnom menu"
+msgid "Number of  logos to cache at start"
+msgstr "Po�et l�g do vyrovn�vacej pam�te pri �tarte"
 
-#~ msgid "Display Timers in main menu"
-#~ msgstr "Pl�ny nahr�vania v hlavnom menu"
+msgid "Cache Sizes"
+msgstr "Ve�kos� vyrovn�vacej pam�te"
 
-#~ msgid "Show Timer Conflicts in main menu"
-#~ msgstr "konflikty pl�nov v hlavnom menu"
+msgid "Menu Icon cache"
+msgstr "Vyrovn�vacia pam� ikony menu"
 
-#~ msgid "Width of Main and Setup Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu, hlavn�ho aj nastavenia (percento z OSD ��rky)"
+msgid "Skin Icon image cache"
+msgstr "Vyrovn�vacia pam� ikon vzh�adu"
 
-#~ msgid "Width of Schedules Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu tv programu (percento z OSD ��rky)"
+msgid "Logo cache"
+msgstr "Medzipam� loga"
 
-#~ msgid "Width of Channels Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu kan�lov (percento z OSD ��rky)"
+msgid "Menu Item Logo cache"
+msgstr "Medzipam� loga menu polo�ky"
 
-#~ msgid "Width of Timers Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu pl�nov nahr�vania (percento z OSD ��rky)"
+msgid "Timer Logo cache"
+msgstr "Medzipam� loga pl�nu nahr�vania"
 
-#~ msgid "Width of Recordings Menu (Percent of OSD Width)"
-#~ msgstr "��rka menu nahr�viek (percento z OSD ��rky)"
+msgid "Background Images cache"
+msgstr "Medzipam� obr�zkov pozadia"
 
-#~ msgid "Size of Disc Usage (square, Percent of OSD Width)"
-#~ msgstr "Stav vyu�itia pevn�ho disku (�tvorec, percento z OSD ��rky)"
-
-#~ msgid "Width of Timers Display (Percent of OSD Width)"
-#~ msgstr "��rka zobrazen�ho pl�nu  (percento z OSD ��rky)"
-
-#~ msgid "Icon Size (Square Main Menu Icons)"
-#~ msgstr "Gr��e der quadratischen Hauptmen� Icons"
-
-#~ msgid "Channel Logo Width (on the Menu Buttons)"
-#~ msgstr "Breite der Kanallogos auf den Men�buttons"
-
-#~ msgid "Channel Logo Height (on the Menu Buttons)"
-#~ msgstr "H�he der Kanallogos auf den Men�buttons"
-
-#~ msgid "Channel Logo Width (on timers in main menu)"
-#~ msgstr "Breite der Kanallogos auf den Timern im Hauptmen�"
-
-#~ msgid "Channel Logo Height (on timers in main menu)"
-#~ msgstr "H�he der Kanallogos auf den Timern im Hauptmen�"
-
-#~ msgid "Main Menu Header Logo Width"
-#~ msgstr "H�he des Logos im Hauptmen�"
-
-#~ msgid "Main Menu Header Logo Height"
-#~ msgstr "Breite des Logos im Hauptmen�"
-
-#~ msgid "Recordings Menu Folder Icon Size"
-#~ msgstr "Ordner Icon Gr��e im Aufnahmeverzeichnis"
+msgid "conflict"
+msgstr "konflikt"
 
-#~ msgid "Adjust Font Size - Large Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Ve�k� Menu polo�ka"
+msgid "conflicts"
+msgstr "konflikty"
 
-#~ msgid "Adjust Font Size - Schedule Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Programm�bersicht Men�buttons"
+#~ msgid "Display additional EPG Pictures in detailed recording View"
+#~ msgstr "Zobrazi� �al�ie EPG obr�zky v podrobnom zobrazen� nahr�vky"
 
-#~ msgid "Adjust Font Size - Schedule Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Programm�bersicht Men�buttons klein"
+#~ msgid "Number of EPG pictures to display"
+#~ msgstr "Po�et EPG obr�zkov na obrazovke"
 
-#~ msgid "Adjust Font Size - Channels Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Kan�le Men�buttons"
+#~ msgid "Border around detailed EPG view"
+#~ msgstr "Okraj okolo podrobn�ho zobrazenia EPG"
 
-#~ msgid "Adjust Font Size - Channels Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Kan�le Men�buttons klein"
+#~ msgid "Display Reruns in detailed EPG View"
+#~ msgstr "Zobrazi� repr�zy v podrobnostiach EPG"
 
-#~ msgid "Adjust Font Size - Recordings Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Aufzeichnungen Men�buttons"
+#~ msgid "Display additional EPG Pictures in detailed EPG View"
+#~ msgstr "Zobrazi� viac obr�zkov v podrobnostiach EPG"
 
-#~ msgid "Adjust Font Size - Recordings Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Aufzeichnungen Men�buttons klein"
+#~ msgid "Detail EPG View EPG Image Width"
+#~ msgstr "��rka obr�zku v podrobnom zobrazen� EPG"
 
-#~ msgid "Adjust Font Size - Timers Menu Item"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Men�buttons"
+#~ msgid "Detail EPG View EPG Image Height"
+#~ msgstr "V��ka obr�zku v podrobnom zobrazen� EPG"
 
-#~ msgid "Adjust Font Size - Timers Menu Item Small"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Men�buttons klein"
+#~ msgid "Detail EPG View additional EPG Image Width"
+#~ msgstr "��rka �al�ieho obr�zku v podrobnom zobrazen� EPG"
 
-#~ msgid "Adjust Font Size - Disc Usage (free)"
-#~ msgstr "Nastavenie ve�kosti p�sma - Festplatte frei"
+#~ msgid "Detail EPG View additional EPG Image Height"
+#~ msgstr "V��ka �al�ieho obr�zku v podrobnom zobrazen� EPG"
 
-#~ msgid "Adjust Font Size - Disc Usage (percent)"
-#~ msgstr "Nastavenie ve�kosti p�sma - Festplatte Prozent"
+#~ msgid "RERUNS OF THIS SHOW"
+#~ msgstr "Repr�za"
 
-#~ msgid "Adjust Font Size - Timers Header"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Header"
+#~ msgid "Actors"
+#~ msgstr "Herci"
 
-#~ msgid "Adjust Font Size - Timers Title"
-#~ msgstr "Nastavenie ve�kosti p�sma - Timer Name"
+#~ msgid "Display Channel Source information"
+#~ msgstr "Zobrazi� zdroj kan�lu"
diff --git a/screenResSetup/skinnopacity-hdready.txt b/screenResSetup/skinnopacity-hdready.txt
new file mode 100644
index 0000000..a3d30bf
--- /dev/null
+++ b/screenResSetup/skinnopacity-hdready.txt
@@ -0,0 +1,143 @@
+skinnopacity.backgroundStyle = 0
+skinnopacity.channelBorderBottom = 15
+skinnopacity.channelBorderVertical = 15
+skinnopacity.channelFadeTime = 0
+skinnopacity.channelHeight = 25
+skinnopacity.checkTimerConflict = 1
+skinnopacity.cornerRadius = 12
+skinnopacity.detailViewLogoHeight = 200
+skinnopacity.detailViewLogoWidth = 260
+skinnopacity.discUsageStyle = 0
+skinnopacity.displayAdditionalEPGPictures = 1
+skinnopacity.displayAdditionalRecEPGPictures = 1
+skinnopacity.displayPrevNextChannelGroup = 1
+skinnopacity.displayRerunsDetailEPGView = 1
+skinnopacity.displayRSSFeed = 0
+skinnopacity.displaySignalStrength = 1
+skinnopacity.displaySourceInfo = 1
+skinnopacity.epgImageHeight = 160
+skinnopacity.epgImageHeightLarge = 400
+skinnopacity.epgImageWidth = 210
+skinnopacity.epgImageWidthLarge = 525
+skinnopacity.fontButtons = -3
+skinnopacity.fontChannelDateSize = 0
+skinnopacity.fontChannelGroupSize = 0
+skinnopacity.fontChannelGroupSmallSize = 0
+skinnopacity.fontChannelHeaderSize = 0
+skinnopacity.fontDate = 0
+skinnopacity.fontDetailView = 0
+skinnopacity.fontDetailViewHeader = 0
+skinnopacity.fontDetailViewHeaderLarge = 0
+skinnopacity.fontDiskUsage = 0
+skinnopacity.fontDiskUsagePercent = 0
+skinnopacity.fontEPGInfoWindow = 0
+skinnopacity.fontEPGSize = 0
+skinnopacity.fontEPGSmallSize = 0
+skinnopacity.fontHeader = 0
+skinnopacity.fontIndex = 93
+skinnopacity.fontMenuitemChannel = -1
+skinnopacity.fontMenuitemChannelSmall = 2
+skinnopacity.fontMenuitemDefault = 0
+skinnopacity.fontMenuitemLarge = 0
+skinnopacity.fontMenuitemRecordings = 0
+skinnopacity.fontMenuitemRecordingsSmall = 0
+skinnopacity.fontMenuitemSchedule = -2
+skinnopacity.fontMenuitemScheduleSmall = 2
+skinnopacity.fontMenuitemTimers = 0
+skinnopacity.fontMenuitemTimersSmall = 0
+skinnopacity.fontMessage = 0
+skinnopacity.fontMessageMenu = 0
+skinnopacity.fontReplay = 0
+skinnopacity.fontReplayHeader = 0
+skinnopacity.fontRssFeed = 0
+skinnopacity.fontRssFeedStandalone = 0
+skinnopacity.fontTimers = 0
+skinnopacity.fontTimersHead = 0
+skinnopacity.fontTracks = 0
+skinnopacity.fontTracksHeader = 0
+skinnopacity.fontVolume = 0
+skinnopacity.footerHeight = 8
+skinnopacity.headerHeight = 7
+skinnopacity.headerIconHeight = 50
+skinnopacity.iconHeight = 50
+skinnopacity.logoBorder = 15
+skinnopacity.logoHeight = 100
+skinnopacity.logoPosition = 1
+skinnopacity.logoWidth = 130
+skinnopacity.mainMenuTitleStyle = 0
+skinnopacity.menuAdjustLeft = 1
+skinnopacity.menuChannelDisplayMode = 0
+skinnopacity.menuEPGWindowFadeTime = 300
+skinnopacity.menuFadeTime = 0
+skinnopacity.menuHeaderLogoHeight = 70
+skinnopacity.menuHeaderLogoWidth = 160
+skinnopacity.menuHeightInfoWindow = 20
+skinnopacity.menuInfoScrollDelay = 5
+skinnopacity.menuInfoScrollSpeed = 2
+skinnopacity.menuInfoTextDelay = 2
+skinnopacity.menuItemLogoHeight = 60
+skinnopacity.menuItemLogoWidth = 65
+skinnopacity.menuRecFolderSize = 128
+skinnopacity.menuScrollDelay = 1
+skinnopacity.menuScrollSpeed = 3
+skinnopacity.menuSizeDiskUsage = 12
+skinnopacity.menuWidthChannels = 30
+skinnopacity.menuWidthMain = 30
+skinnopacity.menuWidthRecordings = 30
+skinnopacity.menuWidthRightItems = 12
+skinnopacity.menuWidthSchedules = 30
+skinnopacity.menuWidthSetup = 30
+skinnopacity.menuWidthTimers = 30
+skinnopacity.messageBorderBottom = 10
+skinnopacity.messageFadeTime = 300
+skinnopacity.messageHeight = 10
+skinnopacity.messageWidth = 90
+skinnopacity.narrowChannelMenu = 1
+skinnopacity.narrowMainMenu = 1
+skinnopacity.narrowRecordingMenu = 1
+skinnopacity.narrowScheduleMenu = 1
+skinnopacity.narrowSetupMenu = 1
+skinnopacity.narrowTimerMenu = 1
+skinnopacity.numAdditionalEPGPictures = 9
+skinnopacity.numAdditionalRecEPGPictures = 9
+skinnopacity.numberTimers = 10
+skinnopacity.numDefaultMenuItems = 16
+skinnopacity.numEPGEntriesChannelsMenu = 15
+skinnopacity.numReruns = 5
+skinnopacity.progressCurrentSchedule = 0
+skinnopacity.replayBorderBottom = 15
+skinnopacity.replayBorderVertical = 15
+skinnopacity.replayFadeTime = 300
+skinnopacity.replayHeight = 25
+skinnopacity.resolutionIconSize = 50
+skinnopacity.roundedCorners = 0
+skinnopacity.roundedCornersChannel = 1
+skinnopacity.rssFeed[0] = 0
+skinnopacity.rssFeed[1] = 0
+skinnopacity.rssFeed[2] = 0
+skinnopacity.rssFeed[3] = 0
+skinnopacity.rssFeed[4] = 0
+skinnopacity.rssFeedHeight = 5
+skinnopacity.rssFeedHeightStandalone = 7
+skinnopacity.rssFeedStandalonePos = 0
+skinnopacity.rssScrollDelay = 2
+skinnopacity.rssScrollSpeed = 1
+skinnopacity.scalePicture = 1
+skinnopacity.showDiscUsage = 0
+skinnopacity.showTimers = 1
+skinnopacity.statusIconSize = 32
+skinnopacity.symbolStyle = 0
+skinnopacity.timersLogoHeight = 40
+skinnopacity.timersLogoWidth = 52
+skinnopacity.tracksBorderHorizontal = 10
+skinnopacity.tracksBorderVertical = 10
+skinnopacity.tracksFadeTime = 300
+skinnopacity.tracksItemHeight = 50
+skinnopacity.tracksPosition = 0
+skinnopacity.tracksWidth = 25
+skinnopacity.useMenuIcons = 1
+skinnopacity.useSubtitleRerun = 1
+skinnopacity.volumeBorderBottom = 10
+skinnopacity.volumeFadeTime = 300
+skinnopacity.volumeHeight = 10
+skinnopacity.volumeWidth = 40
diff --git a/screenResSetup/skinnopacity-sd.txt b/screenResSetup/skinnopacity-sd.txt
new file mode 100644
index 0000000..1acc8b5
--- /dev/null
+++ b/screenResSetup/skinnopacity-sd.txt
@@ -0,0 +1,144 @@
+OSDSkin = nOpacity
+skinnopacity.backgroundStyle = 0
+skinnopacity.channelBorderBottom = 15
+skinnopacity.channelBorderVertical = 15
+skinnopacity.channelFadeTime = 300
+skinnopacity.channelHeight = 25
+skinnopacity.checkTimerConflict = 1
+skinnopacity.cornerRadius = 12
+skinnopacity.detailViewLogoHeight = 140
+skinnopacity.detailViewLogoWidth = 200
+skinnopacity.discUsageStyle = 0
+skinnopacity.displayAdditionalEPGPictures = 1
+skinnopacity.displayAdditionalRecEPGPictures = 0
+skinnopacity.displayPrevNextChannelGroup = 1
+skinnopacity.displayRerunsDetailEPGView = 1
+skinnopacity.displayRSSFeed = 0
+skinnopacity.displaySignalStrength = 1
+skinnopacity.displaySourceInfo = 1
+skinnopacity.epgImageHeight = 160
+skinnopacity.epgImageHeightLarge = 401
+skinnopacity.epgImageWidth = 210
+skinnopacity.epgImageWidthLarge = 525
+skinnopacity.fontButtons = 0
+skinnopacity.fontChannelDateSize = 1
+skinnopacity.fontChannelGroupSize = 0
+skinnopacity.fontChannelGroupSmallSize = 0
+skinnopacity.fontChannelHeaderSize = -2
+skinnopacity.fontDate = 0
+skinnopacity.fontDetailView = 0
+skinnopacity.fontDetailViewHeader = -9
+skinnopacity.fontDetailViewHeaderLarge = -15
+skinnopacity.fontDiskUsage = 0
+skinnopacity.fontDiskUsagePercent = 0
+skinnopacity.fontEPGInfoWindow = -7
+skinnopacity.fontEPGSize = 0
+skinnopacity.fontEPGSmallSize = 3
+skinnopacity.fontHeader = 0
+skinnopacity.fontIndex = 78
+skinnopacity.fontMenuitemChannel = 0
+skinnopacity.fontMenuitemChannelSmall = 0
+skinnopacity.fontMenuitemDefault = 0
+skinnopacity.fontMenuitemLarge = -12
+skinnopacity.fontMenuitemRecordings = -5
+skinnopacity.fontMenuitemRecordingsSmall = 10
+skinnopacity.fontMenuitemSchedule = 0
+skinnopacity.fontMenuitemScheduleSmall = 0
+skinnopacity.fontMenuitemTimers = -10
+skinnopacity.fontMenuitemTimersSmall = -10
+skinnopacity.fontMessage = 0
+skinnopacity.fontMessageMenu = 0
+skinnopacity.fontReplay = 0
+skinnopacity.fontReplayHeader = 0
+skinnopacity.fontRssFeed = 0
+skinnopacity.fontRssFeedStandalone = 0
+skinnopacity.fontTimers = 0
+skinnopacity.fontTimersHead = 0
+skinnopacity.fontTracks = 0
+skinnopacity.fontTracksHeader = 0
+skinnopacity.fontVolume = 0
+skinnopacity.footerHeight = 7
+skinnopacity.headerHeight = 7
+skinnopacity.headerIconHeight = 40
+skinnopacity.iconHeight = 60
+skinnopacity.logoBorder = 15
+skinnopacity.logoHeight = 80
+skinnopacity.logoPosition = 0
+skinnopacity.logoWidth = 140
+skinnopacity.mainMenuTitleStyle = 0
+skinnopacity.menuAdjustLeft = 1
+skinnopacity.menuChannelDisplayMode = 0
+skinnopacity.menuEPGWindowFadeTime = 300
+skinnopacity.menuFadeTime = 0
+skinnopacity.menuHeaderLogoHeight = 60
+skinnopacity.menuHeaderLogoWidth = 90
+skinnopacity.menuHeightInfoWindow = 20
+skinnopacity.menuInfoScrollDelay = 5
+skinnopacity.menuInfoScrollSpeed = 2
+skinnopacity.menuInfoTextDelay = 2
+skinnopacity.menuItemLogoHeight = 30
+skinnopacity.menuItemLogoWidth = 60
+skinnopacity.menuRecFolderSize = 64
+skinnopacity.menuScrollDelay = 1
+skinnopacity.menuScrollSpeed = 2
+skinnopacity.menuSizeDiskUsage = 12
+skinnopacity.menuWidthChannels = 30
+skinnopacity.menuWidthMain = 40
+skinnopacity.menuWidthRecordings = 30
+skinnopacity.menuWidthRightItems = 12
+skinnopacity.menuWidthSchedules = 30
+skinnopacity.menuWidthSetup = 30
+skinnopacity.menuWidthTimers = 40
+skinnopacity.messageBorderBottom = 10
+skinnopacity.messageFadeTime = 300
+skinnopacity.messageHeight = 10
+skinnopacity.messageWidth = 90
+skinnopacity.narrowChannelMenu = 0
+skinnopacity.narrowMainMenu = 0
+skinnopacity.narrowRecordingMenu = 0
+skinnopacity.narrowScheduleMenu = 0
+skinnopacity.narrowSetupMenu = 0
+skinnopacity.narrowTimerMenu = 0
+skinnopacity.numAdditionalEPGPictures = 9
+skinnopacity.numAdditionalRecEPGPictures = 9
+skinnopacity.numberTimers = 10
+skinnopacity.numDefaultMenuItems = 16
+skinnopacity.numEPGEntriesChannelsMenu = 15
+skinnopacity.numReruns = 5
+skinnopacity.progressCurrentSchedule = 0
+skinnopacity.replayBorderBottom = 15
+skinnopacity.replayBorderVertical = 15
+skinnopacity.replayFadeTime = 300
+skinnopacity.replayHeight = 25
+skinnopacity.resolutionIconSize = 60
+skinnopacity.roundedCorners = 1
+skinnopacity.roundedCornersChannel = 1
+skinnopacity.rssFeed[0] = 0
+skinnopacity.rssFeed[1] = 0
+skinnopacity.rssFeed[2] = 0
+skinnopacity.rssFeed[3] = 0
+skinnopacity.rssFeed[4] = 0
+skinnopacity.rssFeedHeight = 5
+skinnopacity.rssFeedHeightStandalone = 7
+skinnopacity.rssFeedStandalonePos = 0
+skinnopacity.rssScrollDelay = 2
+skinnopacity.rssScrollSpeed = 1
+skinnopacity.scalePicture = 0
+skinnopacity.showDiscUsage = 0
+skinnopacity.showTimers = 0
+skinnopacity.statusIconSize = 30
+skinnopacity.symbolStyle = 0
+skinnopacity.timersLogoHeight = 70
+skinnopacity.timersLogoWidth = 90
+skinnopacity.tracksBorderHorizontal = 10
+skinnopacity.tracksBorderVertical = 10
+skinnopacity.tracksFadeTime = 300
+skinnopacity.tracksItemHeight = 80
+skinnopacity.tracksPosition = 0
+skinnopacity.tracksWidth = 25
+skinnopacity.useMenuIcons = 1
+skinnopacity.useSubtitleRerun = 1
+skinnopacity.volumeBorderBottom = 10
+skinnopacity.volumeFadeTime = 300
+skinnopacity.volumeHeight = 10
+skinnopacity.volumeWidth = 80
diff --git a/services/remotetimers.h b/services/remotetimers.h
index a69a7a0..ea31124 100644
--- a/services/remotetimers.h
+++ b/services/remotetimers.h
@@ -25,7 +25,7 @@
 #define _SERVICE__H
 
 #ifndef __TIMERS_H
-#include <vdr/timer.h>
+#include <vdr/timers.h>
 #include <vdr/epg.h>
 #endif
 
diff --git a/services/scraper2vdr.h b/services/scraper2vdr.h
new file mode 100644
index 0000000..3538130
--- /dev/null
+++ b/services/scraper2vdr.h
@@ -0,0 +1,196 @@
+#ifndef __SCRAPER2VDRSERVICES_H
+#define __SCRAPER2VDRSERVICES_H
+
+#include <string>
+#include <vector>
+#include <vdr/epg.h>
+#include <vdr/recording.h>
+
+enum tvType {
+    tSeries,
+    tMovie,
+    tNone,
+};
+
+/*********************************************************************
+* Helper Structures
+*********************************************************************/
+class cTvMedia {
+public:
+	cTvMedia(void) {
+		path = "";
+		width = height = 0;
+	};
+    std::string path;
+    int width;
+    int height;
+};
+
+class cEpisode {
+public:
+    cEpisode(void) {
+        number = 0;
+        season = 0;
+        name = "";
+        firstAired = "";
+        guestStars = "";
+        overview = "";
+        rating = 0.0;
+    };
+    int number;
+    int season;
+    std::string name;
+    std::string firstAired;
+    std::string guestStars;
+    std::string overview;
+    float rating;
+    cTvMedia episodeImage;
+};
+
+class cActor {
+public:
+    cActor(void) {
+        name = "";
+        role = "";
+    };
+    std::string name;
+    std::string role;
+    cTvMedia actorThumb;
+};
+
+/*********************************************************************
+* Data Structures for Service Calls
+*********************************************************************/
+
+// Data structure for service "GetEventType"
+class ScraperGetEventType {
+public:
+	ScraperGetEventType(void) {
+		event = NULL;
+        recording = NULL;
+		type = tNone;
+		movieId = 0;
+		seriesId = 0;
+		episodeId = 0;
+	};
+// in
+    const cEvent *event;             // check type for this event 
+    const cRecording *recording;     // or for this recording
+//out
+    tvType type;                	 //typeSeries or typeMovie
+    int movieId;
+    int seriesId;
+    int episodeId;
+};
+
+//Data structure for full series and episode information
+class cMovie {
+public:
+    cMovie(void) {
+        title = "";
+        originalTitle = "";
+        tagline = "";    
+        overview = "";
+        adult = false;
+        collectionName = "";
+        budget = 0;
+        revenue = 0;
+        genres = "";
+        homepage = "";
+        releaseDate = "";
+        runtime = 0;
+        popularity = 0.0;
+        voteAverage = 0.0;
+    };
+//IN
+    int movieId;                    // movieId fetched from ScraperGetEventType
+//OUT    
+    std::string title;
+    std::string originalTitle;
+    std::string tagline;    
+    std::string overview;
+    bool adult;
+    std::string collectionName;
+    int budget;
+    int revenue;
+    std::string genres;
+    std::string homepage;
+    std::string releaseDate;
+    int runtime;
+    float popularity;
+    float voteAverage;
+    cTvMedia poster;
+    cTvMedia fanart;
+    cTvMedia collectionPoster;
+    cTvMedia collectionFanart;
+    std::vector<cActor> actors;
+};
+
+//Data structure for full series and episode information
+class cSeries {
+public:
+    cSeries(void) {
+        seriesId = 0;
+        episodeId = 0;
+        name = "";
+        overview = "";
+        firstAired = "";
+        network = "";
+        genre = "";
+        rating = 0.0;
+        status = "";
+    };
+//IN
+    int seriesId;                   // seriesId fetched from ScraperGetEventType
+    int episodeId;                  // episodeId fetched from ScraperGetEventType
+//OUT
+    std::string name;
+    std::string overview;
+    std::string firstAired;
+    std::string network;
+    std::string genre;
+    float rating;
+    std::string status;
+    cEpisode episode;
+    std::vector<cActor> actors;
+    std::vector<cTvMedia> posters;
+    std::vector<cTvMedia> banners;
+    std::vector<cTvMedia> fanarts;
+    cTvMedia seasonPoster;
+};
+
+// Data structure for service "GetPosterBanner"
+class ScraperGetPosterBanner {
+public:
+	ScraperGetPosterBanner(void) {
+		type = tNone;
+	};
+// in
+    const cEvent *event;             // check type for this event 
+//out
+    tvType type;                	 //typeSeries or typeMovie
+    cTvMedia poster;
+    cTvMedia banner;
+};
+
+// Data structure for service "GetPoster"
+class ScraperGetPoster {
+public:
+// in
+    const cEvent *event;             // check type for this event
+    const cRecording *recording;     // or for this recording
+//out
+    cTvMedia poster;
+};
+
+// Data structure for service "GetPosterThumb"
+class ScraperGetPosterThumb {
+public:
+// in
+    const cEvent *event;             // check type for this event
+    const cRecording *recording;     // or for this recording
+//out
+    cTvMedia poster;
+};
+
+#endif //__SCRAPER2VDRSERVICES_H
\ No newline at end of file
diff --git a/setup.c b/setup.c
index 510f4c9..169e698 100644
--- a/setup.c
+++ b/setup.c
@@ -1,38 +1,47 @@
 #include "setup.h"
 
-cNopacitySetup::cNopacitySetup() {
-    tmpNopacityConfig = config;
+cNopacitySetup::cNopacitySetup(cImageCache *imgCache) {
+    this->imgCache = imgCache;
+    tmpConf = config;
     cFont::GetAvailableFontNames(&fontNames);
     fontNames.Insert(strdup(config.fontDefaultName));
     Setup();
 }
 
 cNopacitySetup::~cNopacitySetup() {
+    config.SetFontName();
+    int start = cTimeMs::Now();
+    geoManager->SetGeometry();
+    fontManager->DeleteFonts();
+    fontManager->SetFonts();
+    imgCache->Reload();
+    dsyslog("nopacity: Cache reloaded in %d ms", int(cTimeMs::Now()-start));
 }
 
 
 void cNopacitySetup::Setup(void) {
     int currentItem = Current();
     Clear();
-    Add(new cMenuEditStraItem(tr("Font"), &tmpNopacityConfig.fontIndex, fontNames.Size(), &fontNames[0]));
+    Add(new cMenuEditStraItem(tr("Font"), tmpConf.GetValueRef("fontIndex"), fontNames.Size(), &fontNames[0]));
     Add(new cOsdItem(tr("VDR Menu: Common Settings")));
     Add(new cOsdItem(tr("VDR Menu: Main and Setup Menu")));
     Add(new cOsdItem(tr("VDR Menu: Schedules Menu")));
     Add(new cOsdItem(tr("VDR Menu: Channels Menu")));
     Add(new cOsdItem(tr("VDR Menu: Timers Menu")));
     Add(new cOsdItem(tr("VDR Menu: Recordings Menu")));
+    Add(new cOsdItem(tr("VDR Menu: Detailed EPG & Recordings View")));
     Add(new cOsdItem(tr("Channel Switching")));
     Add(new cOsdItem(tr("Replay")));
     Add(new cOsdItem(tr("Audio Tracks")));
     Add(new cOsdItem(tr("Messages")));
     Add(new cOsdItem(tr("Volume")));
-    
+    Add(new cOsdItem(tr("Image Caching")));
     SetCurrent(Get(currentItem));
     Display();
 }
 
 eOSState cNopacitySetup::ProcessKey(eKeys Key) {
-    bool hadSubMenu = HasSubMenu();   
+    bool hadSubMenu = HasSubMenu();
     eOSState state = cMenuSetupPage::ProcessKey(Key);
     if (hadSubMenu && Key == kOk)
         Store();
@@ -40,160 +49,56 @@ eOSState cNopacitySetup::ProcessKey(eKeys Key) {
         if ((Key == kOk && !hadSubMenu)) {
             const char* ItemText = Get(Current())->Text();
             if (strcmp(ItemText, tr("VDR Menu: Common Settings")) == 0)
-                state = AddSubMenu(new cNopacitySetupMenuDisplay(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMenuDisplay(&tmpConf));
             if (strcmp(ItemText, tr("VDR Menu: Main and Setup Menu")) == 0)
-                state = AddSubMenu(new cNopacitySetupMenuDisplayMain(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMenuDisplayMain(&tmpConf));
             if (strcmp(ItemText, tr("VDR Menu: Schedules Menu")) == 0)
-                state = AddSubMenu(new cNopacitySetupMenuDisplaySchedules(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMenuDisplaySchedules(&tmpConf));
             if (strcmp(ItemText, tr("VDR Menu: Channels Menu")) == 0)
-                state = AddSubMenu(new cNopacitySetupMenuDisplayChannels(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMenuDisplayChannels(&tmpConf));
             if (strcmp(ItemText, tr("VDR Menu: Timers Menu")) == 0)
-                state = AddSubMenu(new cNopacitySetupMenuDisplayTimers(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMenuDisplayTimers(&tmpConf));
             if (strcmp(ItemText, tr("VDR Menu: Recordings Menu")) == 0)
-                state = AddSubMenu(new cNopacitySetupMenuDisplayRecordings(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMenuDisplayRecordings(&tmpConf));
+            if (strcmp(ItemText, tr("VDR Menu: Detailed EPG & Recordings View")) == 0)
+                state = AddSubMenu(new cNopacitySetupDetailedView(&tmpConf));
             if (strcmp(ItemText, tr("Channel Switching")) == 0)
-                state = AddSubMenu(new cNopacitySetupChannelDisplay(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupChannelDisplay(&tmpConf));
             if (strcmp(ItemText, tr("Replay")) == 0)
-                state = AddSubMenu(new cNopacitySetupReplayDisplay(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupReplayDisplay(&tmpConf));
             if (strcmp(ItemText, tr("Audio Tracks")) == 0)
-                state = AddSubMenu(new cNopacitySetupTrackDisplay(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupTrackDisplay(&tmpConf));
             if (strcmp(ItemText, tr("Messages")) == 0)
-                state = AddSubMenu(new cNopacitySetupMessageDisplay(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupMessageDisplay(&tmpConf));
             if (strcmp(ItemText, tr("Volume")) == 0)
-                state = AddSubMenu(new cNopacitySetupVolumeDisplay(&tmpNopacityConfig));
+                state = AddSubMenu(new cNopacitySetupVolumeDisplay(&tmpConf));
+            if (strcmp(ItemText, tr("Image Caching")) == 0)
+                state = AddSubMenu(new cNopacitySetupCaching(&tmpConf, imgCache));
         }
-    }   
+    }
     return state;
 }
 
 void cNopacitySetup::Store(void) {
-    config = tmpNopacityConfig;
-    SetupStore("fontIndex", config.fontIndex);
-    SetupStore("channelHeight", config.channelHeight);
-    SetupStore("channelBorderVertical", config.channelBorderVertical);
-    SetupStore("channelBorderBottom", config.channelBorderBottom);
-    SetupStore("logoPosition", config.logoPosition);
-    SetupStore("logoWidth", config.logoWidth);
-    SetupStore("logoHeight", config.logoHeight);
-    SetupStore("logoBorder", config.logoBorder);
-    SetupStore("displaySignalStrength", config.displaySignalStrength);
-    SetupStore("channelFadeTime", config.channelFadeTime);
-    SetupStore("fontChannelHeaderSize", config.fontChannelHeaderSize);
-    SetupStore("fontChannelDateSize", config.fontChannelDateSize);
-    SetupStore("fontEPGSize", config.fontEPGSize);
-    SetupStore("fontEPGSmallSize", config.fontEPGSmallSize);
-    SetupStore("resolutionIconSize", config.resolutionIconSize);
-    SetupStore("statusIconSize", config.statusIconSize);
-    SetupStore("progressCurrentSchedule", config.progressCurrentSchedule);
-    SetupStore("replayHeight", config.replayHeight);
-    SetupStore("replayBorderVertical", config.replayBorderVertical);
-    SetupStore("replayBorderBottom", config.replayBorderBottom);
-    SetupStore("replayFadeTime", config.replayFadeTime);
-    SetupStore("fontReplayHeader", config.fontReplayHeader);
-    SetupStore("fontReplay", config.fontReplay);
-    SetupStore("messageWidth", config.messageWidth);
-    SetupStore("messageHeight", config.messageHeight);
-    SetupStore("messageBorderBottom", config.messageBorderBottom);
-    SetupStore("fontMessage", config.fontMessage);
-    SetupStore("messageFadeTime", config.messageFadeTime);
-    SetupStore("tracksFadeTime", config.tracksFadeTime);
-    SetupStore("tracksWidth", config.tracksWidth);
-    SetupStore("tracksItemHeight", config.tracksItemHeight);
-    SetupStore("tracksPosition", config.tracksPosition);
-    SetupStore("tracksBorderHorizontal", config.tracksBorderHorizontal);
-    SetupStore("tracksBorderVertical", config.tracksBorderVertical);
-    SetupStore("fontTracksHeader", config.fontTracksHeader);
-    SetupStore("fontTracks", config.fontTracks);
-    SetupStore("volumeFadeTime", config.volumeFadeTime);
-    SetupStore("volumeWidth", config.volumeWidth);
-    SetupStore("volumeHeight", config.volumeHeight);
-    SetupStore("volumeBorderBottom", config.volumeBorderBottom);
-    SetupStore("fontVolume", config.fontVolume);
-    SetupStore("menuAdjustLeft", config.menuAdjustLeft);
-    SetupStore("scalePicture", config.scalePicture);
-    SetupStore("roundedCorners", config.roundedCorners);
-    SetupStore("cornerRadius", config.cornerRadius);
-    SetupStore("useMenuIcons", config.useMenuIcons);
-    SetupStore("mainMenuTitleStyle", config.mainMenuTitleStyle);
-    SetupStore("narrowMainMenu", config.narrowMainMenu);
-    SetupStore("narrowScheduleMenu", config.narrowScheduleMenu);
-    SetupStore("narrowChannelMenu", config.narrowChannelMenu);
-    SetupStore("narrowTimerMenu", config.narrowTimerMenu);
-    SetupStore("narrowRecordingMenu", config.narrowRecordingMenu);
-    SetupStore("narrowSetupMenu", config.narrowSetupMenu);
-    SetupStore("displayRerunsDetailEPGView", config.displayRerunsDetailEPGView);
-    SetupStore("numReruns", config.numReruns);
-    SetupStore("useSubtitleRerun", config.useSubtitleRerun);
-    SetupStore("displayAdditionalEPGPictures", config.displayAdditionalEPGPictures);
-    SetupStore("numAdditionalEPGPictures", config.numAdditionalEPGPictures);
-    SetupStore("displayAdditionalRecEPGPictures", config.displayAdditionalRecEPGPictures);
-    SetupStore("numAdditionalRecEPGPictures", config.numAdditionalRecEPGPictures);
-    SetupStore("menuFadeTime", config.menuFadeTime);
-    SetupStore("menuScrollDelay", config.menuScrollDelay);
-    SetupStore("menuScrollSpeed", config.menuScrollSpeed);
-    SetupStore("menuWidthMain", config.menuWidthMain);
-    SetupStore("menuWidthSchedules", config.menuWidthSchedules);
-    SetupStore("menuWidthChannels", config.menuWidthChannels);
-    SetupStore("menuWidthTimers", config.menuWidthTimers);
-    SetupStore("menuWidthRecordings", config.menuWidthRecordings);
-    SetupStore("menuWidthSetup", config.menuWidthSetup);
-    SetupStore("menuWidthRightItems", config.menuWidthRightItems);
-    SetupStore("menuSizeDiskUsage", config.menuSizeDiskUsage);
-    SetupStore("menuHeightInfoWindow", config.menuHeightInfoWindow);
-    SetupStore("menuEPGWindowFadeTime", config.menuEPGWindowFadeTime);
-    SetupStore("menuInfoTextDelay", config.menuInfoTextDelay);
-    SetupStore("menuInfoScrollDelay", config.menuInfoScrollDelay);
-    SetupStore("menuInfoScrollSpeed", config.menuInfoScrollSpeed);
-    SetupStore("showDiscUsage", config.showDiscUsage);
-    SetupStore("showTimers", config.showTimers);
-    SetupStore("numberTimers", config.numberTimers);
-    SetupStore("checkTimerConflict", config.checkTimerConflict);
-    SetupStore("headerHeight", config.headerHeight);
-    SetupStore("footerHeight", config.footerHeight);
-    SetupStore("numDefaultMenuItems", config.numDefaultMenuItems);
-    SetupStore("iconHeight", config.iconHeight);
-    SetupStore("headerIconHeight", config.headerIconHeight);
-    SetupStore("menuItemLogoWidth", config.menuItemLogoWidth);
-    SetupStore("menuItemLogoHeight", config.menuItemLogoHeight);
-    SetupStore("menuHeaderLogoWidth", config.menuHeaderLogoWidth);
-    SetupStore("menuHeaderLogoHeight", config.menuHeaderLogoHeight);
-    SetupStore("detailViewLogoWidth", config.detailViewLogoWidth);
-    SetupStore("detailViewLogoHeight", config.detailViewLogoHeight);
-    SetupStore("timersLogoWidth", config.timersLogoWidth);
-    SetupStore("timersLogoHeight", config.timersLogoHeight);
-    SetupStore("epgImageWidth", config.epgImageWidth);
-    SetupStore("epgImageHeight", config.epgImageHeight);
-    SetupStore("epgImageWidthLarge", config.epgImageWidthLarge);
-    SetupStore("epgImageHeightLarge", config.epgImageHeightLarge);
-    SetupStore("menuRecFolderSize", config.menuRecFolderSize);
-    SetupStore("fontHeader", config.fontHeader);
-    SetupStore("fontDate", config.fontDate);
-    SetupStore("fontMenuitemLarge", config.fontMenuitemLarge);
-    SetupStore("fontMenuitemSchedule", config.fontMenuitemSchedule);
-    SetupStore("fontMenuitemScheduleSmall", config.fontMenuitemScheduleSmall);
-    SetupStore("fontMenuitemChannel", config.fontMenuitemChannel);
-    SetupStore("fontMenuitemChannelSmall", config.fontMenuitemChannelSmall);
-    SetupStore("fontMenuitemRecordings", config.fontMenuitemRecordings);
-    SetupStore("fontMenuitemRecordingsSmall", config.fontMenuitemRecordingsSmall);
-    SetupStore("fontMenuitemTimers", config.fontMenuitemTimers);
-    SetupStore("fontMenuitemTimersSmall", config.fontMenuitemTimersSmall);
-    SetupStore("fontMenuitemDefault", config.fontMenuitemDefault);
-    SetupStore("fontDiskUsage", config.fontDiskUsage);
-    SetupStore("fontDiskUsagePercent", config.fontDiskUsagePercent);
-    SetupStore("fontTimersHead", config.fontTimersHead);
-    SetupStore("fontTimers", config.fontTimers);
-    SetupStore("fontButtons", config.fontButtons);
-    SetupStore("fontMessageMenu", config.fontMessageMenu);
-    SetupStore("fontDetailView", config.fontDetailView);
-    SetupStore("fontDetailViewHeader", config.fontDetailViewHeader);
-    SetupStore("fontDetailViewHeaderLarge", config.fontDetailViewHeaderLarge);
-    SetupStore("fontEPGInfoWindow", config.fontEPGInfoWindow);
+    const char *themeName = Skins.Current()->Theme()->Name();
+    for(std::map<std::string, int>::const_iterator it = tmpConf.GetStart(); it != tmpConf.GetEnd(); it++) {
+        std::string name = (std::string)it->first;
+        int value = (int)it->second;
+        int origValue = config.GetValue(name);
+        if (value != origValue) {
+            //Save changed value in setup.conf
+            SetupStore(*cString::sprintf("%s.%s", themeName, name.c_str()), value);
+            //Save changed value also in cConfig::themeConfigSetup
+            tmpConf.SetThemeConfigSetupValue(themeName, name, value);
+        }
+    }
+    config = tmpConf;
 }
 
 //------------------------------------------------------------------------------------------------------------------
 
 cMenuSetupSubMenu::cMenuSetupSubMenu(const char* Title, cNopacityConfig* data) : cOsdMenu(Title, 30) {
-    tmpNopacityConfig = data;
+    tmpConf = data;
     spacer = "   ";
 }
 
@@ -224,36 +129,44 @@ eOSState cMenuSetupSubMenu::ProcessKey(eKeys Key) {
 cNopacitySetupMenuDisplay::cNopacitySetupMenuDisplay(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("VDR Menu: Common Settings"), data) {
     adjustLeft[0] = tr("right");
     adjustLeft[1] = tr("left");
+    scrollMode[0] = tr("Carriage Return");
+    scrollMode[1] = tr("Forward and Back again");
     scrollSpeed[0] = tr("off");
     scrollSpeed[1] = tr("slow");
     scrollSpeed[2] = tr("medium");
     scrollSpeed[3] = tr("fast");
+    scalePic[0] = tr("no");
+    scalePic[1] = tr("yes");
+    scalePic[2] = tr("auto");
     Set();
 }
 
 void cNopacitySetupMenuDisplay::Set(void) {
     int currentItem = Current();
     Clear();
-    Add(new cMenuEditIntItem(tr("Number of Default Menu Entries per Page"), &tmpNopacityConfig->numDefaultMenuItems, 10, 40));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Default Menu Item"), &tmpNopacityConfig->fontMenuitemDefault, -20, 20));
-    Add(new cMenuEditStraItem(tr("Adjustment of narrow menus"), &tmpNopacityConfig->menuAdjustLeft, 2, adjustLeft));
-    Add(new cMenuEditBoolItem(tr("Scale Video size to fit into menu window"), &tmpNopacityConfig->scalePicture));
-    Add(new cMenuEditIntItem(tr("Header Height (Percent of OSD Height)"), &tmpNopacityConfig->headerHeight, 0, 30));
-    Add(new cMenuEditIntItem(tr("Header Icon Size (Square Header Menu Icons)"), &tmpNopacityConfig->headerIconHeight, 30, 200));
-    Add(new cMenuEditIntItem(tr("Footer Height (Percent of OSD Height)"), &tmpNopacityConfig->footerHeight, 0, 30));
-    Add(new cMenuEditBoolItem(tr("Rounded Corners for menu items and buttons"), &tmpNopacityConfig->roundedCorners));
-    if (tmpNopacityConfig->roundedCorners)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Radius of rounded corners")), &tmpNopacityConfig->cornerRadius, 5, 30));
-    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->menuFadeTime, 0, 1000));
-    Add(new cMenuEditStraItem(tr("Menu Items Scrolling Speed"), &tmpNopacityConfig->menuScrollSpeed, 4, scrollSpeed));
-    Add(new cMenuEditIntItem(tr("Menu Items Scrolling Delay in s"), &tmpNopacityConfig->menuScrollDelay, 0, 3));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontHeader, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), &tmpNopacityConfig->fontDate, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Color Buttons"), &tmpNopacityConfig->fontButtons, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Messages"), &tmpNopacityConfig->fontMessageMenu, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Text"), &tmpNopacityConfig->fontDetailView, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header"), &tmpNopacityConfig->fontDetailViewHeader, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header Large"), &tmpNopacityConfig->fontDetailViewHeaderLarge, -20, 20));
+    Add(new cMenuEditBoolItem(tr("Create Log Messages for image loading"), tmpConf->GetValueRef("debugImageLoading")));
+    Add(new cMenuEditIntItem(tr("Number of Default Menu Entries per Page"), tmpConf->GetValueRef("numDefaultMenuItems"), 10, 40));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Default Menu Item"), tmpConf->GetValueRef("fontMenuitemDefault"), -20, 20));
+    Add(new cMenuEditStraItem(tr("Adjustment of narrow menus"), tmpConf->GetValueRef("menuAdjustLeft"), 2, adjustLeft));
+    Add(new cMenuEditStraItem(tr("Scale Video size to fit into menu window"), tmpConf->GetValueRef("scalePicture"), 3, scalePic));
+    Add(new cMenuEditIntItem(tr("Header Height (Percent of OSD Height)"), tmpConf->GetValueRef("headerHeight"), 5, 30));
+    Add(new cMenuEditIntItem(tr("Footer Height (Percent of OSD Height)"), tmpConf->GetValueRef("footerHeight"), 5, 30));
+    Add(new cMenuEditBoolItem(tr("Rounded Corners for menu items and buttons"), tmpConf->GetValueRef("roundedCorners")));
+    if (tmpConf->GetValue("roundedCorners"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Radius of rounded corners")), tmpConf->GetValueRef("cornerRadius"), 5, 30));
+    Add(new cMenuEditBoolItem(tr("Use Channel Logo background"), tmpConf->GetValueRef("menuChannelLogoBackground")));
+    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("menuFadeTime"), 0, 1000));
+    Add(new cMenuEditStraItem(tr("Menu Items Scroll Style"), tmpConf->GetValueRef("scrollMode"), 2, scrollMode));
+    Add(new cMenuEditStraItem(tr("Menu Items Scrolling Speed"), tmpConf->GetValueRef("menuScrollSpeed"), 4, scrollSpeed));
+    Add(new cMenuEditIntItem(tr("Menu Items Scrolling Delay in s"), tmpConf->GetValueRef("menuScrollDelay"), 0, 3));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontHeader"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), tmpConf->GetValueRef("fontDate"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Color Buttons"), tmpConf->GetValueRef("fontButtons"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Messages"), tmpConf->GetValueRef("fontMessageMenu"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Text"), tmpConf->GetValueRef("fontDetailView"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Text Small"), tmpConf->GetValueRef("fontDetailViewSmall"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header"), tmpConf->GetValueRef("fontDetailViewHeader"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Detail View Header Large"), tmpConf->GetValueRef("fontDetailViewHeaderLarge"), -20, 20));
 
     SetCurrent(Get(currentItem));
     Display();
@@ -265,43 +178,46 @@ cNopacitySetupMenuDisplayMain::cNopacitySetupMenuDisplayMain(cNopacityConfig* da
     titleStyle[0] = tr("\"VDR\" plus VDR version");
     titleStyle[1] = tr("only VDR version");
     titleStyle[2] = tr("no title");
+    discUsageStyle[0] = tr("free time in hours");
+    discUsageStyle[1] = tr("free space in GB");
+    showTimers[0] = trVDR("no");
+    showTimers[1] = trVDR("yes");
+    showTimers[2] = tr("small without logo");
     Set();
 }
 
 void cNopacitySetupMenuDisplayMain::Set(void) {
     int currentItem = Current();
     Clear();
-    Add(new cMenuEditBoolItem(tr("Use narrow main menu"), &tmpNopacityConfig->narrowMainMenu));
-    if (tmpNopacityConfig->narrowMainMenu)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthMain, 10, 100));
-    Add(new cMenuEditBoolItem(tr("Use narrow setup menu"), &tmpNopacityConfig->narrowSetupMenu));
-    if (tmpNopacityConfig->narrowSetupMenu)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthSetup, 10, 100));
-
-    Add(new cMenuEditBoolItem(tr("Use menu icons"), &tmpNopacityConfig->useMenuIcons));
-    if (tmpNopacityConfig->useMenuIcons)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Icon Size (Square)")), &tmpNopacityConfig->iconHeight, 30, 200));
-    Add(new cMenuEditStraItem(tr("Main menu title style"), &tmpNopacityConfig->mainMenuTitleStyle, 3, titleStyle));
-    Add(new cMenuEditBoolItem(tr("Display Disk Usage"), &tmpNopacityConfig->showDiscUsage));
-    if (tmpNopacityConfig->showDiscUsage) {
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Size (square, Percent of OSD Width)")), &tmpNopacityConfig->menuSizeDiskUsage, 2, 100));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - free")), &tmpNopacityConfig->fontDiskUsage, -20, 20));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - percent")), &tmpNopacityConfig->fontDiskUsagePercent, -20, 20));
+    Add(new cMenuEditBoolItem(tr("Use narrow main menu"), tmpConf->GetValueRef("narrowMainMenu")));
+    if (tmpConf->GetValue("narrowMainMenu"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthMain"), 10, 97));
+    Add(new cMenuEditBoolItem(tr("Use narrow setup menu"), tmpConf->GetValueRef("narrowSetupMenu")));
+    if (tmpConf->GetValue("narrowSetupMenu"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthSetup"), 10, 97));
+    Add(new cMenuEditIntItem(tr("Number of entires per page"), tmpConf->GetValueRef("numMainMenuItems"), 3, 20));
+    Add(new cMenuEditBoolItem(tr("Use menu icons"), tmpConf->GetValueRef("useMenuIcons")));
+    Add(new cMenuEditStraItem(tr("Main menu title style"), tmpConf->GetValueRef("mainMenuTitleStyle"), 3, titleStyle));
+    Add(new cMenuEditBoolItem(tr("Display Disk Usage"), tmpConf->GetValueRef("showDiscUsage")));
+    if (tmpConf->GetValue("showDiscUsage")) {
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Size (square, Percent of OSD Width)")), tmpConf->GetValueRef("menuSizeDiskUsage"), 5, 30));
+        Add(new cMenuEditStraItem(cString::sprintf("%s%s", *spacer, tr("Free Disc Display")), tmpConf->GetValueRef("discUsageStyle"), 2, discUsageStyle));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - free")), tmpConf->GetValueRef("fontDiskUsage"), -20, 20));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - percent")), tmpConf->GetValueRef("fontDiskUsagePercent"), -20, 20));
     }
-    Add(new cMenuEditBoolItem(tr("Display Timers"), &tmpNopacityConfig->showTimers));
-    if (tmpNopacityConfig->showTimers) {
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Maximum number of Timers")), &tmpNopacityConfig->numberTimers, 1, 10));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width of Timers (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthRightItems, 5, 100));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Width")), &tmpNopacityConfig->timersLogoWidth, 30, 300));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Height")), &tmpNopacityConfig->timersLogoHeight, 30, 300));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Header")), &tmpNopacityConfig->fontTimersHead, -20, 20));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Title")), &tmpNopacityConfig->fontTimers, -20, 20));
+    Add(new cMenuEditStraItem(tr("Display Timers"), tmpConf->GetValueRef("showTimers"), 3, showTimers));
+    if (tmpConf->GetValue("showTimers")) {
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Maximum number of Timers")), tmpConf->GetValueRef("numberTimers"), 1, 10));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width of Timers (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthRightItems"), 5, 30));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width of Channel Logos (Percent of Timer Width)")), tmpConf->GetValueRef("timersLogoWidth"), 20, 98));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Header")), tmpConf->GetValueRef("fontTimersHead"), -20, 20));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Adjust Font Size - Title")), tmpConf->GetValueRef("fontTimers"), -20, 20));
     }
-    Add(new cMenuEditBoolItem(tr("Show Timer Conflicts"), &tmpNopacityConfig->checkTimerConflict));
-    Add(new cMenuEditIntItem(tr("Header Logo Width"), &tmpNopacityConfig->menuHeaderLogoWidth, 30, 500));
-    Add(new cMenuEditIntItem(tr("Header Logo Height"), &tmpNopacityConfig->menuHeaderLogoHeight, 30, 500));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Items"), &tmpNopacityConfig->fontMenuitemLarge, -20, 20));
-    
+    Add(new cMenuEditBoolItem(tr("Show Timer Conflicts"), tmpConf->GetValueRef("checkTimerConflict")));
+    Add(new cMenuEditIntItem(tr("Header Logo Width"), tmpConf->GetValueRef("menuHeaderLogoWidth"), 30, 500));
+    Add(new cMenuEditIntItem(tr("Header Logo Height"), tmpConf->GetValueRef("menuHeaderLogoHeight"), 30, 500));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Items"), tmpConf->GetValueRef("fontMenuitemLarge"), -20, 20));
+
     SetCurrent(Get(currentItem));
     Display();
 }
@@ -309,13 +225,12 @@ void cNopacitySetupMenuDisplayMain::Set(void) {
 //-----MenuDisplay Schedules Menu -------------------------------------------------------------------------------------------------------------
 
 cNopacitySetupMenuDisplaySchedules::cNopacitySetupMenuDisplaySchedules(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("VDR Menu: Schedules Menu"), data) {
-    useSubtitleRerunTexts[0] = tr("never");
-    useSubtitleRerunTexts[1] = tr("if exists");
-    useSubtitleRerunTexts[2] = tr("always");
     scrollSpeed[0] = tr("off");
     scrollSpeed[1] = tr("slow");
     scrollSpeed[2] = tr("medium");
     scrollSpeed[3] = tr("fast");
+    windowMode[0] = tr("window");
+    windowMode[1] = tr("full screen");
     Set();
 }
 
@@ -323,34 +238,21 @@ void cNopacitySetupMenuDisplaySchedules::Set(void) {
     int currentItem = Current();
     Clear();
 
-    Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowScheduleMenu));
-    if (tmpNopacityConfig->narrowScheduleMenu)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthSchedules, 10, 100));
-    Add(new cMenuEditIntItem(tr("Channel Logo Width"), &tmpNopacityConfig->menuItemLogoWidth, 30, 200));
-    Add(new cMenuEditIntItem(tr("Channel Logo Height"), &tmpNopacityConfig->menuItemLogoHeight, 30, 200));
-    Add(new cMenuEditIntItem(tr("EPG Window Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->menuEPGWindowFadeTime, 0, 1000));
-    Add(new cMenuEditIntItem(tr("EPG Window Display Delay in s"), &tmpNopacityConfig->menuInfoTextDelay, 0, 10));
-    Add(new cMenuEditIntItem(tr("EPG Window Scroll Delay in s"), &tmpNopacityConfig->menuInfoScrollDelay, 0, 10));
-    Add(new cMenuEditStraItem(tr("EPG Window Text Scrolling Speed"), &tmpNopacityConfig->menuInfoScrollSpeed, 4, scrollSpeed));
-    Add(new cMenuEditIntItem(tr("Height of EPG Info Window (Percent of OSD Height)"), &tmpNopacityConfig->menuHeightInfoWindow, 10, 100));
-    Add(new cMenuEditBoolItem(tr("Display Reruns in detailed EPG View"), &tmpNopacityConfig->displayRerunsDetailEPGView));
-    if (tmpNopacityConfig->displayRerunsDetailEPGView) {
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Number of reruns to display")), &tmpNopacityConfig->numReruns, 1, 10));
-        Add(new cMenuEditStraItem(cString::sprintf("%s%s", *spacer, tr("Use Subtitle for reruns")), &tmpNopacityConfig->useSubtitleRerun, 3, useSubtitleRerunTexts));
-    }
-    Add(new cMenuEditBoolItem(tr("Display additional EPG Pictures in detailed EPG View"), &tmpNopacityConfig->displayAdditionalEPGPictures));
-    if (tmpNopacityConfig->displayAdditionalEPGPictures)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Number of EPG pictures to display")), &tmpNopacityConfig->numAdditionalEPGPictures, 1, 9));
-    Add(new cMenuEditIntItem(tr("Detail EPG View Logo Width"), &tmpNopacityConfig->detailViewLogoWidth, 30, 500));
-    Add(new cMenuEditIntItem(tr("Detail EPG View Logo Height"), &tmpNopacityConfig->detailViewLogoHeight, 30, 500));
-    Add(new cMenuEditIntItem(tr("Detail EPG View EPG Image Width"), &tmpNopacityConfig->epgImageWidth, 30, 500));
-    Add(new cMenuEditIntItem(tr("Detail EPG View EPG Image Height"), &tmpNopacityConfig->epgImageHeight, 30, 500));
-    Add(new cMenuEditIntItem(tr("Detail EPG View additional EPG Image Width"), &tmpNopacityConfig->epgImageWidthLarge, 100, 800));
-    Add(new cMenuEditIntItem(tr("Detail EPG View additional EPG Image Height"), &tmpNopacityConfig->epgImageHeightLarge, 100, 800));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemSchedule, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemScheduleSmall, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Info Window"), &tmpNopacityConfig->fontEPGInfoWindow, -20, 20));
-    
+    Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowScheduleMenu")));
+    if (tmpConf->GetValue("narrowScheduleMenu"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthSchedules"), 10, 97));
+    Add(new cMenuEditIntItem(tr("Number of entires per page"), tmpConf->GetValueRef("numSchedulesMenuItems"), 3, 20));
+    Add(new cMenuEditStraItem(tr("Mode of EPG Window"), tmpConf->GetValueRef("menuSchedulesWindowMode"), 2, windowMode));
+    Add(new cMenuEditIntItem(tr("EPG Window Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("menuEPGWindowFadeTime"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("EPG Window Display Delay in s"), tmpConf->GetValueRef("menuInfoTextDelay"), 0, 10));
+    Add(new cMenuEditIntItem(tr("EPG Window Scroll Delay in s"), tmpConf->GetValueRef("menuInfoScrollDelay"), 0, 10));
+    Add(new cMenuEditStraItem(tr("EPG Window Text Scrolling Speed"), tmpConf->GetValueRef("menuInfoScrollSpeed"), 4, scrollSpeed));
+    Add(new cMenuEditIntItem(tr("Height of EPG Info Window (Percent of OSD Height)"), tmpConf->GetValueRef("menuHeightInfoWindow"), 10, 100));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemSchedule"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemScheduleSmall"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Info Window"), tmpConf->GetValueRef("fontEPGInfoWindow"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Info Window Header"), tmpConf->GetValueRef("fontEPGInfoWindowLarge"), -20, 20));
+
     SetCurrent(Get(currentItem));
     Display();
 }
@@ -358,19 +260,27 @@ void cNopacitySetupMenuDisplaySchedules::Set(void) {
 //-----MenuDisplay Channels Menu -------------------------------------------------------------------------------------------------------------
 
 cNopacitySetupMenuDisplayChannels::cNopacitySetupMenuDisplayChannels(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("VDR Menu: Channels Menu"), data) {
+    displayModes[0] = tr("Transponder Information");
+    displayModes[1] = tr("Current Schedule");
+    displayModes[2] = tr("Plain Channels");
     Set();
 }
 
 void cNopacitySetupMenuDisplayChannels::Set(void) {
     int currentItem = Current();
     Clear();
-    
-    Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowChannelMenu));
-    if (tmpNopacityConfig->narrowChannelMenu)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthChannels, 10, 100));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemChannel, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemChannelSmall, -20, 20));
-   
+
+    Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowChannelMenu")));
+    if (tmpConf->GetValue("narrowChannelMenu"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthChannels"), 10, 97));
+    Add(new cMenuEditStraItem(tr("Menu Items display mode"), tmpConf->GetValueRef("menuChannelDisplayMode"), 3, displayModes));
+    if (tmpConf->GetValue("menuChannelDisplayMode") == 1) {
+        Add(new cMenuEditBoolItem(cString::sprintf("%s%s", *spacer, tr("Display schedules with time info")), tmpConf->GetValueRef("menuChannelDisplayTime")));
+    }
+    Add(new cMenuEditIntItem(tr("Number of EPG Entries in Schedules Info Window"), tmpConf->GetValueRef("numEPGEntriesChannelsMenu"), 1, 100));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemChannel"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemChannelSmall"), -20, 20));
+
     SetCurrent(Get(currentItem));
     Display();
 }
@@ -378,19 +288,22 @@ void cNopacitySetupMenuDisplayChannels::Set(void) {
 //-----MenuDisplay Timers Menu -------------------------------------------------------------------------------------------------------------
 
 cNopacitySetupMenuDisplayTimers::cNopacitySetupMenuDisplayTimers(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("VDR Menu: Timers Menu"), data) {
+    windowMode[0] = tr("window");
+    windowMode[1] = tr("full screen");
     Set();
 }
 
 void cNopacitySetupMenuDisplayTimers::Set(void) {
     int currentItem = Current();
     Clear();
-    
-    Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowTimerMenu));
-    if (tmpNopacityConfig->narrowTimerMenu)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthTimers, 10, 100));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemTimers, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemTimersSmall, -20, 20));
-   
+
+    Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowTimerMenu")));
+    if (tmpConf->GetValue("narrowTimerMenu"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthTimers"), 10, 97));
+    Add(new cMenuEditStraItem(tr("Mode of EPG Window"), tmpConf->GetValueRef("menuTimersWindowMode"), 2, windowMode));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemTimers"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemTimersSmall"), -20, 20));
+
     SetCurrent(Get(currentItem));
     Display();
 }
@@ -398,22 +311,57 @@ void cNopacitySetupMenuDisplayTimers::Set(void) {
 //-----MenuDisplay Recordings Menu -------------------------------------------------------------------------------------------------------------
 
 cNopacitySetupMenuDisplayRecordings::cNopacitySetupMenuDisplayRecordings(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("VDR Menu: Recordings Menu"), data) {
+    displayEPGPictures[0] = tr("never");
+    displayEPGPictures[1] = tr("always");
+    displayEPGPictures[2] = tr("only if no tvscraper media available");
+    windowMode[0] = tr("window");
+    windowMode[1] = tr("full screen");
     Set();
 }
 
 void cNopacitySetupMenuDisplayRecordings::Set(void) {
     int currentItem = Current();
     Clear();
-    
-    Add(new cMenuEditBoolItem(tr("Use narrow menu"), &tmpNopacityConfig->narrowRecordingMenu));
-    if (tmpNopacityConfig->narrowRecordingMenu)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), &tmpNopacityConfig->menuWidthRecordings, 10, 100));
-    Add(new cMenuEditBoolItem(tr("Display additional EPG Pictures in detailed recording View"), &tmpNopacityConfig->displayAdditionalRecEPGPictures));
-    if (tmpNopacityConfig->displayAdditionalRecEPGPictures)
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Number of EPG pictures to display")), &tmpNopacityConfig->numAdditionalRecEPGPictures, 1, 9));
-    Add(new cMenuEditIntItem(tr("Folder Icon Size"), &tmpNopacityConfig->menuRecFolderSize, 30, 300));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), &tmpNopacityConfig->fontMenuitemRecordings, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), &tmpNopacityConfig->fontMenuitemRecordingsSmall, -20, 20));
+
+    Add(new cMenuEditBoolItem(tr("Use narrow menu"), tmpConf->GetValueRef("narrowRecordingMenu")));
+    if (tmpConf->GetValue("narrowRecordingMenu"))
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Width (Percent of OSD Width)")), tmpConf->GetValueRef("menuWidthRecordings"), 10, 97));
+    Add(new cMenuEditIntItem(tr("Number of entires per page"), tmpConf->GetValueRef("numRecordingsMenuItems"), 3, 20));
+    Add(new cMenuEditStraItem(tr("Mode of recording Window"), tmpConf->GetValueRef("menuRecordingsWindowMode"), 2, windowMode));
+    Add(new cMenuEditIntItem(tr("Border around detailed recording view"), tmpConf->GetValueRef("borderDetailedRecordings"), 1, 300));
+    Add(new cMenuEditBoolItem(tr("Use folder poster if available"), tmpConf->GetValueRef("useFolderPoster")));
+    Add(new cMenuEditIntItem(tr("Width of manually set recording poster"), tmpConf->GetValueRef("posterWidth"), 100, 1000));
+    Add(new cMenuEditIntItem(tr("Height of manually set recording poster"), tmpConf->GetValueRef("posterHeight"), 100, 1000));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item"), tmpConf->GetValueRef("fontMenuitemRecordings"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Menu Item Small"), tmpConf->GetValueRef("fontMenuitemRecordingsSmall"), -20, 20));
+
+    SetCurrent(Get(currentItem));
+    Display();
+}
+
+//-----MenuDisplay Detailed EPG & Recordings View -------------------------------------------------------------------------------------------------------------
+
+cNopacitySetupDetailedView::cNopacitySetupDetailedView(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("VDR Menu: Detailed EPG & Recordings View"), data) {
+    useSubtitleRerunTexts[0] = tr("never");
+    useSubtitleRerunTexts[1] = tr("if exists");
+    useSubtitleRerunTexts[2] = tr("always");
+    Set();
+}
+
+void cNopacitySetupDetailedView::Set(void) {
+    int currentItem = Current();
+    Clear();
+
+    Add(new cMenuEditIntItem(tr("Border around view"), tmpConf->GetValueRef("borderDetailedEPG"), 1, 300));
+    Add(new cMenuEditIntItem(tr("Scroll Speed with up / down (number of lines)"), tmpConf->GetValueRef("detailedViewScrollStep"), 1, 30));
+    Add(new cMenuEditIntItem(tr("Header Height detailed EPG view (Perc. of OSD Height)"), tmpConf->GetValueRef("headerDetailedEPG"), 10, 50));
+    Add(new cMenuEditIntItem(tr("Header Height detailed recording view (Perc. of OSD Height)"), tmpConf->GetValueRef("headerDetailedRecordings"), 10, 50));
+    Add(new cMenuEditIntItem(tr("Number of reruns to display"), tmpConf->GetValueRef("numReruns"), 1, 10));
+    Add(new cMenuEditStraItem(tr("Use Subtitle for reruns"), tmpConf->GetValueRef("useSubtitleRerun"), 3, useSubtitleRerunTexts));
+    Add(new cMenuEditIntItem(tr("EPG Image Width"), tmpConf->GetValueRef("epgImageWidth"), 30, 500));
+    Add(new cMenuEditIntItem(tr("EPG Image Height"), tmpConf->GetValueRef("epgImageHeight"), 30, 500));
+    Add(new cMenuEditIntItem(tr("Large EPG Image Width"), tmpConf->GetValueRef("epgImageWidthLarge"), 100, 800));
+    Add(new cMenuEditIntItem(tr("Large EPG Image Height"), tmpConf->GetValueRef("epgImageHeightLarge"), 100, 800));
 
     SetCurrent(Get(currentItem));
     Display();
@@ -422,9 +370,14 @@ void cNopacitySetupMenuDisplayRecordings::Set(void) {
 //----ChannelDisplay--------------------------------------------------------------------------------------------------------------
 
 cNopacitySetupChannelDisplay::cNopacitySetupChannelDisplay(cNopacityConfig* data)  : cMenuSetupSubMenu(tr("Channel Switching"), data) {
+    bgStyle[0] = tr("transparent channel logo");
+    bgStyle[1] = tr("full osd width");
     logoPos[0] = tr("do not display");
     logoPos[1] = tr("left");
     logoPos[2] = tr("right");
+    logoVerticalPos[0] = tr("top");
+    logoVerticalPos[1] = tr("middle");
+    logoVerticalPos[2] = tr("bottom");
     progressStyleCurrentSchedule[0] = tr("show elapsed time");
     progressStyleCurrentSchedule[1] = tr("show remaining time");
     Set();
@@ -433,25 +386,37 @@ cNopacitySetupChannelDisplay::cNopacitySetupChannelDisplay(cNopacityConfig* data
 void cNopacitySetupChannelDisplay::Set(void) {
     int currentItem = Current();
     Clear();
-
-    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->channelFadeTime, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Height of Channel Display (Percent of OSD Height)"), &tmpNopacityConfig->channelHeight, 15, 100));
-    Add(new cMenuEditIntItem(tr("Left & Right Border Width"), &tmpNopacityConfig->channelBorderVertical, 0, 300));
-    Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->channelBorderBottom, 0, 300));
-    Add(new cMenuEditStraItem(tr("Channel Logo Position"), &tmpNopacityConfig->logoPosition, 3, logoPos));
-    if (tmpNopacityConfig->logoPosition) {
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Width")), &tmpNopacityConfig->logoWidth, 30, 500));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Height")), &tmpNopacityConfig->logoHeight, 30, 500));
-        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo Border")), &tmpNopacityConfig->logoBorder, 0, 200));
+    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("channelFadeTime"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Height of Channel Display (Percent of OSD Height)"), tmpConf->GetValueRef("channelHeight"), 15, 80));
+    Add(new cMenuEditIntItem(tr("Left & Right Border Width"), tmpConf->GetValueRef("channelBorderVertical"), 0, 300));
+    Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("channelBorderBottom"), 0, 300));
+    Add(new cMenuEditIntItem(tr("Background Transparency in Percent"), tmpConf->GetValueRef("channelBackgroundTransparency"), 0, 80));
+    if (config.GetValue("displayType") != dtGraphical) {
+        Add(new cMenuEditStraItem(tr("Background Style"), tmpConf->GetValueRef("backgroundStyle"), 2, bgStyle));
+        Add(new cMenuEditBoolItem(tr("Rounded Corners"), tmpConf->GetValueRef("roundedCornersChannel")));
+    }
+    Add(new cMenuEditStraItem(tr("Vertical Channel Logo Alignment"), tmpConf->GetValueRef("logoVerticalAlignment"), 3, logoVerticalPos));
+    Add(new cMenuEditStraItem(tr("Channel Logo Position"), tmpConf->GetValueRef("logoPosition"), 3, logoPos));
+    if (tmpConf->GetValue("logoPosition")) {
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo original Width")), tmpConf->GetValueRef("logoWidthOriginal"), 30, 500));
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Channel Logo original Height")), tmpConf->GetValueRef("logoHeightOriginal"), 30, 500));
+        Add(new cMenuEditBoolItem(cString::sprintf("%s%s", *spacer, tr("Use Channel Logo background")), tmpConf->GetValueRef("channelUseLogoBackground")));
+    }
+    Add(new cMenuEditStraItem(tr("Kind of time display for current schedule"), tmpConf->GetValueRef("progressCurrentSchedule"), 2, progressStyleCurrentSchedule));
+    Add(new cMenuEditBoolItem(tr("Display Signal Strength & Quality"), tmpConf->GetValueRef("displaySignalStrength")));
+    Add(new cMenuEditBoolItem(tr("Display Channel Source & Rec. Info"), tmpConf->GetValueRef("displaySourceInfo")));
+    Add(new cMenuEditBoolItem(tr("Display Poster or Fanart from TVScraper"), tmpConf->GetValueRef("displayPoster")));
+    if (tmpConf->GetValue("displayPoster")) {
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Border in Pixel")), tmpConf->GetValueRef("channelPosterBorder"), 0, 200));
     }
-    Add(new cMenuEditStraItem(tr("Kind of time display for current schedule"), &tmpNopacityConfig->progressCurrentSchedule, 2, progressStyleCurrentSchedule));
-    Add(new cMenuEditBoolItem(tr("Display Signal Strength & Quality"), &tmpNopacityConfig->displaySignalStrength));
-    Add(new cMenuEditIntItem(tr("Screen Resolution Icon Size"), &tmpNopacityConfig->resolutionIconSize, 30, 200));
-    Add(new cMenuEditIntItem(tr("Status Icons Size"), &tmpNopacityConfig->statusIconSize, 30, 150));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontChannelHeaderSize, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), &tmpNopacityConfig->fontChannelDateSize, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Text"), &tmpNopacityConfig->fontEPGSize, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Infotext"), &tmpNopacityConfig->fontEPGSmallSize, -20, 20));
+    Add(new cMenuEditBoolItem(tr("Display previous and next Channel Group"), tmpConf->GetValueRef("displayPrevNextChannelGroup")));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontChannelHeaderSize"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Date"), tmpConf->GetValueRef("fontChannelDateSize"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Text"), tmpConf->GetValueRef("fontEPGSize"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - EPG Infotext"), tmpConf->GetValueRef("fontEPGSmallSize"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Channel Source Info"), tmpConf->GetValueRef("fontChannelSourceInfoSize"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Channel Group"), tmpConf->GetValueRef("fontChannelGroupSize"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Next/Prev Channel Group"), tmpConf->GetValueRef("fontChannelGroupSmallSize"), -20, 20));
     SetCurrent(Get(currentItem));
     Display();
 }
@@ -466,12 +431,12 @@ void cNopacitySetupReplayDisplay::Set(void) {
     int currentItem = Current();
     Clear();
 
-    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->replayFadeTime, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Height of Replay Display (Percent of OSD Height)"), &tmpNopacityConfig->replayHeight, 15, 100));
-    Add(new cMenuEditIntItem(tr("Left & Right Border Width"), &tmpNopacityConfig->replayBorderVertical, 0, 300));
-    Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->replayBorderBottom, 0, 300));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontReplayHeader, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Text"), &tmpNopacityConfig->fontReplay, -20, 20));
+    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("replayFadeTime"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Height of Replay Display (Percent of OSD Height)"), tmpConf->GetValueRef("replayHeight"), 15, 80));
+    Add(new cMenuEditIntItem(tr("Left & Right Border Width"), tmpConf->GetValueRef("replayBorderVertical"), 0, 300));
+    Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("replayBorderBottom"), 0, 300));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontReplayHeader"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Text"), tmpConf->GetValueRef("fontReplay"), -20, 20));
 
     SetCurrent(Get(currentItem));
     Display();
@@ -486,14 +451,14 @@ cNopacitySetupTrackDisplay::cNopacitySetupTrackDisplay(cNopacityConfig* data)  :
 void cNopacitySetupTrackDisplay::Set(void) {
     int currentItem = Current();
     Clear();
-    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->tracksFadeTime, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Width of Tracks Display (Percent of OSD Width)"), &tmpNopacityConfig->tracksWidth, 10, 100));
-    Add(new cMenuEditIntItem(tr("Height of Track Items (in pixels)"), &tmpNopacityConfig->tracksItemHeight, 30, 200));
-    Add(new cMenuEditIntItem(tr("Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"), &tmpNopacityConfig->tracksPosition, 0, 7));
-    Add(new cMenuEditIntItem(tr("Border Top / Bottom"), &tmpNopacityConfig->tracksBorderHorizontal, 0, 100));
-    Add(new cMenuEditIntItem(tr("Border Left / Right"), &tmpNopacityConfig->tracksBorderVertical, 0, 100));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), &tmpNopacityConfig->fontTracksHeader, -20, 20));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size - Buttons"), &tmpNopacityConfig->fontTracks, -20, 20));
+    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("tracksFadeTime"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Width of Tracks Display (Percent of OSD Width)"), tmpConf->GetValueRef("tracksWidth"), 10, 100));
+    Add(new cMenuEditIntItem(tr("Height of Track Items (in pixels)"), tmpConf->GetValueRef("tracksItemHeight"), 30, 200));
+    Add(new cMenuEditIntItem(tr("Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"), tmpConf->GetValueRef("tracksPosition"), 0, 7));
+    Add(new cMenuEditIntItem(tr("Border Left / Right"), tmpConf->GetValueRef("tracksBorderHorizontal"), 0, 100));
+    Add(new cMenuEditIntItem(tr("Border Top / Bottom"), tmpConf->GetValueRef("tracksBorderVertical"), 0, 100));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Header"), tmpConf->GetValueRef("fontTracksHeader"), -20, 20));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size - Buttons"), tmpConf->GetValueRef("fontTracks"), -20, 20));
 
     SetCurrent(Get(currentItem));
     Display();
@@ -509,11 +474,11 @@ void cNopacitySetupMessageDisplay::Set(void) {
     int currentItem = Current();
     Clear();
 
-    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->messageFadeTime, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Width of Message Display (Percent of OSD Height)"), &tmpNopacityConfig->messageWidth, 30, 100));
-    Add(new cMenuEditIntItem(tr("Height of Message Display (Percent of OSD Height)"), &tmpNopacityConfig->messageHeight, 5, 100));
-    Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->messageBorderBottom, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size"), &tmpNopacityConfig->fontMessage, -30, 30));
+    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("messageFadeTime"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Width of Message Display (Percent of OSD Height)"), tmpConf->GetValueRef("messageWidth"), 30, 100));
+    Add(new cMenuEditIntItem(tr("Height of Message Display (Percent of OSD Height)"), tmpConf->GetValueRef("messageHeight"), 5, 100));
+    Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("messageBorderBottom"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size"), tmpConf->GetValueRef("fontMessage"), -30, 30));
 
     SetCurrent(Get(currentItem));
     Display();
@@ -528,13 +493,41 @@ cNopacitySetupVolumeDisplay::cNopacitySetupVolumeDisplay(cNopacityConfig* data)
 void cNopacitySetupVolumeDisplay::Set(void) {
     int currentItem = Current();
     Clear();
-
-    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), &tmpNopacityConfig->volumeFadeTime, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Width of Volume Display (Percent of OSD Height)"), &tmpNopacityConfig->volumeWidth, 10, 100));
-    Add(new cMenuEditIntItem(tr("Height of Volume Display (Percent of OSD Height)"), &tmpNopacityConfig->volumeHeight, 5, 100));
-    Add(new cMenuEditIntItem(tr("Bottom Border Height"), &tmpNopacityConfig->volumeBorderBottom, 0, 1000));
-    Add(new cMenuEditIntItem(tr("Adjust Font Size"), &tmpNopacityConfig->fontVolume, -30, 30));
+    Add(new cMenuEditIntItem(tr("Fade-In Time in ms (Zero for switching off fading)"), tmpConf->GetValueRef("volumeFadeTime"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Width of Volume Display (Percent of OSD Height)"), tmpConf->GetValueRef("volumeWidth"), 10, 100));
+    Add(new cMenuEditIntItem(tr("Height of Volume Display (Percent of OSD Height)"), tmpConf->GetValueRef("volumeHeight"), 5, 100));
+    Add(new cMenuEditIntItem(tr("Bottom Border Height"), tmpConf->GetValueRef("volumeBorderBottom"), 0, 1000));
+    Add(new cMenuEditIntItem(tr("Adjust Font Size"), tmpConf->GetValueRef("fontVolume"), -30, 30));
 
     SetCurrent(Get(currentItem));
     Display();
 }
+
+//-----Image Caching-------------------------------------------------------------------------------------------------------------
+
+cNopacitySetupCaching::cNopacitySetupCaching(cNopacityConfig* data, cImageCache *imgCache)  : cMenuSetupSubMenu(tr("Image Caching"), data) {
+    this->imgCache = imgCache;
+    Set();
+}
+
+void cNopacitySetupCaching::Set(void) {
+    int currentItem = Current();
+    Clear();
+
+    Add(new cMenuEditBoolItem(tr("Limit Logo Cache"), tmpConf->GetValueRef("limitLogoCache")));
+    if (tmpConf->GetValue("limitLogoCache")) {
+        Add(new cMenuEditIntItem(cString::sprintf("%s%s", *spacer, tr("Maximal number of logos to cache")), tmpConf->GetValueRef("numLogosMax"), 1, 9999));
+    }
+    Add(new cMenuEditIntItem(tr("Number of  logos to cache at start"), tmpConf->GetValueRef("numLogosInitial"), 0, 9999));
+
+    Add(InfoItem(tr("Cache Sizes"), ""));
+    Add(InfoItem(tr("Menu Icon cache"), (imgCache->GetCacheSize(ctMenuIcon)).c_str()));
+    Add(InfoItem(tr("Skin Icon image cache"), (imgCache->GetCacheSize(ctSkinIcon)).c_str()));
+    Add(InfoItem(tr("Logo cache"), (imgCache->GetCacheSize(ctLogo)).c_str()));
+    Add(InfoItem(tr("Menu Item Logo cache"), (imgCache->GetCacheSize(ctLogoMenuItem)).c_str()));
+    Add(InfoItem(tr("Timer Logo cache"), (imgCache->GetCacheSize(ctLogoTimer)).c_str()));
+    Add(InfoItem(tr("Background Images cache"), (imgCache->GetCacheSize(ctSkinElement)).c_str()));
+
+    SetCurrent(Get(currentItem));
+    Display();
+}
\ No newline at end of file
diff --git a/setup.h b/setup.h
index 051fa66..e4da4e1 100644
--- a/setup.h
+++ b/setup.h
@@ -1,12 +1,16 @@
 #ifndef __NOPACITY_SETUP_H
 #define __NOPACITY_SETUP_H
 
+#include "config.h"
+#include "imagecache.h"
+
 class cNopacitySetup : public cMenuSetupPage {
     public:
-        cNopacitySetup(void);
-        virtual ~cNopacitySetup();      
+        cNopacitySetup(cImageCache *imgCache);
+        virtual ~cNopacitySetup();
     private:
-        cNopacityConfig tmpNopacityConfig;
+        cNopacityConfig tmpConf;
+        cImageCache *imgCache;
         cStringList fontNames;
         void Setup(void);
     protected:
@@ -18,7 +22,7 @@ class cNopacitySetup : public cMenuSetupPage {
 
 class cMenuSetupSubMenu : public cOsdMenu {
     protected:
-        cNopacityConfig *tmpNopacityConfig;
+        cNopacityConfig *tmpConf;
         cString spacer;
         virtual eOSState ProcessKey(eKeys Key);
         virtual void Set(void) = 0;
@@ -30,7 +34,9 @@ class cMenuSetupSubMenu : public cOsdMenu {
 class cNopacitySetupMenuDisplay : public cMenuSetupSubMenu {
     protected:
         const char *adjustLeft[2];
+        const char *scrollMode[2];
         const char *scrollSpeed[4];
+        const char *scalePic[3];
         void Set(void);
     public:
         cNopacitySetupMenuDisplay(cNopacityConfig *data);
@@ -39,6 +45,8 @@ class cNopacitySetupMenuDisplay : public cMenuSetupSubMenu {
 class cNopacitySetupMenuDisplayMain : public cMenuSetupSubMenu {
     protected:
         const char *titleStyle[3];
+        const char *discUsageStyle[2];
+        const char *showTimers[3];
         void Set(void);
     public:
         cNopacitySetupMenuDisplayMain(cNopacityConfig *data);
@@ -46,8 +54,8 @@ class cNopacitySetupMenuDisplayMain : public cMenuSetupSubMenu {
 
 class cNopacitySetupMenuDisplaySchedules : public cMenuSetupSubMenu {
     protected:
-        const char *useSubtitleRerunTexts[3];
         const char *scrollSpeed[4];
+        const char *windowMode[2];
         void Set(void);
     public:
         cNopacitySetupMenuDisplaySchedules(cNopacityConfig *data);
@@ -55,6 +63,7 @@ class cNopacitySetupMenuDisplaySchedules : public cMenuSetupSubMenu {
 
 class cNopacitySetupMenuDisplayChannels : public cMenuSetupSubMenu {
     protected:
+        const char *displayModes[3];
         void Set(void);
     public:
         cNopacitySetupMenuDisplayChannels(cNopacityConfig *data);
@@ -62,6 +71,7 @@ class cNopacitySetupMenuDisplayChannels : public cMenuSetupSubMenu {
 
 class cNopacitySetupMenuDisplayTimers : public cMenuSetupSubMenu {
     protected:
+        const char *windowMode[2];
         void Set(void);
     public:
         cNopacitySetupMenuDisplayTimers(cNopacityConfig *data);
@@ -69,15 +79,27 @@ class cNopacitySetupMenuDisplayTimers : public cMenuSetupSubMenu {
 
 class cNopacitySetupMenuDisplayRecordings : public cMenuSetupSubMenu {
     protected:
+        const char *displayEPGPictures[3];
+        const char *windowMode[2];
         void Set(void);
     public:
         cNopacitySetupMenuDisplayRecordings(cNopacityConfig *data);
 };
 
+class cNopacitySetupDetailedView : public cMenuSetupSubMenu {
+    protected:
+        const char *useSubtitleRerunTexts[3];
+        void Set(void);
+    public:
+        cNopacitySetupDetailedView(cNopacityConfig *data);
+};
+
 class cNopacitySetupChannelDisplay : public cMenuSetupSubMenu {
     protected:
         const char *logoPos[3];
+        const char *logoVerticalPos[3];
         const char *progressStyleCurrentSchedule[2];
+        const char *bgStyle[2];
         void Set(void);
     public:
         cNopacitySetupChannelDisplay(cNopacityConfig *data);
@@ -110,4 +132,12 @@ class cNopacitySetupVolumeDisplay : public cMenuSetupSubMenu {
     public:
         cNopacitySetupVolumeDisplay(cNopacityConfig *data);
 };
+
+class cNopacitySetupCaching : public cMenuSetupSubMenu {
+    protected:
+        cImageCache *imgCache;
+        void Set(void);
+    public:
+        cNopacitySetupCaching(cNopacityConfig *data, cImageCache *imgCache);
+};
 #endif //__NOPACITY_SETUP_H
\ No newline at end of file
diff --git a/skinnopacity.c b/skinnopacity.c
index de87064..9ed34af 100644
--- a/skinnopacity.c
+++ b/skinnopacity.c
@@ -8,19 +8,25 @@
 #include <getopt.h>
 #include <vdr/plugin.h>
 
-#include "nopacity.c"
+#define DEFINE_CONFIG 1
+#include "config.h"
+#include "nopacity.h"
+#include "setup.h"
+
 
 #if defined(APIVERSNUM) && APIVERSNUM < 10734
 #error "VDR-1.7.34 API version or greater is required!"
 #endif
 
 
-static const char *VERSION        = "0.1.0";
+static const char *VERSION        = "1.1.3";
 static const char *DESCRIPTION    = "'nOpacity' Skin";
 static const char *MAINMENUENTRY  = "nOpacity";
 
 class cPluginNopacity : public cPlugin {
 private:
+  cNopacity *nopacity;
+  cImageCache *imgCache;
 public:
   cPluginNopacity(void);
   virtual ~cPluginNopacity();
@@ -46,6 +52,7 @@ public:
 
 cPluginNopacity::cPluginNopacity(void)
 {
+  nopacity = NULL;
 }
 
 cPluginNopacity::~cPluginNopacity()
@@ -54,14 +61,13 @@ cPluginNopacity::~cPluginNopacity()
 
 const char *cPluginNopacity::CommandLineHelp(void)
 {
-  return 
+  return
          "  -e <EPGIMAGESPATH>, --epgimages=<IMAGESPATH> Set directory where epgimages are stored\n"
          "  -i <ICONSPATH>, --iconpath=<ICONSPATH> Set directory where Menu Icons are stored\n"
          "  -l <LOGOPATH>, --logopath=<LOGOPATH>       Set directory where Channel Logos are stored.\n";
 }
 
-bool cPluginNopacity::ProcessArgs(int argc, char *argv[])
-{
+bool cPluginNopacity::ProcessArgs(int argc, char *argv[]) {
   // Implement command line argument processing here if applicable.
   static const struct option long_options[] = {
     { "epgimages", required_argument, NULL, 'e' },
@@ -71,95 +77,82 @@ bool cPluginNopacity::ProcessArgs(int argc, char *argv[])
   };
 
   int c;
-  cString *path = NULL;
   while ((c = getopt_long(argc, argv, "e:l:i:", long_options, NULL)) != -1) {
     switch (c) {
       case 'l':
-        path = new cString(optarg);
-        config.SetLogoPath(*path);
+        config.SetLogoPath(cString(optarg));
         break;
       case 'e':
-        path = new cString(optarg);
-        config.SetEpgImagePath(*path);
+        config.SetEpgImagePath(cString(optarg));
         break;
       case 'i':
-        path = new cString(optarg);
-        config.SetIconPath(*path);
+        config.SetIconPath(cString(optarg));
         break;
       default:
         return false;
     }
-    if (path) 
-        delete path;
   }
   return true;
 }
 
-bool cPluginNopacity::Initialize(void)
-{
+bool cPluginNopacity::Initialize(void) {
   return true;
 }
 
-bool cPluginNopacity::Start(void)
-{
+bool cPluginNopacity::Start(void) {
     if (!cOsdProvider::SupportsTrueColor()) {
         esyslog("nopacity: No TrueColor OSD found! Aborting!");
         return false;
     } else
         dsyslog("nopacity: TrueColor OSD found");
-  return new cNopacity;
+
+    imgCache = new cImageCache();
+    nopacity = new cNopacity(imgCache);
+    return nopacity;
 }
 
-void cPluginNopacity::Stop(void)
-{
+void cPluginNopacity::Stop(void) {
+    delete imgCache;
+    delete geoManager;
+    delete fontManager;
 }
 
-void cPluginNopacity::Housekeeping(void)
-{
+void cPluginNopacity::Housekeeping(void) {
 }
 
-void cPluginNopacity::MainThreadHook(void)
-{
+void cPluginNopacity::MainThreadHook(void) {
 }
 
-cString cPluginNopacity::Active(void)
-{
+cString cPluginNopacity::Active(void) {
   return NULL;
 }
 
-time_t cPluginNopacity::WakeupTime(void)
-{
+time_t cPluginNopacity::WakeupTime(void) {
   return 0;
 }
 
-cOsdObject *cPluginNopacity::MainMenuAction(void)
-{
+cOsdObject *cPluginNopacity::MainMenuAction(void) {
   return NULL;
 }
 
-cMenuSetupPage *cPluginNopacity::SetupMenu(void)
-{
-  return new cNopacitySetup();
+cMenuSetupPage *cPluginNopacity::SetupMenu(void) {
+  return new cNopacitySetup(imgCache);
 }
 
-bool cPluginNopacity::SetupParse(const char *Name, const char *Value)
-{
+bool cPluginNopacity::SetupParse(const char *Name, const char *Value) {
   return config.SetupParse(Name, Value);
 }
 
-bool cPluginNopacity::Service(const char *Id, void *Data)
-{
+bool cPluginNopacity::Service(const char *Id, void *Data) {
   return false;
 }
 
-const char **cPluginNopacity::SVDRPHelpPages(void)
-{
-  return NULL;
+const char **cPluginNopacity::SVDRPHelpPages(void) {
+    return NULL;
 }
 
-cString cPluginNopacity::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
-{
-  return NULL;
+cString cPluginNopacity::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) {
+    return NULL;
 }
 
 VDRPLUGINCREATOR(cPluginNopacity); // Don't touch this!
diff --git a/textwindow.c b/textwindow.c
index 26e4134..efe5dcd 100644
--- a/textwindow.c
+++ b/textwindow.c
@@ -1,10 +1,38 @@
 #include "textwindow.h"
+#include "config.h"
+#include "imagecache.h"
+#include "imageloader.h"
+#include "helpers.h"
+#include <sstream>
 
-cNopacityTextWindow::cNopacityTextWindow(cOsd *osd, cFont *font) {
+cNopacityTextWindow::cNopacityTextWindow(cOsd *osd, cFont *font, cRect *vidWin) {
     this->osd = osd;
     this->font = font;
+    this->fontHeader = NULL;
+    this->vidWin = vidWin;
     pixmapBackground = NULL;
     pixmap = NULL;
+    scaledWindow = false;
+    posterWidth = 0;
+    posterHeight = 0;
+    hasManualPoster = false;
+    manualPosterPath = "";
+    hasPoster = false;
+}
+
+cNopacityTextWindow::cNopacityTextWindow(cOsd *osd, cFont *font, cFont *fontHeader) {
+    this->osd = osd;
+    this->font = font;
+    this->fontHeader = fontHeader;
+    this->vidWin = NULL;
+    pixmapBackground = NULL;
+    pixmap = NULL;
+    scaledWindow = false;
+    posterWidth = 0;
+    posterHeight = 0;
+    hasManualPoster = false;
+    manualPosterPath = "";
+    hasPoster = false;
 }
 
 cNopacityTextWindow::~cNopacityTextWindow(void) {
@@ -19,40 +47,348 @@ cNopacityTextWindow::~cNopacityTextWindow(void) {
         osd->DestroyPixmap(pixmap);
         pixmap = NULL;
     }
+    if ((config.GetValue("scalePicture") == 2) && scaledWindow) {
+        cRect vidWinNew = cDevice::PrimaryDevice()->CanScaleVideo(oldVidWin);
+        if (vidWinNew != cRect::Null) {
+            vidWin->SetX(vidWinNew.X());
+            vidWin->SetY(vidWinNew.Y());
+            vidWin->SetWidth(vidWinNew.Width());
+            vidWin->SetHeight(vidWinNew.Height());
+        }
+    }
 }
 
-bool cNopacityTextWindow::CreatePixmap(int border) {
+bool cNopacityTextWindow::SetManualPoster(const cRecording *recording, bool fullscreen) {
+    cString posterFound;
+    cImageLoader imgLoader;
+    hasManualPoster = imgLoader.SearchRecordingPoster(recording->FileName(), posterFound);
+    if (hasManualPoster) {
+        manualPosterPath = posterFound;
+        int posterWidthOrig = config.GetValue("posterWidth");
+        int posterHeightOrig = config.GetValue("posterHeight");
+        if (!fullscreen) {
+            posterHeight = geometry->Height() - 5;
+            posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig);
+        } else {
+            posterWidth = geometry->Width() / 4;
+            posterHeight = posterHeightOrig * ((double)posterWidth / (double)posterWidthOrig);
+        }
+        return true;
+    }
+    return false;
+}
+
+void cNopacityTextWindow::SetPoster(const cEvent *event, const cRecording *recording, bool fullscreen) {
+    if (!event && !recording)
+        return;
+    static cPlugin *pScraper = GetScraperPlugin();
+    if (pScraper) {
+        posterScraper2Vdr.event = event;
+        posterScraper2Vdr.recording = recording;
+        if (pScraper->Service("GetPoster", &posterScraper2Vdr)) {
+            hasPoster = true;
+            int posterWidthOrig = posterScraper2Vdr.poster.width;
+            int posterHeightOrig = posterScraper2Vdr.poster.height;
+            if (!fullscreen) {
+                posterHeight = geometry->Height() - 5;
+                posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig);
+            } else {
+                posterWidth = geometry->Width() / 4;
+                posterHeight = posterHeightOrig * ((double)posterWidth / (double)posterWidthOrig);
+            }
+        } else {
+            hasPoster = false;
+            posterHeight = 0;
+            posterWidth = 0;
+        }
+    }
+}
+
+bool cNopacityTextWindow::SetTextScroller(int border, int left) {
     int lineHeight = font->Height();
     bool scrolling = false;
-    twText.Set(text, font, geometry->Width() - 2*border);
-    int pixmapTotalHeight = lineHeight * (twText.Lines()+1);
-    int drawportHeight = geometry->Height();
-    if (pixmapTotalHeight > drawportHeight) {
-        drawportHeight = pixmapTotalHeight;
-        scrolling = true;
+    drawportHeight = geometry->Height();
+    if (!(hasPoster || hasManualPoster)) {
+        drawTextTall = false;
+        drawTextFull = true;
+        twTextTall.Set("", font, 5);
+        twTextFull.Set(*text, font, geometry->Width() - 2*border);
+        int pixmapTotalHeight = lineHeight * (twTextFull.Lines()+1);
+        if ((pixmapTotalHeight - (lineHeight/2)) > drawportHeight) {
+            drawportHeight = pixmapTotalHeight;
+            scrolling = true;
+        }
+    } else {
+        cTextWrapper test;
+        int widthTall = geometry->Width() - 2*border - left;
+        test.Set(*text, font, widthTall);
+        int linesTotal = test.Lines();
+        int textHeight =  linesTotal * lineHeight;
+        if (textHeight > posterHeight) {
+            drawTextTall = true;
+            drawTextFull = true;
+            int lineSplit = posterHeight / lineHeight + 1;
+            std::stringstream textTall;
+            std::stringstream textFull;
+            for (int line = 0; line < linesTotal; line++) {
+                bool lineWrap = false;
+                if (font->Width(test.GetLine(line)) < (widthTall - 100))
+                    lineWrap = true;
+                if (line < lineSplit) {
+                    textTall << test.GetLine(line);
+                    if (lineWrap)
+                        textTall << "\n";
+                    else
+                        textTall << " ";
+                } else {
+                    textFull << test.GetLine(line);
+                    if (lineWrap)
+                        textFull << "\n";
+                    else
+                        textFull << " ";
+                }
+            }
+            twTextTall.Set(textTall.str().c_str(), font, widthTall);
+            twTextFull.Set(textFull.str().c_str(), font, geometry->Width() - 2*border);
+            scrolling = true;
+            drawportHeight = lineHeight * (twTextTall.Lines() + twTextFull.Lines() + 1);
+        } else {
+            scrolling = false;
+            drawTextTall = true;
+            drawTextFull = false;
+            twTextTall.Set(*text, font, geometry->Width() - 2*border - left);
+            twTextFull.Set("", font, 5);
+        }
     }
+    return scrolling;
+}
+
+void cNopacityTextWindow::CreatePixmap(void) {
     cPixmap::Lock();
-    pixmapBackground = osd->CreatePixmap(4, cRect(geometry->X(), geometry->Y(), geometry->Width(), geometry->Height()));
+    pixmapBackground = osd->CreatePixmap(4, cRect(geometry->X()-1, geometry->Y()-1, geometry->Width()+2, geometry->Height()+2));
     pixmap = osd->CreatePixmap(5, cRect(geometry->X(), geometry->Y(), geometry->Width(), geometry->Height()),
                                   cRect(0, 0, geometry->Width(), drawportHeight));
-    pixmapBackground->SetAlpha(0);
-    pixmapBackground->Fill(clrBlack);
-    pixmap->SetAlpha(0);
-    pixmap->Fill(Theme.Color(clrMenuBorder));
-    pixmap->DrawRectangle(cRect(1, 1, geometry->Width()-2, drawportHeight-2), Theme.Color(clrMenuBack));
+    pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+    pixmapBackground->DrawRectangle(cRect(1, 1, geometry->Width(), geometry->Height()), clrBlack);
+    pixmap->Fill(Theme.Color(clrMenuBack));
+    if (config.GetValue("menuEPGWindowFadeTime")) {
+        pixmap->SetAlpha(0);
+        pixmapBackground->SetAlpha(0);
+    }
     cPixmap::Unlock();
-    return scrolling;
 }
 
-void cNopacityTextWindow::DrawText(int border) {
+void cNopacityTextWindow::CreatePixmapFullScreen(void) {
+    pixmapBackground = osd->CreatePixmap(4, cRect(geometry->X()-1, geometry->Y()-1, geometry->Width()+2, geometry->Height()+2));
+    pixmap = osd->CreatePixmap(5, cRect(geometry->X(), geometry->Y(), geometry->Width(), geometry->Height()));
+    pixmapBackground->Fill(Theme.Color(clrMenuBorder));
+    pixmapBackground->DrawRectangle(cRect(1, 1, geometry->Width(), geometry->Height()), Theme.Color(clrMenuTextWindow));
+    pixmap->Fill(clrTransparent);
+}
+
+void cNopacityTextWindow::DrawText(int border, int left) {
     int lineHeight = font->Height();
     int currentLineHeight = lineHeight/2;
+    tColor clrFontBack = (config.GetValue("displayType") != dtFlat)?(clrTransparent):(Theme.Color(clrMenuBack));
     cPixmap::Lock();
-    for (int i=0; (i < twText.Lines()) && Running(); i++) {
-        pixmap->DrawText(cPoint(border, currentLineHeight), twText.GetLine(i), Theme.Color(clrMenuFontButton), clrTransparent, font);
-        currentLineHeight += lineHeight;
+    if (drawTextTall) {
+        for (int i=0; (i < twTextTall.Lines()) && Running(); i++) {
+            pixmap->DrawText(cPoint(border + left, currentLineHeight), twTextTall.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrFontBack, font);
+            currentLineHeight += lineHeight;
+        }
+    }
+    if (drawTextFull) {
+        for (int i=0; (i < twTextFull.Lines()) && Running(); i++) {
+            pixmap->DrawText(cPoint(border, currentLineHeight), twTextFull.GetLine(i), Theme.Color(clrMenuFontDetailViewText), clrFontBack, font);
+            currentLineHeight += lineHeight;
+        }
+    }
+    cPixmap::Unlock();
+}
+
+void cNopacityTextWindow::SetEvent(const cEvent *event) {
+    if (!event)
+        return;
+    CreatePixmapFullScreen();
+    int border = config.GetValue("borderDetailedEPG");
+    int width = geometry->Width();
+    int height = geometry->Height();
+    int widthTextHeader = width - 2 * border;
+    int widthText = widthTextHeader;
+    int y = border;
+    cImageLoader imgLoader;
+    bool epgImageFound = false;
+    if (hasPoster) {
+        int posterX = width - posterWidth - border;
+        if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
+            pixmap->DrawImage(cPoint(posterX, border), imgLoader.GetImage());
+            widthTextHeader -= posterWidth + border;
+        }
+    } else if (imgLoader.LoadEPGImage(event->EventID())) {
+        epgImageFound = true;
+        pixmap->DrawImage(cPoint(width - config.GetValue("epgImageWidth") - border, y), imgLoader.GetImage());
+        widthTextHeader -= config.GetValue("epgImageWidth") + border;
+    }
+    //Title
+    y = DrawTextWrapper(event->Title(), widthTextHeader, y, border, fontHeader, Theme.Color(clrMenuFontDetailViewHeaderTitle), height);
+    //Short Text
+    y = DrawTextWrapper(event->ShortText(), widthTextHeader, y, border, font, Theme.Color(clrMenuFontDetailViewHeader), height);
+
+    y += fontHeader->Height();
+    //Description
+    if (hasPoster && (y < (border + posterHeight))) {
+        int heightNarrow = border + posterHeight - y;
+        DrawTextWrapperFloat(event->Description(),
+                             widthTextHeader, widthText, y, heightNarrow,
+                             border, font, Theme.Color(clrMenuFontDetailViewText), height);
+    } else if (epgImageFound && (y < (border + config.GetValue("epgImageHeight")))) {
+        y = border + config.GetValue("epgImageHeight");
+        DrawTextWrapper(event->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+    } else {
+        DrawTextWrapper(event->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+    }
+}
+
+void cNopacityTextWindow::SetRecording(const cRecording *recording) {
+    if (!recording)
+        return;
+    CreatePixmapFullScreen();
+    int border = config.GetValue("borderDetailedRecordings");
+    int width = geometry->Width();
+    int height = geometry->Height();
+    int widthTextHeader = width - 2 * border;
+    int widthText = widthTextHeader;
+    int y = border;
+    //Image
+    cImageLoader imgLoader;
+    bool recImageFound = false;
+    if (hasManualPoster) {
+        if (imgLoader.LoadPoster(*manualPosterPath, posterWidth, posterHeight)) {
+            int posterX = width - posterWidth - border;
+            pixmap->DrawImage(cPoint(posterX, border), imgLoader.GetImage());
+            widthTextHeader -= posterWidth + border;
+        }
+    } else if (hasPoster) {
+        int posterX = width - posterWidth - border;
+        if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
+            pixmap->DrawImage(cPoint(posterX, border), imgLoader.GetImage());
+            widthTextHeader -= posterWidth + border;
+        }
+    } else if (imgLoader.LoadRecordingImage(recording->FileName())) {
+        pixmap->DrawImage(cPoint(width - config.GetValue("epgImageWidth") - border, y), imgLoader.GetImage());
+        widthTextHeader -= config.GetValue("epgImageWidth") + border;
+        recImageFound = true;
+    }
+    const cRecordingInfo *info = recording->Info();
+    if (!info)
+        return;
+    cString recTitle;
+    if (info->Title())
+        recTitle = info->Title();
+    else
+        recTitle = recording->Name();
+    //Title
+    y = DrawTextWrapper(*recTitle, widthTextHeader, y, border, fontHeader, Theme.Color(clrMenuFontDetailViewHeaderTitle), height);
+    //Short Text
+    if (!isempty(info->ShortText())) {
+        y = DrawTextWrapper(info->ShortText(), widthTextHeader, y, border, font, Theme.Color(clrMenuFontDetailViewHeader), height);
+    }
+    y += fontHeader->Height();
+    //Description
+    if ((hasPoster || hasManualPoster) && (y < (border + posterHeight))) {
+        int heightNarrow = border + posterHeight - y;
+        DrawTextWrapperFloat(recording->Info()->Description(),
+                             widthTextHeader, widthText, y, heightNarrow,
+                             border, font, Theme.Color(clrMenuFontDetailViewText), height);
+    } else if (recImageFound && (y < (border + config.GetValue("epgImageHeight")))) {
+        y = border + config.GetValue("epgImageHeight");
+        DrawTextWrapper(recording->Info()->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+    } else {
+        DrawTextWrapper(recording->Info()->Description(), widthText, y, border, font, Theme.Color(clrMenuFontDetailViewText), height);
+    }
+}
+
+int cNopacityTextWindow::DrawTextWrapper(const char *text, int width, int top, int x,
+                                         const cFont *font, tColor color, int maxHeight) {
+    cTextWrapper wrapper;
+    int lineHeight = font->Height();
+    wrapper.Set(text, font, width);
+    int y = top;
+    for (int i=0; i < wrapper.Lines(); i++) {
+        if (y + 2*lineHeight > maxHeight) {
+            pixmap->DrawText(cPoint(x, y), "...", color, clrTransparent, font);
+            y += 2*lineHeight;
+            break;
+        }
+        pixmap->DrawText(cPoint(x, y), wrapper.GetLine(i), color, clrTransparent, font);
+        y += lineHeight;
+    }
+    return y;
+}
+
+void cNopacityTextWindow::DrawTextWrapperFloat(const char *text, int widthSmall, int widthFull,
+                                              int top, int heightNarrow, int x, const cFont *font,
+                                              tColor color, int maxHeight) {
+
+    if (!text)
+        return;
+    int lineHeight = font->Height();
+    int numLinesNarrow = heightNarrow / lineHeight + 1;
+    splitstring s(text);
+    std::vector<std::string> flds = s.split('\n', 1);
+    if (flds.size() < 1)
+        return;
+    int y = top;
+    int linesDrawn = 0;
+    bool drawNarrow = true;
+    for (int i=0; i<flds.size(); i++) {
+        if (!flds[i].size()) {
+            //empty line
+            linesDrawn++;
+            y += lineHeight;
+        } else {
+            cTextWrapper wrapper;
+            if (drawNarrow) {
+                wrapper.Set((flds[i].c_str()), font, widthSmall);
+                int newLines = wrapper.Lines();
+                //check if wrapper fits completely into narrow area
+                if (linesDrawn + newLines < numLinesNarrow) {
+                    y = DrawTextWrapper(flds[i].c_str(), widthSmall, y, x, font, color, maxHeight);
+                    linesDrawn += newLines;
+                } else {
+                    //this wrapper has to be splitted
+                    std::stringstream sstrTextTall;
+                    std::stringstream sstrTextFull;
+                    for (int line = 0; line < wrapper.Lines(); line++) {
+                        if (line + linesDrawn < numLinesNarrow) {
+                            sstrTextTall << wrapper.GetLine(line) << " ";
+                        } else {
+                            sstrTextFull << wrapper.GetLine(line) << " ";
+                        }
+                    }
+                    y = DrawTextWrapper(sstrTextTall.str().c_str(), widthSmall, y, x, font, color, maxHeight);
+                    y = DrawTextWrapper(sstrTextFull.str().c_str(), widthFull, y, x, font, color, maxHeight);
+                    drawNarrow = false;
+                }
+            } else {
+                if (y > maxHeight)
+                    break;
+                y = DrawTextWrapper(flds[i].c_str(), widthFull, y, x, font, color, maxHeight);
+            }
+        }
+    }
+}
+
+void cNopacityTextWindow::DrawPoster(int border) {
+    int posterY = font->Height() / 2;
+    cImageLoader imgLoader;
+    if (hasManualPoster) {
+        if (imgLoader.LoadPoster(*manualPosterPath, posterWidth, posterHeight)) {
+            pixmap->DrawImage(cPoint(border, posterY), imgLoader.GetImage());
+        }
+    } else if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
+        pixmap->DrawImage(cPoint(border, posterY), imgLoader.GetImage());
     }
-    cPixmap::Unlock();        
 }
 
 void cNopacityTextWindow::DoSleep(int duration) {
@@ -60,23 +396,53 @@ void cNopacityTextWindow::DoSleep(int duration) {
     for (int i = 0; Running() && (i*sleepSlice < duration); i++)
         cCondWait::SleepMs(sleepSlice);
 }
-   
+
+void cNopacityTextWindow::ScaleVideoWindow(void) {
+    oldVidWin.SetX(vidWin->X());
+    oldVidWin.SetY(vidWin->Y());
+    oldVidWin.SetWidth(vidWin->Width());
+    oldVidWin.SetHeight(vidWin->Height());
+    cRect availableRect(vidWin->X(), vidWin->Y(), vidWin->Width(), vidWin->Height() - geometry->Height());
+    cRect vidWinNew = cDevice::PrimaryDevice()->CanScaleVideo(availableRect);
+    if (vidWinNew != cRect::Null) {
+        vidWin->SetX(vidWinNew.X());
+        vidWin->SetY(vidWinNew.Y());
+        vidWin->SetWidth(vidWinNew.Width());
+        vidWin->SetHeight(vidWinNew.Height());
+        scaledWindow = true;
+    }
+}
+
 void cNopacityTextWindow::Action(void) {
-    DoSleep(config.menuInfoTextDelay*1000);
-   
+    if (! *text)
+        return;
+
+    DoSleep(config.GetValue("menuInfoTextDelay")*1000);
+
+    if (config.GetValue("scalePicture") == 2) {
+          ScaleVideoWindow();
+    }
+
     int border = 5;
+    int left = 0;
+    if (hasPoster || hasManualPoster)
+        left = 10 + posterWidth;
     bool scrolling = false;
     if (Running()) {
-        scrolling = CreatePixmap(border);
+        scrolling = SetTextScroller(border, left);
+        CreatePixmap();
     }
     if (Running()) {
-        DrawText(border);
+        DrawText(border, left);
+    }
+    if (Running() && (hasPoster || hasManualPoster)) {
+        DrawPoster(border);
     }
     //FadeIn
-    if (config.menuEPGWindowFadeTime) {
+    if (config.GetValue("menuEPGWindowFadeTime")) {
         uint64_t Start = cTimeMs::Now();
-        int FadeTime = config.menuEPGWindowFadeTime;
-        int FadeFrameTime = config.menuEPGWindowFrameTime;
+        int FadeTime = config.GetValue("menuEPGWindowFadeTime");
+        int FadeFrameTime = FadeTime / 10;
         while (Running()) {
             uint64_t Now = cTimeMs::Now();
             cPixmap::Lock();
@@ -84,9 +450,9 @@ void cNopacityTextWindow::Action(void) {
             int Alpha = t * ALPHA_OPAQUE;
             pixmapBackground->SetAlpha(Alpha);
             pixmap->SetAlpha(Alpha);
+            cPixmap::Unlock();
             if (Running())
                 osd->Flush();
-            cPixmap::Unlock();
             int Delta = cTimeMs::Now() - Now;
             if (Running() && (Delta < FadeFrameTime))
                 cCondWait::SleepMs(FadeFrameTime - Delta);
@@ -94,12 +460,19 @@ void cNopacityTextWindow::Action(void) {
                 break;
         }
     }
-    
+
     if (scrolling && Running()) {
-        int scrollDelay = config.menuInfoScrollDelay * 1000;
+        int scrollDelay = config.GetValue("menuInfoScrollDelay") * 1000;
         DoSleep(scrollDelay);
         int drawPortY;
-        int FrameTime = config.menuInfoScrollFrameTime;
+        int FrameTime = 0;
+        if (config.GetValue("menuInfoScrollSpeed") == 1)
+            FrameTime = 50;
+        else if (config.GetValue("menuInfoScrollSpeed") == 2)
+            FrameTime = 30;
+        else if (config.GetValue("menuInfoScrollSpeed") == 3)
+            FrameTime = 15;
+
         int maxY = pixmap->DrawPort().Height() - pixmap->ViewPort().Height();
         bool doSleep = false;
         while (Running()) {
@@ -128,4 +501,4 @@ void cNopacityTextWindow::Action(void) {
                 cCondWait::SleepMs(FrameTime - Delta);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/textwindow.h b/textwindow.h
index c9bd469..72e50d3 100644
--- a/textwindow.h
+++ b/textwindow.h
@@ -1,23 +1,52 @@
 #ifndef __NOPACITY_TEXTWINDOW_H
 #define __NOPACITY_TEXTWINDOW_H
+
+#include <vdr/skins.h>
+#include <vdr/thread.h>
+#include "services/scraper2vdr.h"
+
 class cNopacityTextWindow : public cThread {
 private:
     cOsd *osd;
     cFont *font;
+    cFont *fontHeader;
     cPixmap *pixmapBackground;
     cPixmap *pixmap;
     cRect *geometry;
-    const char *text;
-    cTextWrapper twText;
-    bool CreatePixmap(int border);
-    void DrawText(int border);
+    int drawportHeight;
+    cRect *vidWin;
+    cRect oldVidWin;
+    bool scaledWindow;
+    cString text;
+    cTextWrapper twTextTall;
+    cTextWrapper twTextFull;
+    bool drawTextTall;
+    bool drawTextFull;
+    bool hasManualPoster;
+    cString manualPosterPath;
+    bool hasPoster;
+    ScraperGetPoster posterScraper2Vdr;
+    int posterWidth, posterHeight;
+    bool SetTextScroller(int border, int left);
+    void CreatePixmap(void);
+    void CreatePixmapFullScreen(void);
+    void DrawText(int border, int left);
+    void DrawPoster(int border);
+    int DrawTextWrapper(const char *text, int width, int top, int x, const cFont *font, tColor color, int maxHeight);
+    void DrawTextWrapperFloat(const char *text, int widthSmall, int widthFull, int top, int heightNarrow, int x, const cFont *font, tColor color, int maxHeight);
     void DoSleep(int duration);
     virtual void Action(void);
+    void ScaleVideoWindow(void);
 public:
-    cNopacityTextWindow(cOsd *osd, cFont *font);
+    cNopacityTextWindow(cOsd *osd, cFont *font, cRect *vidWin);
+    cNopacityTextWindow(cOsd *osd, cFont *font, cFont *fontHeader);
     virtual ~cNopacityTextWindow(void);
     void SetGeometry(cRect *geo) {geometry = geo;};
-    void SetText(const char *Text) {text = Text;};
+    void SetEvent(const cEvent *event);
+    void SetRecording(const cRecording *recording);
+    void SetText(cString Text) {text = Text;};
+    bool SetManualPoster(const cRecording *recording, bool fullscreen = false);
+    void SetPoster(const cEvent *event, const cRecording *recording, bool fullscreen = false);
 };
 
 #endif //__NOPACITY_TEXTWINDOW_H
\ No newline at end of file
diff --git a/themes/nOpacity-anthra.theme b/themes/nOpacity-anthra.theme
new file mode 100644
index 0000000..7a4cbc5
--- /dev/null
+++ b/themes/nOpacity-anthra.theme
@@ -0,0 +1,97 @@
+Description = anthra
+clrChannelBackground = B012273f
+clrChannelBackBlend = B0858585
+
+clrChannelHead = FFFFFFFF
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FFFFFFFF
+clrChannelEPGInfoNext = FFFFFFFF
+clrChannelProgressBar = FF333333
+clrChannelProgressBarBack = FFFFFFFF
+clrChannelProgressBarBlend = FF7D7D7D
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+
+clrReplayBackground = AA353B4E 
+clrReplayBackBlend = B0858585
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FFFFFFFF
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = FF7D7D7D
+clrReplayProgressRest = FFFFFFFF
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FFFFD700
+
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFFFFFFF
+clrMenuBack = 00000000
+clrMenuBorder = 00000000
+clrMenuScrollBar = 900000FF
+clrMenuScrollBarBack = 99000000 
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 7D000000
+clrMenuItemBlend = 64000000
+clrMenuItemHigh = 7D000000
+clrMenuItemHighBlend = FE999999
+clrSeparatorBorder = EE444444
+clrDiskAlert = 90cc0000
+clrTimersBack = 7D000000 
+clrTimersBackBlend = FE999999
+#############################
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+###################################
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+#####################
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FFFFFFFF
+clrMenuFontMenuItemSep = FFFFFFFF
+##################
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = 60FFFFFF
+clrAudioMenuHeader = DD000000
+####
+clrProgressBar = FF7D7D7D
+clrProgressBarBack = FFFFFFFF
+clrProgressBarBlend = FF333333
+clrProgressBarHigh = FF7D7D7D
+clrProgressBarBackHigh = DD000000
+clrProgressBarBlendHigh = FF7D7D7D
+
+clrMenuTextWindow = B0000000
+clrMenuChannelLogoBack = 7DFFFFFF
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 9000BBFF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
+clrMenuDetailViewTabs = DD0000ad
diff --git a/themes/nOpacity-blue.theme b/themes/nOpacity-blue.theme
new file mode 100644
index 0000000..34404d4
--- /dev/null
+++ b/themes/nOpacity-blue.theme
@@ -0,0 +1,90 @@
+Description = Blue
+clrChannelBackground = B0000000
+clrChannelBackBlend = B0003DF5
+clrChannelHead = FF0066FF
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DD003DF5
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD80B3FF
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = B0000000
+clrReplayBackBlend = B0003DF5
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FF858585
+clrReplayCurrentTotal = FF003DF5
+clrReplayProgressSeen = DD80B3FF 
+clrReplayProgressRest = DD858585
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = DD003DF5
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FF858585
+clrMenuBack = DD000000
+clrMenuBorder = DD003DF5
+clrMenuScrollBar = DD003DF5
+clrMenuScrollBarBack = 40003DF5
+clrMenuScrollBarBase = 00000000
+clrMenuItem = EE444444
+clrMenuItemBlend = 90000000
+clrMenuItemHigh = DD000000
+clrMenuItemHighBlend = EE0033FF
+clrSeparatorBorder = EE444444
+clrDiskAlert = DDFF0000
+clrTimersBack = EE0033FF
+clrTimersBackBlend = DD000000
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FF0066FF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FF0066FF
+clrMenuFontMenuItemTitle = FF0066FF
+clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = EE0033FF
+clrAudioMenuHeader = DD000000
+clrProgressBar = DD003DF5
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD80B3FF
+clrProgressBarHigh = DD003DF5
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD80B3FF
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 44003DF5
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 900000FF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-darkblue.theme b/themes/nOpacity-darkblue.theme
index 4ef3669..00f2164 100644
--- a/themes/nOpacity-darkblue.theme
+++ b/themes/nOpacity-darkblue.theme
@@ -3,13 +3,17 @@ clrChannelBackground = B0000000
 clrChannelBackBlend = DD5078ab
 clrChannelHead = FFEEEEEE
 clrChannelEPG = FFFFFFFF
-clrChannelEPGInfo = FF858585
-clrProgressBar = DD4979b9
-clrProgressBarBack = DD858585
-clrProgressBarBlend = DD031B3C
-clrChannelSymbolOn = DD5078ab
-clrChannelSymbolOff = DD858585
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DD4979b9
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD031B3C
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
 clrReplayBackground = B0000000
 clrReplayBackBlend = DD5078ab
 clrReplayHead = FFFFFFFF
@@ -28,20 +32,21 @@ clrMenuBack = DD000000
 clrMenuBorder = DD8c8c8c
 clrMenuScrollBar = DD8c8c8c
 clrMenuScrollBarBack = 40135474
-clrMenuItem = DD5078ab
+clrMenuScrollBarBase = 00000000
+clrMenuItem = DD5078AB
 clrMenuItemBlend = DD000000
 clrMenuItemHigh = DD618A9E
 clrMenuItemHighBlend = EE135474
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = EE135474
+clrSeparatorBorder = EE444444
 clrDiskAlert = DDFF0000
+clrTimersBack = DD5078AB
+clrTimersBackBlend = DD000000
 clrMenuFontHeader = FFFFFFFF
 clrMenuFontDate = FFFFFFFF
 clrMenuFontDiscUsage = FFFFFFFF
-clrMenuFontButton = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
 clrMenuFontTimers = FFFFFFFF
 clrMenuFontTimersHeader = FFFFFFFF
-clrMenuFontMessages = FFFFFFFF
 clrMenuFontDetailViewText = FFFFFFFF
 clrMenuFontDetailViewHeader = FF858585
 clrMenuFontDetailViewHeaderTitle = FFB6C6E0
@@ -49,17 +54,37 @@ clrMenuFontMenuItem = FFFFFFFF
 clrMenuFontMenuItemHigh = FFFFFFFF
 clrMenuFontMenuItemTitle = FFB6C6E0
 clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = EE135474
+clrAudioMenuHeader = DD000000
+clrProgressBar = DD4979b9
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD031B3C
+clrProgressBarHigh = DD4979b9
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD031B3C
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 99242A38
 clrButtonRed = 99BB0000
 clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
 clrButtonGreen = 9900BB00
 clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
 clrButtonYellow = FFBBBB00
 clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
 clrButtonBlue = 990000BB
 clrButtonBlueBorder = FF0000BB
-clrMessageFont = FFFFFFFF
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
 clrMessageStatus = 900000FF
 clrMessageInfo = 90009900
 clrMessageWarning = 90BBBB00
 clrMessageError = 90BB0000
-clrMessageBlend = DD000000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-darkgrey.theme b/themes/nOpacity-darkgrey.theme
new file mode 100644
index 0000000..2afad2b
--- /dev/null
+++ b/themes/nOpacity-darkgrey.theme
@@ -0,0 +1,90 @@
+Description = Dark Grey
+clrChannelBackground = B0000000
+clrChannelBackBlend = B0858585
+clrChannelHead = FFEEEEEE
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FF858585
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DD4E78B1
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD80B3FF
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = B0000000
+clrReplayBackBlend = B0858585
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FF858585
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = DD80B3FF
+clrReplayProgressRest = DD858585
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FFFFD700
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFFFFFFF
+clrMenuBack = BD000000
+clrMenuBorder = 64135474
+clrMenuScrollBar = 80858585
+clrMenuScrollBarBack = 32858585
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 7D444444
+clrMenuItemBlend = 64000000
+clrMenuItemHigh = 7D000000
+clrMenuItemHighBlend = FE999999
+clrSeparatorBorder = EE444444
+clrDiskAlert = 90cc0000
+clrTimersBack = 7D000000 
+clrTimersBackBlend = FE999999
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FFFFFFFF
+clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = 60FFFFFF
+clrAudioMenuHeader = DD000000
+clrProgressBar = DD4E78B1
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD80B3FF
+clrProgressBarHigh = DD4E78B1
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD80B3FF
+clrMenuTextWindow = BD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 99242A38
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 9000BBFF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-darkred.theme b/themes/nOpacity-darkred.theme
index faef337..91db17a 100644
--- a/themes/nOpacity-darkred.theme
+++ b/themes/nOpacity-darkred.theme
@@ -3,13 +3,17 @@ clrChannelBackground = CC000000
 clrChannelBackBlend = CC333333
 clrChannelHead = FFEEEEEE
 clrChannelEPG = FFCCCCCC
-clrChannelEPGInfo = FF858585
-clrProgressBar = DDBB0000
-clrProgressBarBack = DD222222
-clrProgressBarBlend = DD550000
-clrChannelSymbolOn = aa770000
-clrChannelSymbolOff = aa222222
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFCCCCCC
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DDBB0000
+clrChannelProgressBarBack = DD222222
+clrChannelProgressBarBlend = DD550000
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
 clrReplayBackground = CC000000
 clrReplayBackBlend = CC333333
 clrReplayHead = FFCCCCCC
@@ -20,28 +24,31 @@ clrReplayProgressRest = DD222222
 clrReplayProgressSelected = FF000000
 clrReplayProgressMark = FF000000
 clrReplayProgressCurrent = 90FFFFFF
-clrReplayHighlightIcon = B0555555
+clrReplayHighlightIcon = 90DDDDDD
 clrTracksFontHead = FF858585
 clrTracksFontButtons = FFCCCCCC
 clrVolumeFont = FF858585
 clrMenuBack = DD000000
-clrMenuBorder = FF050505
+clrMenuBorder = FF050505 
 clrMenuScrollBar = DD550000
 clrMenuScrollBarBack = dd000000
+clrMenuScrollBarBase = 00000000
 clrMenuItem = DD333333
 clrMenuItemBlend = DD000000
 clrMenuItemHigh = DDBB0000
 clrMenuItemHighBlend = DD000000
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = DDBB0000
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 66550000
+clrSeparatorBorder = EE444444
 clrDiskAlert = DDBB0000
+clrTimersBack = DD000000
+clrTimersBackBlend = DDBB0000
 clrMenuFontHeader = FFCCCCCC
 clrMenuFontDate = FFCCCCCC
 clrMenuFontDiscUsage = FFCCCCCC
-clrMenuFontButton = FFCCCCCC
+clrMenuFontDiscUsagePerc = FFCCCCCC
 clrMenuFontTimers = FFCCCCCC
 clrMenuFontTimersHeader = FFCCCCCC
-clrMenuFontMessages = FFCCCCCC
 clrMenuFontDetailViewText = FFCCCCCC
 clrMenuFontDetailViewHeader = FF858585
 clrMenuFontDetailViewHeaderTitle = FFDDDDDD
@@ -49,17 +56,35 @@ clrMenuFontMenuItem = FFCCCCCC
 clrMenuFontMenuItemHigh = FFCCCCCC
 clrMenuFontMenuItemTitle = FFDDDDDD
 clrMenuFontMenuItemSep = FF858585
-clrButtonRed = 99BB0000
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = DDBB0000
+clrAudioMenuHeader = DD000000
+clrProgressBar = DDBB0000
+clrProgressBarBack = DD222222
+clrProgressBarBlend = DD550000
+clrProgressBarHigh = DDBB0000
+clrProgressBarBackHigh = DD222222
+clrProgressBarBlendHigh = DD550000
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = 00000000
+clrButtonRed = DDBB0000
 clrButtonRedBorder = FF000000
-clrButtonGreen = 9900BB00
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = DD00BB00
 clrButtonGreenBorder = FF000000
-clrButtonYellow = 99BBBB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = DDBBBB00
 clrButtonYellowBorder = FF000000
-clrButtonBlue = 990000BB
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = DD0000BB
 clrButtonBlueBorder = FF000000
-clrMessageFont = FFCCCCCC
-clrMessageStatus = 900000FF
-clrMessageInfo = 90009900
-clrMessageWarning = 90BBBB00
-clrMessageError = 90BB0000
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = DD0000BB
+clrMessageInfo = DD00BB00
+clrMessageWarning = DDBBBB00
+clrMessageError = DDBB0000
 clrMessageBlend = DD000000
diff --git a/themes/nOpacity-darkred.theme b/themes/nOpacity-darkredNG.theme
similarity index 60%
copy from themes/nOpacity-darkred.theme
copy to themes/nOpacity-darkredNG.theme
index faef337..24bbffb 100644
--- a/themes/nOpacity-darkred.theme
+++ b/themes/nOpacity-darkredNG.theme
@@ -1,15 +1,19 @@
-Description = Dark Red
+Description = Dark Red NG
 clrChannelBackground = CC000000
 clrChannelBackBlend = CC333333
 clrChannelHead = FFEEEEEE
 clrChannelEPG = FFCCCCCC
-clrChannelEPGInfo = FF858585
-clrProgressBar = DDBB0000
-clrProgressBarBack = DD222222
-clrProgressBarBlend = DD550000
-clrChannelSymbolOn = aa770000
-clrChannelSymbolOff = aa222222
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFCCCCCC
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DDBB0000
+clrChannelProgressBarBack = DD222222
+clrChannelProgressBarBlend = DD550000
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
 clrReplayBackground = CC000000
 clrReplayBackBlend = CC333333
 clrReplayHead = FFCCCCCC
@@ -20,28 +24,29 @@ clrReplayProgressRest = DD222222
 clrReplayProgressSelected = FF000000
 clrReplayProgressMark = FF000000
 clrReplayProgressCurrent = 90FFFFFF
-clrReplayHighlightIcon = B0555555
+clrReplayHighlightIcon = 90DDDDDD
 clrTracksFontHead = FF858585
 clrTracksFontButtons = FFCCCCCC
 clrVolumeFont = FF858585
 clrMenuBack = DD000000
-clrMenuBorder = FF050505
+clrMenuBorder = FF050505 
 clrMenuScrollBar = DD550000
 clrMenuScrollBarBack = dd000000
+clrMenuScrollBarBase = 00000000
 clrMenuItem = DD333333
 clrMenuItemBlend = DD000000
 clrMenuItemHigh = DDBB0000
 clrMenuItemHighBlend = DD000000
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = DDBB0000
+clrSeparatorBorder = EE444444
 clrDiskAlert = DDBB0000
+clrTimersBack = DD000000
+clrTimersBackBlend = DDBB0000
 clrMenuFontHeader = FFCCCCCC
 clrMenuFontDate = FFCCCCCC
 clrMenuFontDiscUsage = FFCCCCCC
-clrMenuFontButton = FFCCCCCC
+clrMenuFontDiscUsagePerc = FFCCCCCC
 clrMenuFontTimers = FFCCCCCC
 clrMenuFontTimersHeader = FFCCCCCC
-clrMenuFontMessages = FFCCCCCC
 clrMenuFontDetailViewText = FFCCCCCC
 clrMenuFontDetailViewHeader = FF858585
 clrMenuFontDetailViewHeaderTitle = FFDDDDDD
@@ -49,15 +54,35 @@ clrMenuFontMenuItem = FFCCCCCC
 clrMenuFontMenuItemHigh = FFCCCCCC
 clrMenuFontMenuItemTitle = FFDDDDDD
 clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = DDBB0000
+clrAudioMenuHeader = DD000000
+clrProgressBar = DDBB0000
+clrProgressBarBack = DD222222
+clrProgressBarBlend = DD550000
+clrProgressBarHigh = DDBB0000
+clrProgressBarBackHigh = DD222222
+clrProgressBarBlendHigh = DD550000
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = AA000000
+clrMenuDetailViewTabs = 66660000
 clrButtonRed = 99BB0000
 clrButtonRedBorder = FF000000
+clrButtonRedFont = FFFFFFFF
 clrButtonGreen = 9900BB00
 clrButtonGreenBorder = FF000000
+clrButtonGreenFont = FFFFFFFF
 clrButtonYellow = 99BBBB00
 clrButtonYellowBorder = FF000000
+clrButtonYellowFont = FFFFFFFF
 clrButtonBlue = 990000BB
 clrButtonBlueBorder = FF000000
-clrMessageFont = FFCCCCCC
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
 clrMessageStatus = 900000FF
 clrMessageInfo = 90009900
 clrMessageWarning = 90BBBB00
diff --git a/themes/nOpacity-default.theme b/themes/nOpacity-default.theme
new file mode 100644
index 0000000..bce379e
--- /dev/null
+++ b/themes/nOpacity-default.theme
@@ -0,0 +1,90 @@
+Description = Default 
+clrChannelBackground = B012273f
+clrChannelBackBlend = B0858585
+clrChannelHead = FFEEEEEE
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = FFC6D590
+clrChannelProgressBarBack = DD000000
+clrChannelProgressBarBlend = FF8EAB21
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = AA353B4E 
+clrReplayBackBlend = B0858585
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FFFFFFFF
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = FF8EAB21 
+clrReplayProgressRest = DD858585
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FFFFD700
+clrTracksFontHead = FF858585
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFFFFFFF
+clrMenuBack = B012273f
+clrMenuBorder = AA242A38
+clrMenuScrollBar = 908EAB21 
+clrMenuScrollBarBack = 99242A38 
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 7D444444
+clrMenuItemBlend = 64000000
+clrMenuItemHigh = 7D000000
+clrMenuItemHighBlend = FE999999
+clrSeparatorBorder = EE444444
+clrDiskAlert = 90cc0000
+clrTimersBack = 7D000000 
+clrTimersBackBlend = FE999999
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFFFFFFF
+clrMenuFontDetailViewHeader = FF858585
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FF363636
+clrMenuFontMenuItemTitle = FF363636
+clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = 60FFFFFF
+clrAudioMenuHeader = DD000000
+clrProgressBar = FFC6D590 
+clrProgressBarBack = DD000000
+clrProgressBarBlend = FF8EAB21
+clrProgressBarHigh = DD4E78B1
+clrProgressBarBackHigh = DD000000
+clrProgressBarBlendHigh = DD80B3FF
+clrMenuTextWindow = B0000000
+clrMenuChannelLogoBack = 99C6C6C6
+clrMenuDetailViewBack = 50000000
+clrMenuDetailViewTabs = 99242A38
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 9000BBFF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-green.theme b/themes/nOpacity-green.theme
index 876aa5e..027446c 100644
--- a/themes/nOpacity-green.theme
+++ b/themes/nOpacity-green.theme
@@ -1,15 +1,19 @@
-Description = Green 
+Description = Green
 clrChannelBackground = B0000000
 clrChannelBackBlend = DD006600
 clrChannelHead = FFFFCC00
 clrChannelEPG = FFFFFFFF
-clrChannelEPGInfo = FF858585
-clrProgressBar = DDFFCC00
-clrProgressBarBack = DD858585
-clrProgressBarBlend = DD006600
-clrChannelSymbolOn = DD006600
-clrChannelSymbolOff = DD858585
-clrChannelRecActive = DDFF0000
+clrChannelEPGInfo = FFFFFFFF
+clrChannelEPGNext = FF858585
+clrChannelEPGInfoNext = FF858585
+clrChannelProgressBar = DDFFCC00
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD006600
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
 clrReplayBackground = B0000000
 clrReplayBackBlend = DD006600
 clrReplayHead = FFFFCC00
@@ -28,21 +32,21 @@ clrMenuBack = DD000000
 clrMenuBorder = DD006600
 clrMenuScrollBar = DD006600
 clrMenuScrollBarBack = AA003300
+clrMenuScrollBarBase = 00000000
 clrMenuItem = BB000000
 clrMenuItemBlend = EE006600
 clrMenuItemHigh = 22000000
 clrMenuItemHighBlend = EE006600
-clrMenuHeader = DD000000
-clrMenuHeaderBlend = EE006600
 clrSeparatorBorder = EE444444
 clrDiskAlert = DDFF0000
+clrTimersBack = 22000000
+clrTimersBackBlend = EE006600
 clrMenuFontHeader = FFFFFFFF
 clrMenuFontDate = FFFFFFFF
 clrMenuFontDiscUsage = FFFFFFFF
-clrMenuFontButton = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
 clrMenuFontTimers = FFFFFFFF
 clrMenuFontTimersHeader = FFFFFFFF
-clrMenuFontMessages = FFFFFFFF
 clrMenuFontDetailViewText = FFFFFFFF
 clrMenuFontDetailViewHeader = FF858585
 clrMenuFontDetailViewHeaderTitle = FFFFCC00
@@ -50,17 +54,37 @@ clrMenuFontMenuItem = FFFFFFFF
 clrMenuFontMenuItemHigh = FFFFCC00
 clrMenuFontMenuItemTitle = FFFFFFFF
 clrMenuFontMenuItemSep = FF858585
+clrMenuHeader = DD000000
+clrMenuHeaderBlend = EE006600
+clrAudioMenuHeader = DD000000
+clrProgressBar = DDFFCC00
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DD006600
+clrProgressBarHigh = DDFFCC00
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DD006600
+clrMenuTextWindow = DD000000
+clrMenuChannelLogoBack = DD858585
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 33006600
 clrButtonRed = 99BB0000
 clrButtonRedBorder = FFBB0000
+clrButtonRedFont = FFFFFFFF
 clrButtonGreen = 9900BB00
 clrButtonGreenBorder = FF00BB00
+clrButtonGreenFont = FFFFFFFF
 clrButtonYellow = FFBBBB00
 clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
 clrButtonBlue = 990000BB
 clrButtonBlueBorder = FF0000BB
-clrMessageFont = FFFFFFFF
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
 clrMessageStatus = 900000FF
 clrMessageInfo = 90009900
 clrMessageWarning = 90BBBB00
 clrMessageError = 90BB0000
-clrMessageBlend = DD000000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/themes/nOpacity-iceblue.theme b/themes/nOpacity-iceblue.theme
new file mode 100644
index 0000000..13514a3
--- /dev/null
+++ b/themes/nOpacity-iceblue.theme
@@ -0,0 +1,90 @@
+Description = IceBlue 
+clrChannelBackground = B0FFFFFF
+clrChannelBackBlend = FFFFFFFF
+clrChannelHead = FF000000
+clrChannelEPG = FF000000
+clrChannelEPGInfo = FF000000
+clrChannelEPGNext = FF474750
+clrChannelEPGInfoNext = FF474750
+clrChannelProgressBar = DD3F5468
+clrChannelProgressBarBack = FF000000
+clrChannelProgressBarBlend = DD5A8998
+clrStatusIconsBack = DD3F5468
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = B0FFFFFF
+clrReplayBackBlend = FF3F5468
+clrReplayHead = FF000000
+clrReplayDescription = FF3F5468
+clrReplayCurrentTotal = FF3F5468
+clrReplayProgressSeen = DD3F5468
+clrReplayProgressRest = DDBDCED0
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = FF3F5468
+clrTracksFontHead = FFFFFFFF
+clrTracksFontButtons = FF000000
+clrVolumeFont = FF000000
+clrMenuBack = DDFFFFFF
+clrMenuBorder = FF000000
+clrMenuScrollBar = FF000044
+clrMenuScrollBarBack = FFB2B2C7
+clrMenuScrollBarBase = 00000000
+clrMenuItem = FFB2B2C7
+clrMenuItemBlend = FFFFFFFF
+clrMenuItemHigh = FF000044
+clrMenuItemHighBlend = FFFFFFFF
+clrSeparatorBorder = EE444444
+clrDiskAlert = DDFF0000
+clrTimersBack = FFB2B2C7
+clrTimersBackBlend = FFFFFFFF
+clrMenuFontHeader = FF000000
+clrMenuFontDate = FF000000
+clrMenuFontDiscUsage = FF000000
+clrMenuFontDiscUsagePerc = FF000000
+clrMenuFontTimers = FF000000
+clrMenuFontTimersHeader = FF000000
+clrMenuFontDetailViewText = FF000000
+clrMenuFontDetailViewHeader = FF000044 
+clrMenuFontDetailViewHeaderTitle = FF000044
+clrMenuFontMenuItem = FF000000
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FF000000
+clrMenuFontMenuItemSep = FF000000
+clrMenuHeader = 22FFFFFF
+clrMenuHeaderBlend = FFFFFFFF
+clrAudioMenuHeader = 22FFFFFF
+clrProgressBar = DD3F5468
+clrProgressBarBack = FF000000
+clrProgressBarBlend = DD5A8998
+clrProgressBarHigh = DD3F5468
+clrProgressBarBackHigh = FF000000
+clrProgressBarBlendHigh = DD5A8998
+clrMenuTextWindow = DDFFFFFF
+clrMenuChannelLogoBack = 99C6C6C6
+clrMenuDetailViewBack = 99ABABB8
+clrMenuDetailViewTabs = 88B8B8E6
+clrButtonRed = FFCC0000
+clrButtonRedBorder = FF000000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = FF00F53D
+clrButtonGreenBorder = FF000000
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = FFF5B800
+clrButtonYellowBorder = FF000000 
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = FF003DF5
+clrButtonBlueBorder = FF000000
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = FF003DF5 
+clrMessageInfo = FF00F53D 
+clrMessageWarning = FFF5B800
+clrMessageError = FFCC0000
+clrMessageBlend = FFFFFFFF
diff --git a/themes/nOpacity-light.theme b/themes/nOpacity-light.theme
new file mode 100644
index 0000000..d107884
--- /dev/null
+++ b/themes/nOpacity-light.theme
@@ -0,0 +1,90 @@
+Description = Keep it Light
+clrChannelBackground = AA000000
+clrChannelBackBlend = AA000000
+clrChannelHead = FFEEEEEE
+clrChannelEPG = FFFFFFFF
+clrChannelEPGInfo = FFE6E6E6
+clrChannelEPGNext = FFBDBDBD
+clrChannelEPGInfoNext = FFBDBDBD
+clrChannelProgressBar = DD6fac10
+clrChannelProgressBarBack = DD858585
+clrChannelProgressBarBlend = DD6fac10
+clrStatusIconsBack = 00000000
+clrRecNow = DDFF0000
+clrRecNowFont = FFFFFFFF
+clrRecNext = DDFFFF00
+clrRecNextFont = FF000000
+clrReplayBackground = AA000000
+clrReplayBackBlend = AA000000
+clrReplayHead = FFFFFFFF
+clrReplayDescription = FFBBBBBB
+clrReplayCurrentTotal = FFFFFFFF
+clrReplayProgressSeen = DD6fac10
+clrReplayProgressRest = CC8c8c8c
+clrReplayProgressSelected = FF000000
+clrReplayProgressMark = FF000000
+clrReplayProgressCurrent = 90FFFFFF
+clrReplayHighlightIcon = B08c8c8c
+clrTracksFontHead = FFEEEEEE
+clrTracksFontButtons = FFFFFFFF
+clrVolumeFont = FFBDBDBD
+clrMenuBack = AA000000
+clrMenuBorder = DD8c8c8c
+clrMenuScrollBar = DD6fac10
+clrMenuScrollBarBack = AA000000
+clrMenuScrollBarBase = 00000000
+clrMenuItem = 40000000
+clrMenuItemBlend = DD000000
+clrMenuItemHigh = DD6fac10
+clrMenuItemHighBlend = EE135474
+clrSeparatorBorder = EE444444
+clrDiskAlert = DDFF0000
+clrTimersBack = AA000000
+clrTimersBackBlend = D0000000
+clrMenuFontHeader = FFFFFFFF
+clrMenuFontDate = FFFFFFFF
+clrMenuFontDiscUsage = FFFFFFFF
+clrMenuFontDiscUsagePerc = FFFFFFFF
+clrMenuFontTimers = FFFFFFFF
+clrMenuFontTimersHeader = FFFFFFFF
+clrMenuFontDetailViewText = FFE6E6E6
+clrMenuFontDetailViewHeader = FFBDBDBD
+clrMenuFontDetailViewHeaderTitle = FFFFFFFF
+clrMenuFontMenuItem = FFFFFFFF
+clrMenuFontMenuItemHigh = FFFFFFFF
+clrMenuFontMenuItemTitle = FFFFFFFF
+clrMenuFontMenuItemSep = FFE6E6E6
+clrMenuHeader = AA000000
+clrMenuHeaderBlend = AA000000
+clrAudioMenuHeader = AA000000
+clrProgressBar = DD6fac10
+clrProgressBarBack = DD858585
+clrProgressBarBlend = DDff3300
+clrProgressBarHigh = DDff3300
+clrProgressBarBackHigh = DD858585
+clrProgressBarBlendHigh = DDff3300
+clrMenuTextWindow = AA000000
+clrMenuChannelLogoBack = 99C6C6C6
+clrMenuDetailViewBack = 55000000
+clrMenuDetailViewTabs = 886fac10
+clrButtonRed = 99BB0000
+clrButtonRedBorder = 99BB0000
+clrButtonRedFont = FFFFFFFF
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = 9900BB00
+clrButtonGreenFont = FFFFFFFF
+clrButtonYellow = FFBBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonYellowFont = FFFFFFFF
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = 990000BB
+clrButtonBlueFont = FFFFFFFF
+clrMessageFontStatus = FFFFFFFF
+clrMessageFontInfo = FFFFFFFF
+clrMessageFontWarning = FFFFFFFF
+clrMessageFontError = FFFFFFFF
+clrMessageStatus = 900000FF
+clrMessageInfo = 90009900
+clrMessageWarning = 90BBBB00
+clrMessageError = 90BB0000
+clrMessageBlend = DD000000
\ No newline at end of file
diff --git a/timers.c b/timers.c
index 2199a72..7c3c197 100644
--- a/timers.c
+++ b/timers.c
@@ -1,174 +1,218 @@
-#include "timers.h"
-
-cNopacityTimer::cNopacityTimer(cOsd *osd, const cTimer *timer, const cFont *font, const cFont *fontLarge) {
-    this->osd = osd;
-    this->timer = timer;
-    this->font = font;
-    this->fontLarge = fontLarge;
-    isTimerConflict = false;
-}
-
-cNopacityTimer::cNopacityTimer(cOsd *osd, int numConflicts, const cFont *font, const cFont *fontLarge) {
-    this->osd = osd;
-    this->numConflicts = numConflicts;
-    this->font = font;
-    this->fontLarge = fontLarge;
-    isTimerConflict = true;
-}
-
-cNopacityTimer::~cNopacityTimer(void) {
-    osd->DestroyPixmap(pixmapBackground);
-    osd->DestroyPixmap(pixmap);
-    osd->DestroyPixmap(pixmapLogo);
-}
-
-void cNopacityTimer::SetGeometry(int width, int y) {
-    this->width = width;
-    this->y = y;
-}
-
-void cNopacityTimer::SetAlpha(int alpha) {
-    pixmapBackground->SetAlpha(alpha);
-    pixmap->SetAlpha(alpha);
-    pixmapLogo->SetAlpha(alpha);
-}
-
-void cNopacityTimer::Show(void) {
-    pixmapBackground->SetLayer(2);
-    pixmap->SetLayer(3);
-    pixmapLogo->SetLayer(4);
-}
-
-void cNopacityTimer::Hide(void) {
-    pixmapBackground->SetLayer(-1);
-    pixmap->SetLayer(-1);
-    pixmapLogo->SetLayer(-1);
-}
-
-void cNopacityTimer::CreateDate(void) {
-    if (timer->Recording()) {
-        Date = cString::sprintf("-%s", *TimeString(timer->StopTime()));
-    } else {
-        time_t Now = time(NULL);
-        cString Today = WeekDayName(Now);
-        cString Time = TimeString(timer->StartTime());
-        cString Day = WeekDayName(timer->StartTime());
-        if (timer->StartTime() > Now + 6 * SECSINDAY)
-            Date = DayDateTime(timer->StartTime());
-        else if (strcmp(Day, Today) != 0)
-            Date = cString::sprintf("%s %s", *Day, *Time);
-        else
-            Date = Time;
-        if (timer->Flags() & tfVps)
-            Date = cString::sprintf("VPS %s", *Date);
-    }
-}
-
-void cNopacityTimer::CreateShowName(void) {
-    const cEvent *Event = timer->Event();
-    cString title("");
-    if (Event) {
-        title = Event->Title();
-    } else {
-        const char *File = Setup.FoldersInTimerMenu ? NULL : strrchr(timer->File(), FOLDERDELIMCHAR);
-        if (File && strcmp(File + 1, TIMERMACRO_TITLE) && strcmp(File + 1, TIMERMACRO_EPISODE))
-            File++;
-        else
-            File = timer->File();
-        title = File;
-        std::string name(title);
-        size_t index = name.find_last_of(FOLDERDELIMCHAR);
-        if (index != std::string::npos)
-            title = File + index + 1;
-    }
-    showName.Set(*title, font, width-10);
-}
-
-void cNopacityTimer::CreateConflictText(void) {
-    cString conflictText;
-    if (numConflicts == 1) {
-        conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflict"));
-    } else {
-        conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflicts"));
-    }
-    showName.Set(*conflictText, fontLarge, width-10);
-}
-
-void cNopacityTimer::CalculateHeight(int space) {
-    int numLines = showName.Lines();
-    if (isTimerConflict) {
-        int lineHeight = fontLarge->Height();
-        height = numLines * lineHeight + 2*space;    
-    } else {
-        int lineHeight = font->Height();
-        height = config.timersLogoHeight + (numLines +1)* lineHeight + 2*space;    
-    }
-}
-
-void cNopacityTimer::CreatePixmaps(int x) {
-    pixmapBackground = osd->CreatePixmap(2, cRect(x, y, width, height));
-    pixmap = osd->CreatePixmap(3, cRect(x, y, width, height));
-    pixmapLogo = osd->CreatePixmap(4, cRect(x, y, width, height));
-}
-
-void cNopacityTimer::Render(void) {
-    pixmapBackground->Fill(clrBlack);
-    cImageLoader imgLoader;
-    if (isTimerConflict) {
-        pixmapLogo->Fill(clrTransparent);
-        pixmap->Fill(Theme.Color(clrDiskAlert));
-        imgLoader.DrawBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
-        pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
-        int numLines = showName.Lines();
-        int textWidth = 0;
-        int x = 0;
-        int y = 5;
-        for (int line=0; line<numLines; line++) {
-            textWidth = fontLarge->Width(showName.GetLine(line));
-            x = (width - textWidth)/2;
-            y += line*fontLarge->Height();
-            pixmap->DrawText(cPoint(x, y), showName.GetLine(line), Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
-        }
-    } else {
-        DrawLogo();
-        if (timer->Recording()) {
-            pixmap->Fill(Theme.Color(clrDiskAlert));
-            imgLoader.DrawBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
-            pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
-        } else {
-            pixmap->Fill(Theme.Color(clrMenuBorder));
-            imgLoader.DrawBackground(Theme.Color(clrMenuItemHighBlend), Theme.Color(clrMenuItemHigh), width-2, height-2);
-            pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
-        }
-
-        pixmap->DrawText(cPoint(5, config.timersLogoHeight), *Date, Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
-        
-        int lineHeight = font->Height();
-        int yStart = config.timersLogoHeight + lineHeight + 3;
-        int numLines = showName.Lines();
-        for (int line=0; line<numLines; line++)
-            pixmap->DrawText(cPoint(5, yStart+line*(lineHeight-2)), showName.GetLine(line), Theme.Color(clrMenuFontTimers), clrTransparent, font);
-    }   
-}
-
-void cNopacityTimer::DrawLogo(void) {
-    pixmapLogo->Fill(clrTransparent);
-    int logoWidth = config.timersLogoWidth;
-    int logoHeight = config.timersLogoHeight;
-    const cChannel *Channel = timer->Channel();
-    if (Channel && Channel->Name()) {
-        cImageLoader imgLoader;
-        if (imgLoader.LoadLogo(Channel->Name(), logoWidth, logoHeight)) {
-            pixmapLogo->DrawImage(cPoint((width - logoWidth)/2, 1), imgLoader.GetImage());
-        } else {
-            cTextWrapper channel;
-            channel.Set(Channel->Name(), fontLarge, width - 10);
-            int lines = channel.Lines();
-            int lineHeight = fontLarge->Height();
-            int y = 1;
-            for (int line = 0; line < lines; line++) {
-                pixmapLogo->DrawText(cPoint((width - fontLarge->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, fontLarge);
-            }   
-        }
-    }
-}
+#include "timers.h"
+#include "config.h"
+#include "imageloader.h"
+#include "helpers.h"
+#include <vdr/recording.h>
+
+cNopacityTimer::cNopacityTimer(cOsd *osd, cImageCache *imgCache, const cTimer *timer, const cFont *font, const cFont *fontLarge) {
+    this->osd = osd;
+    this->imgCache = imgCache;
+    this->timer = timer;
+    this->font = font;
+    this->fontLarge = fontLarge;
+    isTimerConflict = false;
+}
+
+cNopacityTimer::cNopacityTimer(cOsd *osd, cImageCache *imgCache, int numConflicts, const cFont *font, const cFont *fontLarge) {
+    this->osd = osd;
+    this->imgCache = imgCache;
+    this->numConflicts = numConflicts;
+    this->font = font;
+    this->fontLarge = fontLarge;
+    isTimerConflict = true;
+}
+
+cNopacityTimer::~cNopacityTimer(void) {
+    osd->DestroyPixmap(pixmapBackground);
+    osd->DestroyPixmap(pixmap);
+    osd->DestroyPixmap(pixmapLogo);
+    osd->DestroyPixmap(pixmapText);
+}
+
+void cNopacityTimer::SetGeometry(int width, int y) {
+    this->width = width;
+    this->y = y;
+}
+
+void cNopacityTimer::SetAlpha(int alpha) {
+    pixmapBackground->SetAlpha(alpha);
+    pixmap->SetAlpha(alpha);
+    pixmapLogo->SetAlpha(alpha);
+    pixmapText->SetAlpha(alpha);
+}
+
+void cNopacityTimer::Show(void) {
+    pixmapBackground->SetLayer(2);
+    pixmap->SetLayer(3);
+    pixmapLogo->SetLayer(4);
+    pixmapText->SetLayer(5);
+}
+
+void cNopacityTimer::Hide(void) {
+    pixmapBackground->SetLayer(-1);
+    pixmap->SetLayer(-1);
+    pixmapLogo->SetLayer(-1);
+    pixmapText->SetLayer(-1);
+}
+
+void cNopacityTimer::CreateDate(void) {
+    if (timer->Recording()) {
+        Date = cString::sprintf("-%s", *TimeString(timer->StopTime()));
+    } else {
+        time_t Now = time(NULL);
+        cString Today = WeekDayName(Now);
+        cString Time = TimeString(timer->StartTime());
+        cString Day = WeekDayName(timer->StartTime());
+        if (timer->StartTime() > Now + 6 * SECSINDAY)
+            Date = DayDateTime(timer->StartTime());
+        else if (strcmp(Day, Today) != 0)
+            Date = cString::sprintf("%s %s", *Day, *Time);
+        else
+            Date = Time;
+        if (timer->Flags() & tfVps)
+            Date = cString::sprintf("VPS %s", *Date);
+    }
+}
+
+void cNopacityTimer::CreateShowName(void) {
+    const cEvent *Event = timer->Event();
+    cString title("");
+    if (Event) {
+        title = Event->Title();
+    } else {
+        const char *File = Setup.FoldersInTimerMenu ? NULL : strrchr(timer->File(), FOLDERDELIMCHAR);
+        if (File && strcmp(File + 1, TIMERMACRO_TITLE) && strcmp(File + 1, TIMERMACRO_EPISODE))
+            File++;
+        else
+            File = timer->File();
+        title = File;
+        std::string name(title);
+        size_t index = name.find_last_of(FOLDERDELIMCHAR);
+        if (index != std::string::npos)
+            title = File + index + 1;
+    }
+    showName.Set(*title, font, width-10);
+}
+
+void cNopacityTimer::CreateConflictText(void) {
+    cString conflictText;
+    if (numConflicts == 1) {
+        conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflict"));
+    } else {
+        conflictText = cString::sprintf("%d Timer %s", numConflicts, tr("conflicts"));
+    }
+    showName.Set(*conflictText, fontLarge, width-10);
+}
+
+void cNopacityTimer::CalculateHeight(int space) {
+    int numLines = showName.Lines();
+    if (isTimerConflict) {
+        int lineHeight = fontLarge->Height();
+        height = numLines * lineHeight + 2*space;
+    } else {
+        int lineHeight = font->Height();
+        int channelLogoHeight = geoManager->menuTimersLogoHeight;
+        if (config.GetValue("showTimers") == 2) {
+            const cChannel *Channel = timer->Channel();
+            if (Channel) {
+                cTextWrapper channel;
+                channel.Set(Channel->Name(), fontLarge, width - 10);
+                int lines = channel.Lines();
+                channelLogoHeight = fontLarge->Height() * lines;
+            }
+        }
+        height = channelLogoHeight + (numLines +1)* lineHeight + 2*space;
+    }
+}
+
+void cNopacityTimer::CreatePixmaps(int x) {
+    pixmapBackground = osd->CreatePixmap(2, cRect(x, y, width, height));
+    pixmap = osd->CreatePixmap(3, cRect(x, y, width, height));
+    pixmapLogo = osd->CreatePixmap(4, cRect(x, y, width, height));
+    pixmapText = osd->CreatePixmap(5, cRect(x, y, width, height));
+}
+
+void cNopacityTimer::Render(void) {
+    pixmapBackground->Fill(clrTransparent);
+    pixmapText->Fill(clrTransparent);
+    if (isTimerConflict) {
+        pixmapLogo->Fill(clrTransparent);
+        pixmap->Fill(Theme.Color(clrDiskAlert));
+        if (config.GetValue("displayType") == dtBlending) {
+            cImage imgBack = imgCache->GetBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
+            pixmap->DrawImage(cPoint(1,1), imgBack);
+        } else {
+            pixmap->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrDiskAlert));
+        }
+        int numLines = showName.Lines();
+        int textWidth = 0;
+        int x = 0;
+        int y = 5;
+        for (int line=0; line<numLines; line++) {
+            textWidth = fontLarge->Width(showName.GetLine(line));
+            x = (width - textWidth)/2;
+            y += line*fontLarge->Height();
+            pixmapText->DrawText(cPoint(x, y), showName.GetLine(line), Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
+        }
+    } else {
+        int logoHeight = DrawLogo();
+        if (timer->Recording()) {
+            pixmap->Fill(Theme.Color(clrDiskAlert));
+            if (config.GetValue("displayType") == dtBlending) {
+                cImage imgBack = imgCache->GetBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), width-2, height-2);
+                pixmap->DrawImage(cPoint(1,1), imgBack);
+            } else {
+                pixmap->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrDiskAlert));
+            }
+        } else {
+            pixmap->Fill(Theme.Color(clrMenuBorder));
+            if (config.GetValue("displayType") == dtBlending) {
+                cImage imgBack = imgCache->GetBackground(Theme.Color(clrTimersBack), Theme.Color(clrTimersBackBlend), width-2, height-2);
+                pixmap->DrawImage(cPoint(1,1), imgBack);
+            } else {
+                pixmap->DrawRectangle(cRect(1, 1, width-2, height-2), Theme.Color(clrTimersBack));
+            }
+        }
+
+        pixmapText->DrawText(cPoint(5, logoHeight), *Date, Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontLarge);
+
+        int lineHeight = font->Height();
+        int yStart = logoHeight + lineHeight + 3;
+        int numLines = showName.Lines();
+        for (int line=0; line<numLines; line++)
+            pixmapText->DrawText(cPoint(5, yStart+line*(lineHeight-2)), showName.GetLine(line), Theme.Color(clrMenuFontTimers), clrTransparent, font);
+    }
+}
+
+int cNopacityTimer::DrawLogo(void) {
+    int totalHeight = 0;
+    pixmapLogo->Fill(clrTransparent);
+    int showTimerLogo = (config.GetValue("showTimers") < 2) ? 1 : 0;
+    int logoWidth = geoManager->menuTimersLogoWidth;
+    int logoHeight = geoManager->menuTimersLogoHeight;
+    const cChannel *Channel = timer->Channel();
+    if (Channel) {
+        bool logoFound = false;
+        if (showTimerLogo) {
+            cImage *logo = imgCache->GetLogo(ctLogoTimer, Channel);
+            if (logo) {
+                logoFound = true;
+                pixmapLogo->DrawImage(cPoint((width - logoWidth)/2, 1), *logo);
+            }
+        }
+        if (!showTimerLogo || !logoFound) {
+            cTextWrapper channel;
+            channel.Set(Channel->Name(), fontLarge, width - 10);
+            int lines = channel.Lines();
+            int lineHeight = fontLarge->Height();
+            int y = 1;
+            for (int line = 0; line < lines; line++) {
+                pixmapLogo->DrawText(cPoint((width - fontLarge->Width(channel.GetLine(line)))/2, y+lineHeight*line), channel.GetLine(line), Theme.Color(clrMenuFontMenuItemHigh), clrTransparent, fontLarge);
+            }
+            totalHeight = lineHeight * lines;
+        } else {
+            totalHeight = logoHeight;
+        }
+    }
+    return totalHeight;
+}
\ No newline at end of file
diff --git a/timers.h b/timers.h
index dcb1935..6142dfd 100644
--- a/timers.h
+++ b/timers.h
@@ -1,38 +1,45 @@
-#ifndef __NOPACITY_TIMERS_H
-#define __NOPACITY_TIMERS_H
-
-class cNopacityTimer : public cListObject {
-    private:
-        cOsd *osd;
-        cPixmap *pixmapBackground;
-        cPixmap *pixmap;
-        cPixmap *pixmapLogo;
-        const cTimer *timer;
-        int numConflicts;
-        bool isTimerConflict;
-        const cFont *font;
-        const cFont *fontLarge;
-        int width;
-        int height;
-        int y;
-        cString Date;
-        cTextWrapper showName;
-        void DrawLogo(void);
-    public:
-        cNopacityTimer(cOsd *osd, const cTimer *timer, const cFont *font, const cFont *fontLarge);
-        cNopacityTimer(cOsd *osd, int numConflicts, const cFont *font, const cFont *fontLarge);
-        virtual ~cNopacityTimer(void);
-        void SetGeometry(int width, int y);
-        void CreateDate(void);
-        void CreateShowName(void);
-        void CreateConflictText(void);
-        void CalculateHeight(int space);
-        void CreatePixmaps(int x);
-        void SetAlpha(int alpha);
-        void Show(void);
-        void Hide(void);
-        int GetHeight(void) {return pixmap->ViewPort().Height();}
-        void Render(void);
-};
-
-#endif //__NOPACITY_TIMERS_H
+#ifndef __NOPACITY_TIMERS_H
+#define __NOPACITY_TIMERS_H
+
+#include <vdr/tools.h>
+#include <vdr/osd.h>
+#include <vdr/timers.h>
+#include "imagecache.h"
+
+class cNopacityTimer : public cListObject {
+    private:
+        cOsd *osd;
+        cImageCache *imgCache;
+        cPixmap *pixmapBackground;
+        cPixmap *pixmap;
+        cPixmap *pixmapLogo;
+        cPixmap *pixmapText;
+        const cTimer *timer;
+        int numConflicts;
+        bool isTimerConflict;
+        const cFont *font;
+        const cFont *fontLarge;
+        int width;
+        int height;
+        int y;
+        cString Date;
+        cTextWrapper showName;
+        int DrawLogo(void);
+    public:
+        cNopacityTimer(cOsd *osd, cImageCache *imgCache, const cTimer *timer, const cFont *font, const cFont *fontLarge);
+        cNopacityTimer(cOsd *osd, cImageCache *imgCache, int numConflicts, const cFont *font, const cFont *fontLarge);
+        virtual ~cNopacityTimer(void);
+        void SetGeometry(int width, int y);
+        void CreateDate(void);
+        void CreateShowName(void);
+        void CreateConflictText(void);
+        void CalculateHeight(int space);
+        void CreatePixmaps(int x);
+        void SetAlpha(int alpha);
+        void Show(void);
+        void Hide(void);
+        int GetHeight(void) {return pixmap->ViewPort().Height();}
+        void Render(void);
+};
+
+#endif //__NOPACITY_TIMERS_H

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/vdr-plugin-skinnopacity.git



More information about the pkg-vdr-dvb-changes mailing list