--- a/plugin.video.arte_tv/default.py
+++ b/plugin.video.arte_tv/default.py
@@ -6,6 +6,7 @@
 import sys
 import re
 import os
+import json
 import xbmcplugin
 import xbmcaddon
 import xbmcgui
@@ -15,10 +16,10 @@
 pluginhandle = int(sys.argv[1])
 addonID = "plugin.video.arte_tv"
 addon = xbmcaddon.Addon(id=addonID)
-translation = addon.getLocalizedString
-forceViewMode = addon.getSetting("forceViewMode") == "true"
+forceViewMode = addon.getSetting("forceView") == "true"
 useThumbAsFanart = addon.getSetting("useThumbAsFanart") == "true"
-viewMode = str(addon.getSetting("viewMode"))
+viewMode = str(addon.getSetting("viewID"))
+icon = xbmc.translatePath('special://home/addons/'+addonID+'/icon.png')
 baseUrl = "http://www.arte.tv"
 
 while (not os.path.exists(xbmc.translatePath("special://profile/addon_data/"+addonID+"/settings.xml"))):
@@ -40,43 +41,88 @@
     addDir(translation(30007), "by_date", "listCats", "")
     addDir(translation(30008), "", "search", "")
     addDir(translation(30012), "", "listWebLiveMain", "")
-    addLink(translation(30009), "", "playLiveStream", "")
-    xbmcplugin.endOfDirectory(pluginhandle)
-
-
-def listVideosOld(url):
-    urlMain = url
-    content = getUrl(url)
-    spl = content.split('<div class="video">')
-    for i in range(1, len(spl), 1):
-        entry = spl[i]
-        match = re.compile('<p>(.+?)</p>', re.DOTALL).findall(entry)
-        date = ""
-        if match:
-            date = match[0]
-        match = re.compile('<p class="teaserText">(.+?)</p>', re.DOTALL).findall(entry)
-        desc = ""
-        if match:
-            desc = cleanTitle(match[0])
-        desc = date+"\n"+desc
-        match = re.compile('<h2><a href="(.+?)">(.+?)</a></h2>', re.DOTALL).findall(entry)
-        url = "http://videos.arte.tv"+match[0][0]
-        title = cleanTitle(match[0][1])
-        entry = entry[entry.find('class="thumbnail"'):]
-        match = re.compile('src="(.+?)"', re.DOTALL).findall(entry)
-        thumb = "http://videos.arte.tv"+match[0]
-        addLink(title, url, 'playVideo', thumb, desc, "")
+    addLink(translation(30009), "", "playLiveStream", icon)
+    xbmcplugin.endOfDirectory(pluginhandle)
+
+
+def listVideosNew(url):
+    xbmcplugin.setContent(pluginhandle, "episodes")
+    content = getUrl(url)
+    content = json.loads(content)
+    for item in content["videos"]:
+        title = item["title"].encode('utf-8')
+        try:
+            desc = item["desc"].encode('utf-8')
+        except:
+            desc = ""
+        try:
+            duration = str(item["duration"])
+        except:
+            duration = ""
+        try:
+            date = item["airdate_long"].encode('utf-8')
+        except:
+            date = ""
+        try:
+            url = item["url"]
+        except:
+            url = ""
+        try:
+            thumb = item["image_url"]
+        except:
+            thumb = ""
+        try:
+            channels = item["video_channels"].encode('utf-8')
+        except:
+            channels = ""
+        try:
+            views = str(item["video_views"])
+        except:
+            views = ""
+        try:
+            until = item["video_rights_until"].encode('utf-8')
+        except:
+            until = ""
+        try:
+            rank = str(item["video_rank"])
+        except:
+            rank = ""
+        desc = views+"   |   "+date+"\n"+channels+"\n"+desc
+        addLink(cleanTitle(title), baseUrl+url, 'playVideoNew', thumb, desc, duration)
     xbmcplugin.endOfDirectory(pluginhandle)
     if forceViewMode:
         xbmc.executebuiltin('Container.SetViewMode('+viewMode+')')
 
 
-def listVideosNew(url):
-    content = getUrl(url)
-    match = re.compile('\\{"image_url":"(.+?)","title":"(.+?)","duration":(.+?),"airdate_long":"(.+?)","desc":(.*?),"url":"(.+?)","video_channels":"(.*?)","video_views":"(.+?)","video_rights_until":"(.+?)","video_rank":(.*?)\\}', re.DOTALL).findall(content)
-    for thumb, title, duration, date, desc, url, channels, views, until, rank in match:
-        desc = views+"   |   "+date+"\n"+channels+"\n"+cleanTitle(desc).replace('"', '').replace("null", "")
-        addLink(cleanTitle(title), baseUrl+url, 'playVideoNew', thumb, desc, duration)
+def listSearchVideos(urlMain):
+    xbmcplugin.setContent(pluginhandle, "episodes")
+    try:
+        content = getUrl(urlMain)
+        spl = content.split('<div class="video-block has-play"')
+        for i in range(1, len(spl), 1):
+            entry = spl[i]
+            match = re.compile('alt="(.+?)"', re.DOTALL).findall(entry)
+            title = cleanTitle(match[0])
+            match = re.compile('data-description="(.+?)"', re.DOTALL).findall(entry)
+            desc = ""
+            if match:
+                desc = cleanTitle(match[0])
+            match = re.compile('<p class="time-row">.+?<span class=".+?">.+?</span>(.+?)</p>.+?<p class=".+?">.+?<span class=".+?">.+?</span>(.+?)</p>', re.DOTALL).findall(entry)
+            if match:
+                date = match[0][0].strip()
+                desc = date+"\n"+desc
+                duration = match[0][1].strip()
+                duration = duration.split(" ")[0]
+            match = re.compile('href="(.+?)"', re.DOTALL).findall(entry)
+            url = match[0]
+            match = re.compile('src="(.+?)"', re.DOTALL).findall(entry)
+            thumb = match[0]
+            addLink(title, url, 'playVideoNew', thumb, desc, duration)
+        currentPage = urlMain[urlMain.find("page=")+5:]
+        nextPage = str(int(currentPage)+1)
+        addDir(translation(30010), urlMain.replace("page="+currentPage,"page="+nextPage), "listSearchVideos", "")
+    except:
+        pass
     xbmcplugin.endOfDirectory(pluginhandle)
     if forceViewMode:
         xbmc.executebuiltin('Container.SetViewMode('+viewMode+')')
@@ -95,19 +141,19 @@
 
 
 def search():
-    keyboard = xbmc.Keyboard('', translation(30005))
+    keyboard = xbmc.Keyboard('', translation(30008))
     keyboard.doModal()
     if keyboard.isConfirmed() and keyboard.getText():
         search_string = keyboard.getText().replace(" ", "+")
         if language == "de":
-            url = "http://videos.arte.tv/de/do_search/videos/suche?q="+search_string
+            url = "http://www.arte.tv/guide/de/suchergebnisse?keyword="+search_string+"&page=1"
         elif language == "fr":
-            url = "http://videos.arte.tv/fr/do_search/videos/recherche?q="+search_string
-        listVideosOld(url)
+            url = "http://www.arte.tv/guide/fr/resultats-de-recherche?keyword="+search_string+"&page=1"
+        listSearchVideos(url)
 
 
 def searchWebLive():
-    keyboard = xbmc.Keyboard('', translation(30005))
+    keyboard = xbmc.Keyboard('', translation(30008))
     keyboard.doModal()
     if keyboard.isConfirmed() and keyboard.getText():
         search_string = keyboard.getText().replace(" ", "+")
@@ -163,42 +209,22 @@
         xbmc.executebuiltin('Container.SetViewMode('+viewMode+')')
 
 
-def playVideo(url):
-    url = url.replace("/videos/", "/do_delegate/videos/").replace(".html", ",view,asPlayerXml.xml")
-    content = getUrl(url)
-    match = re.compile('<video lang="'+language+'" ref="(.+?)"', re.DOTALL).findall(content)
-    url = match[0]
-    content = getUrl(url)
-    match1 = re.compile('<url quality="hd">(.+?)</url>', re.DOTALL).findall(content)
-    match2 = re.compile('<url quality="sd">(.+?)</url>', re.DOTALL).findall(content)
-    urlNew = ""
-    if match1:
-        urlNew = match1[0]
+def playVideoNew(url):
+    listitem = xbmcgui.ListItem(path=getStreamUrlNew(url))
+    xbmcplugin.setResolvedUrl(pluginhandle, True, listitem)
+
+
+def getStreamUrlNew(url):
+    content = getUrl(url)
+    match = re.compile('arte_vp_url="(.+?)">', re.DOTALL).findall(content)
+    url = match[0].replace("/player/","/")
+    content = getUrl(url)
+    match1 = re.compile('"HBBTV","VQU":"SQ","VMT":"mp4","VUR":"(.+?)"', re.DOTALL).findall(content)
+    match2 = re.compile('"HBBTV","VQU":"EQ","VMT":"mp4","VUR":"(.+?)"', re.DOTALL).findall(content)
+    if match1 and maxVideoQuality == "720p":
+        return match1[0]
     elif match2:
-        urlNew = match2[0]
-    if urlNew != "":
-        urlNew = urlNew.replace("MP4:", "mp4:")
-        base = urlNew[:urlNew.find("mp4:")]
-        playpath = urlNew[urlNew.find("mp4:"):]
-        listitem = xbmcgui.ListItem(path=base+" playpath="+playpath+" swfVfy=1 swfUrl=http://videos.arte.tv/blob/web/i18n/view/player_24-3188338-data-5168030.swf")
-        xbmcplugin.setResolvedUrl(pluginhandle, True, listitem)
-
-
-def playVideoNew(url):
-    content = getUrl(url)
-    match = re.compile('arte_vp_url="(.+?)">', re.DOTALL).findall(content)
-    url = match[0]
-    content = getUrl(url)
-    match1 = re.compile('"RTMP_SQ_1":\\{"quality":"HD - 720p","width":.+?,"height":.+?,"mediaType":"rtmp","mimeType":"application/x-fcs","bitrate":.+?,"streamer":"(.+?)","url":"(.+?)"', re.DOTALL).findall(content)
-    match2 = re.compile('"RTMP_MQ_1":\\{"quality":"SD - 400p","width":.+?,"height":.+?,"mediaType":"rtmp","mimeType":"application/x-fcs","bitrate":.+?,"streamer":"(.+?)","url":"(.+?)"', re.DOTALL).findall(content)
-    if match1 and maxVideoQuality == "720p":
-        base = match1[0][0]
-        playpath = match1[0][1]
-    elif match2:
-        base = match2[0][0]
-        playpath = match2[0][1]
-    listitem = xbmcgui.ListItem(path=base+" playpath=mp4:"+playpath)
-    xbmcplugin.setResolvedUrl(pluginhandle, True, listitem)
+        return match2[0]
 
 
 def queueVideo(url, name):
@@ -263,6 +289,10 @@
     return link
 
 
+def translation(id):
+    return addon.getLocalizedString(id).encode('utf-8')
+
+
 def parameters_string_to_dict(parameters):
     paramDict = {}
     if parameters:
@@ -280,7 +310,7 @@
     liz = xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage)
     liz.setInfo(type="Video", infoLabels={"Title": name, "Plot": desc, "Duration": duration})
     liz.setProperty('IsPlayable', 'true')
-    if useThumbAsFanart:
+    if useThumbAsFanart and iconimage!=icon:
         liz.setProperty("fanart_image", iconimage)
     liz.addContextMenuItems([(translation(30020), 'RunPlugin(plugin://'+addonID+'/?mode=queueVideo&url='+urllib.quote_plus(u)+'&name='+urllib.quote_plus(name)+')',)])
     ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz)
@@ -300,14 +330,12 @@
 url = urllib.unquote_plus(params.get('url', ''))
 name = urllib.unquote_plus(params.get('name', ''))
 
-if mode == 'listVideos':
-    listVideos(url)
-elif mode == 'listVideosNew':
+if mode == 'listVideosNew':
     listVideosNew(url)
+elif mode == 'listSearchVideos':
+    listSearchVideos(url)
 elif mode == 'listCats':
     listCats(url)
-elif mode == 'playVideo':
-    playVideo(url)
 elif mode == 'queueVideo':
     queueVideo(url, name)
 elif mode == 'playVideoNew':