diff --git a/app/images/icon.css b/app/images/icon.css
index 4d006b87376286510d4720f19fde1a4a8b5efd9c..f457b9e7bc219ada31b8128bd3290faef16df5f1 100644
--- a/app/images/icon.css
+++ b/app/images/icon.css
@@ -1,3 +1,3 @@
-.icon-pling-store {
+.icon-ocs-store {
     background-image: url(app-icons/pling-store.svg);
 }
diff --git a/app/main.js b/app/main.js
index 05a7a4ce24f6bd5dd7fd44c12773567f3432eb8d..ca5172797b7b7c2e0a0066fcbf1c0d5607202877 100644
--- a/app/main.js
+++ b/app/main.js
@@ -1,7 +1,7 @@
 const fs = require('fs');
 const {spawn} = require('child_process');
 
-const {app, BrowserWindow, BrowserView, ipcMain} = require('electron');
+const {app, BrowserWindow, ipcMain} = require('electron');
 const ElectronStore = require('electron-store');
 const request = require('request');
 
@@ -12,13 +12,10 @@ const ocsManagerConfig = require('./configs/ocs-manager.json');
 const isDebugMode = process.argv.includes('--debug');
 const previewpicDirectory = `${app.getPath('userData')}/previewpic`;
 const windowIcon = `${__dirname}/images/app-icons/ocs-store.png`;
-const windowIndexFileUrl = `file://${__dirname}/index.html`;
-const viewSessionPartition = 'persist:opendesktop';
-const viewPreloadScript = `${__dirname}/scripts/renderers/browser-view.js`;
+const indexFileUrl = `file://${__dirname}/index.html`;
 const appConfigStoreStorage = 'application';
 
 let mainWindow = null;
-let mainView = null;
 let ocsManager = null;
 let ocsManagerUrl = '';
 
@@ -62,7 +59,6 @@ async function startOcsManager() {
 function stopOcsManager() {
     if (ocsManager) {
         ocsManager.kill();
-        ocsManager = null;
         ocsManagerUrl = '';
     }
 }
@@ -87,6 +83,12 @@ function createWindow() {
         }
     });
 
+    if (!isDebugMode) {
+        mainWindow.setMenu(null);
+    }
+
+    mainWindow.loadURL(indexFileUrl);
+
     mainWindow.on('close', () => {
         const appConfigStore = new ElectronStore({name: appConfigStoreStorage});
         appConfigStore.set('windowBounds', mainWindow.getBounds());
@@ -94,149 +96,19 @@ function createWindow() {
 
     mainWindow.on('closed', () => {
         mainWindow = null;
-        if (mainView) {
-            mainView.destroy();
-            mainView = null;
-        }
     });
 
     if (isDebugMode) {
-        mainWindow.webContents.openDevTools({mode: 'detach'});
-    } else {
-        mainWindow.setMenu(null);
+        mainWindow.webContents.openDevTools();
     }
-
-    mainWindow.loadURL(windowIndexFileUrl);
-    mainWindow.maximize();
-    createView();
-}
-
-function createView() {
-    const detectOcsApiInfo = (url) => {
-        // Detect provider key and content id from page url
-        // https://www.opendesktop.org/s/Gnome/p/123456789/?key=val#hash
-        //
-        // providerKey = https://www.opendesktop.org/ocs/v1/
-        // contentId = 123456789
-        const info = {
-            providerKey: '',
-            contentId: ''
-        };
-        const matches = url.match(/(https?:\/\/[^/]+).*\/p\/([^/?#]+)/);
-        if (matches) {
-            info.providerKey = `${matches[1]}/ocs/v1/`;
-            info.contentId = matches[2];
-        }
-        return info;
-    };
-
-    mainView = new BrowserView({
-        webPreferences: {
-            nodeIntegration: false,
-            partition: viewSessionPartition,
-            preload: viewPreloadScript
-        }
-    });
-
-    mainWindow.setBrowserView(mainView);
-
-    const windowBounds = mainWindow.getBounds();
-    mainView.setBounds({
-        x: 0,
-        y: 40,
-        width: windowBounds.width,
-        height: windowBounds.height
-    });
-
-    mainView.setAutoResize({
-        width: true,
-        height: true
-    });
-
-    mainView.webContents.on('did-start-loading', () => {
-        mainWindow.webContents.send('browserView_loading', {isLoading: true});
-    });
-
-    mainView.webContents.on('did-stop-loading', () => {
-        mainWindow.webContents.send('browserView_loading', {isLoading: false});
-    });
-
-    mainView.webContents.on('dom-ready', () => {
-        mainWindow.webContents.send('browserView_page', {
-            url: mainView.webContents.getURL(),
-            title: mainView.webContents.getTitle(),
-            canGoBack: mainView.webContents.canGoBack(),
-            canGoForward: mainView.webContents.canGoForward()
-        });
-
-        if (isDebugMode) {
-            mainView.webContents.openDevTools({mode: 'detach'});
-        }
-
-        mainView.webContents.send('ipcMessage');
-    });
-
-    mainView.webContents.on('new-window', (event, url) => {
-        if (url.startsWith('http://') || url.startsWith('https://')) {
-            event.preventDefault();
-            mainWindow.webContents.send('ocsManager_openUrl', {url: url});
-        }
-    });
-
-    mainView.webContents.on('will-navigate', (event, url) => {
-        if (url.startsWith('ocs://') || url.startsWith('ocss://')) {
-            event.preventDefault();
-            const info = detectOcsApiInfo(mainView.webContents.getURL());
-            mainWindow.webContents.send('ocsManager_getItemByOcsUrl', {url: url, ...info});
-        }
-    });
-
-    ipcMain.on('browserView_loadUrl', (event, url) => {
-        mainView.webContents.loadURL(url);
-        event.returnValue = undefined;
-    });
-
-    ipcMain.on('browserView_getUrl', (event) => {
-        event.returnValue = mainView.webContents.getURL();
-    });
-
-    ipcMain.on('browserView_getTitle', (event) => {
-        event.returnValue = mainView.webContents.getTitle();
-    });
-
-    ipcMain.on('browserView_goBack', (event) => {
-        mainView.webContents.goBack();
-        event.returnValue = undefined;
-    });
-
-    ipcMain.on('browserView_goForward', (event) => {
-        mainView.webContents.goForward();
-        event.returnValue = undefined;
-    });
-
-    ipcMain.on('browserView_reload', (event) => {
-        mainView.webContents.reload();
-        event.returnValue = undefined;
-    });
-
-    ipcMain.on('browserView_stop', (event) => {
-        mainView.webContents.stop();
-        event.returnValue = undefined;
-    });
-
-    //ipcMain.on('ipcMessage', (event) => {});
-
-    const appConfigStore = new ElectronStore({name: appConfigStoreStorage});
-    const startPage = appConfigStore.get('startPage');
-
-    mainView.webContents.loadURL(startPage);
 }
 
 function isFile(path) {
     try {
         const stats = fs.statSync(path);
         return stats.isFile();
-    } catch (error) {
+    }
+    catch (error) {
         console.error(error);
         return false;
     }
@@ -246,7 +118,8 @@ function isDirectory(path) {
     try {
         const stats = fs.statSync(path);
         return stats.isDirectory();
-    } catch (error) {
+    }
+    catch (error) {
         console.error(error);
         return false;
     }
@@ -266,24 +139,14 @@ function previewpicFilename(itemKey) {
     return btoa(itemKey).slice(-255);
 }
 
-function downloadPreviewpic(itemKey) {
-    const selector = 'meta[property="og:image"]';
-    mainView.webContents.executeJavaScript(
-        `document.querySelector('${selector}').content`,
-        false,
-        (result) => {
-            const previewpicUrl = result || '';
-            if (previewpicUrl) {
-                if (!isDirectory(previewpicDirectory)) {
-                    fs.mkdirSync(previewpicDirectory);
-                }
-                const path = `${previewpicDirectory}/${previewpicFilename(itemKey)}`;
-                request.get(previewpicUrl).on('error', (error) => {
-                    console.error(error);
-                }).pipe(fs.createWriteStream(path));
-            }
-        }
-    );
+function downloadPreviewpic(itemKey, url) {
+    if (!isDirectory(previewpicDirectory)) {
+        fs.mkdirSync(previewpicDirectory);
+    }
+    const path = `${previewpicDirectory}/${previewpicFilename(itemKey)}`;
+    request.get(url).on('error', (error) => {
+        console.error(error);
+    }).pipe(fs.createWriteStream(path));
 }
 
 function removePreviewpic(itemKey) {
@@ -296,7 +159,8 @@ function removePreviewpic(itemKey) {
 app.on('ready', async () => {
     if (await startOcsManager()) {
         createWindow();
-    } else {
+    }
+    else {
         app.quit();
     }
 });
@@ -317,7 +181,7 @@ app.on('activate', () => {
     }
 });
 
-/*app.on('web-contents-created', (event, webContents) => {
+app.on('web-contents-created', (event, webContents) => {
     if (webContents.getType() === 'webview') {
         webContents.on('will-navigate', (event, url) => {
             if (url.startsWith('ocs://') || url.startsWith('ocss://')) {
@@ -326,7 +190,7 @@ app.on('activate', () => {
             }
         });
     }
-});*/
+});
 
 ipcMain.on('app', (event, key) => {
     const data = {
@@ -356,15 +220,19 @@ ipcMain.on('store', (event, key, value) => {
 ipcMain.on('previewpic', (event, kind, itemKey, url) => {
     if (kind === 'directory') {
         event.returnValue = previewpicDirectory;
-    } else if (kind === 'path' && itemKey) {
+    }
+    else if (kind === 'path' && itemKey) {
         event.returnValue = `${previewpicDirectory}/${previewpicFilename(itemKey)}`;
-    } else if (kind === 'download' && itemKey && url) {
+    }
+    else if (kind === 'download' && itemKey && url) {
         downloadPreviewpic(itemKey, url);
         event.returnValue = undefined;
-    } else if (kind === 'remove' && itemKey) {
+    }
+    else if (kind === 'remove' && itemKey) {
         removePreviewpic(itemKey);
         event.returnValue = undefined;
-    } else {
+    }
+    else {
         event.returnValue = false;
     }
 });
diff --git a/app/scripts/components/AboutdialogComponent.js b/app/scripts/components/AboutdialogComponent.js
index 67d5ab308d8d49478d4e5598dec062a45d2b0cea..888da734bd8d6947d7ce5ddf42dad1041817008d 100644
--- a/app/scripts/components/AboutdialogComponent.js
+++ b/app/scripts/components/AboutdialogComponent.js
@@ -41,7 +41,7 @@ export default class AboutdialogComponent extends BaseComponent {
                 padding: 1em;
                 text-align: center;
             }
-            div[slot="content"] figure.icon-pling-store {
+            div[slot="content"] figure.icon-ocs-store {
                 display: inline-block;
                 width: 128px;
                 height: 128px;
@@ -58,7 +58,7 @@ export default class AboutdialogComponent extends BaseComponent {
             <app-dialog data-width="500px" data-footer-state="inactive">
             <h3 slot="header">About This App</h3>
             <div slot="content">
-            <figure class="icon-pling-store"></figure>
+            <figure class="icon-ocs-store"></figure>
             <h4>${this.state.productName}</h4>
             <p>Version ${this.state.version}</p>
             <p>${this.state.description}</p>
@@ -87,7 +87,7 @@ export default class AboutdialogComponent extends BaseComponent {
     _handleClick(event) {
         if (event.target.closest('a')) {
             event.preventDefault();
-            this.dispatch('browserView_loadUrl', {url: event.target.closest('a').href});
+            this.dispatch('webview_loadUrl', {url: event.target.closest('a').href});
             this.close();
         }
     }
diff --git a/app/scripts/components/OmniboxComponent.js b/app/scripts/components/OmniboxComponent.js
index 822ec6a75f5e2b972c7432fa9e1d7232509c9d4f..4f02389f05bddbc1e4fac44f88c80a3d973e7335 100644
--- a/app/scripts/components/OmniboxComponent.js
+++ b/app/scripts/components/OmniboxComponent.js
@@ -15,24 +15,24 @@ export default class OmniboxComponent extends BaseComponent {
 
         this.contentRoot.addEventListener('click', this._handleClick.bind(this));
 
-        this._viewHandler_browserView_loading = this._viewHandler_browserView_loading.bind(this);
-        this._viewHandler_browserView_page = this._viewHandler_browserView_page.bind(this);
+        this._viewHandler_webview_loading = this._viewHandler_webview_loading.bind(this);
+        this._viewHandler_webview_page = this._viewHandler_webview_page.bind(this);
         this._viewHandler_ocsManager_updateAvailableItems = this._viewHandler_ocsManager_updateAvailableItems.bind(this);
         this._viewHandler_ocsManager_metadataSet = this._viewHandler_ocsManager_metadataSet.bind(this);
     }
 
     componentConnectedCallback() {
         this.getStateManager().viewHandler
-            .add('browserView_loading', this._viewHandler_browserView_loading)
-            .add('browserView_page', this._viewHandler_browserView_page)
+            .add('webview_loading', this._viewHandler_webview_loading)
+            .add('webview_page', this._viewHandler_webview_page)
             .add('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems)
             .add('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet);
     }
 
     componentDisconnectedCallback() {
         this.getStateManager().viewHandler
-            .remove('browserView_loading', this._viewHandler_browserView_loading)
-            .remove('browserView_page', this._viewHandler_browserView_page)
+            .remove('webview_loading', this._viewHandler_webview_loading)
+            .remove('webview_page', this._viewHandler_webview_page)
             .remove('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems)
             .remove('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet);
     }
@@ -231,12 +231,12 @@ export default class OmniboxComponent extends BaseComponent {
             <h4><i class="material-icons md-small">home</i> Choose Startpage</h4>
             <nav>
             <ul>
-            <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/">pling.com</app-button></li>
-            <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/Gnome">gnome-look.org</app-button></li>
-            <li><app-button data-action="browserView_startPage" data-url="https://store.kde.org/">store.kde.org</app-button></li>
-            <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/XFCE">xfce-look.org</app-button></li>
-            <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/Window-Managers">box-look.org</app-button></li>
-            <li><app-button data-action="browserView_startPage" data-url="https://www.opendesktop.org/s/Enlightenment">enlightenment-themes.org</app-button></li>
+            <li><app-button data-action="webview_startPage" data-url="https://www.pling.com/">pling.com</app-button></li>
+            <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/Gnome">gnome-look.org</app-button></li>
+            <li><app-button data-action="webview_startPage" data-url="https://store.kde.org/">store.kde.org</app-button></li>
+            <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/XFCE">xfce-look.org</app-button></li>
+            <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/Window-Managers">box-look.org</app-button></li>
+            <li><app-button data-action="webview_startPage" data-url="https://www.opendesktop.org/s/Enlightenment">enlightenment-themes.org</app-button></li>
             </ul>
             </nav>
             </div>
@@ -247,12 +247,12 @@ export default class OmniboxComponent extends BaseComponent {
     }
 
     componentUpdatedCallback() {
-        if (this.contentRoot.querySelector('app-button[data-action="browserView_startPage"][data-checked]')) {
-            this.contentRoot.querySelector('app-button[data-action="browserView_startPage"][data-checked]').removeAttribute('data-checked');
+        if (this.contentRoot.querySelector('app-button[data-action="webview_startPage"][data-checked]')) {
+            this.contentRoot.querySelector('app-button[data-action="webview_startPage"][data-checked]').removeAttribute('data-checked');
         }
 
-        if (this.contentRoot.querySelector(`app-button[data-action="browserView_startPage"][data-url="${this.state.startPage}"]`)) {
-            this.contentRoot.querySelector(`app-button[data-action="browserView_startPage"][data-url="${this.state.startPage}"]`).setAttribute('data-checked', 'data-checked');
+        if (this.contentRoot.querySelector(`app-button[data-action="webview_startPage"][data-url="${this.state.startPage}"]`)) {
+            this.contentRoot.querySelector(`app-button[data-action="webview_startPage"][data-url="${this.state.startPage}"]`).setAttribute('data-checked', 'data-checked');
         }
     }
 
@@ -300,8 +300,8 @@ export default class OmniboxComponent extends BaseComponent {
                 this.dispatch('ocsManager_openUrl', {url: target.getAttribute('data-url')});
                 break;
             }
-            case 'browserView_startPage': {
-                this.dispatch('browserView_startPage', {url: target.getAttribute('data-url')});
+            case 'webview_startPage': {
+                this.dispatch('webview_startPage', {url: target.getAttribute('data-url')});
                 this.close();
                 break;
             }
@@ -313,12 +313,12 @@ export default class OmniboxComponent extends BaseComponent {
         }
     }
 
-    _viewHandler_browserView_loading(state) {
+    _viewHandler_webview_loading(state) {
         const indicator = this.contentRoot.querySelector('div[data-omnibox] app-indicator');
         state.isLoading ? indicator.start() : indicator.stop();
     }
 
-    _viewHandler_browserView_page(state) {
+    _viewHandler_webview_page(state) {
         this.update({...this.state, ...state});
     }
 
diff --git a/app/scripts/components/RootComponent.js b/app/scripts/components/RootComponent.js
index bd6e8ac8da4ef5feac9f11a392ff81ffd67fe3b2..a5a4d36ff116ed7f2c0b7e345a64cb308187af03 100644
--- a/app/scripts/components/RootComponent.js
+++ b/app/scripts/components/RootComponent.js
@@ -5,8 +5,7 @@ import Chirit from '../../libs/chirit/Chirit.js';
 import OcsManagerApi from '../api/OcsManagerApi.js';
 
 import GeneralHandler from '../handlers/GeneralHandler.js';
-//import WebviewHandler from '../handlers/WebviewHandler.js';
-import BrowserViewHandler from '../handlers/BrowserViewHandler.js';
+import WebviewHandler from '../handlers/WebviewHandler.js';
 import OcsManagerHandler from '../handlers/OcsManagerHandler.js';
 
 import BaseComponent from './common/BaseComponent.js';
@@ -21,8 +20,7 @@ export default class RootComponent extends BaseComponent {
         const ocsManagerApi = new OcsManagerApi(ipcRenderer.sendSync('ocs-manager', 'url'));
 
         new GeneralHandler(this._stateManager, ipcRenderer);
-        //new WebviewHandler(this._stateManager, ipcRenderer);
-        new BrowserViewHandler(this._stateManager, ipcRenderer);
+        new WebviewHandler(this._stateManager, ipcRenderer);
         new OcsManagerHandler(this._stateManager, ipcRenderer, ocsManagerApi);
     }
 
@@ -41,7 +39,7 @@ export default class RootComponent extends BaseComponent {
 
             <app-page id="browser">
             <app-toolbar slot="header"></app-toolbar>
-            <!--<app-webview slot="content"></app-webview>-->
+            <app-webview slot="content"></app-webview>
             </app-page>
 
             <app-collectiondialog></app-collectiondialog>
diff --git a/app/scripts/components/SplashscreenComponent.js b/app/scripts/components/SplashscreenComponent.js
index 989bfc089ef42f6ab34b0ee44118b459dfebd68b..134848fd853b116bcc61e10af4d50459511ad3c1 100644
--- a/app/scripts/components/SplashscreenComponent.js
+++ b/app/scripts/components/SplashscreenComponent.js
@@ -3,17 +3,17 @@ import BaseComponent from './common/BaseComponent.js';
 export default class SplashscreenComponent extends BaseComponent {
 
     init() {
-        this._viewHandler_browserView_loading = this._viewHandler_browserView_loading.bind(this);
+        this._viewHandler_webview_loading = this._viewHandler_webview_loading.bind(this);
     }
 
     componentConnectedCallback() {
         this.getStateManager().viewHandler
-            .add('browserView_loading', this._viewHandler_browserView_loading);
+            .add('webview_loading', this._viewHandler_webview_loading);
     }
 
     componentDisconnectedCallback() {
         this.getStateManager().viewHandler
-            .remove('browserView_loading', this._viewHandler_browserView_loading);
+            .remove('webview_loading', this._viewHandler_webview_loading);
     }
 
     render() {
@@ -31,7 +31,7 @@ export default class SplashscreenComponent extends BaseComponent {
                 align-items: center;
                 justify-content: center;
             }
-            div[slot="content"] figure.icon-pling-store {
+            div[slot="content"] figure.icon-ocs-store {
                 display: inline-block;
                 width: 128px;
                 height: 128px;
@@ -47,7 +47,7 @@ export default class SplashscreenComponent extends BaseComponent {
             <app-dialog data-width="400px" data-height="300px"
                 data-state="active" data-header-state="inactive" data-footer-state="inactive" data-auto-close-state="inactive">
             <div slot="content">
-            <figure class="icon-pling-store"></figure>
+            <figure class="icon-ocs-store"></figure>
             <h3>Welcome to ${document.title}</h3>
             <p>Loading...</p>
             </div>
@@ -55,7 +55,7 @@ export default class SplashscreenComponent extends BaseComponent {
         `;
     }
 
-    _viewHandler_browserView_loading(state) {
+    _viewHandler_webview_loading(state) {
         if (!state.isLoading) {
             this.contentRoot.querySelector('app-dialog').close();
             // Splash screen only shows when app launch, so remove it
diff --git a/app/scripts/components/ToolbarComponent.js b/app/scripts/components/ToolbarComponent.js
index 9a09b6a6ecbdfbebdd682ef90f9403d5fe26009a..73bc1fdb353da8c35aae318be1be0a1c3eaae2c3 100644
--- a/app/scripts/components/ToolbarComponent.js
+++ b/app/scripts/components/ToolbarComponent.js
@@ -5,24 +5,24 @@ export default class ToolbarComponent extends BaseComponent {
     init() {
         this.contentRoot.addEventListener('click', this._handleClick.bind(this));
 
-        this._viewHandler_browserView_loading = this._viewHandler_browserView_loading.bind(this);
-        this._viewHandler_browserView_page = this._viewHandler_browserView_page.bind(this);
+        this._viewHandler_webview_loading = this._viewHandler_webview_loading.bind(this);
+        this._viewHandler_webview_page = this._viewHandler_webview_page.bind(this);
         this._viewHandler_ocsManager_updateAvailableItems = this._viewHandler_ocsManager_updateAvailableItems.bind(this);
         this._viewHandler_ocsManager_metadataSet = this._viewHandler_ocsManager_metadataSet.bind(this);
     }
 
     componentConnectedCallback() {
         this.getStateManager().viewHandler
-            .add('browserView_loading', this._viewHandler_browserView_loading)
-            .add('browserView_page', this._viewHandler_browserView_page)
+            .add('webview_loading', this._viewHandler_webview_loading)
+            .add('webview_page', this._viewHandler_webview_page)
             .add('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems)
             .add('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet);
     }
 
     componentDisconnectedCallback() {
         this.getStateManager().viewHandler
-            .remove('browserView_loading', this._viewHandler_browserView_loading)
-            .remove('browserView_page', this._viewHandler_browserView_page)
+            .remove('webview_loading', this._viewHandler_webview_loading)
+            .remove('webview_page', this._viewHandler_webview_page)
             .remove('ocsManager_updateAvailableItems', this._viewHandler_ocsManager_updateAvailableItems)
             .remove('ocsManager_metadataSet', this._viewHandler_ocsManager_metadataSet);
     }
@@ -67,10 +67,10 @@ export default class ToolbarComponent extends BaseComponent {
                 }
             }
 
-            app-iconbutton[data-action="browserView_reload"][data-state="inactive"] {
+            app-iconbutton[data-action="webview_reload"][data-state="inactive"] {
                 display: none;
             }
-            app-iconbutton[data-action="browserView_stop"][data-state="inactive"] {
+            app-iconbutton[data-action="webview_stop"][data-state="inactive"] {
                 display: none;
             }
 
@@ -99,21 +99,21 @@ export default class ToolbarComponent extends BaseComponent {
             <nav data-toolbar>
             <ul>
             <li>
-            <app-iconbutton data-action="browserView_goBack"
+            <app-iconbutton data-action="webview_goBack"
                 data-title="Back" data-icon="arrow_back" data-state="inactive"></app-iconbutton>
             </li>
             <li>
-            <app-iconbutton data-action="browserView_goForward"
+            <app-iconbutton data-action="webview_goForward"
                 data-title="Forward" data-icon="arrow_forward" data-state="inactive"></app-iconbutton>
             </li>
             <li>
-            <app-iconbutton data-action="browserView_reload"
+            <app-iconbutton data-action="webview_reload"
                 data-title="Reload" data-icon="refresh" data-state="active"></app-iconbutton>
-            <app-iconbutton data-action="browserView_stop"
+            <app-iconbutton data-action="webview_stop"
                 data-title="Stop" data-icon="close" data-state="inactive"></app-iconbutton>
             </li>
             <li>
-            <app-iconbutton data-action="browserView_startPage"
+            <app-iconbutton data-action="webview_startPage"
                 data-title="Startpage" data-icon="home"></app-iconbutton>
             </li>
             <li>
@@ -127,7 +127,7 @@ export default class ToolbarComponent extends BaseComponent {
             <app-iconbutton data-action="menu_open"
                 data-title="Other Operations..." data-icon="more_vert"></app-iconbutton><br>
             <app-menu data-width="250px" data-offset-x="-220px">
-            <a slot="menuitem" href="#" data-action="browserView_appBugsPage">Report a Bug</a>
+            <a slot="menuitem" href="#" data-action="webview_appBugsPage">Report a Bug</a>
             <a slot="menuitem" href="#" data-action="general_about">About This App</a>
             </app-menu>
             </li>
@@ -150,24 +150,24 @@ export default class ToolbarComponent extends BaseComponent {
         }
 
         switch (target.getAttribute('data-action')) {
-            case 'browserView_goBack': {
-                this.dispatch('browserView_goBack', {});
+            case 'webview_goBack': {
+                this.dispatch('webview_goBack', {});
                 break;
             }
-            case 'browserView_goForward': {
-                this.dispatch('browserView_goForward', {});
+            case 'webview_goForward': {
+                this.dispatch('webview_goForward', {});
                 break;
             }
-            case 'browserView_reload': {
-                this.dispatch('browserView_reload', {});
+            case 'webview_reload': {
+                this.dispatch('webview_reload', {});
                 break;
             }
-            case 'browserView_stop': {
-                this.dispatch('browserView_stop', {});
+            case 'webview_stop': {
+                this.dispatch('webview_stop', {});
                 break;
             }
-            case 'browserView_startPage': {
-                this.dispatch('browserView_startPage', {});
+            case 'webview_startPage': {
+                this.dispatch('webview_startPage', {});
                 break;
             }
             case 'ocsManager_collection': {
@@ -178,8 +178,8 @@ export default class ToolbarComponent extends BaseComponent {
                 this.contentRoot.querySelector('app-menu').open();
                 break;
             }
-            case 'browserView_appBugsPage': {
-                this.dispatch('browserView_appBugsPage', {});
+            case 'webview_appBugsPage': {
+                this.dispatch('webview_appBugsPage', {});
                 this.contentRoot.querySelector('app-menu').close();
                 break;
             }
@@ -191,17 +191,17 @@ export default class ToolbarComponent extends BaseComponent {
         }
     }
 
-    _viewHandler_browserView_loading(state) {
-        this.contentRoot.querySelector('app-iconbutton[data-action="browserView_reload"]')
+    _viewHandler_webview_loading(state) {
+        this.contentRoot.querySelector('app-iconbutton[data-action="webview_reload"]')
             .setAttribute('data-state', state.isLoading ? 'inactive' : 'active');
-        this.contentRoot.querySelector('app-iconbutton[data-action="browserView_stop"]')
+        this.contentRoot.querySelector('app-iconbutton[data-action="webview_stop"]')
             .setAttribute('data-state', state.isLoading ? 'active' : 'inactive');
     }
 
-    _viewHandler_browserView_page(state) {
-        this.contentRoot.querySelector('app-iconbutton[data-action="browserView_goBack"]')
+    _viewHandler_webview_page(state) {
+        this.contentRoot.querySelector('app-iconbutton[data-action="webview_goBack"]')
             .setAttribute('data-state', state.canGoBack ? 'active' : 'inactive');
-        this.contentRoot.querySelector('app-iconbutton[data-action="browserView_goForward"]')
+        this.contentRoot.querySelector('app-iconbutton[data-action="webview_goForward"]')
             .setAttribute('data-state', state.canGoForward ? 'active' : 'inactive');
     }
 
diff --git a/app/scripts/components/index.js b/app/scripts/components/index.js
index 382ab7c96c284eff7d71b11ea89d8c000b2c7cc3..318c00d9deabbbeb4de1069186de8eb20945e968 100644
--- a/app/scripts/components/index.js
+++ b/app/scripts/components/index.js
@@ -31,6 +31,9 @@ ToolbarComponent.define('app-toolbar');
 import OmniboxComponent from './OmniboxComponent.js';
 OmniboxComponent.define('app-omnibox');
 
+import WebviewComponent from './WebviewComponent.js';
+WebviewComponent.define('app-webview');
+
 import CollectiondialogComponent from './CollectiondialogComponent.js';
 CollectiondialogComponent.define('app-collectiondialog');
 
diff --git a/app/scripts/handlers/BrowserViewHandler.js b/app/scripts/handlers/BrowserViewHandler.js
deleted file mode 100644
index f4527d8c17aa7ebe91034dd1a692b3b1f9550687..0000000000000000000000000000000000000000
--- a/app/scripts/handlers/BrowserViewHandler.js
+++ /dev/null
@@ -1,69 +0,0 @@
-export default class BrowserViewHandler {
-
-    constructor(stateManager, ipcRenderer) {
-        this._stateManager = stateManager;
-        this._ipcRenderer = ipcRenderer;
-
-        this._appPackage = this._ipcRenderer.sendSync('app', 'package');
-        this._startPage = this._ipcRenderer.sendSync('store', 'startPage');
-
-        this._subscribe();
-    }
-
-    _subscribe() {
-        this._ipcRenderer.on('browserView_loading', (event, data) => {
-            this._stateManager.dispatch('browserView_loading', data);
-        });
-
-        this._ipcRenderer.on('browserView_page', (event, data) => {
-            this._stateManager.dispatch('browserView_page', data);
-        });
-
-        this._stateManager.actionHandler
-            .add('browserView_loading', (data) => {
-                return {isLoading: data.isLoading};
-            })
-            .add('browserView_page', (data) => {
-                return {
-                    startPage: this._startPage,
-                    url: data.url,
-                    title: data.title,
-                    canGoBack: data.canGoBack,
-                    canGoForward: data.canGoForward
-                };
-            })
-            .add('browserView_startPage', (data) => {
-                if (data.url) {
-                    this._startPage = data.url;
-                    this._ipcRenderer.sendSync('store', 'startPage', this._startPage);
-                }
-                this._ipcRenderer.sendSync('browserView_loadUrl', this._startPage);
-                return false;
-            })
-            .add('browserView_loadUrl', (data) => {
-                this._ipcRenderer.sendSync('browserView_loadUrl', data.url);
-                return false;
-            })
-            .add('browserView_goBack', () => {
-                this._ipcRenderer.sendSync('browserView_goBack');
-                return false;
-            })
-            .add('browserView_goForward', () => {
-                this._ipcRenderer.sendSync('browserView_goForward');
-                return false;
-            })
-            .add('browserView_reload', () => {
-                this._ipcRenderer.sendSync('browserView_reload');
-                return false;
-            })
-            .add('browserView_stop', () => {
-                this._ipcRenderer.sendSync('browserView_stop');
-                return false;
-            })
-            .add('browserView_appBugsPage', () => {
-                this._ipcRenderer.sendSync('browserView_loadUrl', this._appPackage.bugs);
-                return false;
-            });
-    }
-
-}
diff --git a/app/scripts/handlers/OcsManagerHandler.js b/app/scripts/handlers/OcsManagerHandler.js
index 818df37b294e70d0f0cb4f5d8d3413b38c99f34e..25b9ef825483300289bc3f31a4779b04aee074a9 100644
--- a/app/scripts/handlers/OcsManagerHandler.js
+++ b/app/scripts/handlers/OcsManagerHandler.js
@@ -8,7 +8,7 @@ export default class OcsManagerHandler {
         this._previewpicDirectory = this._ipcRenderer.sendSync('previewpic', 'directory');
         this._installTypes = {};
 
-        //this._webviewComponent = null;
+        this._webviewComponent = null;
         this._collectiondialogComponent = null;
 
         this._subscribe();
@@ -16,19 +16,11 @@ export default class OcsManagerHandler {
     }
 
     _subscribe() {
-        this._ipcRenderer.on('ocsManager_openUrl', (event, data) => {
-            this._stateManager.dispatch('ocsManager_openUrl', data);
-        });
-
-        this._ipcRenderer.on('ocsManager_getItemByOcsUrl', (event, data) => {
-            this._stateManager.dispatch('ocsManager_getItemByOcsUrl', data);
-        });
-
         this._stateManager.actionHandler
-            /*.add('webview_activate', (data) => {
+            .add('webview_activate', (data) => {
                 this._webviewComponent = data.component;
                 return {isActivated: true};
-            })*/
+            })
             .add('ocsManager_activate', (data) => {
                 this._collectiondialogComponent = data.component;
                 return {isActivated: true};
@@ -185,7 +177,29 @@ export default class OcsManagerHandler {
                 });
 
                 // Download preview picture
-                this._ipcRenderer.sendSync('previewpic', 'download', message.data[0].metadata.url);
+                const selector = 'meta[property="og:image"]';
+                this._webviewComponent.executeJavaScript(
+                    `document.querySelector('${selector}').content`,
+                    false,
+                    (result) => {
+                        let previewpicUrl = result || '';
+
+                        // FIXME: previewpic API maybe deprecated
+                        /*
+                        if (!previewpicUrl
+                            && message.data[0].metadata.command === 'install'
+                            && message.data[0].metadata.provider
+                            && message.data[0].metadata.content_id
+                        ) {
+                            previewpicUrl = `${message.data[0].metadata.provider}content/previewpic/${message.data[0].metadata.content_id}`;
+                        }
+                        */
+
+                        if (previewpicUrl) {
+                            this._ipcRenderer.sendSync('previewpic', 'download', message.data[0].metadata.url, previewpicUrl);
+                        }
+                    }
+                );
             })
             .set('ItemHandler::downloadFinished', (message) => {
                 if (message.data[0].status !== 'success_download') {
diff --git a/app/scripts/renderers/browser-view.js b/app/scripts/renderers/browser-view.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000