diff --git a/ubiquity-frontend-kde-le/TODO b/ubiquity-frontend-kde-le/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ubiquity-frontend-kde-le/VERSAO b/ubiquity-frontend-kde-le/VERSAO
new file mode 100644
index 0000000000000000000000000000000000000000..524cb55242b53f6a64cc646ea05db6acc7696d2d
--- /dev/null
+++ b/ubiquity-frontend-kde-le/VERSAO
@@ -0,0 +1 @@
+1.1.1
diff --git a/ubiquity-frontend-kde-le/gerar.sh b/ubiquity-frontend-kde-le/gerar.sh
new file mode 100755
index 0000000000000000000000000000000000000000..74a8edf718258a6e9da1fe1133b2acaabd6ccbbf
--- /dev/null
+++ b/ubiquity-frontend-kde-le/gerar.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+# gerar.sh
+# Copyright (c) 2006 by Bruno Ribas <ribas@ufpr.br>
+
+DIRTMP=$(mktemp -d)
+VERSAO=$(cat VERSAO)
+
+#arrumar versao
+#$1 tipo de incremento
+MAJOR=$(echo $VERSAO| cut -d'.' -f1)
+MINOR=$(echo $VERSAO| cut -d'.' -f2)
+REVISION=$(echo $VERSAO| cut -d'.' -f3)
+
+case $1 in
+	Minor)
+		((MINOR++))
+		REVISION=0
+		;;
+	Major)
+		((MAJOR++))
+		MINOR=0
+		REVISION=0
+		;;
+	help)
+		echo "Uso: $0 Major|Minor|Revision"
+		echo '     Major - Altera versao Major'
+		echo '     Minor - Altera versao Minor'
+		exit
+		;;
+	*)
+		((REVISION++))
+		;;
+esac
+
+VERSAO="${MAJOR}.${MINOR}.${REVISION}"
+echo "$VERSAO" > VERSAO
+		
+
+#Compila a documentacao do pacote no diretorio doc/
+#cd doc/
+#hevea -text *.tex 
+#hevea -text *.tex 
+#cd ../
+
+cp -r pacote $DIRTMP
+
+#Copia a documentacao compilada para dentro do pacote.
+#cp doc/*.txt $DIRTMP/pacote/usr/share/doc/prd-* 
+
+cd $DIRTMP
+find . -name ".svn" -exec rm -rf {} \; &>/dev/null
+sed -i -e "s/^Version:/Version: $VERSAO/" pacote/DEBIAN/control
+
+fakeroot dpkg -b pacote .
+
+cd -
+
+cp $DIRTMP/*deb .
+rm -rf $DIRTMP
+
+
+# vim:tabstop=4:shiftwidth=4:encoding=iso-8859-1
diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/control b/ubiquity-frontend-kde-le/pacote/DEBIAN/control
new file mode 100644
index 0000000000000000000000000000000000000000..514e971539edd402527be0d75657e19898bddb00
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/control
@@ -0,0 +1,16 @@
+Package: ubiquity-frontend-kde-le
+Source: ubiquity-le
+Version:
+Architecture: all
+Maintainer: LE Maintainer <le-maintainer@c3sl.ufpr.br>
+Installed-Size: 632
+Depends: python-central (>= 0.6.11), ubiquity-le, python-kde4, kde-window-manager, xauth
+Conflicts: ubiquity-frontend-kde
+Section: admin
+Priority: optional
+Description: KDE frontend for Ubiquity live installer.
+ This is a costumized version of ubiquity-frontend-kde from the Ubuntu,
+ designed to install the Linux Educacional (LE).
+Bugs: http://bugzilla.c3sl.ufpr.br/
+Python-Version: current, >= 2.6
+
diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/postinst b/ubiquity-frontend-kde-le/pacote/DEBIAN/postinst
new file mode 100755
index 0000000000000000000000000000000000000000..51369608342dd96deb51357e8fcf8a9b25c26028
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/postinst
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -e
+# Automatically added by dh_pycentral
+rm -f /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove
+if which pycentral >/dev/null 2>&1; then
+	pycentral pkginstall ubiquity-frontend-kde-le
+	if grep -qs '^ubiquity-frontend-kde-le$' /var/lib/pycentral/delayed-pkgs; then
+		sed -i '/^ubiquity-frontend-kde-le$/d' /var/lib/pycentral/delayed-pkgs
+	fi
+fi
+# End automatically added section
diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/preinst b/ubiquity-frontend-kde-le/pacote/DEBIAN/preinst
new file mode 100755
index 0000000000000000000000000000000000000000..80a32d5fd4d99f5ca83feaf3c2aaaced960e81e3
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/preinst
@@ -0,0 +1,10 @@
+#!/bin/sh
+set -e
+# Automatically added by dh_pycentral
+case "$1" in
+    install|upgrade)
+	mkdir -p /var/lib/pycentral
+	echo '# the presence of this file allows calling pkgremove on upgrade' \
+	    > /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove
+esac
+# End automatically added section
diff --git a/ubiquity-frontend-kde-le/pacote/DEBIAN/prerm b/ubiquity-frontend-kde-le/pacote/DEBIAN/prerm
new file mode 100755
index 0000000000000000000000000000000000000000..760db268962e91e9027b324122028a9b9267a7aa
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/DEBIAN/prerm
@@ -0,0 +1,47 @@
+#!/bin/sh
+set -e
+# Automatically added by dh_pycentral
+case "$1" in remove|upgrade)
+	pkgremove=y
+esac
+if [ -f /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove ] || [ -f /var/lib/pycentral/pkgremove ]; then
+	pkgremove=y
+fi
+if [ "$pkgremove" = y ]; then
+if which python >/dev/null 2>&1 && which pycentral >/dev/null 2>&1; then
+	pycentral pkgremove ubiquity-frontend-kde-le
+else
+	flist=$(tempfile)
+	slist=$(tempfile)
+	dpkg -L ubiquity-frontend-kde-le | tee $flist | \
+	while read n; do
+	  case "$n" in
+	    /usr/share/pyshared/*)
+	      n2=${n#/usr/share/pyshared/*}
+	      case "$n" in
+		*.py) echo "p $n";;
+		*) [ -d "$n" ] && echo "d $n2" || echo "f $n2"
+	      esac
+	      ;;
+	    *) continue
+	  esac
+	done > $slist
+	if [ -s $slist ]; then
+	    for d in /usr/lib/python[0-9].[0-9]/????-packages; do
+		case "$d" in */python2.1/*|*/python2.2/*) continue; esac
+		while read t n; do
+		    case "$t" in
+			p) rm -f $d/$n $d/${n}[co];;
+			d) rmdir $d/$n 2>/dev/null || true;;
+			*) rm -f $d/$n
+		    esac
+		done < $slist
+	    done
+	fi
+        awk '/\/usr\/share\/pyshared/ {next} /\.py$/ {print $0"c\n" $0"o"}' $flist \
+	    | xargs -r rm -f >&2
+	rm -f $flist $slist
+fi
+rm -f /var/lib/pycentral/ubiquity-frontend-kde-le.pkgremove
+fi
+# End automatically added section
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py
new file mode 100644
index 0000000000000000000000000000000000000000..23f383bd0faf8a60de7fad4a37013421a3b3185d
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py
@@ -0,0 +1,286 @@
+# -*- coding: utf-8 -*-
+from PyQt4.QtCore import Qt, QRectF
+from PyQt4.QtGui import QWidget, QFont, QPainter, QPen, QPainterPath, QColor
+from PyQt4.QtSvg import QSvgRenderer
+from PyQt4 import uic
+
+import subprocess
+import sys
+import os
+
+IMG_DIR = "/usr/share/ubiquity/qt/images"
+
+#U+ , or +U+ ... to string
+def fromUnicodeString(raw):
+    if raw[0:2] == "U+":
+        return unichr(int(raw[2:], 16))
+    elif raw[0:2] == "+U":
+        return unichr(int(raw[3:], 16))
+
+    return ""
+
+class Keyboard(QWidget):
+
+    kb_104 = {
+        "extended_return": False,
+        "keys": [
+        (0x29, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd),
+        (0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x2b),
+        (0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28),
+        (0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35),
+        ()]
+    }
+
+    kb_105 = {
+        "extended_return": True,
+        "keys": [
+        (0x29, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd),
+        (0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b),
+        (0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x2b),
+        (0x54, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35),
+        ()]
+    }
+
+    kb_106 = {
+        "extended_return": True,
+        "keys": [
+        (0x29, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe),
+        (0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b),
+        (0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29),
+        (0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36),
+        ()]
+    }
+
+    lowerFont = QFont("Helvetica", 10, QFont.DemiBold)
+    upperFont = QFont("Helvetica", 8)
+
+    def __init__(self, parent = None):
+        QWidget.__init__(self, parent)
+        self.codes = []
+
+        self.layout = "us"
+        self.variant = ""
+
+        self.kb = None
+
+    def setLayout(self, layout):
+        self.layout = layout
+
+    def setVariant(self, variant):
+        self.variant = variant
+        self.loadCodes()
+        self.loadInfo()
+        self.repaint()
+
+    def loadInfo(self):
+        kbl_104 = ["us", "th"]
+        kbl_106 = ["jp"]
+
+        # most keyboards are 105 key so default to that
+        if self.layout in kbl_104:
+            self.kb = self.kb_104
+        elif self.layout in kbl_106:
+            self.kb = self.kb_106
+        elif self.kb != self.kb_105:
+            self.kb = self.kb_105
+
+    def resizeEvent(self, re):
+        self.space = 6
+        self.usable_width = self.width()-2
+        self.key_w = (self.usable_width - 14 * self.space)/15
+
+        self.setMinimumHeight(self.key_w*4 + self.space*5)
+
+    def paintEvent(self, pe):
+        p = QPainter(self)
+        p.setRenderHint(QPainter.Antialiasing)
+
+        pen = QPen()
+        pen.setWidth(1)
+        pen.setColor(QColor(0x8c, 0xa3, 0xb0))
+        p.setPen(pen)
+
+        p.setBrush(QColor(0xe4, 0xec, 0xf4))
+
+        rx = 6
+
+        space = self.space
+        w = self.usable_width
+        kw = self.key_w
+
+        def drawRow(row, sx, sy, last_end=False):
+            x=sx
+            y=sy
+            keys = row
+            rw=w-sx
+            i=0
+            for k in keys:
+                rect = QRectF(x, y, kw, kw)
+
+                if i == len(keys)-1 and last_end:
+                    rect.setWidth(rw)
+
+                p.drawRoundedRect(rect, rx, rx)
+                p.setPen(Qt.black)
+
+                rect.adjust(5,1, 0, 0)
+
+                p.setFont(self.lowerFont)
+                p.drawText(rect, Qt.AlignLeft | Qt.AlignBottom, self.regular_text(k))
+
+                p.setFont(self.upperFont)
+                p.drawText(rect, Qt.AlignLeft | Qt.AlignTop, self.shift_text(k))
+
+                rw = rw - space - kw
+                x = x + space + kw
+                i = i+1
+
+                p.setPen(pen)
+            return (x,rw)
+
+        x=.5
+        y=.5
+
+        keys = self.kb["keys"]
+        ext_return = self.kb["extended_return"]
+
+        first_key_w = 0
+
+        rows = 4
+        remaining_x = [0,0,0,0]
+        remaining_widths = [0,0,0,0]
+
+        for i in range(0, rows):
+            if first_key_w > 0:
+                first_key_w = first_key_w*1.375
+
+                if self.kb == self.kb_105 and i==3:
+                    first_key_w = kw * 1.275
+
+                rect = QRectF(x, y, first_key_w, kw)
+                p.drawRoundedRect(rect, rx, rx)
+                x = x + first_key_w + space
+            else:
+                first_key_w = kw
+
+            x,rw = drawRow(keys[i], x, y, i==1 and not ext_return)
+
+            remaining_x[i] = x
+            remaining_widths[i] = rw
+
+            if i!=1 and i!=2:
+                rect = QRectF(x, y, rw, kw)
+                p.drawRoundedRect(rect, rx, rx)
+
+            x=.5
+            y = y + space + kw
+
+        if ext_return:
+            rx=rx*2
+            x1 = remaining_x[1]
+            y1 = .5 + kw*1 + space*1
+            w1 = remaining_widths[1]
+            x2 = remaining_x[2]
+            y2 = .5 + kw*2 + space*2
+            w2 = remaining_widths[2]
+
+            # this is some serious crap... but it has to be so
+            # maybe one day keyboards won't look like this...
+            # one can only hope
+            pp = QPainterPath()
+            pp.moveTo(x1, y1+rx)
+            pp.arcTo(x1, y1, rx, rx, 180, -90)
+            pp.lineTo(x1+w1-rx, y1)
+            pp.arcTo(x1+w1-rx, y1, rx, rx, 90, -90)
+            pp.lineTo(x1+w1, y2+kw-rx)
+            pp.arcTo(x1+w1-rx, y2+kw-rx, rx, rx, 0, -90)
+            pp.lineTo(x2+rx, y2+kw)
+            pp.arcTo(x2, y2+kw-rx, rx, rx, -90, -90)
+            pp.lineTo(x2, y1+kw)
+            pp.lineTo(x1+rx, y1+kw)
+            pp.arcTo(x1, y1+kw-rx, rx, rx, -90, -90)
+            pp.closeSubpath()
+
+            p.drawPath(pp)
+        else:
+            x= remaining_x[2]
+            y = .5 + kw*2 + space*2
+            rect = QRectF(x, y, remaining_widths[2], kw)
+            p.drawRoundedRect(rect, rx, rx)
+
+        QWidget.paintEvent(self, pe)
+
+    def regular_text(self, index):
+        return self.codes[index - 1][0]
+
+    def shift_text(self, index):
+        return self.codes[index - 1][1]
+
+    def ctrl_text(self, index):
+        return self.codes[index - 1][2]
+
+    def alt_text(self, index):
+        return self.codes[index - 1][3]
+
+    def loadCodes(self):
+        if self.layout is None:
+            return
+
+        variantParam = ""
+        if self.variant:
+            variantParam = "-variant %s" % self.variant
+
+        cmd="ckbcomp -model pc106 -layout %s %s -compact" % (self.layout, variantParam)
+        #print cmd
+
+        pipe = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=None)
+        cfile = pipe.communicate()[0]
+
+        #clear the current codes
+        del self.codes[:]
+
+        for l in cfile.split('\n'):
+            if l[:7] != "keycode":
+                continue
+
+            codes = l.split('=')[1].strip().split(' ')
+
+            plain = fromUnicodeString(codes[0])
+            shift = fromUnicodeString(codes[1])
+            ctrl = fromUnicodeString(codes[2])
+            alt = fromUnicodeString(codes[3])
+
+            if ctrl == plain:
+                ctrl = ""
+
+            if alt == plain:
+                alt = ""
+
+            self.codes.append((plain, shift, ctrl, alt))
+
+## testing
+if __name__ == "__main__":
+    from PyQt4.QtGui import QApplication, QVBoxLayout
+
+    IMG_DIR = "../../../gui/qt/images"
+
+    app = QApplication(sys.argv)
+
+    win = QWidget()
+    l = QVBoxLayout(win)
+
+    def addKb(layout, variant = ""):
+        kb1 = Keyboard()
+        kb1.setLayout(layout)
+        kb1.setVariant(variant)
+        l.addWidget(kb1)
+
+    addKb("us")
+    addKb("gb")
+    addKb("th")
+    addKb("gr")
+    addKb("jp")
+
+    win.show()
+
+    app.exec_()
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py
new file mode 100644
index 0000000000000000000000000000000000000000..353b2314fa353af34674b5f423258483bb56c373
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py
@@ -0,0 +1,259 @@
+# -*- coding: utf-8 -*-
+
+import os
+from PyQt4 import uic
+from PyQt4.QtGui import *
+
+from ubiquity.frontend.kde_components.PartitionBar import PartitionsBar
+from ubiquity.misc import *
+
+_uidir="/usr/share/ubiquity/qt/"
+
+def addBars(parent, before_bar, after_bar):
+    frame = QWidget(parent)
+    frame.setLayout(QVBoxLayout())
+    frame.layout().setSpacing(0)
+
+    # TODO
+    #frame.layout().addWidget(QLabel(get_string('ubiquity/text/partition_layout_before')))
+    frame.layout().addWidget(QLabel("Before:"))
+    frame.layout().addWidget(before_bar)
+    #frame.layout().addWidget(QLabel(get_string('ubiquity/text/partition_layout_after')))
+    frame.layout().addWidget(QLabel("After:"))
+    frame.layout().addWidget(after_bar)
+
+    parent.layout().addWidget(frame)
+    return frame
+
+class PartAuto(QWidget):
+
+    def __init__(self):
+        QWidget.__init__(self)
+
+        uic.loadUi(os.path.join(_uidir,'stepPartAuto.ui'), self)
+
+        self.diskLayout = None
+
+        self.autopartition_buttongroup = QButtonGroup(self)
+
+        self._clearInfo()
+
+    def _clearInfo(self):
+        self.extra_bar_frames = []
+        self.autopartitionTexts = []
+        self.extraChoicesText = {}
+
+        self.resizeSize = None
+        self.resizeChoice = None
+        self.manualChoice = None
+
+    def setDiskLayout(self, diskLayout):
+        self.diskLayout = diskLayout
+
+    def setupChoices (self, choices, extra_options,
+                                   resize_choice, manual_choice,
+                                   biggest_free_choice):
+        self._clearInfo()
+
+        self.resizeChoice = resize_choice
+        self.manualChoice = manual_choice
+
+        # remove any previous autopartition selections
+        for child in self.autopart_selection_frame.children():
+            if isinstance(child, QWidget):
+                child.setParent(None)
+                del child
+
+        for child in self.barsFrame.children():
+            if isinstance(child, QWidget):
+                self.barsFrame.layout().removeWidget(child)
+                child.setParent(None)
+                del child
+
+        release_name = get_release_name()
+
+        bId = 0
+        for choice in choices:
+            button = QRadioButton(choice, self.autopart_selection_frame)
+            self.autopart_selection_frame.layout().addWidget(button)
+            self.autopartition_buttongroup.addButton(button, bId)
+            bId += 1
+
+            #Qt changes the string by adding accelerators,
+            #so keep pristine string here as is returned later to partman
+            self.autopartitionTexts.append(choice)
+
+            ## these three things are toggled by each option
+            # extra options frame for the option
+            #frame = None
+            bar_frame = QFrame()
+            bar_frame.setLayout(QVBoxLayout())
+            bar_frame.setVisible(False)
+            bar_frame.layout().setSpacing(0)
+            self.barsFrame.layout().addWidget(bar_frame)
+
+            button.toggled[bool].connect(bar_frame.setVisible)
+
+            # if we have more information about the choice
+            # i.e. various hard drives to install onto
+            if choice in extra_options:
+                # label for the before device
+                dev = None
+
+                if choice == biggest_free_choice:
+                    biggest_free_id = extra_options[choice]
+                    dev = None
+
+                    try:
+                        resize_path = biggest_free_id[3]
+                        dev = self.diskLayout[resize_path.replace("/", "=").rstrip("1234567890")]
+                    except Exception: pass
+
+                    if dev:
+                        #create partition bars for graphical before/after display
+                        before_bar = PartitionsBar()
+                        after_bar = PartitionsBar()
+
+                        for p in dev:
+                            before_bar.addPartition(p[0], int(p[1]), p[3])
+                            if p[1] == biggest_free_id:
+                                after_bar.addPartition(release_name, int(p[1]), 'auto')
+                            else:
+                                after_bar.addPartition(p[0], int(p[1]), p[3])
+
+                        addBars(bar_frame, before_bar, after_bar)
+
+                # install side by side/resize
+                elif choice == resize_choice:
+                    # information about what can be resized
+                    extraInfo = extra_options[choice]
+
+                    min_size, max_size, pref_size, resize_path = extraInfo
+                    self.resizeSize = pref_size
+
+                    try:
+                        dev = self.diskLayout[resize_path.replace("/", "=").rstrip("1234567890")]
+                    except Exception: pass
+
+                    if dev:
+                        before_bar = PartitionsBar()
+                        after_bar = PartitionsBar()
+
+                        for p in dev:
+                            #addPartition(name, size, fs):
+                            before_bar.addPartition(p[0], int(p[1]), p[3])
+                            after_bar.addPartition(p[0], int(p[1]), p[3])
+
+                        after_bar.setResizePartition(resize_path,
+                            min_size, max_size, pref_size, release_name)
+                        after_bar.partitionResized.connect(self.on_partitionResized)
+
+                        addBars(bar_frame, before_bar, after_bar)
+
+                #full disk install
+                elif choice != manual_choice:
+                    # setup new frame to hold combo box
+                    # this allows us to make the combo box indented over
+                    # as well as not stretch to full width as it would do in the
+                    # vertical layout
+                    frame = QFrame()
+                    self.autopart_selection_frame.layout().addWidget(frame)
+
+                    frame_layout = QHBoxLayout(frame)
+                    self.extra_combo = QComboBox()
+                    self.extra_combo.setEnabled(False)
+
+                    self.autopart_selection_frame.layout().addWidget(self.extra_combo)
+
+                    frame_layout.addSpacing(20)
+                    frame_layout.addWidget(self.extra_combo)
+                    frame_layout.addStretch(1)
+
+                    self.extra_bar_frames = []
+                    comboTexts = []
+
+                    button.toggled[bool].connect(self.extra_combo.setEnabled)
+
+                    for extra in extra_options[choice]:
+                        #each extra choice needs to toggle a change in the before bar
+                        #extra is just a string with a general description
+                        #each extra choice needs to be a before/after bar option
+                        if extra == '':
+                            continue
+
+                        extra_bar_frame = None
+
+                        # add the extra disk to the combo box
+                        self.extra_combo.addItem(extra)
+                        self.extra_combo.currentIndexChanged[int].connect(self.on_extra_combo_changed)
+
+                        #find the device to make a partition bar out of it
+                        dev = None
+                        for d in self.diskLayout:
+                            disk = d
+                            if disk.startswith('=dev='):
+                                disk = disk[5:]
+                            if "(%s)" % disk in extra:
+                                dev = self.diskLayout[d]
+                                break
+
+                        #add the bars if we found the device
+                        if dev:
+                            before_bar = PartitionsBar()
+                            after_bar = PartitionsBar()
+
+                            for p in dev:
+                                before_bar.addPartition(p[0], int(p[1]), p[3])
+
+                            if before_bar.diskSize > 0:
+                                after_bar.addPartition(release_name, before_bar.diskSize, 'auto')
+                            else:
+                                after_bar.addPartition(release_name, 1, 'auto')
+
+                            extra_bar_frame = addBars(bar_frame, before_bar, after_bar)
+                            if len(self.extra_bar_frames) > 0:
+                                extra_bar_frame.setVisible(False)
+
+                        if extra_bar_frame is not None:
+                            self.extra_bar_frames.append(extra_bar_frame)
+
+                        # Qt changes the string by adding accelerators,
+                        # so keep the pristine string here to be
+                        # returned to partman later.
+                        comboTexts.append(extra)
+
+                    self.extraChoicesText[choice] = comboTexts
+
+        #select the first button
+        b = self.autopartition_buttongroup.button(0)
+        if b:
+            b.setChecked(True)
+
+    # slot for when partition is resized on the bar
+    def on_partitionResized(self, path, size):
+        #self.resizePath = path
+        self.resizeSize = size
+
+    def getChoice (self):
+        bId = self.autopartition_buttongroup.checkedId()
+        if bId > -1:
+            choice = unicode(self.autopartitionTexts[bId])
+        else:
+            raise AssertionError, "no active autopartitioning choice"
+
+        if choice == self.resizeChoice:
+            # resize choice should have been hidden otherwise
+            assert self.resizeSize is not None
+            return choice, '%d B' % self.resizeSize
+        elif (choice != self.manualChoice and
+            self.extraChoicesText.has_key(choice)):
+            comboId = self.extra_combo.currentIndex()
+            disk_texts = self.extraChoicesText[choice]
+            return choice, unicode(disk_texts[comboId])
+        else:
+            return choice, None
+
+    def on_extra_combo_changed(self, index):
+        for e in self.extra_bar_frames:
+            e.setVisible(False)
+        self.extra_bar_frames[index].setVisible(True)
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py
new file mode 100644
index 0000000000000000000000000000000000000000..775572ee1dd723abf3256efcc8ed989438e84b36
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py
@@ -0,0 +1,443 @@
+# -*- coding: utf-8 -*-
+
+import os
+from PyQt4 import uic
+from PyQt4.QtGui import *
+
+from ubiquity.frontend.kde_components.PartitionBar import PartitionsBar
+from ubiquity.frontend.kde_components.PartitionModel import PartitionModel
+
+_uidir="/usr/share/ubiquity/qt/"
+
+# FIXME: Taken from ubi-partman, needs to be moved somewhere.
+PARTITION_TYPE_PRIMARY = 0
+PARTITION_TYPE_LOGICAL = 1
+
+PARTITION_PLACE_BEGINNING = 0
+PARTITION_PLACE_END = 1
+
+class PartMan(QWidget):
+
+    def __init__(self, controller):
+        QWidget.__init__(self)
+        self.ctrlr = controller
+
+        self.edit_use_method_names = {}
+        self.create_dialog = None
+        self.edit_dialog = None
+
+        # currently visible partition bar
+        self.active_bar = None
+
+        uic.loadUi(os.path.join(_uidir,'stepPartMan.ui'), self)
+        self.part_advanced_warning_hbox.setVisible(False)
+
+        self.partition_tree_model = PartitionModel(self.ctrlr, self.partition_list_treeview)
+        self.partition_list_treeview.setModel(self.partition_tree_model)
+        self.partition_list_treeview.selectionModel().selectionChanged.connect(self.on_treeviewSelectionChanged)
+        self.partition_button_new_label.clicked[bool].connect(self.on_new_table_clicked)
+
+        self.partition_button_new.clicked[bool].connect(self.on_new_clicked)
+        self.partition_button_edit.clicked[bool].connect(self.on_edit_clicked)
+        self.partition_button_delete.clicked[bool].connect(self.on_delete_clicked)
+        self.undo_everything.clicked[bool].connect(self.on_undo_clicked)
+
+    def update(self, disk_cache, partition_cache, cache_order):
+        self.partition_tree_model.clear()
+
+        for child in self.part_advanced_bar_frame.children():
+            if isinstance(child, QWidget):
+                child.setParent(None)
+                del child
+
+        self.active_bar = None
+        partition_bar = None
+        indexCount = -1
+        for item in cache_order:
+            if item in disk_cache:
+                # the item is a disk
+                indexCount += 1
+                partition_bar = PartitionsBar(self.part_advanced_bar_frame)
+                self.part_advanced_bar_frame.layout().addWidget(partition_bar)
+
+                #hide all the other bars at first
+                if self.active_bar:
+                    partition_bar.setVisible(False)
+                else:
+                    self.active_bar = partition_bar
+
+                self.partition_tree_model.append([item, disk_cache[item], partition_bar], self.ctrlr)
+            else:
+                # the item is a partition, add it to the current bar
+                partition = partition_cache[item]
+
+                # add the new partition to our tree display
+                self.partition_tree_model.append([item, partition, partition_bar], self.ctrlr)
+                indexCount += 1
+
+                # data for bar display
+                size = int(partition['parted']['size'])
+                fs = partition['parted']['fs']
+                path = partition['parted']['path'].replace("/dev/","")
+                if fs == "free":
+                    path = fs
+                partition_bar.addPartition(path, size, fs)
+
+        self.partition_list_treeview.reset()
+
+    def on_treeviewSelectionChanged(self, unused, deselected):
+
+        # by default disable editing the partition
+        self.partition_button_new_label.setEnabled(False)
+        self.partition_button_new.setEnabled(False)
+        self.partition_button_edit.setEnabled(False)
+        self.partition_button_delete.setEnabled(False)
+        self.undo_everything.setEnabled(False)
+
+        if self.active_bar:
+            self.active_bar.setVisible(False)
+
+        indexes = self.partition_list_treeview.selectedIndexes()
+        if indexes:
+            index = indexes[0]
+
+            item = index.internalPointer()
+            devpart = item.itemData[0]
+            partition = item.itemData[1]
+
+            self.active_bar = item.itemData[2]
+            if self.active_bar:
+                self.active_bar.setVisible(True)
+        else:
+            devpart = None
+            partition = None
+
+        if not self.ctrlr:
+            return
+
+        for action in self.ctrlr.dbfilter.get_actions(devpart, partition):
+            if action == 'new_label':
+                self.partition_button_new_label.setEnabled(True)
+            elif action == 'new':
+                self.partition_button_new.setEnabled(True)
+            elif action == 'edit':
+                self.partition_button_edit.setEnabled(True)
+            elif action == 'delete':
+                self.partition_button_delete.setEnabled(True)
+
+        self.undo_everything.setEnabled(True)
+
+    def partman_create_dialog(self, devpart, partition):
+        if not self.ctrlr.allowed_change_step():
+            return
+
+        # lazy initialization
+        if not self.create_dialog:
+            self.create_dialog = QDialog(self)
+            uic.loadUi("%s/partition_create_dialog.ui" % _uidir, self.create_dialog)
+            self.create_dialog.partition_create_use_combo.currentIndexChanged[int].connect(self.on_partition_create_use_combo_changed)
+
+            # TODO
+            #self.translate_widget_children(self.create_dialog)
+
+        # TODO cjwatson 2006-11-01: Because partman doesn't use a question
+        # group for these, we have to figure out in advance whether each
+        # question is going to be asked.
+
+        if partition['parted']['type'] == 'pri/log':
+            # Is there already a primary partition?
+            for child in self.partition_tree_model.children():
+                data = child.itemData
+                otherpart = data[1]
+                if (otherpart['dev'] == partition['dev'] and
+                    'id' in otherpart and
+                    otherpart['parted']['type'] == 'primary'):
+                    self.create_dialog.partition_create_type_logical.setChecked(True)
+                    break
+            else:
+                self.create_dialog.partition_create_type_primary.setChecked(True)
+        else:
+            self.create_dialog.partition_create_type_label.hide()
+            self.create_dialog.partition_create_type_widget.hide()
+        # Yes, I know, 1000000 bytes is annoying. Sorry. This is what
+        # partman expects.
+        max_size_mb = int(partition['parted']['size']) / 1000000
+        self.create_dialog.partition_create_size_spinbutton.setMaximum(max_size_mb)
+        self.create_dialog.partition_create_size_spinbutton.setValue(max_size_mb)
+
+        self.create_dialog.partition_create_place_beginning.setChecked(True)
+
+        self.create_use_method_names = {}
+        for method, name, description in self.ctrlr.dbfilter.use_as(devpart, True):
+            self.create_use_method_names[description] = name
+            self.create_dialog.partition_create_use_combo.addItem(description)
+        if self.create_dialog.partition_create_use_combo.count() == 0:
+            self.create_dialog.partition_create_use_combo.setEnabled(False)
+
+        self.create_dialog.partition_create_mount_combo.clear()
+        for mp, choice_c, choice in self.ctrlr.dbfilter.default_mountpoint_choices():
+            ##FIXME gtk frontend has a nifty way of showing the user readable
+            ##'choice' text in the drop down, but only selecting the 'mp' text
+            self.create_dialog.partition_create_mount_combo.addItem(mp)
+        self.create_dialog.partition_create_mount_combo.clearEditText()
+
+        if self.create_dialog.exec_() == QDialog.Accepted:
+            if partition['parted']['type'] == 'primary':
+                prilog = PARTITION_TYPE_PRIMARY
+            elif partition['parted']['type'] == 'logical':
+                prilog = PARTITION_TYPE_LOGICAL
+            elif partition['parted']['type'] == 'pri/log':
+                if self.create_dialog.partition_create_type_primary.isChecked():
+                    prilog = PARTITION_TYPE_PRIMARY
+                else:
+                    prilog = PARTITION_TYPE_LOGICAL
+
+            if self.create_dialog.partition_create_place_beginning.isChecked():
+                place = PARTITION_PLACE_BEGINNING
+            else:
+                place = PARTITION_PLACE_END
+
+            method_description = unicode(self.create_dialog.partition_create_use_combo.currentText())
+            method = self.create_use_method_names[method_description]
+
+            mountpoint = unicode(self.create_dialog.partition_create_mount_combo.currentText())
+
+            self.ctrlr.allow_change_step(False)
+            self.ctrlr.dbfilter.create_partition(
+                devpart,
+                str(self.create_dialog.partition_create_size_spinbutton.value()),
+                prilog, place, method, mountpoint)
+
+    def on_partition_create_use_combo_changed (self, *args):
+        if not hasattr(self, 'create_use_method_names'):
+            return
+        known_filesystems = ('ext4', 'ext3', 'ext2', 'reiserfs', 'jfs', 'xfs',
+                             'fat16', 'fat32', 'ntfs', 'uboot')
+        text = unicode(self.create_dialog.partition_create_use_combo.currentText())
+        if text not in self.create_use_method_names:
+            return
+
+        method = self.create_use_method_names[text]
+        if method not in known_filesystems:
+            self.create_dialog.partition_create_mount_combo.clearEditText()
+            self.create_dialog.partition_create_mount_combo.setEnabled(False)
+        else:
+            self.create_dialog.partition_create_mount_combo.setEnabled(True)
+            self.create_dialog.partition_create_mount_combo.clear()
+            for mp, choice_c, choice in \
+                self.ctrlr.dbfilter.default_mountpoint_choices(method):
+                self.create_dialog.partition_create_mount_combo.addItem(mp)
+
+    def partman_edit_dialog(self, devpart, partition):
+        if not self.ctrlr.allowed_change_step():
+            return
+
+        #lazy loading
+        if not self.edit_dialog:
+            self.edit_dialog = QDialog(self)
+            uic.loadUi("%s/partition_edit_dialog.ui" % _uidir, self.edit_dialog)
+            self.edit_dialog.partition_edit_use_combo.currentIndexChanged[int].connect(self.on_partition_edit_use_combo_changed)
+
+            # TODO
+            #self.translate_widget_children(self.edit_dialog)
+
+        current_size = None
+        if ('can_resize' not in partition or not partition['can_resize'] or
+            'resize_min_size' not in partition or
+            'resize_max_size' not in partition):
+            self.edit_dialog.partition_edit_size_label.hide()
+            self.edit_dialog.partition_edit_size_spinbutton.hide()
+        else:
+            # Yes, I know, 1000000 bytes is annoying. Sorry. This is what
+            # partman expects.
+            min_size_mb = int(partition['resize_min_size']) / 1000000
+            cur_size_mb = int(partition['parted']['size']) / 1000000
+            max_size_mb = int(partition['resize_max_size']) / 1000000
+            # Bad things happen if the current size is out of bounds.
+            min_size_mb = min(min_size_mb, cur_size_mb)
+            max_size_mb = max(cur_size_mb, max_size_mb)
+            self.edit_dialog.partition_edit_size_spinbutton.setMinimum(min_size_mb)
+            self.edit_dialog.partition_edit_size_spinbutton.setMaximum(max_size_mb)
+            self.edit_dialog.partition_edit_size_spinbutton.setSingleStep(1)
+            self.edit_dialog.partition_edit_size_spinbutton.setValue(cur_size_mb)
+
+            current_size = str(self.edit_dialog.partition_edit_size_spinbutton.value())
+
+        self.edit_use_method_names = {}
+        method_descriptions = {}
+        self.edit_dialog.partition_edit_use_combo.clear()
+        for script, arg, option in partition['method_choices']:
+            self.edit_use_method_names[option] = arg
+            method_descriptions[arg] = option
+            self.edit_dialog.partition_edit_use_combo.addItem(option)
+
+        current_method = self.ctrlr.dbfilter.get_current_method(partition)
+        if current_method and current_method in method_descriptions:
+            current_method_description = method_descriptions[current_method]
+            index = self.edit_dialog.partition_edit_use_combo.findText(current_method_description)
+            self.edit_dialog.partition_edit_use_combo.setCurrentIndex(index)
+
+        if 'id' not in partition:
+            self.edit_dialog.partition_edit_format_label.hide()
+            self.edit_dialog.partition_edit_format_checkbutton.hide()
+            current_format = False
+        elif 'method' in partition:
+            self.edit_dialog.partition_edit_format_label.show()
+            self.edit_dialog.partition_edit_format_checkbutton.show()
+            self.edit_dialog.partition_edit_format_checkbutton.setEnabled(
+                'can_activate_format' in partition)
+            current_format = (partition['method'] == 'format')
+        else:
+            self.edit_dialog.partition_edit_format_label.show()
+            self.edit_dialog.partition_edit_format_checkbutton.show()
+            self.edit_dialog.partition_edit_format_checkbutton.setEnabled(False)
+            current_format = False
+        self.edit_dialog.partition_edit_format_checkbutton.setChecked(
+            current_format)
+
+        self.edit_dialog.partition_edit_mount_combo.clear()
+        if 'mountpoint_choices' in partition:
+            for mp, choice_c, choice in partition['mountpoint_choices']:
+                ##FIXME gtk frontend has a nifty way of showing the user readable
+                ##'choice' text in the drop down, but only selecting the 'mp' text
+                self.edit_dialog.partition_edit_mount_combo.addItem(mp)
+        current_mountpoint = self.ctrlr.dbfilter.get_current_mountpoint(partition)
+        if current_mountpoint is not None:
+            index = self.edit_dialog.partition_edit_mount_combo.findText(current_method)
+            if index != -1:
+                self.edit_dialog.partition_edit_mount_combo.setCurrentIndex(index)
+            else:
+                self.edit_dialog.partition_edit_mount_combo.addItem(current_mountpoint)
+                self.edit_dialog.partition_edit_mount_combo.setCurrentIndex(self.edit_dialog.partition_edit_mount_combo.count() - 1)
+
+        if (self.edit_dialog.exec_() == QDialog.Accepted):
+            size = None
+            if current_size is not None:
+                size = str(self.edit_dialog.partition_edit_size_spinbutton.value())
+
+            method_description = unicode(self.edit_dialog.partition_edit_use_combo.currentText())
+            method = self.edit_use_method_names[method_description]
+
+            fmt = self.edit_dialog.partition_edit_format_checkbutton.isChecked()
+
+            mountpoint = unicode(self.edit_dialog.partition_edit_mount_combo.currentText())
+
+            if (current_size is not None and size is not None and
+                current_size == size):
+                size = None
+            if method == current_method:
+                method = None
+            if fmt == current_format:
+                fmt = None
+            if mountpoint == current_mountpoint:
+                mountpoint = None
+
+            if (size is not None or method is not None or fmt is not None or
+                mountpoint is not None):
+                self.ctrlr.allow_change_step(False)
+                edits = {'size': size, 'method': method,
+                         'mountpoint': mountpoint}
+                if fmt is not None:
+                    edits['fmt'] = 'dummy'
+                self.ctrlr.dbfilter.edit_partition(devpart, **edits)
+
+    def on_partition_edit_use_combo_changed(self, *args):
+        if not hasattr(self, 'edit_use_method_names'):
+            return
+        # If the selected method isn't a filesystem, then selecting a mount
+        # point makes no sense. TODO cjwatson 2007-01-31: Unfortunately we
+        # have to hardcode the list of known filesystems here.
+        known_filesystems = ('ext4', 'ext3', 'ext2', 'reiserfs', 'jfs', 'xfs',
+                             'fat16', 'fat32', 'ntfs', 'uboot')
+        text = unicode(self.edit_dialog.partition_edit_use_combo.currentText())
+        if text not in self.edit_use_method_names:
+            return
+        method = self.edit_use_method_names[text]
+
+        if method not in known_filesystems:
+            self.edit_dialog.partition_edit_mount_combo.clearEditText()
+            self.edit_dialog.partition_edit_mount_combo.setEnabled(False)
+            self.edit_dialog.partition_edit_format_checkbutton.setEnabled(False)
+        else:
+            self.edit_dialog.partition_edit_mount_combo.setEnabled(True)
+            self.edit_dialog.partition_edit_format_checkbutton.setEnabled(True)
+            self.edit_dialog.partition_edit_mount_combo.clear()
+            for mp, choice_c, choice in \
+                self.ctrlr.dbfilter.default_mountpoint_choices(method):
+                self.edit_dialog.partition_edit_mount_combo.addItem(mp)
+
+    def on_partition_list_treeview_activated(self, index):
+        """ activated when parition lick clicked """
+        if not self.ctrlr.allowed_change_step():
+            return
+
+        item = index.internalPointer()
+        devpart = item.itemData[0]
+        partition = item.itemData[1]
+
+        if 'id' not in partition:
+            # Are there already partitions on this disk? If so, don't allow
+            # activating the row to offer to create a new partition table,
+            # to avoid mishaps.
+            for child in self.partition_tree_model.children():
+                data = child.itemData
+                otherpart = data[1]
+                if otherpart['dev'] == partition['dev'] and 'id' in otherpart:
+                    break
+            else:
+                self.ctrlr.allow_change_step(False)
+                self.ctrlr.dbfilter.create_label(devpart)
+        elif partition['parted']['fs'] == 'free':
+            if 'can_new' in partition and partition['can_new']:
+                self.partman_create_dialog(devpart, partition)
+        else:
+            self.partman_edit_dialog(devpart, partition)
+
+    ### actions for clicking the buttons ###
+
+    def get_treeview_data(self):
+        selected = self.partition_list_treeview.selectedIndexes()
+        if not selected:
+            return (None, None)
+        index = selected[0]
+        item = index.internalPointer()
+        devpart = item.itemData[0]
+        partition = item.itemData[1]
+
+        return (devpart, partition)
+
+    def on_new_table_clicked(self):
+        if not self.ctrlr.allowed_change_step():
+            return
+        devpart, partition = self.get_treeview_data()
+        if not devpart or not partition:
+            return
+        self.ctrlr.allow_change_step(False)
+        self.ctrlr.dbfilter.create_label(devpart)
+
+    def on_new_clicked(self):
+        devpart, partition = self.get_treeview_data()
+        if not devpart or not partition:
+            return
+        self.partman_create_dialog(devpart, partition)
+
+    def on_edit_clicked(self):
+        devpart, partition = self.get_treeview_data()
+        if not devpart or not partition:
+            return
+        self.partman_edit_dialog(devpart, partition)
+
+    def on_delete_clicked(self):
+        if not self.ctrlr.allowed_change_step():
+            return
+        devpart, partition = self.get_treeview_data()
+        if not devpart or not partition:
+            return
+        self.ctrlr.allow_change_step(False)
+        self.ctrlr.dbfilter.delete_partition(devpart)
+
+    def on_undo_clicked(self):
+        if not self.ctrlr.allowed_change_step():
+            return
+        self.ctrlr.allow_change_step(False)
+        self.ctrlr.dbfilter.undo()
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py
new file mode 100644
index 0000000000000000000000000000000000000000..9274bd2a4a107ce0a805f7b596dd76c699f3d4ba
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py
@@ -0,0 +1,328 @@
+# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*-
+#
+# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd.
+#
+# Author:
+#   Jonathan Riddell <jriddell@ubuntu.com>
+#   Roman Shtylman <shtylman@gmail.com>
+#
+# This file is part of Ubiquity.
+#
+# Ubiquity is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or at your option)
+# any later version.
+#
+# Ubiquity is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Ubiquity; if not, write to the Free Software Foundation, Inc., 51
+# Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+##################################################################################
+
+import sys
+
+from PyQt4 import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from ubiquity.misc import format_size
+
+class Partition:
+    # colors used to render partition types
+    # 'auto' is used to represent the results of automatic partitioning.
+    filesystemColours = {'auto':        '#509DE8',
+                         'ext3':        '#418DD4',
+                         'ext4':        '#418DD4',
+                         'free':        '#FFFFFF',
+                         'linux-swap':  '#FF80E0',
+                         'fat32':       '#C0DAFF',
+                         'fat16':       '#C0DAFF',
+                         'ntfs':        '#888786'}
+
+    def __init__(self, name, size, fs):
+        self.size = size
+        self.fs = fs
+        self.next = None
+        self.index = None
+        self.name = name
+
+class PartitionsBar(QWidget):
+    InfoColor = '#333333'
+
+    ## signals
+    partitionResized = pyqtSignal(['PyQt_PyObject', 'PyQt_PyObject'])
+
+    def __init__(self, parent = None):
+        """ a widget to graphically show disk partitions. """
+        QWidget.__init__(self, parent)
+        self.partitions = []
+        self.bar_height = 20 #should be a multiple of 2
+        self.diskSize = 0
+        self.radius = 4
+        self.setMinimumHeight(self.bar_height + 40)
+        self.setMinimumWidth(500)
+        sizePolicy = self.sizePolicy()
+        sizePolicy.setVerticalStretch(10)
+        sizePolicy.setVerticalPolicy(QSizePolicy.Fixed)
+        self.setSizePolicy(sizePolicy)
+
+        self.resize_loc = 0
+        self.resizing = False
+        self.resize_part = None
+
+    def paintEvent(self, qPaintEvent):
+        painter = QPainter(self)
+
+        #used for drawing sunken frame
+        sunkenFrameStyle = QStyleOptionFrame()
+        sunkenFrameStyle.state = QStyle.State_Sunken
+
+        h = self.bar_height
+        h_2 = self.bar_height/2
+        effective_width = self.width() - 1
+
+        path = QPainterPath()
+        path.addRoundedRect(1, 1, self.width()-2, h-2, self.radius, self.radius)
+
+        part_offset = 0
+        label_offset = 0
+        trunc_pix = 0
+        resize_handle_x = None
+        for p in self.partitions:
+            painter.setRenderHint(QPainter.Antialiasing, True)
+
+            #this is done so that even after resizing, other partitions draw in the same places
+            trunc_pix += (effective_width * float(p.size) / self.diskSize)
+            pix_size = int(round(trunc_pix))
+            trunc_pix -= pix_size
+
+            #use the right color for the filesystem
+            if Partition.filesystemColours.has_key(p.fs):
+                pColor = QColor(Partition.filesystemColours[p.fs])
+            else:
+                pColor = QColor(Partition.filesystemColours['free'])
+
+            pal = QPalette(pColor)
+            dark = pal.color(QPalette.Dark)
+            mid = pColor.darker(125)
+            midl = mid.lighter(125)
+
+            grad = QLinearGradient(QPointF(0, 0), QPointF(0, h))
+
+            if p.fs == "free":
+                grad.setColorAt(.25, mid)
+                grad.setColorAt(1, midl)
+            else:
+                grad.setColorAt(0, midl)
+                grad.setColorAt(.75, mid)
+
+            painter.setPen(Qt.NoPen)
+            painter.setBrush(QBrush(grad))
+            painter.setClipRect(part_offset, 0, pix_size, h*2)
+            painter.drawPath(path)
+
+            if part_offset > 0:
+                painter.setPen(dark)
+                painter.drawLine(part_offset, 3, part_offset, h - 3)
+
+            painter.setClipping(False)
+
+            draw_labels = True
+            if draw_labels:
+                #draw the labels
+                painter.setPen(Qt.black)
+
+                #name is the path by default, or free space if unpartitioned
+                name = p.name
+                if name == None:
+                    if p.fs == 'free':
+                        name = 'free space'
+                    elif p.fs == 'swap':
+                        name = 'swap'
+                    else:
+                        name = p.path
+
+                #label vertical location
+                labelY = h + 8
+
+                texts = []
+                texts.append(name)
+                texts.append("%.01f%% (%s)" % (float(p.size) / self.diskSize * 100, format_size(p.size)))
+
+                nameFont = QFont("arial", 10)
+                infoFont = QFont("arial", 8)
+
+                painter.setFont(nameFont)
+                v_off = 0
+                width = 0
+                for text in texts:
+                    textSize = painter.fontMetrics().size(Qt.TextSingleLine, text)
+                    painter.drawText(label_offset + 20, labelY + v_off + textSize.height()/2, text)
+                    v_off += textSize.height()
+                    painter.setFont(infoFont)
+                    painter.setPen(QColor(PartitionsBar.InfoColor))
+                    width = max(width, textSize.width())
+
+                painter.setPen(Qt.NoPen)
+                painter.setBrush(mid)
+                labelRect = QPainterPath()
+                labelRect.addRoundedRect(label_offset+1, labelY - 3, 13, 13, 4, 4)
+                painter.drawPath(labelRect)
+
+                sunkenFrameStyle.rect = QRect(label_offset, labelY-4, 15, 15)
+                self.style().drawPrimitive(QStyle.PE_Frame, sunkenFrameStyle, painter, self)
+                self.style().drawPrimitive(QStyle.PE_Frame, sunkenFrameStyle, painter, self)
+
+                label_offset += width + 40
+
+            #set the handle location for drawing later
+            if self.resize_part and p == self.resize_part.next:
+                resize_handle_x = part_offset
+
+            #increment the partition offset
+            part_offset += pix_size
+
+        sunkenFrameStyle.rect = QRect(0, 0, self.width(), h)
+        self.style().drawPrimitive(QStyle.PE_Frame, sunkenFrameStyle, painter, self)
+
+        if self.resize_part and resize_handle_x:
+            # draw a resize handle
+            part = self.resize_part
+            xloc = resize_handle_x
+            self.resize_loc = xloc
+            side = 1
+            arr_dist = 5
+
+            painter.setPen(Qt.NoPen)
+            painter.setBrush(Qt.black)
+
+            painter.setRenderHint(QPainter.Antialiasing, True)
+            #move out so not created every time
+            arrow_offsets = (
+                (0, h/2-1), (4, h/2-1), (4, h/2-3), (8, h/2),
+                (4, h/2+3), (4, h/2+1), (0, h/2+1))
+
+            p1 = arrow_offsets[0]
+            if part.size > part.minsize:
+                arrow = QPainterPath(QPointF(xloc + -1 * p1[0], p1[1]))
+                for p in arrow_offsets:
+                    arrow.lineTo(xloc + -1 * p[0] + 1, p[1])
+                painter.drawPath(arrow)
+
+            if part.size < part.maxsize:
+                arrow = QPainterPath(QPointF(xloc + p1[0], p1[1]))
+                for p in arrow_offsets:
+                    arrow.lineTo(xloc + p[0], p[1])
+                painter.drawPath(arrow)
+
+            painter.setRenderHint(QPainter.Antialiasing, False)
+            painter.setPen(Qt.black)
+            painter.drawLine(xloc, 0, xloc, h)
+
+    def addPartition(self, name, size, fs):
+        partition = Partition(name, size, fs)
+        self.diskSize += size
+
+        #set the previous partition to have this one as next partition
+        if len(self.partitions) > 0:
+            last = self.partitions[len(self.partitions)-1]
+            last.next = partition
+
+        self.partitions.append(partition)
+
+    def setResizePartition(self, path, minsize, maxsize, prefsize, new_label):
+        part = None
+        index = 0
+        for p in self.partitions:
+            if p.name == path:
+                part = p
+                break
+            index += 1
+
+        if not part:
+            return
+
+        if prefsize > maxsize:
+            prefsize = maxsize
+
+        new_size = part.size - prefsize
+        part.size = prefsize
+        part.minsize = minsize
+        part.maxsize = maxsize
+        part.prefsize = prefsize
+
+        self.resize_part = part
+
+        if part.next == None or part.next.index != -1:
+            #if our resize partition is at the end or the next one is not free space
+            p = Partition('Linux Educacional', new_size, 'auto')
+            p.next = part.next
+            part.next = p
+
+            #insert a new fake partition after the resize partition
+            self.partitions.insert(index + 1, p)
+        else:
+            #we had a next partition that was free space, use that
+            #set the size of the next partition accordingly
+            part.next.size += new_size
+
+        # need mouse tracking to be able to change the cursor
+        self.setMouseTracking(True)
+
+    def mousePressEvent(self, qMouseEvent):
+        if self.resize_part:
+            # if pressed on bar
+            if abs(qMouseEvent.x() - self.resize_loc) < 3:
+                self.resizing = True
+
+    def mouseMoveEvent(self, qMouseEvent):
+        if self.resizing:
+            start = 0
+            for p in self.partitions:
+                if p == self.resize_part:
+                    break
+                start += p.size
+
+            ew = self.width() - 1
+            bpp = self.diskSize / float(ew)
+
+            # mouse position in bytes within this partition
+            mx = qMouseEvent.x() * bpp - start
+
+            #make sure we are within resize range
+            if mx < self.resize_part.minsize:
+                mx = self.resize_part.minsize
+            elif mx > self.resize_part.maxsize:
+                mx = self.resize_part.maxsize
+
+            #chagne the partition sizes
+            span = self.resize_part.prefsize
+            percent = mx / float(span)
+            oldsize = self.resize_part.size
+            self.resize_part.size = int(round(span * percent))
+            self.resize_part.next.size -= self.resize_part.size - oldsize
+
+            #sum the partitions and make sure the disk size is still the same
+            #this is a precautionary measure
+            t = 0
+            for p in self.partitions:
+                t = t + p.size
+            assert t == self.diskSize
+
+            self.update()
+
+            #using PyQt object to avoid wrapping the size otherwise qt truncates to 32bit int
+            self.partitionResized.emit(self.resize_part.name, self.resize_part.size)
+        else:
+            if self.resize_part:
+                if abs(qMouseEvent.x() - self.resize_loc) < 3:
+                    self.setCursor(Qt.SplitHCursor)
+                elif self.cursor != Qt.ArrowCursor:
+                    self.setCursor(Qt.ArrowCursor)
+
+    def mouseReleaseEvent(self, qMouseEvent):
+        self.resizing = False
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py
new file mode 100644
index 0000000000000000000000000000000000000000..8cd81bd572ad3492294e6c368c9ab48f1369236d
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py
@@ -0,0 +1,264 @@
+# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*-
+
+import syslog
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from ubiquity.misc import *
+from ubiquity import i18n
+
+def get_string(name, lang=None, prefix=None):
+    """Get the string name in the given lang or a default."""
+    if lang is None and 'LANG' in os.environ:
+        lang = os.environ['LANG']
+    return i18n.get_string(name, lang, prefix)
+
+# describes the display for the manual partition view widget
+class PartitionModel(QAbstractItemModel):
+    def __init__(self, ubiquity, parent=None):
+        QAbstractItemModel.__init__(self, parent)
+
+        self.rootItem = None
+        self.clear()
+
+    def clear(self):
+        rootData = []
+        rootData.append(QVariant(get_string('partition_column_device')))
+        rootData.append(QVariant(get_string('partition_column_type')))
+        rootData.append(QVariant(get_string('partition_column_mountpoint')))
+        rootData.append(QVariant(get_string('partition_column_format')))
+        rootData.append(QVariant(get_string('partition_column_size')))
+        rootData.append(QVariant(get_string('partition_column_used')))
+        self.rootItem = TreeItem(rootData)
+
+    def append(self, data, ubiquity):
+        self.rootItem.appendChild(TreeItem(data, ubiquity, self.rootItem))
+
+    def columnCount(self, parent):
+        if parent.isValid():
+            return parent.internalPointer().columnCount()
+        else:
+            return self.rootItem.columnCount()
+
+    def data(self, index, role):
+        if not index.isValid():
+            return QVariant()
+
+        item = index.internalPointer()
+
+        if role == Qt.CheckStateRole and index.column() == 3:
+            return QVariant(item.data(index.column()))
+        elif role == Qt.DisplayRole and index.column() != 3:
+            return QVariant(item.data(index.column()))
+        else:
+            return QVariant()
+
+    def setData(self, index, value, role):
+        item = index.internalPointer()
+        if role == Qt.CheckStateRole and index.column() == 3:
+            item.partman_column_format_toggled(value.toBool())
+        self.emit(SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), index, index)
+        return True
+
+    def flags(self, index):
+        if not index.isValid():
+            return Qt.ItemIsEnabled
+
+        #self.setData(index, QVariant(Qt.Checked), Qt.CheckStateRole)
+        #return Qt.ItemIsEnabled | Qt.ItemIsSelectable
+        if index.column() == 3:
+            item = index.internalPointer()
+            if item.formatEnabled():
+                return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable
+            else:
+                return Qt.ItemIsSelectable | Qt.ItemIsUserCheckable
+        else:
+            return Qt.ItemIsEnabled | Qt.ItemIsSelectable
+
+    def headerData(self, section, orientation, role):
+        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+            return self.rootItem.data(section)
+
+        return QVariant()
+
+    def index(self, row, column, parent = QModelIndex()):
+        if not parent.isValid():
+            parentItem = self.rootItem
+        else:
+            parentItem = parent.internalPointer()
+
+        childItem = parentItem.child(row)
+        if childItem:
+            return self.createIndex(row, column, childItem)
+        else:
+            return QModelIndex()
+
+    def parent(self, index):
+        if not index.isValid():
+            return QModelIndex()
+
+        childItem = index.internalPointer()
+        parentItem = childItem.parent()
+
+        if parentItem == self.rootItem:
+            return QModelIndex()
+
+        return self.createIndex(parentItem.row(), 0, parentItem)
+
+    def rowCount(self, parent):
+        if not parent.isValid():
+            parentItem = self.rootItem
+        else:
+            parentItem = parent.internalPointer()
+
+        return parentItem.childCount()
+
+    def children(self):
+        return self.rootItem.children()
+
+class TreeItem:
+    def __init__(self, data, controller=None, parent=None):
+        self.parentItem = parent
+        self.itemData = data
+        self.childItems = []
+        self.controller = controller
+        if controller:
+            self.dbfilter = controller.dbfilter
+        else:
+            self.dbfilter = None
+
+    def appendChild(self, item):
+        self.childItems.append(item)
+
+    def child(self, row):
+        return self.childItems[row]
+
+    def childCount(self):
+        return len(self.childItems)
+
+    def children(self):
+        return self.childItems
+
+    def columnCount(self):
+        if self.parentItem is None:
+            return len(self.itemData)
+        else:
+            return 5
+
+    def data(self, column):
+        if self.parentItem is None:
+            return QVariant(self.itemData[column])
+        elif column == 0:
+            return QVariant(self.partman_column_name())
+        elif column == 1:
+            return QVariant(self.partman_column_type())
+        elif column == 2:
+            return QVariant(self.partman_column_mountpoint())
+        elif column == 3:
+            return QVariant(self.partman_column_format())
+        elif column == 4:
+            return QVariant(self.partman_column_size())
+        elif column == 5:
+            return QVariant(self.partman_column_used())
+        else:
+            return QVariant("other")
+
+    def parent(self):
+        return self.parentItem
+
+    def row(self):
+        if self.parentItem:
+            return self.parentItem.childItems.index(self)
+
+        return 0
+
+    def partman_column_name(self):
+        partition = self.itemData[1]
+        if 'id' not in partition:
+            # whole disk
+            return partition['device']
+        elif partition['parted']['fs'] != 'free':
+            return '  %s' % partition['parted']['path']
+        elif partition['parted']['type'] == 'unusable':
+            return '  %s' % get_string('partman/text/unusable')
+        else:
+            # partman uses "FREE SPACE" which feels a bit too SHOUTY for
+            # this interface.
+            return '  %s' % get_string('partition_free_space')
+
+    def partman_column_type(self):
+        partition = self.itemData[1]
+        if 'id' not in partition or 'method' not in partition:
+            if ('parted' in partition and
+                partition['parted']['fs'] != 'free' and
+                'detected_filesystem' in partition):
+                return partition['detected_filesystem']
+            else:
+                return ''
+        elif ('filesystem' in partition and
+              partition['method'] in ('format', 'keep')):
+            return partition['acting_filesystem']
+        else:
+            return partition['method']
+
+    def partman_column_mountpoint(self):
+        partition = self.itemData[1]
+        if hasattr(self.dbfilter, 'get_current_mountpoint'):
+            mountpoint = self.dbfilter.get_current_mountpoint(partition)
+            if mountpoint is None:
+                mountpoint = ''
+        else:
+            mountpoint = ''
+        return mountpoint
+
+    def partman_column_format(self):
+        partition = self.itemData[1]
+        if 'id' not in partition:
+            return ''
+        elif 'method' in partition:
+            if partition['method'] == 'format':
+                return Qt.Checked
+            else:
+                return Qt.Unchecked
+        else:
+            return Qt.Unchecked  ##FIXME should be enabled(False)
+
+    def formatEnabled(self):
+        """is the format tickbox enabled"""
+        partition = self.itemData[1]
+        return 'method' in partition and 'can_activate_format' in partition
+
+    def partman_column_format_toggled(self, unused_value):
+        if not self.controller.allowed_change_step():
+            return
+        if not hasattr(self.controller.dbfilter, 'edit_partition'):
+            return
+        devpart = self.itemData[0]
+        partition = self.itemData[1]
+        if 'id' not in partition or 'method' not in partition:
+            return
+        self.controller.allow_change_step(False)
+        self.controller.dbfilter.edit_partition(devpart, fmt='dummy')
+
+    def partman_column_size(self):
+        partition = self.itemData[1]
+        if 'id' not in partition:
+            return ''
+        else:
+            # Yes, I know, 1000000 bytes is annoying. Sorry. This is what
+            # partman expects.
+            size_mb = int(partition['parted']['size']) / 1000000
+            return '%d MB' % size_mb
+
+    def partman_column_used(self):
+        partition = self.itemData[1]
+        if 'id' not in partition or partition['parted']['fs'] == 'free':
+            return ''
+        elif 'resize_min_size' not in partition:
+            return get_string('partition_used_unknown')
+        else:
+            # Yes, I know, 1000000 bytes is annoying. Sorry. This is what
+            # partman expects.
+            size_mb = int(partition['resize_min_size']) / 1000000
+            return '%d MB' % size_mb
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py
new file mode 100644
index 0000000000000000000000000000000000000000..55a8800d4944393d3f277018b64c5e63678aa252
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import os
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+from PyQt4 import uic
+from PyKDE4.kdeui import *
+from PyKDE4.kdecore import *
+
+# Define global path
+PATH = '/usr/share/ubiquity'
+
+#currently using for testing, will remove
+UIDIR = os.path.join(PATH, 'qt')
+
+class ProgressDialog(KMainWindow):
+    def __init__(self, min, max, parent = None):
+        QMainWindow.__init__(self, parent)
+        uic.loadUi(os.path.join(UIDIR, "app-install.ui"), self)
+
+        #self.setWindowFlags(Qt.SplashScreen | Qt.FramelessWindowHint)
+        #self.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint | Qt.WindowTitleHint)
+        #self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint)
+        self.setWindowState(self.windowState() ^ Qt.WindowFullScreen)
+
+        #self.progressLabel = QLabel()
+
+        #self.progressBar = QProgressBar()
+        self.progressBar.setMinimum(min)
+        self.setMaximum(max)
+
+        self.minimize_button.clicked.connect(self.showMinimized)
+
+        #self.cancelButton = QPushButton()
+        #self.cancelButton.clicked.connect(self.reject)
+
+        #progressWidget = QWidget()
+        #progressWidget.setLayout(QHBoxLayout())
+        #progressWidget.layout().setContentsMargins(0,0,0,0)
+        #progressWidget.layout().addWidget(self.progressBar)
+        #progressWidget.layout().addWidget(self.cancelButton)
+
+        #self.extraFrame = QFrame()
+        #self.extraFrame.setFrameStyle(QFrame.StyledPanel)
+        #self.extraFrame.setFrameShadow(QFrame.Sunken)
+        self.extraFrame.setLayout(QVBoxLayout())
+        self.extraFrame.layout().setContentsMargins(0,0,0,0)
+        self.extraFrame.setVisible(False)
+
+        #self.setLayout(QVBoxLayout())
+        #self.layout().addWidget(self.progressLabel)
+        #self.layout().addWidget(progressWidget)
+        #self.layout().addWidget(self.extraFrame)
+
+        self.bgImage = QImage("/usr/share/wallpapers/LE/contents/images/1920x1200.png")
+        self.scaledBgImage = self.bgImage
+
+        self.reset()
+
+        #self.rejected.connect(self.rejectedSlot)
+
+    def rejectedSlot(self):
+        self.cancelFlag = True
+
+    def paintEvent(self, pe):
+        p = QPainter(self)
+        p.drawImage(0, 0, self.scaledBgImage)
+
+    def reset(self):
+        self.cancelFlag = False
+        self.progressLabel.setText("")
+        self.windowTitle.setText("")
+        self.progressBar.setValue(0)
+        self.setVisible(False)
+        self.cancelButton.setVisible(False)
+        self.minimize_button.setVisible(False)
+        self.progressLabel.setVisible(False)
+
+    def wasCanceled(self):
+        return self.cancelFlag
+
+    def setCancelText(self, string):
+        self.cancelButton.setText(string)
+
+    def setCancellable(self, val):
+        #self.cancelButton.setVisible(val)
+        self.cancelButton.setVisible(False)
+
+    def setMaximum(self, val):
+        self.progressBar.setMaximum(val)
+
+    def setProgressLabel(self, string):
+        self.progressLabel.setText(string)
+
+    def setProgressValue(self, val):
+        self.progressBar.setValue(val)
+
+    def maximum(self):
+        return self.progressBar.maximum()
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py
new file mode 100644
index 0000000000000000000000000000000000000000..f50a8ec34aaf05ffc92427bcc32866f1b367de97
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+#idea from
+#http://trac.transmissionbt.com/browser/trunk/qt/squeezelabel.cc
+class SqueezeLabel(QLabel):
+    def __init__(self, parent = None):
+        QLabel.__init__(self, parent)
+
+    def paintEvent(self, pe):
+        fm = self.fontMetrics()
+        if fm.width(self.text()) > self.contentsRect().width():
+            oldText = self.text()
+            elided = fm.elidedText(oldText, Qt.ElideRight, self.width())
+            self.setText(elided)
+            self.setToolTip(oldText)
+            QLabel.paintEvent(self, pe)
+            self.setText(oldText)
+        else:
+            QLabel.paintEvent(self, pe)
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e36e125f19398d170fe269832b814f64854139e
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py
@@ -0,0 +1,247 @@
+# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*-
+
+from PyQt4 import QtCore
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+import datetime
+import ubiquity.tz
+import math
+
+#contains information about a geographical timezone city
+class City:
+    def __init__(self, loc, pixmap):
+        self.loc = loc
+        self.pixmap = pixmap
+
+class TimezoneMap(QWidget):
+
+    zoneChanged = QtCore.pyqtSignal(object, object)
+
+    def __init__(self, parent):
+        QWidget.__init__(self, parent)
+        # currently active city
+        self.selected_city = None
+        self.selected_zone = None
+        #dictionary of full name (ie. 'Australia/Sydney') -> city
+        self.cities = {}
+        self.setObjectName("timezone_map")
+
+        #load background pixmap
+        self.imagePath = "/usr/share/ubiquity/pixmaps/timezone"
+        self.pixmap = QPixmap("%s/bg.png" % self.imagePath)
+
+        #redraw timer for selected city time
+        self.timer = QTimer(self)
+        self.timer.timeout.connect(self.update)
+        self.timer.start(1000)
+
+        #load the pixmaps for the zone overlays
+        zones = ['0.0', '1.0', '2.0', '3.0', '3.5', '4.0', '4.5', '5.0', '5.5', '5.75', '6.0',
+            '6.5', '7.0', '8.0', '9.0', '9.5', '10.0', '10.5', '11.0', '11.5', '12.0', '12.75', '13.0',
+            '-1.0', '-2.0', '-3.0', '-3.5', '-4.0', '-4.5', '-5.0', '-5.5', '-6.0', '-7.0',
+            '-8.0', '-9.0', '-9.5', '-10.0', '-11.0']
+
+        zonePixmaps = {}
+
+        for zone in zones:
+            #print '%s/timezone_%s.png' % (self.imagePath, zone)
+            zonePixmaps[zone] = QPixmap('%s/timezone_%s.png' % (self.imagePath, zone))
+
+        #load the timezones from database
+        self.tzdb = ubiquity.tz.Database()
+        for location in self.tzdb.locations:
+            zone_bits = location.zone.split('/')
+
+            if len(zone_bits) == 1:
+                continue
+
+            # zone is the hours offset from 0
+            zoneHour = (location.raw_utc_offset.seconds)/3600.0 + location.raw_utc_offset.days * 24
+
+            #wrap around
+            if zoneHour > 13.0:
+                zoneHour -= 24.0
+
+            #set the pixamp to show for the city
+            zoneS = str(zoneHour)
+
+            #try to find the closest zone
+            if not zonePixmaps.has_key(zoneS):
+                if zonePixmaps.has_key(str(zoneHour + .25)):
+                    zoneS = str(zoneHour + .25)
+                elif zonePixmaps.has_key(str(zoneHour + .25)):
+                    zoneS = str(zoneHour - .25)
+                elif zonePixmaps.has_key(str(zoneHour + .5)):
+                    zoneS = str(zoneHour + .5)
+                elif zonePixmaps.has_key(str(zoneHour - .5)):
+                    zoneS = str(zoneHour - .5)
+                else:
+                    #no zone...default to nothing
+                    zoneS = None
+
+            pixmap = zoneS and zonePixmaps[zoneS]
+
+            #make new city
+            self.cities[location.zone] = City(location, pixmap)
+
+    #taken from gtk side
+    def longitudeToX(self, longitude):
+        # Miller cylindrical map projection is just the longitude as the
+        # calculation is the longitude from the central meridian of the projection.
+        # Convert to radians.
+        x = (longitude * (math.pi / 180)) + math.pi # 0 ... 2pi
+        # Convert to a percentage.
+        x = x / (2 * math.pi)
+        x = x * self.width()
+        # Adjust for the visible map starting near 170 degrees.
+        # Percentage shift required, grabbed from measurements using The GIMP.
+        x = x - (self.width() * 0.039073402)
+        return x
+
+    def latitudeToY(self, latitude):
+        # Miller cylindrical map projection, as used in the source map from the CIA
+        # world factbook.  Convert latitude to radians.
+        y = 1.25 * math.log(math.tan((0.25 * math.pi) + \
+            (0.4 * (latitude * (math.pi / 180)))))
+        # Convert to a percentage.
+        y = abs(y - 2.30341254338) # 0 ... 4.606825
+        y = y / 4.6068250867599998
+        # Adjust for the visible map not including anything beyond 60 degrees south
+        # (150 degrees vs 180 degrees).
+        y = y * (self.height() * 1.2)
+        return y
+
+    def paintEvent(self, unused_paintEvent):
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+
+        path = QPainterPath()
+        path.addRoundedRect(QRectF(self.rect()), 5, 5)
+        painter.setClipPath(path)
+
+        painter.drawPixmap(self.rect(), self.pixmap)
+
+        if self.selected_city != None:
+            c = self.selected_city
+            cpos = self.getPosition(c.loc.latitude, c.loc.longitude)
+
+            if (c.pixmap):
+                painter.drawPixmap(self.rect(), c.pixmap)
+
+            painter.setBrush(QColor(30, 30, 30, 200))
+            painter.setPen(Qt.white)
+
+            #mark the location with a dot
+            painter.drawEllipse(cpos, 3, 3)
+
+            # paint the time instead of the name
+            try:
+                now = datetime.datetime.now(ubiquity.tz.SystemTzInfo(c.loc.zone))
+                timestring = now.strftime('%X')
+
+                start = cpos + QPoint(3,-3)
+                margin = 2
+
+                # correct the text render position if text will render off widget
+                text_size = painter.fontMetrics().size(Qt.TextSingleLine, timestring)
+                text_size += QSize(margin*2, margin*2)
+
+                rect = QRect(start, start + QPoint(text_size.width(), -text_size.height()))
+
+                #check bounds of the time display
+                if rect.top() < 0:
+                    rect.moveTop(start.y() + 3)
+                if rect.right() > self.width():
+                    rect.moveRight(start.x() - 3)
+
+                painter.setPen(Qt.NoPen)
+                painter.drawRoundedRect(rect, 3, 3)
+                painter.setPen(Qt.white)
+                painter.drawText(rect, Qt.AlignCenter, timestring)
+
+            except ValueError:
+                # Some versions of Python have problems with clocks set
+                # before the epoch (http://python.org/sf/1646728).
+                # ignore and don't display a string
+                pass
+
+        #debug info for making sure the cities are in proper places
+        '''for c in self.zones['America']['cities']:
+            cpos = self.getPosition(c.lat, c.long)
+
+            painter.drawLine(cpos + QPoint(1,1), cpos - QPoint(1,1))
+            painter.drawLine(cpos + QPoint(1,-1), cpos - QPoint(1,-1))
+            #painter.drawText(cpos + QPoint(2,-2), c.city_name)'''
+
+    # @return pixel coordinate of a latitude and longitude for self
+    # map uses Miller Projection, but is also clipped
+    def getPosition(self, la, lo):
+        # need to add/sub magic numbers because the map doesn't actually go from -180...180, -90...90
+        # thus the upper corner is not -180, -90 and we have to compensate
+        # we need a better method of determining the actually range so we can better place citites (shtylman)
+        xdeg_offset = -6
+        # the 180 - 35) accounts for the fact that the map does not span the entire -90 to 90
+        # the map does span the entire 360 though, just offset
+        x = (self.width() * (180.0 + lo) / 360.0) + (self.width() * xdeg_offset/ 180.0)
+        x = x % self.width()
+
+        #top and bottom clipping latitudes
+        topLat = 81
+        bottomLat = -59
+
+        #percent of entire possible range
+        topPer = topLat/180.0
+
+        # get the y in rectangular coordinates
+        y = 1.25 * math.log(math.tan(math.pi/4.0 + 0.4 * math.radians(la)))
+
+        # calculate the map range (smaller than full range because the map is clipped on top and bottom
+        fullRange = 4.6068250867599998
+        # the amount of the full range devoted to the upper hemisphere
+        topOffset = fullRange*topPer
+        mapRange = abs(1.25 * math.log(math.tan(math.pi/4.0 + 0.4 * math.radians(bottomLat))) - topOffset)
+
+        # Convert to a percentage of the map range
+        y = abs(y - topOffset)
+        y = y / mapRange
+
+        # this then becomes the percentage of the height
+        y = y * self.height()
+
+        return QPoint(int(x), int(y))
+
+    def mouseReleaseEvent(self, mouseEvent):
+        pos = mouseEvent.pos()
+
+        # get closest city to the point clicked
+        closest = None
+        bestdist = 0
+        for c in self.tzdb.locations:
+            np = pos - self.getPosition(c.latitude, c.longitude)
+            dist = np.x() * np.x() + np.y() * np.y()
+            if (dist < bestdist or closest is None):
+                closest = c
+                bestdist = dist
+
+        #we need to set the combo boxes
+        #this will cause the redraw we need
+        if closest is not None:
+            self._set_timezone(closest)
+
+    # sets the timezone based on the full name (i.e 'Australia/Sydney')
+    def set_timezone(self, name):
+        self._set_timezone(self.tzdb.get_loc(name), name)
+
+    # internal set timezone based on a city
+    def _set_timezone(self, loc, zone=None):
+        city = loc and self.cities[loc.zone]
+        if city:
+            self.selected_city = city
+            self.selected_zone = zone or loc.zone
+            self.zoneChanged.emit(loc, self.selected_zone)
+            self.repaint()
+
+    # return the full timezone string
+    def get_timezone(self):
+        return self.selected_zone
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3ea73d7576692b4b19a811ea984415b5b5e7d05
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*-
+
+__all__ = ['Timezone', 'PartitionBar', 'PartitionModel']
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py
new file mode 100644
index 0000000000000000000000000000000000000000..21fec31239d5f87ebbc9023cfc4c60e10c6ef6aa
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import os
+
+from PyQt4 import uic
+from PyQt4.QtGui import *
+
+from ubiquity.frontend.kde_components.PartAuto import PartAuto
+
+if __name__ == "__main__":
+    import sys
+
+    app = QApplication(sys.argv)
+
+    PartAuto._uidir = '../../../../gui/qt'
+
+    styleFile = os.path.join(PartAuto._uidir, "style.qss")
+    sf = open(styleFile, 'r')
+    app.setStyleSheet(sf.read())
+    sf.close()
+
+    win = PartAuto()
+    win.setObjectName("widgetStack")
+    win.show()
+
+    diskLayout = {'=dev=sda': [
+                         ('/dev/sda1', 8167670784, '32256-8167703039', "ext3"),
+                         ('/dev/sda5', 419457024, '8167735296-8587192319', "ext3")],
+                  '=dev=sdb': [
+                         ('/dev/sdb1', 5074965504, '32256-5074997759', "free"),
+                         ('/dev/sdb5', 287852544, '5075030016-5362882559', "ext3")],
+                  '=dev=sdc': [
+                         ('/dev/sdc1', 5074965504, '32256-5074997759', "ntfs"),
+                         ('/dev/sdc5', 287852544, '5075030016-5362882559', "free")]}
+
+    # call functions twice to test returning to the page
+    # make sure things are cleared properly
+    win.setDiskLayout(diskLayout)
+    win.setDiskLayout(diskLayout)
+
+    biggest_free_choice = u'Use the largest continuous free space',
+    choices = [u'Install them side by side, choosing between them each startup',
+             u'Erase and use the entire disk',
+             u'Specify partitions manually (advanced)']
+
+    extra_options = {u'Erase and use the entire disk': [u'SCSI1 (0,0,0) (sda) - 8.6 GB ATA VBOX HARDDISK',
+                                                        u'SCSI1 (0,1,0) (sdb) - 5.4 GB ATA VBOX HARDDISK',
+                                                        u'SCSI2 (0,1,0) (sdc) - 5.4 GB ATA VBOX HARDDISK'],
+                    u'Install them side by side, choosing between them each startup': (2757079040,
+                                                                                       5485413376,
+                                                                                       4121246208,
+                                                                                       '/dev/sda1'),
+                    u'Use the largest continuous free space': []}
+
+    manual_choice = u'Specify partitions manually (advanced)'
+    resize_choice = u'Install them side by side, choosing between them each startup'
+
+    win.setupChoices(choices, extra_options, resize_choice, manual_choice,
+                     biggest_free_choice)
+
+    win.setupChoices(choices, extra_options, resize_choice, manual_choice,
+                     biggest_free_choice)
+
+    print win.getChoice()
+
+    sys.exit(app.exec_())
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e1e9d24d51010edea9fcc42fca666df69254b24
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import os
+
+from PyQt4 import uic
+from PyQt4.QtGui import *
+
+from ubiquity.frontend.kde_components.PartitionBar import PartitionsBar
+
+if __name__ == "__main__":
+    app = QApplication(sys.argv)
+    QApplication.setStyle("Oxygen")
+
+    wid = QWidget()
+    layout = QVBoxLayout(wid)
+
+    pb1 = PartitionsBar(wid)
+    layout.addWidget(pb1)
+
+    pb1.addPartition('/dev/sdb1', 57511125504, 'ext4')
+    pb1.addPartition('/dev/sdb5', 2500452864, 'linux-swap')
+    pb1.setResizePartition('/dev/sdb1', 230989824, 55143440896, 52143440896, 'distro')
+
+    pb2 = PartitionsBar(wid)
+    layout.addWidget(pb2)
+
+    pb2.addPartition("/dev/sdb1", 5000, "linux-swap")
+    pb2.addPartition("/dev/sdb2", 20000, "ext3")
+    pb2.addPartition("/dev/sdb3", 30000, "fat32")
+    pb2.addPartition("/dev/sdb4", 50000, "ntfs")
+    pb2.setResizePartition('/dev/sdb2', 5000, 15000, 20000, 'Kubuntu')
+
+    pb2 = PartitionsBar(wid)
+    layout.addWidget(pb2)
+
+    pb2.addPartition('/dev/sdb1', 4005679104, 'ext4')
+    pb2.addPartition('/dev/sdb-1', 53505446400, 'free')
+    pb2.addPartition('/dev/sdb5', 2500452864, 'linux-swap')
+
+    wid.show()
+
+    sys.exit(app.exec_())
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py
new file mode 100644
index 0000000000000000000000000000000000000000..14a257252a1ca5f8a33377dcbbc6788895888bb4
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py
@@ -0,0 +1,333 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import os
+
+from PyQt4 import uic
+from PyQt4.QtGui import *
+
+from ubiquity.frontend.kde_components.PartMan import PartMan
+
+if __name__ == "__main__":
+
+    app = QApplication(sys.argv)
+    app.setStyle("Oxygen")
+
+    PartMan._uidir = '../../../../gui/qt'
+
+    styleFile = os.path.join(PartMan._uidir, "style.qss")
+    sf = open(styleFile, 'r')
+    app.setStyleSheet(sf.read())
+    sf.close()
+
+    win = PartMan(None)
+    win.setObjectName("widgetStack")
+    win.show()
+
+    cache_order = [u'/var/lib/partman/devices/=dev=sda//',
+                 u'/var/lib/partman/devices/=dev=sda//32256-8167703039',
+                 u'/var/lib/partman/devices/=dev=sda//8167735296-8587192319',
+                 u'/var/lib/partman/devices/=dev=sdb//',
+                 u'/var/lib/partman/devices/=dev=sdb//32256-5074997759',
+                 u'/var/lib/partman/devices/=dev=sdb//5075030016-5362882559',
+                 u'/var/lib/partman/devices/=dev=sdc//',
+                 u'/var/lib/partman/devices/=dev=sdc//32256-5074997759',
+                 u'/var/lib/partman/devices/=dev=sdc//5075030016-5362882559']
+
+    disk_cache = {u'/var/lib/partman/devices/=dev=sda//': {'dev': u'=dev=sda',
+                                                         'device': '/dev/sda',
+                                                         'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sda//',
+                                                         'label': ['msdos']},
+                u'/var/lib/partman/devices/=dev=sdb//': {'dev': u'=dev=sdb',
+                                                         'device': '/dev/sdb',
+                                                         'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdb//',
+                                                         'label': ['msdos']},
+                u'/var/lib/partman/devices/=dev=sdc//': {'dev': u'=dev=sdc',
+                                                         'device': '/dev/sdc',
+                                                         'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdc//',
+                                                         'label': ['msdos']}}
+
+    partition_cache = {u'/var/lib/partman/devices/=dev=sda//32256-8167703039': {'can_resize': True,
+                                                                              'detected_filesystem': 'ext4',
+                                                                              'dev': u'=dev=sda',
+                                                                              'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sda//32256-8167703039',
+                                                                              'id': u'32256-8167703039',
+                                                                              'method_choices': [(u'25filesystem',
+                                                                                                  u'ext4',
+                                                                                                  u'Ext4 journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'ext3',
+                                                                                                  u'Ext3 journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'ext2',
+                                                                                                  u'Ext2 file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'reiserfs',
+                                                                                                  u'ReiserFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'jfs',
+                                                                                                  u'JFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'xfs',
+                                                                                                  u'XFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'fat16',
+                                                                                                  u'FAT16 file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'fat32',
+                                                                                                  u'FAT32 file system'),
+                                                                                                 (u'40swap',
+                                                                                                  u'swap',
+                                                                                                  u'swap area'),
+                                                                                                 (u'70dont_use',
+                                                                                                  u'dontuse',
+                                                                                                  u'do not use the partition')],
+                                                                              'parent': u'/dev/sda',
+                                                                              'parted': {'fs': 'ext4',
+                                                                                         'id': '32256-8167703039',
+                                                                                         'name': '',
+                                                                                         'num': '1',
+                                                                                         'path': '/dev/sda1',
+                                                                                         'size': '8167670784',
+                                                                                         'type': 'primary'},
+                                                                              'resize_max_size': 8167670784,
+                                                                              'resize_min_size': 2758852608,
+                                                                              'resize_pref_size': 8167670784},
+                     u'/var/lib/partman/devices/=dev=sda//8167735296-8587192319': {'can_resize': True,
+                                                                                   'detected_filesystem': 'linux-swap',
+                                                                                   'dev': u'=dev=sda',
+                                                                                   'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sda//8167735296-8587192319',
+                                                                                   'id': u'8167735296-8587192319',
+                                                                                   'method': 'swap',
+                                                                                   'method_choices': [(u'25filesystem',
+                                                                                                       u'ext4',
+                                                                                                       u'Ext4 journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'ext3',
+                                                                                                       u'Ext3 journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'ext2',
+                                                                                                       u'Ext2 file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'reiserfs',
+                                                                                                       u'ReiserFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'jfs',
+                                                                                                       u'JFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'xfs',
+                                                                                                       u'XFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'fat16',
+                                                                                                       u'FAT16 file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'fat32',
+                                                                                                       u'FAT32 file system'),
+                                                                                                      (u'40swap',
+                                                                                                       u'swap',
+                                                                                                       u'swap area'),
+                                                                                                      (u'70dont_use',
+                                                                                                       u'dontuse',
+                                                                                                       u'do not use the partition')],
+                                                                                   'parent': u'/dev/sda',
+                                                                                   'parted': {'fs': 'linux-swap',
+                                                                                              'id': '8167735296-8587192319',
+                                                                                              'name': '',
+                                                                                              'num': '5',
+                                                                                              'path': '/dev/sda5',
+                                                                                              'size': '419457024',
+                                                                                              'type': 'logical'},
+                                                                                   'resize_max_size': 419457024,
+                                                                                   'resize_min_size': 4096,
+                                                                                   'resize_pref_size': 419457024},
+                     u'/var/lib/partman/devices/=dev=sdb//32256-5074997759': {'can_resize': True,
+                                                                              'detected_filesystem': 'ext4',
+                                                                              'dev': u'=dev=sdb',
+                                                                              'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdb//32256-5074997759',
+                                                                              'id': u'32256-5074997759',
+                                                                              'method_choices': [(u'25filesystem',
+                                                                                                  u'ext4',
+                                                                                                  u'Ext4 journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'ext3',
+                                                                                                  u'Ext3 journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'ext2',
+                                                                                                  u'Ext2 file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'reiserfs',
+                                                                                                  u'ReiserFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'jfs',
+                                                                                                  u'JFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'xfs',
+                                                                                                  u'XFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'fat16',
+                                                                                                  u'FAT16 file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'fat32',
+                                                                                                  u'FAT32 file system'),
+                                                                                                 (u'40swap',
+                                                                                                  u'swap',
+                                                                                                  u'swap area'),
+                                                                                                 (u'70dont_use',
+                                                                                                  u'dontuse',
+                                                                                                  u'do not use the partition')],
+                                                                              'parent': u'/dev/sdb',
+                                                                              'parted': {'fs': 'ext4',
+                                                                                         'id': '32256-5074997759',
+                                                                                         'name': '',
+                                                                                         'num': '1',
+                                                                                         'path': '/dev/sdb1',
+                                                                                         'size': '5074965504',
+                                                                                         'type': 'primary'},
+                                                                              'resize_max_size': 5074965504,
+                                                                              'resize_min_size': 223924224,
+                                                                              'resize_pref_size': 5074965504},
+                     u'/var/lib/partman/devices/=dev=sdb//5075030016-5362882559': {'can_resize': True,
+                                                                                   'detected_filesystem': 'linux-swap',
+                                                                                   'dev': u'=dev=sdb',
+                                                                                   'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdb//5075030016-5362882559',
+                                                                                   'id': u'5075030016-5362882559',
+                                                                                   'method': 'swap',
+                                                                                   'method_choices': [(u'25filesystem',
+                                                                                                       u'ext4',
+                                                                                                       u'Ext4 journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'ext3',
+                                                                                                       u'Ext3 journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'ext2',
+                                                                                                       u'Ext2 file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'reiserfs',
+                                                                                                       u'ReiserFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'jfs',
+                                                                                                       u'JFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'xfs',
+                                                                                                       u'XFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'fat16',
+                                                                                                       u'FAT16 file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'fat32',
+                                                                                                       u'FAT32 file system'),
+                                                                                                      (u'40swap',
+                                                                                                       u'swap',
+                                                                                                       u'swap area'),
+                                                                                                      (u'70dont_use',
+                                                                                                       u'dontuse',
+                                                                                                       u'do not use the partition')],
+                                                                                   'parent': u'/dev/sdb',
+                                                                                   'parted': {'fs': 'linux-swap',
+                                                                                              'id': '5075030016-5362882559',
+                                                                                              'name': '',
+                                                                                              'num': '5',
+                                                                                              'path': '/dev/sdb5',
+                                                                                              'size': '287852544',
+                                                                                              'type': 'logical'},
+                                                                                   'resize_max_size': 287852544,
+                                                                                   'resize_min_size': 4096,
+                                                                                   'resize_pref_size': 287852544},
+                     u'/var/lib/partman/devices/=dev=sdc//32256-5074997759': {'can_resize': True,
+                                                                              'detected_filesystem': 'ext4',
+                                                                              'dev': u'=dev=sdc',
+                                                                              'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdc//32256-5074997759',
+                                                                              'id': u'32256-5074997759',
+                                                                              'method_choices': [(u'25filesystem',
+                                                                                                  u'ext4',
+                                                                                                  u'Ext4 journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'ext3',
+                                                                                                  u'Ext3 journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'ext2',
+                                                                                                  u'Ext2 file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'reiserfs',
+                                                                                                  u'ReiserFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'jfs',
+                                                                                                  u'JFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'xfs',
+                                                                                                  u'XFS journaling file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'fat16',
+                                                                                                  u'FAT16 file system'),
+                                                                                                 (u'25filesystem',
+                                                                                                  u'fat32',
+                                                                                                  u'FAT32 file system'),
+                                                                                                 (u'40swap',
+                                                                                                  u'swap',
+                                                                                                  u'swap area'),
+                                                                                                 (u'70dont_use',
+                                                                                                  u'dontuse',
+                                                                                                  u'do not use the partition')],
+                                                                              'parent': u'/dev/sdc',
+                                                                              'parted': {'fs': 'ext4',
+                                                                                         'id': '32256-5074997759',
+                                                                                         'name': '',
+                                                                                         'num': '1',
+                                                                                         'path': '/dev/sdc1',
+                                                                                         'size': '5074965504',
+                                                                                         'type': 'primary'},
+                                                                              'resize_max_size': 5074965504,
+                                                                              'resize_min_size': 223928320,
+                                                                              'resize_pref_size': 5074965504},
+                     u'/var/lib/partman/devices/=dev=sdc//5075030016-5362882559': {'can_resize': True,
+                                                                                   'detected_filesystem': 'linux-swap',
+                                                                                   'dev': u'=dev=sdc',
+                                                                                   'display': u'60partition_tree__________/var/lib/partman/devices/=dev=sdc//5075030016-5362882559',
+                                                                                   'id': u'5075030016-5362882559',
+                                                                                   'method': 'swap',
+                                                                                   'method_choices': [(u'25filesystem',
+                                                                                                       u'ext4',
+                                                                                                       u'Ext4 journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'ext3',
+                                                                                                       u'Ext3 journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'ext2',
+                                                                                                       u'Ext2 file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'reiserfs',
+                                                                                                       u'ReiserFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'jfs',
+                                                                                                       u'JFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'xfs',
+                                                                                                       u'XFS journaling file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'fat16',
+                                                                                                       u'FAT16 file system'),
+                                                                                                      (u'25filesystem',
+                                                                                                       u'fat32',
+                                                                                                       u'FAT32 file system'),
+                                                                                                      (u'40swap',
+                                                                                                       u'swap',
+                                                                                                       u'swap area'),
+                                                                                                      (u'70dont_use',
+                                                                                                       u'dontuse',
+                                                                                                       u'do not use the partition')],
+                                                                                   'parent': u'/dev/sdc',
+                                                                                   'parted': {'fs': 'linux-swap',
+                                                                                              'id': '5075030016-5362882559',
+                                                                                              'name': '',
+                                                                                              'num': '5',
+                                                                                              'path': '/dev/sdc5',
+                                                                                              'size': '287852544',
+                                                                                              'type': 'logical'},
+                                                                                   'resize_max_size': 287852544,
+                                                                                   'resize_min_size': 4096,
+                                                                                   'resize_pref_size': 287852544}}
+
+    win.update(disk_cache, partition_cache, cache_order)
+    win.update(disk_cache, partition_cache, cache_order)
+
+    sys.exit(app.exec_())
diff --git a/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py
new file mode 100644
index 0000000000000000000000000000000000000000..ca32ecf9c3a5864c7c327e78fbf2e34f0cdb7f0d
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py
@@ -0,0 +1,1292 @@
+# -*- coding: utf-8; Mode: Python; indent-tabs-mode: nil; tab-width: 4 -*-
+# -*- kate: indent-mode python; space-indent true; indent-width 4; backspace-indents true
+#
+# Copyright (C) 2006, 2007, 2008, 2009 Canonical Ltd.
+#
+# Author(s):
+#   Jonathan Riddell <jriddell@ubuntu.com>
+#   Mario Limonciello <superm1@ubuntu.com>
+#   Roman Shtylman <shtylman@gmail.com>
+#
+# This file is part of Ubiquity.
+#
+# Ubiquity is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or at your option)
+# any later version.
+#
+# Ubiquity is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Ubiquity; if not, write to the Free Software Foundation, Inc., 51
+# Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+import sys
+import os
+import subprocess
+import traceback
+import syslog
+import atexit
+import signal
+import gettext
+import dbus
+
+# kde gui specifics
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4 import uic
+from PyKDE4.kdeui import *
+from PyKDE4.kdecore import *
+
+#import all our custom kde components
+from ubiquity.frontend.kde_components.ProgressDialog import *
+from ubiquity.frontend.kde_components.SqueezeLabel import *
+
+import debconf
+
+from ubiquity import filteredcommand, i18n, validation, parted_server
+from ubiquity.misc import *
+from ubiquity.plugin import Plugin
+from ubiquity.components import partman_commit, install
+import ubiquity.progressposition
+import ubiquity.frontend.base
+from ubiquity.frontend.base import BaseFrontend
+
+# Define global path
+PATH = '/usr/share/ubiquity'
+
+# Define locale path
+LOCALEDIR = "/usr/share/locale"
+
+#currently using for testing, will remove
+UIDIR = os.path.join(PATH, 'qt')
+
+class UbiquityUI(KMainWindow):
+
+    def __init__(self, parent = None):
+        QMainWindow.__init__(self, parent)
+        uic.loadUi(os.path.join(UIDIR, "app.ui"), self)
+
+        self.distro_name = "Linux Educacional"
+        self.distro_release = ""
+
+        ## setup the release and codename
+        fp = open("/etc/lsb-release", 'r')
+
+        for line in fp:
+            if "DISTRIB_ID=" in line:
+                name = str.strip(line.split("=")[1], '\n')
+                if name != "\"Linux Educacional\"":
+                    self.distro_name = name
+            elif "DISTRIB_RELEASE=" in line:
+                self.distro_release = str.strip(line.split("=")[1], '\n')
+
+        fp.close()
+
+        self.distro_name_label.setText(self.distro_name)
+        self.distro_release_label.setText(self.distro_release)
+
+        self.minimize_button.clicked.connect(self.showMinimized)
+        self.minimize_button.setVisible(False)
+        self.quit.setVisible(False)
+        self.progressCancel.setVisible(False)
+
+        self.setWindowTitle("%s %s" % (self.distro_name, self.distro_release))
+
+        # don't use stylesheet cause we want to scale the wallpaper for various
+        # screen sizes as well as support larger screens
+        self.bgImage = QImage("/usr/share/wallpapers/LE/contents/images/1920x1200.png")
+        self.scaledBgImage = self.bgImage
+
+    def paintEvent(self, pe):
+        p = QPainter(self)
+        p.drawImage(0, 0, self.scaledBgImage)
+
+    def resizeEvent(self, re):
+        self.scaledBgImage = self.bgImage.scaled(self.width(), self.height(),
+                Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation)
+
+    def setWizard(self, wizardRef):
+        self.wizard = wizardRef
+
+    def closeEvent(self, event):
+        if not self.wizard.on_quit_clicked():
+            event.ignore()
+
+class Controller(ubiquity.frontend.base.Controller):
+    def translate(self, lang=None, just_me=True, not_me=False, reget=False):
+        if lang:
+            self._wizard.locale = lang
+        self._wizard.translate_pages(lang, just_me, not_me, reget)
+
+    def allow_go_forward(self, allowed):
+        self._wizard.allow_go_forward(allowed)
+
+    def allow_go_backward(self, allowed):
+        self._wizard.allow_go_backward(allowed)
+    
+    def allow_change_step(self, allowed):
+        self._wizard.allow_change_step(allowed)
+
+    def allowed_change_step(self):
+        return self._wizard.allowed_change_step
+
+    def go_forward(self):
+        self._wizard.ui.next.click()
+
+    def go_backward(self):
+        self._wizard.ui.back.click()
+
+    def go_to_page(self, widget):
+        self._wizard.set_current_page(self._wizard.stackLayout.indexOf(widget))
+
+    def toggle_top_level(self):
+        if self._wizard.ui.isVisible():
+            self._wizard.ui.hide()
+        else:
+            self._wizard.ui.show()
+        self._wizard.refresh()
+
+class Wizard(BaseFrontend):
+
+    def __init__(self, distro):
+        BaseFrontend.__init__(self, distro)
+
+        self.previous_excepthook = sys.excepthook
+        sys.excepthook = self.excepthook
+
+        appName     = "kubuntu-ubiquity"
+        catalog     = ""
+        programName = ki18n ("Installer")
+        ver         = "1.0"
+        description = ki18n ("Live CD Installer for Kubuntu")
+        rights      = KAboutData.License_GPL
+        copy        = ki18n ("(c) 2006 Canonical Ltd")
+        text        = ki18n ("none")
+        homePage    = "http://wiki.kubuntu.org/KubuntuUbiquity"
+        bugEmail    = "jriddell@ubuntu.com"
+
+        about = KAboutData (appName, catalog, programName, ver, description,
+                            rights, copy, text, homePage, bugEmail)
+        about.addAuthor(ki18n("Jonathan Riddell"), KLocalizedString() ,"jriddell@ubuntu.com")
+        about.addAuthor(ki18n("Roman Shtylman"), KLocalizedString() ,"shtylman@gmail.com")
+        KCmdLineArgs.init([""],about)
+
+        # KApplication won't initialise if real UID != effective UID.  On
+        # the other hand, we can't talk to D-Bus unless the effective user
+        # is the live CD user.  Oh dear.  The solution is to use saved IDs:
+        # if we hide our rootliness in the saved IDs, then neither
+        # KApplication nor D-Bus will spot it.
+        drop_privileges_save()
+        try:
+            self.app = KApplication()
+            self.app.setStyleSheet(file(os.path.join(UIDIR, "style.qss")).read())
+        finally:
+            regain_privileges_save()
+
+        self.ui = UbiquityUI()
+
+        # handle smaller screens (old school eee pc
+        if (QApplication.desktop().screenGeometry().height() < 560):
+            self.ui.main_frame.setFixedHeight(470)
+            self.ui.main_frame.setStyleSheet(file(os.path.join(UIDIR, "style_small.qss")).read())
+
+        # initially the steps widget is not visible
+        # it becomes visible once the first step becomes active
+        self.ui.steps_widget.setVisible(False)
+        self.ui.content_widget.setVisible(False)
+
+        if 'UBIQUITY_GREETER' in os.environ:
+            self.ui.minimize_button.hide()
+
+        self.ui.setWindowState(self.ui.windowState() ^ Qt.WindowFullScreen)
+
+        self.ui.setWizard(self)
+        #self.ui.setWindowFlags(Qt.Window | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint)
+
+        #hide the minimize button if in "install only" mode
+        if 'UBIQUITY_ONLY' in os.environ or 'UBIQUITY_GREETER' in os.environ:
+            self.ui.minimize_button.setVisible(False)
+
+        self.stackLayout = QStackedLayout(self.ui.widgetStack)
+
+        self.pages = []
+        self.pagesindex = 0
+        self.pageslen = 0
+        for mod in self.modules:
+            if hasattr(mod.module, 'PageKde'):
+                mod.ui_class = mod.module.PageKde
+                mod.controller = Controller(self)
+                mod.ui = mod.ui_class(mod.controller)
+                widgets = mod.ui.get('plugin_widgets')
+                optional_widgets = mod.ui.get('plugin_optional_widgets')
+                breadcrumb = mod.ui.get('plugin_breadcrumb')
+                if widgets or optional_widgets:
+                    def fill_out(widget_list):
+                        rv = []
+                        if not isinstance(widget_list, list):
+                            widget_list = [widget_list]
+                        for w in widget_list:
+                            if not w: continue
+                            if not isinstance(w, str):
+                                # Until we ship with no pre-built pages, insert
+                                # at 'beginning'
+                                self.stackLayout.insertWidget(self.pageslen, w)
+                            elif hasattr(self.ui, w):
+                                w = getattr(self.ui, w)
+                            rv.append(w)
+                        return rv
+                    mod.widgets = fill_out(widgets)
+                    mod.optional_widgets = fill_out(optional_widgets)
+                    if not hasattr(mod.ui, 'plugin_breadcrumb'):
+                        breadcrumb = '------' # just a placeholder
+                    if breadcrumb:
+                        mod.breadcrumb_question = breadcrumb
+                        mod.breadcrumb = SqueezeLabel()
+                        mod.breadcrumb.setObjectName(mod.breadcrumb_question)
+                        label_index = self.ui.steps_widget.layout().count() - 2 # Room for install crumb
+                        self.ui.steps_widget.layout().insertWidget(label_index, mod.breadcrumb)
+                    else:
+                        mod.breadcrumb_question = None
+                        mod.breadcrumb = None # page intentionally didn't want a label (intro)
+                    self.pageslen += 1
+                    self.pages.append(mod)
+        self.user_pageslen = self.pageslen
+
+        # declare attributes
+        self.language_questions = (
+            'live_installer',
+            'step_label',
+            'quit',
+            'back',
+            'next',
+            'warning_dialog',
+            'warning_dialog_label',
+            'cancelbutton',
+            'exitbutton',
+            'install_process_label'
+        )
+
+        self.current_page = None
+        self.first_seen_page = None
+        self.allowed_change_step = True
+        self.allowed_go_backward = True
+        self.allowed_go_forward = True
+        self.stay_on_page = False
+        self.mainLoopRunning = False
+        self.progress_position = ubiquity.progressposition.ProgressPosition()
+        self.progress_cancelled = False
+        self.previous_partitioning_page = self.step_index("stepPartAuto")
+        self.installing = False
+        self.installing_no_return = False
+        self.returncode = 0
+        self.backup = False
+        self.history = []
+        self.progressDialog = ProgressDialog(0, 0, self.ui)
+
+        self.laptop = execute("laptop-detect")
+
+        # set default language
+        self.locale = i18n.reset_locale(self)
+
+        self.debconf_callbacks = {}    # array to keep callback functions needed by debconf file descriptors
+
+        self.ui.setWindowIcon(KIcon("ubiquity"))
+        self.allow_go_backward(False)
+
+        if not 'UBIQUITY_AUTOMATIC' in os.environ:
+            self.ui.show()
+
+        self.stop_debconf()
+        self.translate_widgets(reget=True)
+
+        if self.oem_config:
+            self.ui.setWindowTitle(self.get_string('oem_config_title'))
+        elif self.oem_user_config:
+            self.ui.setWindowTitle(self.get_string('oem_user_config_title'))
+            self.ui.setWindowIcon(KIcon("preferences-system"))
+            flags = self.ui.windowFlags() ^ Qt.WindowMinMaxButtonsHint
+            if hasattr(Qt, 'WindowCloseButtonHint'):
+                flags = flags ^ Qt.WindowCloseButtonHint
+            self.ui.setWindowFlags(flags)
+            #self.ui.quit.hide()
+            # TODO cjwatson 2010-04-07: provide alternative strings instead
+            self.ui.install_process_label.hide()
+            self.ui.breadcrumb_install.hide()
+
+        iconLoader = KIconLoader()
+        warningIcon = iconLoader.loadIcon("dialog-warning", KIconLoader.Desktop)
+
+        # TODO move to plugin
+        #self.ui.part_advanced_warning_image.setPixmap(warningIcon)
+
+        self.forwardIcon = KIcon("go-next")
+        self.ui.next.setIcon(self.forwardIcon)
+
+        #Used for the last step
+        self.applyIcon = KIcon("dialog-ok-apply")
+
+        backIcon = KIcon("go-previous")
+        self.ui.back.setIcon(backIcon)
+
+        quitIcon = KIcon("dialog-close")
+        #self.ui.quit.setIcon(quitIcon)
+
+        self.ui.progressBar.hide()
+        #self.ui.progressCancel.hide()
+
+    def excepthook(self, exctype, excvalue, exctb):
+        """Crash handler."""
+
+        if (issubclass(exctype, KeyboardInterrupt) or
+            issubclass(exctype, SystemExit)):
+            return
+
+        tbtext = ''.join(traceback.format_exception(exctype, excvalue, exctb))
+        syslog.syslog(syslog.LOG_ERR,
+                      "Exception in KDE frontend (invoking crash handler):")
+        for line in tbtext.split('\n'):
+            syslog.syslog(syslog.LOG_ERR, line)
+        print >>sys.stderr, ("Exception in KDE frontend"
+                             " (invoking crash handler):")
+        print >>sys.stderr, tbtext
+
+        self.post_mortem(exctype, excvalue, exctb)
+
+        if os.path.exists('/usr/share/apport/apport-qt'):
+            self.previous_excepthook(exctype, excvalue, exctb)
+        else:
+            dialog = QDialog(self.ui)
+            uic.loadUi("%s/crashdialog.ui" % UIDIR, dialog)
+            dialog.beastie_url.setOpenExternalLinks(True)
+            dialog.crash_detail.setText(tbtext)
+            dialog.exec_()
+            sys.exit(1)
+
+    # Disable the KDE media notifier to avoid problems during partitioning.
+    def disable_volume_manager(self):
+        #FIXME, medianotifier unload port to KDE 4"
+        #execute('dcop', 'kded', 'kded', 'unloadModule', 'medianotifier')
+        atexit.register(self.enable_volume_manager)
+
+    def enable_volume_manager(self):
+        #FIXME, medianotifier unload port to KDE 4"
+        #execute('dcop', 'kded', 'kded', 'loadModule', 'medianotifier')
+        pass
+
+    def run(self):
+        """run the interface."""
+
+        if os.getuid() != 0:
+            title = ('This installer must be run with administrative '
+                     'privileges, and cannot continue without them.')
+            QMessageBox.critical(self.ui, "Must be root", title)
+            sys.exit(1)
+
+        self.disable_volume_manager()
+
+        self.allow_change_step(True)
+
+        # Declare SignalHandler
+        self.ui.next.clicked.connect(self.on_next_clicked)
+        self.ui.back.clicked.connect(self.on_back_clicked)
+        #self.ui.quit.clicked.connect(self.on_quit_clicked)
+
+        if 'UBIQUITY_AUTOMATIC' in os.environ:
+            self.debconf_progress_start(0, self.pageslen,
+                self.get_string('ubiquity/install/checking'))
+            self.progressDialog.setWindowTitle(
+                self.get_string('ubiquity/install/title'))
+            self.progressDialog.windowTitle.setText(
+                self.get_string('ubiquity/install/title'))
+            self.refresh()
+            self.refresh()
+
+        # Start the interface
+        self.set_current_page(0)
+
+        while(self.pagesindex < self.pageslen):
+            if self.current_page == None:
+                break
+
+            self.backup = False
+            if not self.pages[self.pagesindex].filter_class:
+                # This page is just a UI page
+                self.dbfilter = None
+                self.dbfilter_status = None
+                if self.set_page(self.pages[self.pagesindex].module.NAME):
+                    self.allow_change_step(True)
+                    self.app.exec_()
+            else:
+                old_dbfilter = self.dbfilter
+                if issubclass(self.pages[self.pagesindex].filter_class, Plugin):
+                    ui = self.pages[self.pagesindex].ui
+                else:
+                    ui = None
+                self.start_debconf()
+                self.dbfilter = self.pages[self.pagesindex].filter_class(self, ui=ui)
+
+                # Non-debconf steps are no longer possible as the interface is now
+                # driven by whether there is a question to ask.
+                if self.dbfilter is not None and self.dbfilter != old_dbfilter:
+                    self.allow_change_step(False)
+                    QTimer.singleShot(0, lambda: self.dbfilter.start(auto_process=True))
+
+                self.pages[self.pagesindex].controller.dbfilter = self.dbfilter
+                self.app.exec_()
+                self.pages[self.pagesindex].controller.dbfilter = None
+
+            if self.backup or self.dbfilter_handle_status():
+                if self.installing:
+                    self.progress_loop()
+                elif self.current_page is not None and not self.backup:
+                    self.process_step()
+                    if not self.stay_on_page:
+                        self.pagesindex = self.pagesindex + 1
+                    if 'UBIQUITY_AUTOMATIC' in os.environ:
+                        # if no debconf_progress, create another one, set start to pageindex
+                        self.debconf_progress_step(1)
+                        self.refresh()
+                if self.backup:
+                    self.pagesindex = self.pop_history()
+
+            self.app.processEvents()
+
+            # needed to be here for --automatic as there might not be any
+            # current page in the event all of the questions have been
+            # preseeded.
+            if self.pagesindex == self.pageslen:
+                # Ready to install
+                self.ui.hide()
+                self.current_page = None
+                self.installing = True
+                self.progress_loop()
+
+        return self.returncode
+
+    def set_layout_direction(self, lang=None):
+        if not lang:
+            lang = self.locale
+        # TODO: At the moment we have to special-case languages. This will
+        # be easier to fix when we move to cdebconf and have the
+        # debconf/text-direction template easily available.
+        if lang.startswith('ar') or lang.startswith('he'):
+            direction = Qt.RightToLeft
+        else:
+            direction = Qt.LeftToRight
+        self.app.setLayoutDirection(direction)
+
+    def all_children(self, parentWidget=None):
+        if parentWidget is None:
+            parentWidget = self.ui
+
+        def recurse(x, y):
+            return x + self.all_children(y)
+        rv = reduce(recurse, parentWidget.children(), [parentWidget])
+        return rv
+
+    def translate_pages(self, lang=None, just_current=True, not_current=False, reget=False):
+        current_page = self.pages[self.pagesindex]
+        if just_current:
+            pages = [self.pages[self.pagesindex]]
+        else:
+            pages = self.pages
+        widgets = []
+        for p in pages:
+            # There's no sense retranslating the page we're leaving.
+            if not_current and p == current_page:
+                continue
+            prefix = p.ui.get('plugin_prefix')
+            for w in p.widgets:
+                for c in self.all_children(w):
+                    widgets.append((c, prefix))
+
+        #if not just_current:
+        #for toplevel in self.toplevels:
+            #if toplevel.name != 'live_installer':
+                #for c in self.all_children(toplevel):
+                    #widgets.append((c, None))
+        self.translate_widgets(lang=lang, widgets=widgets, reget=reget)
+
+    # translates widget text based on the object names
+    # widgets is a list of (widget, prefix) pairs
+    def translate_widgets(self, lang=None, widgets=None, reget=True):
+        if lang is None:
+            lang = self.locale
+        if lang is None:
+            languages = []
+        else:
+            languages = [lang]
+        if widgets is None:
+            widgets = [(x, None) for x in self.all_children()]
+
+        if reget:
+            core_names = ['ubiquity/text/%s' % q for q in self.language_questions]
+            core_names.append('ubiquity/text/oem_config_title')
+            core_names.append('ubiquity/text/oem_user_config_title')
+            core_names.append('ubiquity/text/breadcrumb_install')
+            for stock_item in ('cancel', 'close', 'go-back', 'go-forward',
+                               'ok', 'quit', 'yes', 'no'):
+                core_names.append('ubiquity/imported/%s' % stock_item)
+            prefixes = []
+            for p in self.pages:
+                prefix = p.ui.get('plugin_prefix')
+                if not prefix:
+                    prefix = 'ubiquity/text'
+                if p.ui.get('plugin_is_language'):
+                    children = reduce(lambda x,y: x + self.all_children(y), p.widgets, [])
+                    core_names.extend([prefix+'/'+c.objectName() for c in children])
+                if p.breadcrumb_question:
+                    core_names.append(p.breadcrumb_question)
+                prefixes.append(prefix)
+            i18n.get_translations(languages=languages, core_names=core_names, extra_prefixes=prefixes)
+
+        # We always translate always-visible widgets
+        for q in self.language_questions:
+            if hasattr(self.ui, q):
+                widgets.append((getattr(self.ui, q), None))
+            elif q == 'live_installer':
+                widgets.append((self.ui, None))
+        widgets.extend([(x, None) for x in self.all_children(self.ui.steps_widget)])
+
+        for w in widgets:
+            self.translate_widget(w[0], lang=lang, prefix=w[1])
+
+        self.set_layout_direction()
+
+    def translate_widget_children(self, parentWidget):
+        for w in self.all_children(parentWidget):
+            self.translate_widget(w)
+
+    def translate_widget(self, widget, lang=None, prefix=None):
+        if lang is None:
+            lang = self.locale
+        #FIXME needs translations for Next, Back and Cancel
+        if not isinstance(widget, QWidget):
+            return
+
+        name = str(widget.objectName())
+
+        text = self.get_string(name, lang, prefix)
+
+        if str(name) == "UbiquityUIBase":
+            text = self.get_string("live_installer", lang, prefix)
+
+        if text is None:
+            return
+
+        if isinstance(widget, QLabel):
+            if name == 'step_label':
+                text = text.replace('${INDEX}', str(self.pagesindex+1))
+                text = text.replace('${TOTAL}', str(self.user_pageslen))
+            elif name == 'ready_text_label' and self.oem_user_config:
+                text = self.get_string('ready_text_oem_user_label', lang, prefix)
+            elif name == 'select_language_label' and self.oem_user_config:
+                text = self.get_string('select_language_oem_user_label', lang, prefix)
+
+            if 'heading_label' in name:
+                widget.setText("<h2>" + text + "</h2>")
+            elif 'extra_label' in name:
+                widget.setText("<small>" + text + "</small>")
+            elif ('group_label' in name or 'warning_label' in name or
+                  name in ('drives_label', 'partition_method_label')):
+                widget.setText("<strong>" + text + "</strong>")
+            else:
+                widget.setText(text)
+
+        elif isinstance(widget, QAbstractButton):
+            widget.setText(text.replace('_', '&', 1))
+
+        elif isinstance(widget, QWidget) and str(name) == "UbiquityUIBase":
+            if self.oem_config:
+                text = self.get_string('oem_config_title', lang, prefix)
+            elif self.oem_user_config:
+                text = self.get_string('oem_user_config_title', lang, prefix)
+            widget.setWindowTitle(text)
+
+        else:
+            print "WARNING: unknown widget: " + name
+            print "Type: ", type(widget)
+
+    def allow_change_step(self, allowed):
+        if allowed:
+            cursor = QCursor(Qt.ArrowCursor)
+        else:
+            cursor = QCursor(Qt.WaitCursor)
+        self.ui.setCursor(cursor)
+        self.ui.back.setEnabled(allowed and self.allowed_go_backward)
+        self.ui.next.setEnabled(allowed and self.allowed_go_forward)
+        self.allowed_change_step = allowed
+
+    def allow_go_backward(self, allowed):
+        self.ui.back.setEnabled(allowed and self.allowed_change_step)
+        self.allowed_go_backward = allowed
+
+    def allow_go_forward(self, allowed):
+        self.ui.next.setEnabled(allowed and self.allowed_change_step)
+        self.allowed_go_forward = allowed
+
+    def dbfilter_handle_status(self):
+        """If a dbfilter crashed, ask the user if they want to continue anyway.
+
+        Returns True to continue, or False to try again."""
+
+        if not self.dbfilter_status or self.current_page is None:
+            return True
+
+        syslog.syslog('dbfilter_handle_status: %s' % str(self.dbfilter_status))
+
+        # TODO cjwatson 2007-04-04: i18n
+        text = ('%s failed with exit code %s. Further information may be '
+                'found in /var/log/syslog. Do you want to try running this '
+                'step again before continuing? If you do not, your '
+                'installation may fail entirely or may be broken.' %
+                (self.dbfilter_status[0], self.dbfilter_status[1]))
+        #FIXME QMessageBox seems to have lost the ability to set custom labels
+        # so for now we have to get by with these not-entirely meaningful stock labels
+        answer = QMessageBox.warning(self.ui,
+                                     '%s crashed' % self.dbfilter_status[0],
+                                     text, QMessageBox.Retry,
+                                     QMessageBox.Ignore, QMessageBox.Close)
+        self.dbfilter_status = None
+        syslog.syslog('dbfilter_handle_status: answer %d' % answer)
+        if answer == QMessageBox.Ignore:
+            return True
+        elif answer == QMessageBox.Close:
+            self.quit()
+        else:
+            step = self.step_name(self.get_current_page())
+            if str(step) == "partman":
+                self.set_current_page(self.step_index("stepPartAuto"))
+            return False
+
+    def step_name(self, step_index):
+        if step_index < 0:
+            step_index = 0
+        return str(self.stackLayout.widget(step_index).objectName())
+
+    def step_index(self, step_name):
+        if hasattr(self.ui, step_name):
+          step = getattr(self.ui, step_name)
+          return self.stackLayout.indexOf(step)
+        else:
+          return 0
+
+    def set_page(self, n):
+        self.run_automation_error_cmd()
+        self.ui.show()
+
+        borderCSS = "border-width: 6px; border-image: url(/usr/share/ubiquity/qt/images/label_border.png) 6px;"
+        activeSS = "color: %s; " % "#666666"
+        inactiveSS = "color: %s; " % "#b3b3b3"
+        currentSS = "%s color: %s; " % (borderCSS, "#0088aa")
+
+        #set all the steps active
+        #each step will set its previous ones as inactive
+        #this handles the ability to go back
+
+        found = False
+        is_install = False
+        for page in self.pages:
+            if page.module.NAME == n:
+                # Now ask ui class which page we want to be showing right now
+                if hasattr(page.ui, 'plugin_get_current_page'):
+                    cur = page.ui.call('plugin_get_current_page')
+                    if isinstance(cur, str) and hasattr(self.ui, cur):
+                        cur = getattr(self.ui, cur) # for not-yet-plugins
+                elif page.widgets:
+                    cur = page.widgets[0]
+                if not cur:
+                    return False
+                index = self.stackLayout.indexOf(cur)
+                self.add_history(page, cur)
+                self.set_current_page(index)
+                if page.breadcrumb:
+                    page.breadcrumb.setStyleSheet(currentSS)
+                found = True
+                is_install = page.ui.get('plugin_is_install')
+            elif page.breadcrumb:
+                if found:
+                    page.breadcrumb.setStyleSheet(activeSS)
+                else:
+                    page.breadcrumb.setStyleSheet(inactiveSS)
+        self.ui.breadcrumb_install.setStyleSheet(activeSS)
+
+        if is_install:
+            self.ui.next.setText(self.get_string('install_button').replace('_', '&', 1))
+            self.ui.next.setIcon(self.applyIcon)
+
+        if self.pagesindex == 0:
+            self.allow_go_backward(False)
+        else:
+            self.allow_go_backward(True)
+
+        return True
+
+    def page_name(self, step_index):
+        if step_index < 0:
+            step_index = 0
+        return str(self.stackLayout.widget(step_index).objectName())
+
+    def add_history(self, page, widget):
+        history_entry = (page, widget)
+        if self.history:
+            # We may have skipped past child pages of the component.  Remove
+            # the history between the page we're on and the end of the list in
+            # that case.
+            if history_entry in self.history:
+                idx = self.history.index(history_entry)
+                if idx + 1 < len(self.history):
+                    self.history = self.history[:idx+1]
+                    return # The page is now effectively a dup
+            # We may have either jumped backward or forward over pages.
+            # Correct history in that case
+            new_index = self.pages.index(page)
+            old_index = self.pages.index(self.history[-1][0])
+            # First, pop if needed
+            if new_index < old_index:
+                while self.history[-1][0] != page and len(self.history) > 1:
+                    self.pop_history()
+            # Now push fake history if needed
+            i = old_index + 1
+            while i < new_index:
+                for _ in self.pages[i].widgets:
+                    self.history.append((self.pages[i], None))
+                i += 1
+
+            if history_entry == self.history[-1]:
+                return # Don't add the page if it's a dup
+        self.history.append(history_entry)
+
+    def pop_history(self):
+        if len(self.history) < 2:
+            return self.pagesindex
+        self.history.pop()
+        return self.pages.index(self.history[-1][0])
+
+    def set_current_page(self, current):
+        widget = self.stackLayout.widget(current)
+        if self.stackLayout.currentWidget() == widget:
+            # self.ui.widgetStack.raiseWidget() will do nothing.
+            # Update state ourselves.
+            self.on_steps_switch_page(current)
+        else:
+            self.stackLayout.setCurrentWidget(widget)
+            self.on_steps_switch_page(current)
+
+    def progress_loop(self):
+        """prepare, copy and config the system in the core install process."""
+        syslog.syslog('progress_loop()')
+
+        self.current_page = None
+
+        slideshow_dir = '/usr/share/ubiquity-slideshow'
+        slideshow_locale = self.slideshow_get_available_locale(slideshow_dir, self.locale)
+        slideshow_main = slideshow_dir + '/slides/index.html'
+
+        s = self.app.desktop().availableGeometry()
+        fail = None
+        if os.path.exists(slideshow_main):
+            if s.height >= 600 and s.width >= 800:
+                slides = 'file://' + slideshow_main
+                if slideshow_locale != 'c': #slideshow will use default automatically
+                    slides += '#?locale=' + slideshow_locale
+                    ltr = i18n.get_string('default-ltr', slideshow_locale, 'ubiquity/imported')
+                    if ltr == 'default:RTL':
+                        slides += '?rtl'
+                try:
+                    from PyQt4.QtWebKit import QWebView
+                    from PyQt4.QtWebKit import QWebPage
+
+                    def openLink(qUrl):
+                        QDesktopServices.openUrl(qUrl)
+
+                    webView = QWebView()
+
+                    webView.linkClicked.connect(openLink)
+
+                    webView.setContextMenuPolicy(Qt.NoContextMenu)
+                    webView.page().setLinkDelegationPolicy(QWebPage.DelegateExternalLinks)
+                    webView.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)
+                    webView.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
+                    #webView.setFixedSize(700,420)
+                    webView.setFixedSize(700,400)
+
+                    webView.load(QUrl(slides))
+
+                    #add the webview to the extra frame of the progress dialog
+                    self.progressDialog.extraFrame.layout().addWidget(webView)
+                    self.progressDialog.extraFrame.setVisible(True)
+                except ImportError:
+                    fail = 'Webkit not present.'
+            else:
+                fail = 'Display < 800x600 (%sx%s).' % (s.width, s.height)
+        else:
+            fail = 'No slides present for %s.' % slideshow_dir
+        if fail:
+            syslog.syslog('Not displaying the slideshow: %s' % fail)
+
+        self.progressDialog.show()
+
+        self.debconf_progress_start(
+        #    0, 78, self.get_string('ubiquity/install/title'))
+            0, 100, self.get_string('ubiquity/install/title'))
+        self.debconf_progress_region(0, 15)
+
+        if not self.oem_user_config:
+            self.start_debconf()
+            dbfilter = partman_commit.PartmanCommit(self)
+            if dbfilter.run_command(auto_process=True) != 0:
+                while self.progress_position.depth() != 0:
+                    self.debconf_progress_stop()
+                self.progressDialog.hide()
+                self.return_to_partitioning()
+                return
+
+        # No return to partitioning from now on
+        self.installing_no_return = True
+
+        self.debconf_progress_region(15, 78)
+
+        self.start_debconf()
+        dbfilter = install.Install(self)
+        ret = dbfilter.run_command(auto_process=True)
+        if ret != 0:
+            self.installing = False
+            if ret == 3:
+                # error already handled by Install
+                sys.exit(ret)
+            elif (os.WIFSIGNALED(ret) and
+                  os.WTERMSIG(ret) in (signal.SIGINT, signal.SIGKILL,
+                                       signal.SIGTERM)):
+                sys.exit(ret)
+            elif os.path.exists('/var/lib/ubiquity/install.trace'):
+                tbfile = open('/var/lib/ubiquity/install.trace')
+                realtb = tbfile.read()
+                tbfile.close()
+                raise RuntimeError, ("Install failed with exit code %s\n%s" %
+                                     (ret, realtb))
+            else:
+                raise RuntimeError, ("Install failed with exit code %s; see "
+                                     "/var/log/syslog" % ret)
+
+        while self.progress_position.depth() != 0:
+            self.debconf_progress_stop()
+
+        # just to make sure
+        self.progressDialog.hide()
+
+        self.installing = False
+        quitText = '<qt>%s</qt>' % self.get_string("finished_label")
+        rebootButtonText = self.get_string("reboot_button")
+        quitButtonText = self.get_string("quit_button")
+        titleText = self.get_string("finished_dialog")
+
+        ##FIXME use non-stock messagebox to customise button text
+        #quitAnswer = QMessageBox.question(self.ui, titleText, quitText, rebootButtonText, quitButtonText)
+        self.run_success_cmd()
+        if self.oem_user_config:
+            self.quit()
+        elif not self.get_reboot_seen():
+            if ('UBIQUITY_ONLY' in os.environ or
+                'UBIQUITY_GREETER' in os.environ):
+                quitText = self.get_string('ubiquity/finished_restart_only')
+            messageBox = QMessageBox(QMessageBox.Question, titleText, quitText, QMessageBox.NoButton, self.ui)
+            messageBox.addButton(rebootButtonText, QMessageBox.AcceptRole)
+            if ('UBIQUITY_ONLY' not in os.environ and
+                'UBIQUITY_GREETER' not in os.environ):
+                messageBox.addButton(quitButtonText, QMessageBox.RejectRole)
+            messageBox.setWindowFlags(messageBox.windowFlags() | Qt.WindowStaysOnTopHint)
+            quitAnswer = messageBox.exec_()
+
+            if quitAnswer == 0:
+                self.reboot()
+        elif self.get_reboot():
+            self.reboot()
+
+    def reboot(self, *args):
+        """reboot the system after installing process."""
+        self.returncode = 10
+        self.quit()
+
+    def do_reboot(self):
+        """Callback for main program to actually reboot the machine."""
+        try:
+            session = dbus.Bus.get_session()
+            ksmserver = session.name_has_owner('org.kde.ksmserver')
+        except dbus.exceptions.DBusException:
+            ksmserver = False
+        if ksmserver:
+            ksmserver = session.get_object('org.kde.ksmserver', '/KSMServer')
+            ksmserver = dbus.Interface(ksmserver, 'org.kde.KSMServerInterface')
+            # ShutdownConfirmNo, ShutdownTypeReboot, ShutdownModeForceNow
+            ksmserver.logout(0, 1, 2)
+        else:
+            execute_root('reboot')
+
+    def quit(self):
+        """quit installer cleanly."""
+        self.current_page = None
+        if self.dbfilter is not None:
+            self.dbfilter.cancel_handler()
+
+        self.app.exit()
+
+    def quit_installer(self):
+        """quit installer cleanly."""
+
+        # exiting from application
+        self.current_page = None
+        if self.dbfilter is not None:
+            self.dbfilter.cancel_handler()
+        self.quit_main_loop()
+
+    def on_quit_clicked(self):
+        warning_dialog_label = self.get_string("warning_dialog_label")
+        abortTitle = self.get_string("warning_dialog")
+        continueButtonText = self.get_string("continue")
+        yes = self.get_string('yes', prefix='ubiquity/imported')
+        no = self.get_string('no', prefix='ubiquity/imported')
+        if yes and no:
+            yes = KGuiItem(yes.replace('_', '&', 1))
+            no = KGuiItem(no.replace('_', '&', 1))
+            args = (self.ui, abortTitle, warning_dialog_label, yes, no)
+        else:
+            args = (self.ui, abortTitle, warning_dialog_label)
+        response = KMessageBox.questionYesNo(*args)
+        if response == KMessageBox.Yes:
+            self.current_page = None
+            self.quit()
+            return True
+        else:
+            return False
+
+    def on_next_clicked(self):
+        """Callback to control the installation process between steps."""
+        if not self.allowed_change_step or not self.allowed_go_forward:
+            return
+
+        self.allow_change_step(False)
+
+        if self.dbfilter is not None:
+            self.dbfilter.ok_handler()
+            # expect recursive main loops to be exited and
+            # debconffilter_done() to be called when the filter exits
+        else:
+            self.app.exit()
+
+    def process_step(self):
+        """Process and validate the results of this step."""
+
+        # setting actual step
+        step_num = self.get_current_page()
+        step = self.page_name(step_num)
+        syslog.syslog('Step_before = %s' % step)
+
+        if step.startswith("stepPart"):
+            self.previous_partitioning_page = step_num
+
+        # Automatic partitioning
+        if step == "stepPartAuto":
+            self.process_autopartitioning()
+
+    def process_autopartitioning(self):
+        """Processing automatic partitioning step tasks."""
+        self.app.processEvents()
+
+        # For safety, if we somehow ended up improperly initialised
+        # then go to manual partitioning.
+        choice = self.get_autopartition_choice()[0]
+        if self.manual_choice is None or choice == self.manual_choice:
+            self.set_current_page(self.step_index("stepPartAdvanced"))
+        else:
+            self.set_current_page(self.step_index("stepUserInfo"))
+
+    def on_back_clicked(self):
+        """Callback to set previous screen."""
+        if not self.allowed_change_step:
+            return
+
+        self.allow_change_step(False)
+
+        self.backup = True
+        self.stay_on_page = False
+
+        # Enabling next button
+        self.allow_go_forward(True)
+        # Setting actual step
+        step = self.step_name(self.get_current_page())
+        self.ui.setCursor(QCursor(Qt.WaitCursor))
+
+        if str(step) == "summary":
+            self.ui.next.setText(self.get_string("next").replace('_', '&', 1))
+            self.ui.next.setIcon(self.forwardIcon)
+            self.translate_widget(self.ui.next)
+
+        if self.dbfilter is not None:
+            self.dbfilter.cancel_handler()
+            # expect recursive main loops to be exited and
+            # debconffilter_done() to be called when the filter exits
+        else:
+            self.app.exit()
+
+    def on_steps_switch_page(self, newPageID):
+        self.ui.content_widget.show()
+        self.current_page = newPageID
+        name = self.step_name(newPageID)
+        #self.translate_widget(self.ui.step_label)
+        syslog.syslog('switched to page %s' % name)
+        if 'UBIQUITY_GREETER' in os.environ:
+            if name == 'language':
+                self.ui.steps_widget.hide()
+                self.ui.navigation.hide()
+            else:
+                self.ui.steps_widget.show()
+                self.ui.navigation.show()
+        else:
+            self.ui.steps_widget.show()
+            self.ui.navigation.show()
+
+    def watch_debconf_fd (self, from_debconf, process_input):
+        self.debconf_fd_counter = 0
+        self.socketNotifierRead = QSocketNotifier(from_debconf, QSocketNotifier.Read, self.app)
+        self.socketNotifierRead.activated[int].connect(self.watch_debconf_fd_helper_read)
+
+        self.socketNotifierWrite = QSocketNotifier(from_debconf, QSocketNotifier.Write, self.app)
+        self.socketNotifierWrite.activated[int].connect(self.watch_debconf_fd_helper_write)
+
+        self.socketNotifierException = QSocketNotifier(from_debconf, QSocketNotifier.Exception, self.app)
+        self.socketNotifierException.activated[int].connect(self.watch_debconf_fd_helper_exception)
+
+        self.debconf_callbacks[from_debconf] = process_input
+        self.current_debconf_fd = from_debconf
+
+    def watch_debconf_fd_helper_read (self, source):
+        self.debconf_fd_counter += 1
+        debconf_condition = 0
+        debconf_condition |= filteredcommand.DEBCONF_IO_IN
+        self.debconf_callbacks[source](source, debconf_condition)
+
+    def watch_debconf_fd_helper_write(self, source):
+        debconf_condition = 0
+        debconf_condition |= filteredcommand.DEBCONF_IO_OUT
+        self.debconf_callbacks[source](source, debconf_condition)
+
+    def watch_debconf_fd_helper_exception(self, source):
+        debconf_condition = 0
+        debconf_condition |= filteredcommand.DEBCONF_IO_ERR
+        self.debconf_callbacks[source](source, debconf_condition)
+
+    def debconf_progress_start (self, progress_min, progress_max, progress_title):
+        if progress_title is None:
+            progress_title = ""
+        total_steps = progress_max - progress_min
+        skipText = self.get_string("progress_cancel_button")
+
+        #self.ui.progressCancel.setText(skipText)
+
+        self.progressDialog.setWindowModality(Qt.WindowModal)
+        self.progressDialog.setCancelText(skipText)
+        self.progressDialog.setCancellable(False)
+        self.progressDialog.setMaximum(total_steps)
+        self.progressDialog.distro_name_label.setText(self.ui.distro_name)
+        self.progressDialog.distro_release_label.setText(self.ui.distro_release)
+        #self.progressDialog.minimize_button.setVisible(False)
+        self.progressDialog.setWindowTitle(progress_title)
+        self.progressDialog.windowTitle.setText(progress_title)
+        #self.progressDialog.show()
+        #p = QPainter(self)
+        #p.drawImage(0, 0, self.ui.scaledBgImage)
+
+
+        # TODO cancel button
+
+        self.ui.progressBar.setMaximum(total_steps)
+        self.ui.progressBar.setFormat(progress_title + " %p%")
+        self.ui.progressBar.show()
+
+        self.ui.content_widget.setEnabled(False)
+
+        self.progress_position.start(progress_min, progress_max,
+                                     progress_title)
+
+        self.debconf_progress_set(0)
+
+
+    def debconf_progress_set (self, progress_val):
+        self.progress_cancelled = self.progressDialog.wasCanceled()
+        if self.progress_cancelled:
+            return False
+        self.progress_position.set(progress_val)
+        fraction = self.progress_position.fraction()
+
+        self.progressDialog.setProgressValue(
+            int(fraction * self.progressDialog.maximum()))
+
+        self.ui.progressBar.setValue(int(fraction * self.ui.progressBar.maximum()))
+
+        return True
+
+    def debconf_progress_step (self, progress_inc):
+        self.progress_cancelled = self.progressDialog.wasCanceled()
+        if self.progress_cancelled:
+            return False
+        self.progress_position.step(progress_inc)
+        fraction = self.progress_position.fraction()
+
+        self.progressDialog.setProgressValue(
+            int(fraction * self.progressDialog.maximum()))
+
+        self.ui.progressBar.setValue(int(fraction * self.ui.progressBar.maximum()))
+
+        return True
+
+    def debconf_progress_info (self, progress_info):
+        self.progress_cancelled = self.progressDialog.wasCanceled()
+        if self.progress_cancelled:
+            return False
+
+        self.progressDialog.setProgressLabel(progress_info)
+        self.ui.progressBar.setFormat(progress_info + " %p%")
+
+        return True
+
+    def debconf_progress_stop (self):
+        self.progress_cancelled = False
+        self.progress_position.stop()
+        if self.progress_position.depth() == 0:
+            self.progressDialog.reset() # also hides dialog
+        else:
+            self.progressDialog.setWindowTitle(self.progress_position.title())
+            self.progressDialog.windowTitle.setText(self.progress_position.title())
+
+        self.ui.content_widget.setEnabled(True)
+        self.ui.progressBar.hide()
+
+    def debconf_progress_region (self, region_start, region_end):
+        self.progress_position.set_region(region_start, region_end)
+
+    def debconf_progress_cancellable (self, cancellable):
+        if cancellable:
+            self.progressDialog.setCancellable(True)
+            #self.ui.progressCancel.show()
+        else:
+            #self.ui.progressCancel.hide()
+            self.progressDialog.setCancellable(False)
+            self.progress_cancelled = False
+
+    #def on_progress_cancel_button_clicked (self, button):
+    #    self.progress_cancelled = True
+
+    def debconffilter_done (self, dbfilter):
+        # processing events here prevents GUI from hanging until mouse moves (LP #556376)
+        self.app.processEvents()
+        ##FIXME in Qt 4 without this disconnect it calls watch_debconf_fd_helper_read once more causing
+        ## a crash after the keyboard stage.  No idea why.
+        try:
+            self.socketNotifierRead.activated.disconnect(self.watch_debconf_fd_helper_read)
+        except Exception:
+            pass # May not be connected if it's a trivial dbfilter
+        if BaseFrontend.debconffilter_done(self, dbfilter):
+            self.app.exit()
+            return True
+        else:
+            return False
+
+    def installation_medium_mounted (self, message):
+        self.ui.part_advanced_warning_message.setText(message)
+        self.ui.part_advanced_warning_hbox.show()
+
+    def return_to_partitioning (self):
+        """If the install progress bar is up but still at the partitioning
+        stage, then errors can safely return us to partitioning.
+        """
+        if self.installing and not self.installing_no_return:
+            # Go back to the partitioner and try again.
+            #self.live_installer.show()
+            self.pagesindex = -1
+            for page in self.pages:
+                if page.module.NAME == 'partman':
+                    self.pagesindex = self.pages.index(page)
+                    break
+            if self.pagesindex == -1: return
+            self.start_debconf()
+            ui = self.pages[self.pagesindex].ui
+            self.dbfilter = self.pages[self.pagesindex].filter_class(self, ui=ui)
+            self.set_current_page(self.previous_partitioning_page)
+            self.ui.next.setText(self.get_string("next").replace('_', '&', 1))
+            self.ui.next.setIcon(self.forwardIcon)
+            self.translate_widget(self.ui.next)
+            self.backup = True
+            self.installing = False
+
+    def error_dialog (self, title, msg, fatal=True):
+        self.run_automation_error_cmd()
+        # TODO cjwatson 2009-04-16: We need to call allow_change_step here
+        # to get a normal cursor, but that also enables the Back/Forward
+        # buttons. Cursor handling should be controllable independently.
+        saved_allowed_change_step = self.allowed_change_step
+        self.allow_change_step(True)
+        # TODO: cancel button as well if capb backup
+        QMessageBox.warning(self.ui, title, msg, QMessageBox.Ok)
+        self.allow_change_step(saved_allowed_change_step)
+        if fatal:
+            self.return_to_partitioning()
+
+    def question_dialog (self, title, msg, options, use_templates=True):
+        self.run_automation_error_cmd()
+        # I doubt we'll ever need more than three buttons.
+        assert len(options) <= 3, options
+
+        # TODO cjwatson 2009-04-16: We need to call allow_change_step here
+        # to get a normal cursor, but that also enables the Back/Forward
+        # buttons. Cursor handling should be controllable independently.
+        saved_allowed_change_step = self.allowed_change_step
+        self.allow_change_step(True)
+        buttons = {}
+        messageBox = QMessageBox(QMessageBox.Question, title, msg, QMessageBox.NoButton, self.ui)
+        for option in options:
+            if use_templates:
+                text = self.get_string(option)
+            else:
+                text = option
+            if text is None:
+                text = option
+            text = text.replace("_", "&")
+            # Convention for options is to have the affirmative action last; KDE
+            # convention is to have it first.
+            if option == options[-1]:
+                button = messageBox.addButton(text, QMessageBox.AcceptRole)
+            else:
+                button = messageBox.addButton(text, QMessageBox.RejectRole)
+            buttons[button] = option
+
+        response = messageBox.exec_()
+        self.allow_change_step(saved_allowed_change_step)
+
+        if response < 0:
+            return None
+        else:
+            return buttons[messageBox.clickedButton()]
+
+    def refresh (self):
+        self.app.processEvents()
+
+    # Run the UI's main loop until it returns control to us.
+    def run_main_loop (self):
+        self.allow_change_step(True)
+        self.mainLoopRunning = True
+        while self.mainLoopRunning:    # nasty, but works OK
+            self.app.processEvents(QEventLoop.WaitForMoreEvents)
+
+    # Return control to the next level up.
+    def quit_main_loop (self):
+        #self.app.exit()
+        self.mainLoopRunning = False
+
+    # returns the current wizard page
+    def get_current_page(self):
+      return self.stackLayout.indexOf(self.stackLayout.currentWidget())
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/applications/kde4/ubiquity-kdeui.desktop b/ubiquity-frontend-kde-le/pacote/usr/share/applications/kde4/ubiquity-kdeui.desktop
new file mode 100644
index 0000000000000000000000000000000000000000..ba3106568532df8820b9a2851d7cc75105b494d0
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/applications/kde4/ubiquity-kdeui.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+# Do not translate the word "LE 4.0.  It is used as a marker by casper.
+Name=Instalar o LE 4.0 no Disco Rígido
+Comment=Install this system permanently to your hard disk
+Exec=ubiquity kde_ui
+Icon=ubiquity
+Terminal=false
+Categories=KDE;Qt;System;
+OnlyShowIn=KDE;
+X-Ubuntu-Gettext-Domain=ubiquity-desktop
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/AUTHORS b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/AUTHORS
new file mode 100644
index 0000000000000000000000000000000000000000..c0f5b6aeb030b27d1f124066c031abca3806bd07
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/AUTHORS
@@ -0,0 +1,33 @@
+# Linux Educacional 4.0
+
+C3SL - Centro de Computacao Cientifica e Software Livre
+
+Adriano da Luz
+Bruno Cesar Ribas
+Carlos Carvalho
+Cleide Luzia Bonfim Possamai
+Daniel Weingaertner
+Danilo Kiyoshi Simizu Yorinori
+Diego Giovane Pasqualin
+Eduardo Cunha de Almeida
+Erik Alexandre Pucci
+Fabiano Silva
+Felipe Cys Laskoski
+Guilherme Zasyeki Machado
+Jorge Augusto Meira
+Josiney de Souza
+Juliana Bueno
+Klismann Smoger Mottin
+Laura Sánchez García
+Luis Carlos Erpen de Bona
+Marcela Saragioto
+Marcos Castilho
+Marcos Sunye
+Pedro Eugenio Rocha
+Renan Franca De Miranda
+Ricardo Tavares De Oliveira
+Rubens Massayuki Suguimoto
+Thiago Henrique Dos Santos Picharski
+Tiago Rodrigo Kepe
+Victor Tarabola Cortiano
+Vinicius Kwiecien Ruoso
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/COPYING b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/COPYING
new file mode 100644
index 0000000000000000000000000000000000000000..94a9ed024d3859793618152ea559a168bbcbb5e2
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/doc/ubiquity-frontend-kde-le/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/128x128/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/128x128/apps/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..027b726212bd8740e0f6afd96cb731ca1b8f0daa
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/128x128/apps/ubiquity.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/16x16/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/16x16/apps/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb91545c7b00e2c53165973863b05a065e800059
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/16x16/apps/ubiquity.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/22x22/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/22x22/apps/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd0f88e50c96187299b52bc38f8216176ea4d9d2
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/22x22/apps/ubiquity.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/32x32/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/32x32/apps/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..42a1b9acea66e87feff13249fa1b3ea8adfe4df0
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/32x32/apps/ubiquity.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/48x48/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/48x48/apps/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c92bf3e8a756d394c206daa66f1862fdd9e31b0
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/48x48/apps/ubiquity.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/64x64/apps/ubiquity.png b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/64x64/apps/ubiquity.png
new file mode 100644
index 0000000000000000000000000000000000000000..9fa9c3387e450f97849c021253f5eddab285a15a
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/icons/hicolor/64x64/apps/ubiquity.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/pyshared-data/ubiquity-frontend-kde-le b/ubiquity-frontend-kde-le/pacote/usr/share/pyshared-data/ubiquity-frontend-kde-le
new file mode 100644
index 0000000000000000000000000000000000000000..61ed6b7a4e1d9f5e28242646a7e4c7cacd28103a
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/pyshared-data/ubiquity-frontend-kde-le
@@ -0,0 +1,20 @@
+[python-package]
+format = 1
+python-version = current, >= 2.6
+[pycentral]
+version = 0.6.11
+include-links = 0
+[files]
+/usr/lib/ubiquity/ubiquity/frontend/kde_ui.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/__init__.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/Keyboard.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartAuto.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionBar.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartitionModel.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/PartMan.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/ProgressDialog.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/SqueezeLabel.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partitionbar.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partman.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/testing/partauto.py=f
+/usr/lib/ubiquity/ubiquity/frontend/kde_components/Timezone.py=f
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/advanceddialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/advanceddialog.ui
new file mode 100644
index 0000000000000000000000000000000000000000..ab96652c4d1232d63e7f61ac66e3c7dd49f83b5f
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/advanceddialog.ui
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AdvancedDialog</class>
+ <widget class="QDialog" name="AdvancedDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>392</width>
+    <height>282</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Advanced Options</string>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout">
+   <property name="margin">
+    <number>9</number>
+   </property>
+   <property name="spacing">
+    <number>6</number>
+   </property>
+   <item row="0" column="0">
+    <widget class="QLabel" name="bootloader_group_label">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>&lt;strong&gt;Boot loader&lt;/strong&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QCheckBox" name="grub_enable">
+     <property name="text">
+      <string>Install boot loader</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="grub_device_label">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Help for GRUB device selection goes here.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Maximum</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>357</width>
+       <height>16</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="5" column="0">
+    <widget class="QLabel" name="popcon_group_label">
+     <property name="text">
+      <string>&lt;strong&gt;Popularity contest&lt;/strong&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="0">
+    <widget class="QCheckBox" name="popcon_checkbutton">
+     <property name="text">
+      <string>Participate in the package usage survey</string>
+     </property>
+    </widget>
+   </item>
+   <item row="7" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Maximum</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>357</width>
+       <height>16</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="8" column="0">
+    <widget class="QLabel" name="proxy_group_label">
+     <property name="text">
+      <string>&lt;strong&gt;Network proxy&lt;/strong&gt;</string>
+     </property>
+    </widget>
+   </item>
+   <item row="9" column="0">
+    <layout class="QHBoxLayout">
+     <item>
+      <widget class="QLabel" name="proxy_host_label">
+       <property name="text">
+        <string>HTTP proxy:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="proxy_host_entry"/>
+     </item>
+     <item>
+      <widget class="QLabel" name="proxy_port_label">
+       <property name="text">
+        <string>Port:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="proxy_port_spinbutton">
+       <property name="maximum">
+        <number>65535</number>
+       </property>
+       <property name="value">
+        <number>8080</number>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="10" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>374</width>
+       <height>81</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="11" column="0">
+    <widget class="QFrame" name="frame">
+     <property name="frameShape">
+      <enum>QFrame::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="12" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QComboBox" name="grub_device_entry"/>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>AdvancedDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>AdvancedDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app-install.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app-install.ui
new file mode 100644
index 0000000000000000000000000000000000000000..c1d7ebd4f5eea2e743f4ace5362488bfeb828c2e
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app-install.ui
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>809</width>
+    <height>638</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="1">
+     <spacer name="verticalSpacer">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>42</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="0">
+     <spacer name="horizontalSpacer">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>98</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="1">
+     <widget class="QFrame" name="main_frame">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>750</width>
+        <height>550</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>750</width>
+        <height>550</height>
+       </size>
+      </property>
+      <property name="frameShape">
+       <enum>QFrame::StyledPanel</enum>
+      </property>
+      <property name="frameShadow">
+       <enum>QFrame::Raised</enum>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <item>
+        <widget class="QWidget" name="main_widget" native="true">
+         <layout class="QGridLayout" name="gridLayout_4">
+          <property name="horizontalSpacing">
+           <number>0</number>
+          </property>
+          <property name="margin">
+           <number>0</number>
+          </property>
+          <item row="1" column="1">
+           <widget class="QWidget" name="content_widget" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <layout class="QVBoxLayout" name="verticalLayout">
+             <property name="leftMargin">
+              <number>0</number>
+             </property>
+             <property name="rightMargin">
+              <number>0</number>
+             </property>
+             <item>
+              <widget class="QFrame" name="extraFrame">
+               <property name="enabled">
+                <bool>true</bool>
+               </property>
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+               <property name="frameShape">
+                <enum>QFrame::StyledPanel</enum>
+               </property>
+               <property name="frameShadow">
+                <enum>QFrame::Sunken</enum>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QWidget" name="horizontalWidget" native="true">
+               <layout class="QHBoxLayout" name="horizontalLayout">
+                <item>
+                 <spacer name="horizontalSpacer_4">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>40</width>
+                    <height>15</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+               </layout>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </item>
+          <item row="0" column="0" colspan="2">
+           <widget class="QWidget" name="widget_4" native="true">
+            <layout class="QGridLayout" name="gridLayout_5">
+             <property name="leftMargin">
+              <number>1</number>
+             </property>
+             <property name="topMargin">
+              <number>0</number>
+             </property>
+             <property name="rightMargin">
+              <number>0</number>
+             </property>
+             <property name="bottomMargin">
+              <number>0</number>
+             </property>
+             <property name="horizontalSpacing">
+              <number>3</number>
+             </property>
+             <item row="0" column="0">
+              <widget class="QWidget" name="title_widget" native="true">
+               <layout class="QHBoxLayout" name="horizontalLayout_4">
+                <property name="topMargin">
+                 <number>0</number>
+                </property>
+                <property name="bottomMargin">
+                 <number>0</number>
+                </property>
+                <item>
+                 <widget class="QLabel" name="distro_name_label">
+                  <property name="text">
+                   <string>Linux Educacional</string>
+                  </property>
+                  <property name="scaledContents">
+                   <bool>false</bool>
+                  </property>
+                  <property name="alignment">
+                   <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+                  </property>
+                  <property name="indent">
+                   <number>0</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QLabel" name="distro_release_label">
+                  <property name="text">
+                   <string>karmic</string>
+                  </property>
+                  <property name="alignment">
+                   <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+                  </property>
+                  <property name="indent">
+                   <number>0</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_13">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>0</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="minimize_button">
+                  <property name="minimumSize">
+                   <size>
+                    <width>14</width>
+                    <height>14</height>
+                   </size>
+                  </property>
+                  <property name="maximumSize">
+                   <size>
+                    <width>14</width>
+                    <height>14</height>
+                   </size>
+                  </property>
+                  <property name="cursor">
+                   <cursorShape>PointingHandCursor</cursorShape>
+                  </property>
+                  <property name="toolTip">
+                   <string>minimize</string>
+                  </property>
+                  <property name="text">
+                   <string/>
+                  </property>
+                  <property name="flat">
+                   <bool>true</bool>
+                  </property>
+                 </widget>
+                </item>
+               </layout>
+              </widget>
+             </item>
+             <item row="1" column="0">
+              <widget class="QWidget" name="progress_widget" native="true">
+               <layout class="QHBoxLayout" name="horizontalLayout_5">
+                <property name="topMargin">
+                 <number>0</number>
+                </property>
+                <property name="bottomMargin">
+                 <number>0</number>
+                </property>
+                <item>
+                 <widget class="QLabel" name="windowTitle">
+                  <property name="minimumSize">
+                   <size>
+                    <width>0</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                  <property name="text">
+                   <string>Installation Process</string>
+                  </property>
+                  <property name="alignment">
+                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+                  </property>
+                  <property name="indent">
+                   <number>0</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QLabel" name="progressLabel">
+                  <property name="text">
+                   <string>Installation Status</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_3">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeType">
+                   <enum>QSizePolicy::Maximum</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>20</width>
+                    <height>16</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QProgressBar" name="progressBar">
+                  <property name="maximumSize">
+                   <size>
+                    <width>16777215</width>
+                    <height>16</height>
+                   </size>
+                  </property>
+                  <property name="value">
+                   <number>24</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="cancelButton">
+                  <property name="sizePolicy">
+                   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                    <horstretch>0</horstretch>
+                    <verstretch>0</verstretch>
+                   </sizepolicy>
+                  </property>
+                  <property name="maximumSize">
+                   <size>
+                    <width>16777215</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                  <property name="text">
+                   <string>X</string>
+                  </property>
+                 </widget>
+                </item>
+               </layout>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <spacer name="horizontalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>98</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="2" column="1">
+     <spacer name="verticalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>42</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app.ui
new file mode 100644
index 0000000000000000000000000000000000000000..d5d07903b93ca92b7b68c39e9080dc17f19cac19
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/app.ui
@@ -0,0 +1,447 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>809</width>
+    <height>638</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="1">
+     <spacer name="verticalSpacer">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>42</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="0">
+     <spacer name="horizontalSpacer">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>98</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="1" column="1">
+     <widget class="QFrame" name="main_frame">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>750</width>
+        <height>550</height>
+       </size>
+      </property>
+      <property name="maximumSize">
+       <size>
+        <width>750</width>
+        <height>550</height>
+       </size>
+      </property>
+      <property name="frameShape">
+       <enum>QFrame::StyledPanel</enum>
+      </property>
+      <property name="frameShadow">
+       <enum>QFrame::Raised</enum>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <item>
+        <widget class="QWidget" name="main_widget" native="true">
+         <layout class="QGridLayout" name="gridLayout_4">
+          <property name="horizontalSpacing">
+           <number>0</number>
+          </property>
+          <property name="margin">
+           <number>0</number>
+          </property>
+          <item row="1" column="1">
+           <widget class="QWidget" name="content_widget" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <layout class="QVBoxLayout" name="verticalLayout">
+             <property name="leftMargin">
+              <number>0</number>
+             </property>
+             <item>
+              <widget class="QWidget" name="widgetStack" native="true">
+               <property name="sizePolicy">
+                <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+                 <horstretch>0</horstretch>
+                 <verstretch>0</verstretch>
+                </sizepolicy>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QWidget" name="navigation" native="true">
+               <layout class="QHBoxLayout" name="horizontalLayout_2">
+                <property name="topMargin">
+                 <number>0</number>
+                </property>
+                <property name="bottomMargin">
+                 <number>0</number>
+                </property>
+                <item>
+                 <spacer name="horizontalSpacer_5">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>40</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="quit">
+                  <property name="text">
+                   <string>Quit</string>
+                  </property>
+                  <property name="autoDefault">
+                   <bool>true</bool>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_6">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeType">
+                   <enum>QSizePolicy::Fixed</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>20</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="back">
+                  <property name="text">
+                   <string>Back</string>
+                  </property>
+                  <property name="autoDefault">
+                   <bool>true</bool>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="next">
+                  <property name="text">
+                   <string>Next</string>
+                  </property>
+                  <property name="autoDefault">
+                   <bool>true</bool>
+                  </property>
+                 </widget>
+                </item>
+               </layout>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </item>
+          <item row="0" column="0" colspan="2">
+           <widget class="QWidget" name="widget_4" native="true">
+            <layout class="QGridLayout" name="gridLayout_5">
+             <property name="leftMargin">
+              <number>1</number>
+             </property>
+             <property name="topMargin">
+              <number>0</number>
+             </property>
+             <property name="rightMargin">
+              <number>0</number>
+             </property>
+             <property name="bottomMargin">
+              <number>0</number>
+             </property>
+             <property name="horizontalSpacing">
+              <number>3</number>
+             </property>
+             <item row="0" column="0">
+              <widget class="QWidget" name="title_widget" native="true">
+               <layout class="QHBoxLayout" name="horizontalLayout_4">
+                <property name="topMargin">
+                 <number>0</number>
+                </property>
+                <property name="bottomMargin">
+                 <number>0</number>
+                </property>
+                <item>
+                 <widget class="QLabel" name="distro_name_label">
+                  <property name="text">
+                   <string>Linux Educacional</string>
+                  </property>
+                  <property name="scaledContents">
+                   <bool>false</bool>
+                  </property>
+                  <property name="alignment">
+                   <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+                  </property>
+                  <property name="indent">
+                   <number>0</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QLabel" name="distro_release_label">
+                  <property name="text">
+                   <string>karmic</string>
+                  </property>
+                  <property name="alignment">
+                   <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+                  </property>
+                  <property name="indent">
+                   <number>0</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_13">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>0</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="minimize_button">
+                  <property name="minimumSize">
+                   <size>
+                    <width>14</width>
+                    <height>14</height>
+                   </size>
+                  </property>
+                  <property name="maximumSize">
+                   <size>
+                    <width>14</width>
+                    <height>14</height>
+                   </size>
+                  </property>
+                  <property name="cursor">
+                   <cursorShape>PointingHandCursor</cursorShape>
+                  </property>
+                  <property name="toolTip">
+                   <string>minimize</string>
+                  </property>
+                  <property name="text">
+                   <string/>
+                  </property>
+                  <property name="flat">
+                   <bool>true</bool>
+                  </property>
+                 </widget>
+                </item>
+               </layout>
+              </widget>
+             </item>
+             <item row="1" column="0">
+              <widget class="QWidget" name="progress_widget" native="true">
+               <layout class="QHBoxLayout" name="horizontalLayout_5">
+                <property name="topMargin">
+                 <number>0</number>
+                </property>
+                <property name="bottomMargin">
+                 <number>0</number>
+                </property>
+                <item>
+                 <widget class="QLabel" name="install_process_label">
+                  <property name="minimumSize">
+                   <size>
+                    <width>0</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                  <property name="text">
+                   <string>Installation Process</string>
+                  </property>
+                  <property name="alignment">
+                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+                  </property>
+                  <property name="indent">
+                   <number>0</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_3">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeType">
+                   <enum>QSizePolicy::Maximum</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>20</width>
+                    <height>16</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+                <item>
+                 <widget class="QProgressBar" name="progressBar">
+                  <property name="maximumSize">
+                   <size>
+                    <width>16777215</width>
+                    <height>16</height>
+                   </size>
+                  </property>
+                  <property name="value">
+                   <number>24</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QPushButton" name="progressCancel">
+                  <property name="sizePolicy">
+                   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                    <horstretch>0</horstretch>
+                    <verstretch>0</verstretch>
+                   </sizepolicy>
+                  </property>
+                  <property name="maximumSize">
+                   <size>
+                    <width>16777215</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                  <property name="text">
+                   <string>X</string>
+                  </property>
+                 </widget>
+                </item>
+               </layout>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QWidget" name="steps_widget" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>150</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <layout class="QVBoxLayout" name="verticalLayout_5">
+             <property name="rightMargin">
+              <number>0</number>
+             </property>
+             <item>
+              <widget class="SqueezeLabel" name="breadcrumb_install">
+               <property name="text">
+                <string>Install</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <spacer name="verticalSpacer_3">
+               <property name="orientation">
+                <enum>Qt::Vertical</enum>
+               </property>
+               <property name="sizeHint" stdset="0">
+                <size>
+                 <width>20</width>
+                 <height>40</height>
+                </size>
+               </property>
+              </spacer>
+             </item>
+            </layout>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="2">
+     <spacer name="horizontalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>98</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="2" column="1">
+     <spacer name="verticalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>20</width>
+        <height>42</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>SqueezeLabel</class>
+   <extends>QLabel</extends>
+   <header>ubiquity.frontend.kde_components.SqueezeLabel</header>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>back</tabstop>
+  <tabstop>next</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/crashdialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/crashdialog.ui
new file mode 100644
index 0000000000000000000000000000000000000000..881cdda8250d8a1b97ded1c71251b92e07806eba
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/crashdialog.ui
@@ -0,0 +1,192 @@
+<ui version="4.0" >
+ <class>CrashDialog</class>
+ <widget class="QDialog" name="CrashDialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>479</width>
+    <height>483</height>
+   </rect>
+  </property>
+  <property name="sizePolicy" >
+   <sizepolicy>
+    <hsizetype>5</hsizetype>
+    <vsizetype>5</vsizetype>
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle" >
+   <string>Installer crashed</string>
+  </property>
+  <property name="sizeGripEnabled" >
+   <bool>false</bool>
+  </property>
+  <property name="modal" >
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>11</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="0" column="0" >
+    <layout class="QVBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="crash_heading_label" >
+       <property name="sizePolicy" >
+        <sizepolicy>
+         <hsizetype>5</hsizetype>
+         <vsizetype>5</vsizetype>
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>&lt;h2>Installer Crashed&lt;/h2></string>
+       </property>
+       <property name="alignment" >
+        <set>Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap" >
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="Line" name="line12" >
+       <property name="frameShape" >
+        <enum>QFrame::HLine</enum>
+       </property>
+       <property name="frameShadow" >
+        <enum>QFrame::Sunken</enum>
+       </property>
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="crash_text_label" >
+       <property name="sizePolicy" >
+        <sizepolicy>
+         <hsizetype>5</hsizetype>
+         <vsizetype>0</vsizetype>
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>We're sorry; the installer crashed. Please file a new bug report at</string>
+       </property>
+       <property name="alignment" >
+        <set>Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="beastie_url" >
+       <property name="text" >
+        <string>&lt;a href="https://launchpad.net/ubuntu/+source/ubiquity/+filebug">https://launchpad.net/ubuntu/+source/ubiquity/+filebug&lt;/a></string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="textLabel1" >
+       <property name="text" >
+        <string>(do not attach your details to any existing bug) and a developer will attend to the problem as soon as possible. To help the developers understand what went wrong, include the following detail in your bug report, and attach the files /var/log/syslog and /var/log/partman:</string>
+       </property>
+       <property name="alignment" >
+        <set>Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QTextBrowser" name="crash_detail" />
+     </item>
+     <item>
+      <layout class="QHBoxLayout" >
+       <property name="margin" >
+        <number>0</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item>
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::MinimumExpanding</enum>
+         </property>
+         <property name="sizeHint" >
+          <size>
+           <width>20</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QPushButton" name="crash_close" >
+         <property name="text" >
+          <string>&amp;Close</string>
+         </property>
+         <property name="shortcut" >
+          <string>Alt+C</string>
+         </property>
+         <property name="autoDefault" >
+          <bool>true</bool>
+         </property>
+         <property name="default" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <includes>
+  <include location="local" >kurllabel.h</include>
+ </includes>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>crash_close</sender>
+   <signal>clicked()</signal>
+   <receiver>CrashDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>20</x>
+     <y>20</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>20</x>
+     <y>20</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/content_border.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/content_border.png
new file mode 100644
index 0000000000000000000000000000000000000000..a97e34c95b683a4b7798390e95ce977d5729b7fb
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/content_border.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/label_border.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/label_border.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8e8b0619f6033e288e53ac9953f49068bfeb6b5
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/label_border.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/main_frame_border.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/main_frame_border.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef148f9faaead46b2e0cf896a865d992543c5668
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/main_frame_border.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/minimize.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/minimize.png
new file mode 100644
index 0000000000000000000000000000000000000000..01189c11e16f845e70bb42e74e35f05cb5f13b17
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/minimize.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/squares.png b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/squares.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cb7f1a3eb500b61773f43967fa9f50fb9e2472f
Binary files /dev/null and b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/images/squares.png differ
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_create_dialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_create_dialog.ui
new file mode 100644
index 0000000000000000000000000000000000000000..857e3bea359ad3af900061737d6415e0ebbad138
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_create_dialog.ui
@@ -0,0 +1,192 @@
+<ui version="4.0" >
+ <class>partition_create_dialog</class>
+ <widget class="QDialog" name="partition_create_dialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>468</width>
+    <height>219</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Create Partition</string>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="6" column="0" colspan="2" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>441</width>
+       <height>21</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="7" column="0" colspan="2" >
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1" >
+    <widget class="QComboBox" name="partition_create_mount_combo" >
+     <property name="editable" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0" >
+    <widget class="QLabel" name="partition_create_mount_label" >
+     <property name="text" >
+      <string>Mount point:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" >
+    <widget class="QLabel" name="partition_create_use_label" >
+     <property name="text" >
+      <string>Use as:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1" >
+    <widget class="QComboBox" name="partition_create_use_combo" />
+   </item>
+   <item row="3" column="0" >
+    <widget class="QLabel" name="partition_create_place_label" >
+     <property name="text" >
+      <string>Location for the new partition:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QSpinBox" name="partition_create_size_spinbutton" />
+   </item>
+   <item row="2" column="0" >
+    <widget class="QLabel" name="partition_create_size_label" >
+     <property name="text" >
+      <string>New partition size in megabytes (1000000 bytes):</string>
+     </property>
+     <property name="wordWrap" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="partition_create_type_label" >
+     <property name="text" >
+      <string>Type for the new partition:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="2" >
+    <widget class="QLabel" name="partition_create_heading_label" >
+     <property name="text" >
+      <string>&lt;b>Create a new partition&lt;/b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" >
+    <widget class="QWidget" native="1" name="partition_create_place_widget" >
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>0</number>
+      </property>
+      <property name="spacing" >
+       <number>0</number>
+      </property>
+      <item row="0" column="1" >
+       <widget class="QRadioButton" name="partition_create_place_end" >
+        <property name="text" >
+         <string>End</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" >
+       <widget class="QRadioButton" name="partition_create_place_beginning" >
+        <property name="text" >
+         <string>Beginning</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QWidget" native="1" name="partition_create_type_widget" >
+     <layout class="QGridLayout" >
+      <property name="margin" >
+       <number>0</number>
+      </property>
+      <property name="spacing" >
+       <number>0</number>
+      </property>
+      <item row="0" column="1" >
+       <widget class="QRadioButton" name="partition_create_type_logical" >
+        <property name="text" >
+         <string>Logical</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" >
+       <widget class="QRadioButton" name="partition_create_type_primary" >
+        <property name="text" >
+         <string>Primary</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>partition_create_dialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>partition_create_dialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_edit_dialog.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_edit_dialog.ui
new file mode 100644
index 0000000000000000000000000000000000000000..2c95fabfc71431be54d7cac6b699f9cad7d460f3
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/partition_edit_dialog.ui
@@ -0,0 +1,176 @@
+<ui version="4.0" >
+ <class>partition_edit_dialog</class>
+ <widget class="QDialog" name="partition_edit_dialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>451</width>
+    <height>204</height>
+   </rect>
+  </property>
+  <property name="sizePolicy" >
+   <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="minimumSize" >
+   <size>
+    <width>0</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle" >
+   <string>Edit Partition</string>
+  </property>
+  <property name="sizeGripEnabled" >
+   <bool>false</bool>
+  </property>
+  <property name="modal" >
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="leftMargin" >
+    <number>9</number>
+   </property>
+   <property name="topMargin" >
+    <number>9</number>
+   </property>
+   <property name="rightMargin" >
+    <number>9</number>
+   </property>
+   <property name="bottomMargin" >
+    <number>9</number>
+   </property>
+   <property name="horizontalSpacing" >
+    <number>6</number>
+   </property>
+   <property name="verticalSpacing" >
+    <number>6</number>
+   </property>
+   <item row="5" column="0" colspan="2" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>381</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="0" colspan="2" >
+    <widget class="QLabel" name="partition_edit_heading_label" >
+     <property name="text" >
+      <string>&lt;b>Edit a partition&lt;/b></string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="partition_edit_size_label" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text" >
+      <string>New partition size in megabytes (1000000 bytes):</string>
+     </property>
+     <property name="wordWrap" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QComboBox" name="partition_edit_use_combo" >
+     <property name="editable" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QSpinBox" name="partition_edit_size_spinbutton" />
+   </item>
+   <item row="4" column="1" >
+    <widget class="QComboBox" name="partition_edit_mount_combo" >
+     <property name="editable" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" >
+    <widget class="QLabel" name="partition_edit_mount_label" >
+     <property name="text" >
+      <string>Mount point:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QLabel" name="partition_edit_use_label" >
+     <property name="text" >
+      <string>Use as:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" >
+    <widget class="QLabel" name="partition_edit_format_label" >
+     <property name="text" >
+      <string>Format the partition:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" >
+    <widget class="QCheckBox" name="partition_edit_format_checkbutton" />
+   </item>
+   <item row="6" column="0" colspan="2" >
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>partition_edit_dialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>partition_edit_dialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepIntro.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepIntro.ui
new file mode 100644
index 0000000000000000000000000000000000000000..9d15b6310ca077edaefafe53723e65a844c3bc15
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepIntro.ui
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>page</class>
+ <widget class="QWidget" name="page">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>777</width>
+    <height>541</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="1">
+    <spacer name="verticalSpacer_9">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>241</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="1" column="0">
+    <spacer name="horizontalSpacer_16">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>341</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLabel" name="introLabel">
+     <property name="text">
+      <string>intoLabel</string>
+     </property>
+     <property name="textFormat">
+      <enum>Qt::RichText</enum>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignVCenter</set>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2">
+    <spacer name="horizontalSpacer_17">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>340</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="1">
+    <spacer name="verticalSpacer_10">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>241</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepKeyboardConf.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepKeyboardConf.ui
new file mode 100644
index 0000000000000000000000000000000000000000..75fdebfe739407b51ab158e9e6644661b2a9b8fd
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepKeyboardConf.ui
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>page</class>
+ <widget class="QWidget" name="page">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>708</width>
+    <height>570</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="keyboard_heading_label">
+     <property name="text">
+      <string>Keyboard Layout</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line3">
+     <property name="frameShape">
+      <enum>QFrame::HLine</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Sunken</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="keyboard_comment_label">
+     <property name="text">
+      <string>Select your current keyboard layout.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <item>
+      <spacer name="horizontalSpacer_11">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="keyboard_layout_label">
+       <property name="text">
+        <string>Layout:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="keyboard_layout_combobox"/>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_10">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="keyboard_variant_label">
+       <property name="text">
+        <string>Variant:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="keyboard_variant_combobox"/>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_12">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="keyboard_image_label">
+     <property name="text">
+      <string>Below is an image of your current layout:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="keyboard_frame">
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>100</height>
+      </size>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_6">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>10</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLanguage.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLanguage.ui
new file mode 100644
index 0000000000000000000000000000000000000000..033e94a492ac487c4cc73fbc0d66e4652f753552
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLanguage.ui
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>language</class>
+ <widget class="QWidget" name="language">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>777</width>
+    <height>541</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="3">
+    <widget class="QLabel" name="welcome_heading_label">
+     <property name="text">
+      <string>Welcome</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="3">
+    <widget class="Line" name="line_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="3">
+    <widget class="QLabel" name="ready_text_label">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>ready_text_label</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="8" column="0">
+    <spacer name="horizontalSpacer_4">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>294</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="8" column="1">
+    <widget class="QComboBox" name="language_combobox">
+     <property name="editable">
+      <bool>false</bool>
+     </property>
+     <item>
+      <property name="text">
+       <string>English</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Russian</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Spanish</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>You get the point...</string>
+      </property>
+     </item>
+    </widget>
+   </item>
+   <item row="8" column="2">
+    <spacer name="horizontalSpacer_3">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>293</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="9" column="1">
+    <spacer name="verticalSpacer_11">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>238</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="14" column="0" colspan="3">
+    <widget class="QLabel" name="oem_id_label">
+     <property name="text">
+      <string>You are installing in system manufacturer mode. Please enter a unique name for this batch of systems. This name will be saved on the installed system and can be used to help with bug reports.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="15" column="0">
+    <widget class="QLineEdit" name="oem_id_entry"/>
+   </item>
+   <item row="13" column="0" colspan="3">
+    <widget class="QLabel" name="release_notes_label">
+     <property name="text">
+      <string>If you have Internet access, read the release notes for information on problems that may affect you.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="3">
+    <widget class="QLabel" name="try_text_label">
+     <property name="text">
+      <string>try_text_label</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QPushButton" name="try_ubuntu">
+     <property name="text">
+      <string>Try Kubuntu</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0" colspan="3">
+    <widget class="QLabel" name="duration_text_label">
+     <property name="text">
+      <string>Answering the questions should only take a few minutes.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="7" column="0" colspan="3">
+    <widget class="QLabel" name="select_language_label">
+     <property name="text">
+      <string>Please choose the language to use for the install process. This language will be the default language for this computer.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="12" column="0" colspan="3">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="10" column="0" colspan="3">
+    <widget class="QLabel" name="alpha_warning_label">
+     <property name="text">
+      <string>alpha_warning_label</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="11" column="1">
+    <widget class="QPushButton" name="begin_install_button">
+     <property name="text">
+      <string>Continue with installation</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLocation.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLocation.ui
new file mode 100644
index 0000000000000000000000000000000000000000..9e2f21eeaf709912b8e12ce10654d0cbb240625e
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepLocation.ui
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>page</class>
+ <widget class="QWidget" name="page">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>579</width>
+    <height>462</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="timezone_heading_label">
+     <property name="text">
+      <string>Where are you?</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line_3">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="timezone_comment_label">
+     <property name="text">
+      <string>Select a city in your country and time zone.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="map_frame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>2</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>280</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16777215</width>
+       <height>280</height>
+      </size>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_10">
+      <property name="margin">
+       <number>2</number>
+      </property>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_4">
+     <item>
+      <widget class="QLabel" name="timezone_zone_label">
+       <property name="text">
+        <string>Region:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="timezone_zone_combo">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_7">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Minimum</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QLabel" name="timezone_city_label">
+       <property name="text">
+        <string>Zone:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="timezone_city_combo">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_5">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>63</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartAuto.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartAuto.ui
new file mode 100644
index 0000000000000000000000000000000000000000..5de3a9724b5b92d7ad4f0066ebb4ad631ceb3efc
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartAuto.ui
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>682</width>
+    <height>486</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="part_auto_heading_label">
+     <property name="text">
+      <string>Prepare Disk Space</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line_4">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="part_auto_comment_label">
+     <property name="text">
+      <string>Where would you like to install kubuntu?</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWidget" name="autopart_selection_frame" native="true">
+     <layout class="QVBoxLayout" name="_2"/>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWidget" name="barsFrame" native="true">
+     <layout class="QVBoxLayout" name="verticalLayout_6">
+      <property name="spacing">
+       <number>0</number>
+      </property>
+      <property name="margin">
+       <number>0</number>
+      </property>
+      <item>
+       <widget class="Line" name="line_10">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer_7">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>411</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartMan.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartMan.ui
new file mode 100644
index 0000000000000000000000000000000000000000..4e06638f2bd98865075c073588f5fae7660a0fd4
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepPartMan.ui
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>652</width>
+    <height>482</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="part_advanced_heading_label">
+     <property name="text">
+      <string>Prepare Partitions</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line_11">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWidget" name="part_advanced_bar_frame" native="true">
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>10</height>
+      </size>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_9"/>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWidget" name="part_advanced_warning_hbox" native="true">
+     <layout class="QHBoxLayout" name="_3">
+      <item>
+       <widget class="QLabel" name="part_advanced_warning_image">
+        <property name="minimumSize">
+         <size>
+          <width>32</width>
+          <height>32</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>32</width>
+          <height>32</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="part_advanced_warning_message">
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTreeView" name="partition_list_treeview"/>
+   </item>
+   <item>
+    <widget class="QWidget" name="widget_3" native="true">
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>10</height>
+      </size>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_9">
+      <item row="0" column="0">
+       <widget class="QPushButton" name="partition_button_new_label">
+        <property name="text">
+         <string>New Partition Table</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="partition_button_new">
+        <property name="text">
+         <string>New Partition</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QPushButton" name="partition_button_edit">
+        <property name="text">
+         <string>Edit Partition</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3">
+       <widget class="QPushButton" name="partition_button_delete">
+        <property name="text">
+         <string>Delete Partition</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="6">
+       <widget class="QWidget" name="widget_7" native="true">
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <property name="margin">
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QPushButton" name="undo_everything">
+           <property name="text">
+            <string>Undo all changes</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_8">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="0" column="4">
+       <spacer name="horizontalSpacer_14">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepSummary.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepSummary.ui
new file mode 100644
index 0000000000000000000000000000000000000000..9e7a065119e5eeed4fcc986718f91a570b96037f
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepSummary.ui
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>summary</class>
+ <widget class="QWidget" name="summary">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>637</width>
+    <height>399</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="ready_heading_label">
+     <property name="text">
+      <string>Ready to Install</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line_12">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="ready_description_label">
+     <property name="text">
+      <string>Your new operating system will now be installed with the following settings:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTextEdit" name="ready_text">
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QWidget" name="widget_5" native="true">
+     <layout class="QHBoxLayout" name="horizontalLayout_7">
+      <item>
+       <spacer name="horizontalSpacer_15">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="advanced_button">
+        <property name="text">
+         <string>Advanced</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepUserSetup.ui b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepUserSetup.ui
new file mode 100644
index 0000000000000000000000000000000000000000..aeeb965722665fa27f9a9383134d1f0dee32e5f4
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/stepUserSetup.ui
@@ -0,0 +1,573 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>695</width>
+    <height>475</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="userinfo_heading_label">
+     <property name="text">
+      <string>Who are you?</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="Line" name="line_5">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="fullname_label">
+     <property name="text">
+      <string>What is your name?</string>
+     </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="_22">
+     <property name="verticalSpacing">
+      <number>0</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item row="0" column="3">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>0</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="fullname_error_reason">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>1</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="fullname_error_image">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="scaledContents">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLineEdit" name="fullname">
+       <property name="minimumSize">
+        <size>
+         <width>300</width>
+         <height>0</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="Line" name="line_7">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="username_label">
+     <property name="text">
+      <string>What name do you want to use to log in?</string>
+     </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="_21">
+     <property name="verticalSpacing">
+      <number>0</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item row="0" column="0">
+      <widget class="QLineEdit" name="username">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0" colspan="4">
+      <widget class="QLabel" name="username_extra_label">
+       <property name="styleSheet">
+        <string>font-weight: normal</string>
+       </property>
+       <property name="text">
+        <string>&lt;small&gt;If more than one person will use this computer, you can set up multiple accounts after installation.&lt;/small&gt;</string>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="username_error_image">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="scaledContents">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>0</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="username_error_reason">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>1</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="Line" name="line_8">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="password_label">
+     <property name="text">
+      <string>Choose a password to keep your account safe.</string>
+     </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="password_debug_warning_label">
+     <property name="text">
+      <string>&lt;strong&gt;You are running in debugging mode. Do not use a valuable password!&lt;/strong&gt;</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="_20">
+     <property name="verticalSpacing">
+      <number>0</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item row="0" column="4">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>0</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="1" column="0" colspan="5">
+      <widget class="QLabel" name="password_extra_label">
+       <property name="styleSheet">
+        <string>font-weight: normal</string>
+       </property>
+       <property name="text">
+        <string>&lt;small&gt;Enter the same password twice, so that it can be checked for typing errors.&lt;/small&gt;</string>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="password_error_image">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="scaledContents">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <widget class="QLabel" name="password_error_reason">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>1</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="verified_password">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="echoMode">
+        <enum>QLineEdit::Password</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLineEdit" name="password">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="echoMode">
+        <enum>QLineEdit::Password</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="Line" name="line_9">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="hostname_label">
+     <property name="text">
+      <string>What is the name of this computer?</string>
+     </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="_23">
+     <property name="verticalSpacing">
+      <number>0</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item row="0" column="0">
+      <widget class="QLineEdit" name="hostname">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>0</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="1" column="0" colspan="4">
+      <widget class="QLabel" name="hostname_extra_label">
+       <property name="styleSheet">
+        <string>font-weight: normal</string>
+       </property>
+       <property name="text">
+        <string>&lt;small&gt;This name will be used if you make the computer visible to others on a network.&lt;/small&gt;</string>
+       </property>
+       <property name="wordWrap">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="hostname_error_image">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>32</width>
+         <height>32</height>
+        </size>
+       </property>
+       <property name="scaledContents">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="hostname_error_reason">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>1</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>200</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignVCenter</set>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QWidget" name="widget_6" native="true">
+     <layout class="QGridLayout" name="gridLayout_8">
+      <property name="margin">
+       <number>2</number>
+      </property>
+      <item row="1" column="0" colspan="2">
+       <widget class="QRadioButton" name="login_encrypt">
+        <property name="text">
+         <string>Require Password and decrypt home to login</string>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QRadioButton" name="login_auto">
+        <property name="text">
+         <string>Log in Automatically</string>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="login_pass">
+        <property name="text">
+         <string>Require my password to log in</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>77</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>fullname</tabstop>
+  <tabstop>username</tabstop>
+  <tabstop>password</tabstop>
+  <tabstop>verified_password</tabstop>
+  <tabstop>hostname</tabstop>
+  <tabstop>login_pass</tabstop>
+  <tabstop>login_auto</tabstop>
+  <tabstop>login_encrypt</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style.qss b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style.qss
new file mode 100644
index 0000000000000000000000000000000000000000..f66c0a86b69a30434cbaa66f643a1413d9660674
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style.qss
@@ -0,0 +1,157 @@
+/** main stylesheet */
+
+#centralwidget {
+}
+
+#minimize_button {
+    background-image: url(/usr/share/ubiquity/qt/images/minimize.png);
+    background-position: center center;
+    background-repeat: no-repeat;
+    
+    border: none;
+}
+
+#main_frame {
+	border-width: 13px;
+	border-image: url(/usr/share/ubiquity/qt/images/main_frame_border.png) 13px;
+	
+    background-image: url(/usr/share/ubiquity/qt/images/squares.png);
+    background-repeat: no-repeat;
+    background-position: bottom left;
+    background-origin: border;
+    
+    padding: 0px;
+    padding-bottom: 0px;
+}
+
+#main_widget {
+}
+
+#windowTitle,
+#distro_name_label,
+#distro_release_label,
+#processLabel,
+#install_process_label {
+	font-family: sans-serif;
+}
+
+#distro_name_label {
+	color: #00aad4;
+	font-size: 12pt;
+}
+
+#distro_release_label {
+	color: #00ccff;
+	font-size: 12pt;
+}
+
+#install_process_label {
+	color: #006680;
+	font-size: 8pt;
+	padding-left: 1px;
+}
+
+#steps_widget {
+}
+
+#steps_widget QLabel {
+	qproperty-alignment: AlignLeft;
+	font-family: sans-serif;
+	font-size: 12pt;
+	color: #666666;
+	margin: 5px;
+	margin-left: 0px;
+	margin-right: 0px;
+}
+
+/*
+#steps_widget #dummy_active_step {
+    color: #666666;
+}
+
+#steps_widget #dummy_inactive_step {
+    color: #b3b3b3;
+}
+
+#steps_widget #dummy_current_step {
+    color: #0088aa;
+}
+*/
+
+#extraFrame,
+#widgetStack QLabel, QRadioButton {
+	font-size: 10pt;
+	color: #4d4d4d;
+	margin: 1px;
+}
+
+#widgetStack #fullname_error_reason,
+#widgetStack #username_error_reason,
+#widgetStack #password_error_reason,
+#widgetStack #hostname_error_reason
+{
+    font-size: 8pt;
+    color: #ff5555;
+}
+
+#widgetStack #welcome_heading_label, 
+#widgetStack #timezone_heading_label,
+#widgetStack #keyboard_heading_label,
+#widgetStack #part_auto_heading_label,
+#widgetStack #part_advanced_heading_label,
+#widgetStack #userinfo_heading_label,
+#extraFrame,
+#widgetStack #reading_heading_label
+{
+	color: #0088aa;
+	font-size: 10pt;
+	qproperty-alignment: AlignCenter;
+}
+
+#content_widget
+{
+}
+
+#widgetStack QWidget
+{
+    font-size: 10pt;
+}
+
+#widgetStack {
+	padding: 5px;
+	padding-top: 0px;
+	padding-bottom: 0px;
+	
+	border-width: 6px;
+	border-image: url(/usr/share/ubiquity/qt/images/content_border.png) 6px;
+}
+
+#extraFrame {
+	padding: 2px;
+	padding-top: 0px;
+	padding-bottom: 0px;
+	
+	border-width: 2px;
+	border-image: url(/usr/share/ubiquity/qt/images/content_border.png) 2px;
+}
+#content_frame QLabel {	
+}
+
+#map_frame,
+#keyboard_frame 
+{
+	border-radius: 5px;
+	border: 1px solid #bac8d1;
+}
+
+#progressBar {
+    background-color: #b0bfc2;
+    border-radius: 3px;
+    border: 1px solid grey;
+    text-align: center;
+}
+
+#progressBar::chunk {
+    border-radius: 3px;
+    background-color: #94a7ac;
+}
diff --git a/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style_small.qss b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style_small.qss
new file mode 100644
index 0000000000000000000000000000000000000000..15cc9cf40cef258ac299020b49aa02481dc6eefd
--- /dev/null
+++ b/ubiquity-frontend-kde-le/pacote/usr/share/ubiquity/qt/style_small.qss
@@ -0,0 +1,18 @@
+/* stylesheet for smaller screens
+    apply after main stylesheet */
+
+#widgetStack QWidget
+{
+    font-size: 9pt;
+}
+
+#widgetStack #welcome_heading_label, 
+#widgetStack #timezone_heading_label,
+#widgetStack #keyboard_heading_label,
+#widgetStack #part_auto_heading_label,
+#widgetStack #part_advanced_heading_label,
+#widgetStack #userinfo_heading_label,
+#widgetStack #reading_heading_label
+{
+    font-size: 8pt;
+}
\ No newline at end of file