diff --git a/framework/yii/jui/Sortable.php b/framework/yii/jui/Sortable.php
index 2263461..67213ca 100644
--- a/framework/yii/jui/Sortable.php
+++ b/framework/yii/jui/Sortable.php
@@ -7,6 +7,8 @@
 
 namespace yii\jui;
 
+use yii\base\InvalidConfigException;
+use yii\helpers\ArrayHelper;
 use yii\helpers\Html;
 
 /**
@@ -17,9 +19,9 @@ use yii\helpers\Html;
  * ```php
  * echo Sortable::widget(array(
  *     'items' => array(
- *         '<li>Item 1</li>',
- *         '<li>Item 2</li>',
- *         '<li>Item 3</li>',
+ *         'Item 1',
+ *         'Item 2',
+ *         'Item 3',
  *     ),
  *     'clientOptions' => array(
  *         'cursor' => 'move',
@@ -32,17 +34,20 @@ use yii\helpers\Html;
  *
  * ```php
  * Sortable::begin(array(
- *     'clientOptions' => array(
- *         'cursor' => 'move',
- *     ),
  *     'options' => array(
  *         'tag' => 'div',
  *     ),
+ *     'itemOptions' => array(
+ *         'tag' => 'div',
+ *     ),
+ *     'clientOptions' => array(
+ *         'cursor' => 'move',
+ *     ),
  * ));
  *
- * echo '<div>Item 1</div>';
- * echo '<div>Item 2</div>';
- * echo '<div>Item 3</div>';
+ * echo 'Item 1';
+ * echo 'Item 2';
+ * echo 'Item 3';
  *
  * Sortable::end();
  * ```
@@ -54,10 +59,15 @@ use yii\helpers\Html;
 class Sortable extends Widget
 {
 	/**
-	 * @var array list of sortable containers. Each array element represents a single
-	 * sortable container.
+	 * @var array.
+	 * @todo comments
 	 */
 	public $items = array();
+	/**
+	 * @var array.
+	 * @todo comments
+	 */
+	public $itemOptions = array();
 
 
 	/**
@@ -67,8 +77,7 @@ class Sortable extends Widget
 	{
 		parent::init();
 		$options = $this->options;
-		$tag = isset($options['tag']) ? $options['tag'] : 'ul';
-		unset($options['tag']);
+		$tag = ArrayHelper::remove($options, 'tag', 'ul');
 		echo Html::beginTag($tag, $options) . "\n";
 	}
 
@@ -78,16 +87,35 @@ class Sortable extends Widget
 	public function run()
 	{
 		echo $this->renderItems() . "\n";
-		echo Html::endTag(isset($this->options['tag']) ? $this->options['tag'] : 'ul') . "\n";
+		$tag = ArrayHelper::getValue($this->options, 'tag', 'ul');
+		echo Html::endTag($tag) . "\n";
 		$this->registerWidget('sortable', false);
 	}
 
 	/**
 	 * Renders sortable items as specified on [[items]].
-	 * @return string the rendering result
+	 * @return string the rendering result.
+	 * @throws InvalidConfigException.
 	 */
 	public function renderItems()
 	{
-		return implode("\n", $this->items);
+		$items = array();
+		foreach ($this->items as $item) {
+			$options = $this->itemOptions;
+			$tag = ArrayHelper::remove($options, 'tag', 'li');
+			if (is_array($item)) {
+				if (!isset($item['content'])) {
+					throw new InvalidConfigException("The 'content' option is required.");
+				}
+				if (isset($item['options'])) {
+					$options = array_merge($options, $item['options']);
+					$tag = ArrayHelper::remove($options, 'tag', $tag);
+				}
+				$items[] = Html::tag($tag, $item['content'], $options);
+			} else {
+				$items[] = Html::tag($tag, $item, $options);
+			}
+		}
+		return implode("\n", $items);
 	}
 }