diff --git a/blackberry/tibb/NativeObject.cpp b/blackberry/tibb/NativeObject.cpp
index 33f3684..530a7b3 100644
--- a/blackberry/tibb/NativeObject.cpp
+++ b/blackberry/tibb/NativeObject.cpp
@@ -57,6 +57,11 @@ int NativeObject::open()
     return NATIVE_ERROR_NOTSUPPORTED;
 }
 
+int NativeObject::close()
+{
+    return NATIVE_ERROR_NOTSUPPORTED;
+}
+
 int NativeObject::start()
 {
     return NATIVE_ERROR_NOTSUPPORTED;
diff --git a/blackberry/tibb/NativeObject.h b/blackberry/tibb/NativeObject.h
index 4012f1e..593730b 100644
--- a/blackberry/tibb/NativeObject.h
+++ b/blackberry/tibb/NativeObject.h
@@ -151,6 +151,7 @@ public:
     virtual int addChildNativeObject(NativeObject* obj);
     virtual NAHANDLE getNativeHandle() const;
     virtual int finishLayout();
+    virtual int close();
     virtual int open();
     virtual int start();
     virtual int startLayout();
diff --git a/blackberry/tibb/NativePageObject.cpp b/blackberry/tibb/NativePageObject.cpp
index 1cc6cbf..3981a92 100644
--- a/blackberry/tibb/NativePageObject.cpp
+++ b/blackberry/tibb/NativePageObject.cpp
@@ -74,7 +74,15 @@ int NativePageObject::open()
     Q_ASSERT(nativeObjectFactory_ != 0);
     Q_ASSERT(nativeObjectFactory_->getCascadeApp() != 0);
     nativeObjectFactory_->setRootContainer(this);
-    nativeObjectFactory_->getCascadeApp()->setScene(this);
+    nativeObjectFactory_->getCascadeApp()->push(page_);
+    return NATIVE_ERROR_OK;
+}
+
+int NativePageObject::close()
+{
+	Q_ASSERT(nativeObjectFactory_ != 0);
+    Q_ASSERT(nativeObjectFactory_->getCascadeApp() != 0);
+    nativeObjectFactory_->getCascadeApp()->pop();
     return NATIVE_ERROR_OK;
 }
 
diff --git a/blackberry/tibb/NativePageObject.h b/blackberry/tibb/NativePageObject.h
index 0bcee8e..25f5a02 100644
--- a/blackberry/tibb/NativePageObject.h
+++ b/blackberry/tibb/NativePageObject.h
@@ -36,6 +36,7 @@ public:
     virtual NAHANDLE getNativeHandle() const;
     virtual int addChildNativeObject(NativeObject* obj);
     virtual int open();
+    virtual int close();
     virtual int removeChildNativeObject(NativeObject* obj);
     virtual int setTitle(TiObject* obj);
 
diff --git a/blackberry/tibb/NativeTCPSocketObject.cpp b/blackberry/tibb/NativeTCPSocketObject.cpp
index 3873bb3..9cbabce 100644
--- a/blackberry/tibb/NativeTCPSocketObject.cpp
+++ b/blackberry/tibb/NativeTCPSocketObject.cpp
@@ -325,7 +325,7 @@ void NativeTCPSocketObject::connect()
     tcpClient_->connectToHost(hostName_, port_);
 }
 
-void NativeTCPSocketObject::close()
+void NativeTCPSocketObject::closeSocket()
 {
     if (socketState_ != SOCKET_STATE_CONNECTED && socketState_ != SOCKET_STATE_LISTENING)
     {
diff --git a/blackberry/tibb/NativeTCPSocketObject.h b/blackberry/tibb/NativeTCPSocketObject.h
index 41ab108..6af0cea 100644
--- a/blackberry/tibb/NativeTCPSocketObject.h
+++ b/blackberry/tibb/NativeTCPSocketObject.h
@@ -72,7 +72,7 @@ public:
 
     // TCP Socket methods
     void connect();
-    void close();
+    void closeSocket();
     void accept(TiEvent* errorCallback, int timeout);
     void listen();
     int write(NativeBufferObject* buffer, int offset = -1, int length = -1);
diff --git a/blackberry/tibb/NativeTabGroupObject.cpp b/blackberry/tibb/NativeTabGroupObject.cpp
index a6696c6..d9f1d6d 100644
--- a/blackberry/tibb/NativeTabGroupObject.cpp
+++ b/blackberry/tibb/NativeTabGroupObject.cpp
@@ -99,6 +99,6 @@ int NativeTabGroupObject::open()
     Q_ASSERT(nativeObjectFactory_ != 0);
     Q_ASSERT(nativeObjectFactory_->getCascadeApp() != 0);
     nativeObjectFactory_->setRootContainer(this);
-    nativeObjectFactory_->getCascadeApp()->setScene(this);
+    nativeObjectFactory_->getCascadeApp()->setTabGroupScene(tabGroup_);
     return NATIVE_ERROR_OK;
 }
diff --git a/blackberry/tibb/NativeTabGroupObject.h b/blackberry/tibb/NativeTabGroupObject.h
index 4ff6f44..510e593 100644
--- a/blackberry/tibb/NativeTabGroupObject.h
+++ b/blackberry/tibb/NativeTabGroupObject.h
@@ -11,6 +11,7 @@
 #include "NativeControlObject.h"
 
 class NativeObjectFactory;
+
 namespace bb
 {
 namespace cascades
diff --git a/blackberry/tibb/TiCascadesApp.cpp b/blackberry/tibb/TiCascadesApp.cpp
index 74fa5d6..7ab4849 100644
--- a/blackberry/tibb/TiCascadesApp.cpp
+++ b/blackberry/tibb/TiCascadesApp.cpp
@@ -9,30 +9,59 @@
 #include <bb/cascades/Application>
 #include <bb/cascades/Container>
 #include <bb/cascades/Page>
+#include <bb/cascades/AbstractPane>
+#include <bb/cascades/NavigationPane>
 #include "NativeObject.h"
 
 using namespace bb::cascades;
 
 TiCascadesApp::TiCascadesApp()
+    : navigationPane_(NULL)
+
+{
+}
+
+void TiCascadesApp::push(bb::cascades::Page* page)
 {
+   Q_ASSERT(page);
+   if (navigationPane_ == NULL)
+   {
+	   navigationPane_ = NavigationPane::create();
+	   navigationPane_->setBackButtonsVisible(false);
+	   Application::setScene(navigationPane_);
+   }
+   else if (navigationPane_->pop() == NULL)
+   {
+       //this case happened when we opened tabGroup on window, and than another window from tabGroup
+	   //navigation pane is not NULL, but stack is empty
+       Application::setScene(navigationPane_);
+   }
+   navigationPane_->push(page);
+}
+
+void TiCascadesApp::pop()
+{
+   navigationPane_->pop();
 }
 
 TiCascadesApp::~TiCascadesApp()
 {
 }
+
 void TiCascadesApp::initializeApp()
 {
 }
 
-void TiCascadesApp::setScene(NativeObject* mainWindow)
+void TiCascadesApp::setTabGroupScene(bb::cascades::AbstractPane* tabGroup)
 {
-    if (mainWindow != NULL)
+    if (tabGroup != NULL)
     {
-        AbstractPane* pane = (AbstractPane*)(mainWindow->getNativeHandle());
-        if (pane != NULL)
-        {
-            Application::setScene(pane);
-        }
+    	if (navigationPane_ != NULL)
+    	{
+    		//if open tabGroup on window, clear rendering stack
+    		while(navigationPane_->pop() != 0) {}
+    	}
+        Application::setScene(tabGroup);
     }
 }
 
diff --git a/blackberry/tibb/TiCascadesApp.h b/blackberry/tibb/TiCascadesApp.h
index 41841fd..5431ede 100644
--- a/blackberry/tibb/TiCascadesApp.h
+++ b/blackberry/tibb/TiCascadesApp.h
@@ -13,6 +13,16 @@
 
 class NativeObject;
 
+namespace bb
+{
+namespace cascades
+{
+class Page;
+class AbstractPane;
+class NavigationPane;
+}
+}
+
 /*
  * TiCascadesApp
  *
@@ -27,7 +37,11 @@ public:
     TiCascadesApp();
     virtual ~TiCascadesApp();
     void initializeApp();
-    void setScene(NativeObject* mainWindow);
+    void push(bb::cascades::Page* page);
+    void pop();
+    void setTabGroupScene(bb::cascades::AbstractPane* tabGroup);
+    //void setScene(AbstractPane* mainWindow);
+    bb::cascades::NavigationPane* navigationPane_;
 };
 
 #endif /* TICASCADESAPP_H_ */
diff --git a/blackberry/tibb/TiRootObject.cpp b/blackberry/tibb/TiRootObject.cpp
index af9a616..763ab52 100644
--- a/blackberry/tibb/TiRootObject.cpp
+++ b/blackberry/tibb/TiRootObject.cpp
@@ -14,6 +14,7 @@
 #include "TiTitaniumObject.h"
 #include "TiTimeoutManager.h"
 #include "TiV8EventContainerFactory.h"
+#include <bb/cascades/Application>
 
 #include <fstream>
 #include <sstream>
@@ -173,7 +174,7 @@ int TiRootObject::executeScript(NativeObjectFactory* objectFactory, const char*
         return -1;
     }
     onStartMessagePump();
-    return (messageLoopEntry)(context);
+    return bb::cascades::Application::exec();;
 }
 
 void TiRootObject::createStringMethods()
diff --git a/blackberry/tibb/TiTCPSocketObject.cpp b/blackberry/tibb/TiTCPSocketObject.cpp
index a031ba2..b925625 100644
--- a/blackberry/tibb/TiTCPSocketObject.cpp
+++ b/blackberry/tibb/TiTCPSocketObject.cpp
@@ -190,7 +190,7 @@ Handle<Value> TiTCPSocketObject::_close(void* userContext, TiObject* /*caller*/,
     NativeTCPSocketObject* ntcp = (NativeTCPSocketObject*) obj->getNativeObject();
     try
     {
-        ntcp->close();
+        ntcp->closeSocket();
     }
     catch (NativeException& ne)
     {
diff --git a/blackberry/tibb/TiUIWindow.cpp b/blackberry/tibb/TiUIWindow.cpp
index f3a408b..598118c 100644
--- a/blackberry/tibb/TiUIWindow.cpp
+++ b/blackberry/tibb/TiUIWindow.cpp
@@ -29,6 +29,7 @@ void TiUIWindow::onCreateStaticMembers()
 {
     TiUIBase::onCreateStaticMembers();
     TiGenericFunctionObject::addGenericFunctionToParent(this, "open", this, open_);
+    TiGenericFunctionObject::addGenericFunctionToParent(this, "close", this, close_);
 }
 
 void TiUIWindow::initializeTiObject(TiObject* parentContext)
@@ -42,7 +43,7 @@ void TiUIWindow::initializeTiObject(TiObject* parentContext)
     }
 }
 
-Handle<Value> TiUIWindow::open_(void* userContext, TiObject*, const Arguments&)
+Handle<Value> TiUIWindow::open_(void* userContext, TiObject* caller, const Arguments&)
 {
     HandleScope handleScope;
     TiUIWindow* obj = (TiUIWindow*) userContext;
@@ -58,3 +59,13 @@ Handle<Value> TiUIWindow::open_(void* userContext, TiObject*, const Arguments&)
     return Undefined();
 }
 
+Handle<Value> TiUIWindow::close_(void* userContext, TiObject* caller, const Arguments&)
+{
+    HandleScope handleScope;
+    TiUIWindow* obj = (TiUIWindow*) userContext;
+    NativeObject* no = obj->getNativeObject();
+    no->close();
+    no->release();
+    return Undefined();
+}
+
diff --git a/blackberry/tibb/TiUIWindow.h b/blackberry/tibb/TiUIWindow.h
index 0c9295a..86a7bee 100644
--- a/blackberry/tibb/TiUIWindow.h
+++ b/blackberry/tibb/TiUIWindow.h
@@ -31,6 +31,7 @@ protected:
 private:
     TiUIWindow(const char* name);
     static Handle<Value> open_(void* userContext, TiObject* caller, const Arguments& args);
+    static Handle<Value> close_(void* userContext, TiObject* caller, const Arguments& args);
 };
 
 #endif /* TIUIWINDOW_H_ */
diff --git a/blackberry/tibb/TitaniumRuntime.cpp b/blackberry/tibb/TitaniumRuntime.cpp
index c4eecdc..ff23ffd 100644
--- a/blackberry/tibb/TitaniumRuntime.cpp
+++ b/blackberry/tibb/TitaniumRuntime.cpp
@@ -69,12 +69,13 @@ int TitaniumRuntime::internalRun(int argc, char** argv)
 
 int TitaniumRuntime::messageLoop(void* context)
 {
-    TitaniumRuntime* self = (TitaniumRuntime*)context;
+    /*TitaniumRuntime* self = (TitaniumRuntime*)context;
     NativeObject* nativeObject = self->objectFactory_->getRootContainer();
     self->mainApp_->setScene(nativeObject);
     if (nativeObject != NULL)
     {
         nativeObject->release();
     }
-    return bb::cascades::Application::exec();
+    return bb::cascades::Application::exec();*/
+	return 0;
 }
