_numBoxes=0;
                _idManager=idManager;
                _baseView=baseView;
-               _idLastController=0;
                _startDragging=false;
 
                if( _baseView!=NULL )
        
        bool wxVtkSceneManager::OnLeftButtonDown()
        {
+               if(_worldState==INIT_CREATION_CONTOUR)
+               {
+                       bool isOverPort=false;
+                       std::map<int, GObjectController*>::iterator it;
+                       for(it = _controllers.begin(); it != _controllers.end() && isOverPort==false; ++it)
+                       {
+                               GObjectController *desc = it->second;
+                               if(desc->getGObjectType()==GPORT)
+                               {
+                                       GPortModel* portmod=(GPortModel*)desc->getModel();
+                                       vtkGObjectView* portView=desc->getView();
+                                       if(portmod->getPortType()==GINPUTPORT && portView->getState()==HIGHLIGHTED)
+                                       {
+                                               isOverPort=true;
+                                       }
+                               }
+                       }
+                       
+                       if(isOverPort==false)
+                       {
+                               _worldState=NOTHING_HAPPENS;
+                               int lastId = _controllers.size()-1;
+                               GConnectorController *connector = (GConnectorController*)_controllers[lastId];
+                               connector->removeFromScene();
+                               unregisterController(connector);
+                               _controllers.erase(lastId);                     
+
+                               for(it = _controllers.begin(); it != _controllers.end(); ++it)
+                               {
+                                       GObjectController *desc = it->second;
+                                       desc->SetActive(true);
+                                       desc->getView()->setState(NOTHING_HAPPENS);
+                                       desc->getModel()->notifyObservers(_idManager);
+                               }
+                       }
+               }
                
                if(_selectedObjects.size()!=0)
                {
 
        bool wxVtkSceneManager::OnRightButtonUp()
        {
+               if(_worldState==INIT_CREATION_CONTOUR)
+               {
+                       _worldState=NOTHING_HAPPENS;
+                       int lastId = _controllers.size()-1;
+                       GConnectorController *connector = (GConnectorController*)_controllers[lastId];
+                       connector->removeFromScene();
+                       unregisterController(connector);
+                       _controllers.erase(lastId);                     
+
+                       std::map<int, GObjectController*>::iterator it;
+                       for(it = _controllers.begin(); it != _controllers.end(); ++it)
+                       {
+                               GObjectController *desc = it->second;
+                               desc->SetActive(true);
+                               desc->getView()->setState(NOTHING_HAPPENS);
+                               desc->getModel()->notifyObservers(_idManager);
+                       }
+               }
+
+                       
                for (int i = 0; i < _selectedObjects.size(); i++)
                {
                        int id = _selectedObjects[i];
                        GObjectController *cont = it->second;
                        int type = cont->getGObjectType();
                        
-                       if(cont->getView()->isPointInside(X,Y))
+                       if(type==GBLACKBOX)
                        {
-                               if(type==GBLACKBOX)
+                               if(cont->getView()->isPointInside(X,Y))
                                {
                                        for (int i=0; i<_selectedObjects.size(); i++)
                                        {
                        GBlackBoxModel *bbmod = (GBlackBoxModel*)control->getModel();
                        std::vector<GPortModel*> inputs = bbmod->getInputPorts();
                        
+                       bool boxConnected = false;
+
+                       // Add box input controllers to be removed
                        for(int i = 0;i<inputs.size();i++)
                        {
-                               controllersToRemove.push_back(inputs[i]->getObjectId());                                
+                               controllersToRemove.push_back(inputs[i]->getObjectId());
+                               if(inputs[i]->isConnected())
+                               {
+                                       boxConnected = true;
+                               }
                        }
 
                        std::vector<GPortModel*> outputs = bbmod->getOutputPorts();
 
+                       // Add box output controllers to be removed
                        for(int i = 0;i<outputs.size();i++)
                        {
                                controllersToRemove.push_back(outputs[i]->getObjectId());
+                               if(outputs[i]->isConnected())
+                               {
+                                       boxConnected = true;
+                               }
+                       }
+
+                       // Add connection controllers to be removed
+                       std::map<int, GObjectController*>::iterator it;
+                       for(it = _controllers.begin(); it != _controllers.end(); ++it)
+                       {
+                               GObjectController *cont = it->second;
+                               int type = cont->getGObjectType();
+                               if(type==GCONNECTOR)
+                               {
+                                       GConnectorModel *conMod = (GConnectorModel*)cont->getModel();
+                                       if(conMod->getStartPort()!=NULL && conMod->getStartPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
+                                       {
+                                               controllersToRemove.push_back(conMod->getObjectId());
+                                       }
+                                       if(conMod->getEndPort()!=NULL && conMod->getEndPort()->getParentBox()->getObjectId() == bbmod->getObjectId())
+                                       {
+                                               controllersToRemove.push_back(conMod->getObjectId());
+                                       }
+                               }
                        }
 
+                       // Add box controller to be removed
                        controllersToRemove.push_back(bbmod->getObjectId());
                }
 
 
                for(int i = 0;i<lstInputs.size();i++)
                {
                        GPortModel* port = lstInputs[i];
-                       wxStaticText *lblName = new wxStaticText(this, -1, std2wx(port->getBBTKName()),wxDefaultPosition,wxSize(100,20));
-                       wxStaticText *lblType = new wxStaticText(this, -1, std2wx(port->getBBTKType()),wxDefaultPosition,wxSize(230,20));
+                       wxStaticText *lblName = new wxStaticText(this, -1, std2wx(port->getBBTKName()),wxDefaultPosition,wxSize(100,25));
+                       wxStaticText *lblType = new wxStaticText(this, -1, std2wx(port->getBBTKType()),wxDefaultPosition,wxSize(250,25));
                        wxTextCtrl *txtValue = new wxTextCtrl(this, -1, _T(""),wxDefaultPosition,wxSize(90,25));
 
                        if(port->getValue()!="")
                        _lstNames.push_back(lblName);
                        _lstTypes.push_back(lblType);
                        _lstValues.push_back(txtValue);
-
+                       
                        sizer->Add(lblName,1,wxEXPAND,5);
                        sizer->Add(lblType,1,wxCENTRE|wxEXPAND,5);
                        sizer->Add(txtValue,1,wxEXPAND,5);
+                       
                }
                
                wxBoxSizer *buts = new wxBoxSizer(wxHORIZONTAL);