Index: src/mainwindow.cpp
===================================================================
--- src/mainwindow.cpp	(revision 7ed8b57eea1113272fa18cf2d867190a7ae56df7)
+++ src/mainwindow.cpp	(revision 2a5e50e0a9b7e18b6ae5d4cbf0bd1228ec21a4de)
@@ -80,4 +80,10 @@
 #ifdef Q_OS_WIN32
 #   include "shobjidl.h"
+#endif
+
+#ifdef Q_OS_BLACKBERRY
+#   include <bb/ApplicationSupport>
+#   include <bb/cascades/pickers/FilePicker>
+using namespace bb::cascades::pickers;
 #endif
 
@@ -264,4 +270,16 @@
 }
 
+#ifdef Q_OS_BLACKBERRY
+void MainWindow::setWindowModified(bool modified)
+{
+    QMainWindow::setWindowModified(modified);
+    bb::ApplicationSupport app;
+    if (modified)
+        app.setClosePrompt(tr("Unsaved Changes"), tr("The task has unsaved changes. Would you really like to close the application?"));
+    else
+        app.clearClosePrompt();
+}
+#endif
+
 /* Privates **********************************************************/
 
@@ -286,18 +304,47 @@
         return;
 
-QStringList filters(tr("All Supported Formats") + " (*.tspt *.zkt)");
+    QStringList filters;
+#ifdef Q_OS_BLACKBERRY
+    filters << "*.tspt" << "*.zkt";
+#else
+    filters.append(tr("All Supported Formats") + " (*.tspt *.zkt)");
     filters.append(tr("%1 Task Files").arg("TSPSG") + " (*.tspt)");
     filters.append(tr("%1 Task Files").arg("ZKomModRd") + " (*.zkt)");
     filters.append(tr("All Files") + " (*)");
+#endif
 
 QString file;
     if ((fileName == tr("Untitled") + ".tspt") && settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
+#ifdef Q_OS_BLACKBERRY
+        file = settings->value(OS"/LastUsed/TaskLoadPath", "/accounts/1000/shared/documents").toString();
+#else
         file = settings->value(OS"/LastUsed/TaskLoadPath").toString();
+#endif
     else
         file = QFileInfo(fileName).path();
-QFileDialog::Options opts = settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog;
+#ifdef Q_OS_BLACKBERRY
+    FilePicker fd;
+    fd.setType(FileType::Document | FileType::Other);
+    fd.setDefaultType(FileType::Document);
+    fd.setTitle(tr("Task Load"));
+    fd.setFilter(filters);
+    fd.setDirectories(QStringList(file));
+    fd.open();
+
+    QEventLoop loop;
+    connect(&fd, SIGNAL(pickerClosed()), &loop, SLOT(quit()));
+    loop.exec();
+
+    if (fd.selectedFiles().count() < 1)
+        return;
+    file = fd.selectedFiles().at(0);
+    if (!QFileInfo(file).isFile())
+        return;
+#else
+    QFileDialog::Options opts = settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog;
     file = QFileDialog::getOpenFileName(this, tr("Task Load"), file, filters.join(";;"), NULL, opts);
     if (file.isEmpty() || !QFileInfo(file).isFile())
         return;
+#endif
     if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
         settings->setValue(OS"/LastUsed/TaskLoadPath", QFileInfo(file).path());
@@ -334,5 +381,9 @@
     if (selectedFile.isEmpty()) {
         if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool()) {
+#ifdef Q_OS_BLACKBERRY
+            selectedFile = settings->value(OS"/LastUsed/SolutionSavePath", "/accounts/1000/shared/documents").toString();
+#else
             selectedFile = settings->value(OS"/LastUsed/SolutionSavePath").toString();
+#endif
         }
     } else
@@ -355,4 +406,7 @@
 
 QStringList filters;
+#ifdef Q_OS_BLACKBERRY
+    filters << "*.pdf" << "*.html" << "*.htm" << "*.odf";
+#else
 #ifndef QT_NO_PRINTER
     filters.append(tr("PDF Files") + " (*.pdf)");
@@ -362,10 +416,32 @@
     filters.append(tr("OpenDocument Files") + " (*.odt)");
     filters.append(tr("All Files") + " (*)");
-
-QFileDialog::Options opts(settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog);
-QString file = QFileDialog::getSaveFileName(this, QString(), selectedFile, filters.join(";;"), NULL, opts);
+#endif
+
+#ifdef Q_OS_BLACKBERRY
+    FilePicker fd;
+    fd.setMode(FilePickerMode::Saver);
+    fd.setType(FileType::Document | FileType::Other);
+    fd.setDefaultType(FileType::Document);
+    fd.setAllowOverwrite(true);
+    fd.setTitle(tr("Solution Save"));
+//    fd.setDirectories(QStringList(QFileInfo(selectedFile).path()));
+    fd.setDefaultSaveFileNames(QStringList(selectedFile));
+    fd.setFilter(filters);
+    fd.open();
+
+    QEventLoop loop;
+    connect(&fd, SIGNAL(pickerClosed()), &loop, SLOT(quit()));
+    loop.exec();
+
+    if (fd.selectedFiles().count() < 1)
+        return;
+    selectedFile = fd.selectedFiles().at(0);
+#else
+    QFileDialog::Options opts(settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog);
+    QString file = QFileDialog::getSaveFileName(this, QString(), selectedFile, filters.join(";;"), NULL, opts);
     if (file.isEmpty())
         return;
     selectedFile = file;
+#endif
     if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
         settings->setValue(OS"/LastUsed/SolutionSavePath", QFileInfo(selectedFile).path());
@@ -1816,10 +1892,20 @@
 }
 
-bool MainWindow::saveTask() {
-QStringList filters(tr("%1 Task File").arg("TSPSG") + " (*.tspt)");
+bool MainWindow::saveTask()
+{
+    QStringList filters;
+#ifdef Q_OS_BLACKBERRY
+    filters << "*.tspt";
+#else
+    filters.append(tr("%1 Task File").arg("TSPSG") + " (*.tspt)");
     filters.append(tr("All Files") + " (*)");
+#endif
 QString file;
     if ((fileName == tr("Untitled") + ".tspt") && settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool()) {
+#ifdef Q_OS_BLACKBERRY
+        file = settings->value(OS"/LastUsed/TaskSavePath", "/accounts/1000/shared/documents").toString();
+#else
         file = settings->value(OS"/LastUsed/TaskSavePath").toString();
+#endif
         if (!file.isEmpty())
             file.append("/");
@@ -1830,9 +1916,30 @@
         file = QFileInfo(fileName).path() + "/" + QFileInfo(fileName).completeBaseName() + ".tspt";
 
-QFileDialog::Options opts = settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog;
+#ifdef Q_OS_BLACKBERRY
+    FilePicker fd;
+    fd.setMode(FilePickerMode::Saver);
+    fd.setType(FileType::Document | FileType::Other);
+    fd.setDefaultType(FileType::Document);
+    fd.setAllowOverwrite(true);
+    fd.setTitle(tr("Task Save"));
+//    fd.setDirectories(QStringList(QFileInfo(file).path()));
+    fd.setDefaultSaveFileNames(QStringList(file));
+    fd.setFilter(filters);
+    fd.open();
+
+    QEventLoop loop;
+    connect(&fd, SIGNAL(pickerClosed()), &loop, SLOT(quit()));
+    loop.exec();
+
+    if (fd.selectedFiles().count() < 1)
+        return false;
+    file = fd.selectedFiles().at(0);
+#else
+    QFileDialog::Options opts = settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog;
     file = QFileDialog::getSaveFileName(this, tr("Task Save"), file, filters.join(";;"), NULL, opts);
     if (file.isEmpty())
         return false;
-    else if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
+#endif
+    if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
         settings->setValue(OS"/LastUsed/TaskSavePath", QFileInfo(file).path());
     if (QFileInfo(file).suffix().isEmpty()) {
Index: src/mainwindow.h
===================================================================
--- src/mainwindow.h	(revision 7ed8b57eea1113272fa18cf2d867190a7ae56df7)
+++ src/mainwindow.h	(revision 2a5e50e0a9b7e18b6ae5d4cbf0bd1228ec21a4de)
@@ -63,4 +63,9 @@
     MainWindow(QWidget *parent = 0);
     ~MainWindow();
+
+#ifdef Q_OS_BLACKBERRY
+public slots:
+    void setWindowModified(bool modified);
+#endif
 
 private slots:
Index: tspsg.pro
===================================================================
--- tspsg.pro	(revision 7ed8b57eea1113272fa18cf2d867190a7ae56df7)
+++ tspsg.pro	(revision 2a5e50e0a9b7e18b6ae5d4cbf0bd1228ec21a4de)
@@ -28,4 +28,7 @@
     DEFINES += QT_NO_PRINTDIALOG
     DEFINES += QT_NO_PRINTPREVIEWDIALOG
+
+    QT += xml declarative
+    LIBS += -lbb -lbbcascadespickers
 }
 
