diff --git a/framework/yii/base/View.php b/framework/yii/base/View.php
index a931a1b..e4485ef 100644
--- a/framework/yii/base/View.php
+++ b/framework/yii/base/View.php
@@ -25,14 +25,22 @@ use yii\widgets\FragmentCache;
 class View extends Component
 {
 	/**
-	 * @event ViewEvent an event that is triggered by [[beginPage()]].
+	 * @event Event an event that is triggered by [[beginPage()]].
 	 */
 	const EVENT_BEGIN_PAGE = 'beginPage';
 	/**
-	 * @event ViewEvent an event that is triggered by [[endPage()]].
+	 * @event Event an event that is triggered by [[endPage()]].
 	 */
 	const EVENT_END_PAGE = 'endPage';
 	/**
+	 * @event Event an event that is triggered by [[beginBody()]].
+	 */
+	const EVENT_BEGIN_BODY = 'beginBody';
+	/**
+	 * @event Event an event that is triggered by [[endBody()]].
+	 */
+	const EVENT_END_BODY = 'endBody';
+	/**
 	 * @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file.
 	 */
 	const EVENT_BEFORE_RENDER = 'beforeRender';
@@ -532,6 +540,7 @@ class View extends Component
 	public function beginBody()
 	{
 		echo self::PL_BODY_BEGIN;
+		$this->trigger(self::EVENT_BEGIN_BODY);
 	}
 
 	/**
@@ -539,6 +548,7 @@ class View extends Component
 	 */
 	public function endBody()
 	{
+		$this->trigger(self::EVENT_END_BODY);
 		echo self::PL_BODY_END;
 	}
 
diff --git a/framework/yii/debug/Toolbar.php b/framework/yii/debug/Debugger.php
similarity index 70%
rename from framework/yii/debug/Toolbar.php
rename to framework/yii/debug/Debugger.php
index c205277..93ccc26 100644
--- a/framework/yii/debug/Toolbar.php
+++ b/framework/yii/debug/Debugger.php
@@ -8,31 +8,47 @@
 namespace yii\debug;
 
 use Yii;
-use yii\base\Widget;
+use yii\base\Component;
+use yii\base\View;
 use yii\helpers\Html;
 
 /**
  * @author Qiang Xue <qiang.xue@gmail.com>
  * @since 2.0
  */
-class Toolbar extends Widget
+class Debugger extends Component
 {
 	public $debugAction = 'debug/default/toolbar';
+	public $panels;
 
-	public function run()
+	public function init()
 	{
-		if (Yii::$app->hasModule('debug')) {
-			$id = 'yii-debug-toolbar';
-			$url = Yii::$app->getUrlManager()->createUrl($this->debugAction, array(
-				'tag' => Yii::getLogger()->tag,
-			));
-			$view = $this->getView();
-			$view->registerJs("yii.debug.load('$id', '$url');");
-			$view->registerAssetBundle('yii/debug');
-			echo Html::tag('div', '', array(
-				'id' => $id,
-				'style' => 'display: none',
-			));
+		parent::init();
+		Yii::$app->setModule('debug', array(
+			'class' => 'yii\debug\Module',
+			'panels' => $this->panels,
+		));
+		Yii::$app->log->targets[] = new LogTarget;
+		Yii::$app->getView()->on(View::EVENT_END_BODY, array($this, 'renderToolbar'));
+	}
+
+	public function renderToolbar($event)
+	{
+		if (Yii::$app->getModule('debug', false) !== null) {
+			return;
 		}
+
+		/** @var View $view */
+		$id = 'yii-debug-toolbar';
+		$url = Yii::$app->getUrlManager()->createUrl($this->debugAction, array(
+			'tag' => Yii::getLogger()->tag,
+		));
+		$view = $event->sender;
+		$view->registerJs("yii.debug.load('$id', '$url');");
+		$view->registerAssetBundle('yii/debug');
+		echo Html::tag('div', '', array(
+			'id' => $id,
+			'style' => 'display: none',
+		));
 	}
 }
diff --git a/framework/yii/logging/DebugTarget.php b/framework/yii/debug/LogTarget.php
similarity index 96%
rename from framework/yii/logging/DebugTarget.php
rename to framework/yii/debug/LogTarget.php
index 92a74d6..1192cb3 100644
--- a/framework/yii/logging/DebugTarget.php
+++ b/framework/yii/debug/LogTarget.php
@@ -5,15 +5,16 @@
  * @license http://www.yiiframework.com/license/
  */
 
-namespace yii\logging;
+namespace yii\debug;
 
 use Yii;
+use yii\logging\Target;
 
 /**
  * @author Qiang Xue <qiang.xue@gmail.com>
  * @since 2.0
  */
-class DebugTarget extends Target
+class LogTarget extends Target
 {
 	public $maxLogFiles = 20;
 
@@ -72,6 +73,7 @@ class DebugTarget extends Target
 		$iterator = new \DirectoryIterator(Yii::$app->getRuntimePath() . '/debug');
 		$files = array();
 		foreach ($iterator as $file) {
+			/** @var \DirectoryIterator $file */
 			if (preg_match('/^[\d\-]+\.log$/', $file->getFileName()) && $file->isFile()) {
 				$files[] = $file->getPathname();
 			}
diff --git a/framework/yii/debug/Module.php b/framework/yii/debug/Module.php
index a680f53..a0cf883 100644
--- a/framework/yii/debug/Module.php
+++ b/framework/yii/debug/Module.php
@@ -14,4 +14,5 @@ namespace yii\debug;
 class Module extends \yii\base\Module
 {
 	public $controllerNamespace = 'yii\debug\controllers';
+	public $panels;
 }
diff --git a/framework/yii/debug/controllers/DefaultController.php b/framework/yii/debug/controllers/DefaultController.php
index f1160b1..56d583f 100644
--- a/framework/yii/debug/controllers/DefaultController.php
+++ b/framework/yii/debug/controllers/DefaultController.php
@@ -16,9 +16,11 @@ use yii\web\Controller;
  */
 class DefaultController extends Controller
 {
+	public $layout = 'main';
+
 	public function actionIndex($tag)
 	{
-		echo $tag;
+		return $this->render('index');
 	}
 
 	public function actionToolbar($tag)
@@ -26,9 +28,10 @@ class DefaultController extends Controller
 		$file = Yii::$app->getRuntimePath() . "/debug/$tag.log";
 		if (preg_match('/^[\w\-]+$/', $tag) && is_file($file)) {
 			$data = json_decode(file_get_contents($file), true);
-			echo $this->renderPartial('toolbar', $data);
+			$data['tag'] = $tag;
+			return $this->renderPartial('toolbar', $data);
 		} else {
-			echo "Unable to find debug data tagged with '$tag'.";
+			return "Unable to find debug data tagged with '$tag'.";
 		}
 	}
 }
diff --git a/framework/yii/debug/views/default/index.php b/framework/yii/debug/views/default/index.php
new file mode 100644
index 0000000..57cf853
--- /dev/null
+++ b/framework/yii/debug/views/default/index.php
@@ -0,0 +1 @@
+here we are
diff --git a/framework/yii/debug/views/default/toolbar.php b/framework/yii/debug/views/default/toolbar.php
index 0b08d4b..27f02f8 100644
--- a/framework/yii/debug/views/default/toolbar.php
+++ b/framework/yii/debug/views/default/toolbar.php
@@ -19,21 +19,22 @@ echo Html::style("
 	margin: 0 10px;
 ");
 ?>
+<div id="yii-debug-toolbar">
+	<div class="yii-debug-toolbar-block">
+		<?php echo Html::a('more details', array('index', 'tag' => $tag)); ?>
+	</div>
 
-<div class="yii-debug-toolbar-block">
-</div>
-
-<div class="yii-debug-toolbar-block">
-Peak memory: <?php echo sprintf('%.2fMB', $memory / 1048576); ?>
-</div>
+	<div class="yii-debug-toolbar-block">
+		Peak memory: <?php echo sprintf('%.2fMB', $memory / 1048576); ?>
+	</div>
 
-<div class="yii-debug-toolbar-block">
-Time spent: <?php echo sprintf('%.3fs', $time); ?>
-</div>
+	<div class="yii-debug-toolbar-block">
+		Time spent: <?php echo sprintf('%.3fs', $time); ?>
+	</div>
 
-<div class="yii-debug-toolbar-block">
-</div>
+	<div class="yii-debug-toolbar-block">
+	</div>
 
-<div class="yii-debug-toolbar-block">
+	<div class="yii-debug-toolbar-block">
+	</div>
 </div>
-
diff --git a/framework/yii/debug/views/layouts/main.php b/framework/yii/debug/views/layouts/main.php
new file mode 100644
index 0000000..c43f3ff
--- /dev/null
+++ b/framework/yii/debug/views/layouts/main.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * @var \yii\base\View $this
+ * @var string $content
+ */
+use yii\helpers\Html;
+?>
+<!DOCTYPE html>
+<html>
+<?php $this->beginPage(); ?>
+<head>
+	<title><?php echo Html::encode($this->title); ?></title>
+	<?php $this->head(); ?>
+</head>
+<body>
+<?php $this->beginBody(); ?>
+<?php echo $content; ?>
+<?php $this->endBody(); ?>
+</body>
+<?php $this->endPage(); ?>
+</html>