diff --git a/src/cam.cpp b/src/cam.cpp
index 65cdc247404afe6c815141cae60f5a5cef02000a..0984587ac4b382712d16c4a3afa454202552a3be 100644
--- a/src/cam.cpp
+++ b/src/cam.cpp
@@ -47,7 +47,6 @@ Cam::~Cam()
 	// close() should be called automatically, when the last shared_ptr to the camera is destroyed
 }
 
-
 QString Cam::name()
 {
 	if( _name.isEmpty() )
@@ -215,6 +214,17 @@ QString Cam::stateToString(const State& state)
 	}
 }
 
+void Cam::toggleOpenClose()
+{
+	if( _state == opened )
+		close();
+	else if ( _state == closed )
+		open();
+	else
+		error("toggleOpenClose: cam state is not closed or opened");
+
+}
+
 void Cam::onCameraDisconnected()
 {
 	_state = disconnected;
diff --git a/src/cam.h b/src/cam.h
index 4a82eb6d243b7c0f20edf0555464a7d23fd669de..cfb9e8d53b46fb2d619dc3bcfacf22a5709e596d 100644
--- a/src/cam.h
+++ b/src/cam.h
@@ -40,6 +40,7 @@ public:
 	QString name();
 	State state() const;
 	static QString stateToString(const State&);
+	void toggleOpenClose();
 
 	bool open();
 	void close();
diff --git a/src/camobserver.cpp b/src/camobserver.cpp
index c24a2be5b3b0d72fd8a5b748578b46b9270f0020..b1c29bfe7b936357c01e411ff04fca89c4479119 100644
--- a/src/camobserver.cpp
+++ b/src/camobserver.cpp
@@ -16,7 +16,7 @@ void CamObserver::CameraListChanged(CameraPtr pCam, UpdateTriggerType reason)
 	}
 	else // UpdateTriggerOpenStateChanged
 	{
-		emit cameraOpenStateChanged(pCam);
+		emit cameraStateChanged(pCam);
 		qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << "";
 	}
 }
diff --git a/src/camobserver.h b/src/camobserver.h
index 1a740b925d415696b49427d4456c83806309ec67..b0e4065390576c12ae8d67b629b19955a1da22c2 100644
--- a/src/camobserver.h
+++ b/src/camobserver.h
@@ -13,7 +13,7 @@ class CamObserver : public QObject, public ICameraListObserver
 
 signals:
 	void cameraListChanged();
-	void cameraOpenStateChanged(CameraPtr);
+	void cameraStateChanged(CameraPtr);
 
 public:
 	void CameraListChanged(CameraPtr, UpdateTriggerType);
diff --git a/src/core.cpp b/src/core.cpp
index 9f0110cc686f9feed6f04b168bcc7e39bdd9a8db..43ab6cdfd21a2cee3a13191122755a7f23249084 100644
--- a/src/core.cpp
+++ b/src/core.cpp
@@ -39,6 +39,8 @@ void Core::init()
 
 	auto camObserver = new CamObserver();
 	connect( camObserver, SIGNAL(cameraListChanged()), this, SLOT(listCams()) ); //listcams calls updateCams!
+	connect( camObserver, SIGNAL(cameraStateChanged(CameraPtr)), this, SLOT(updateCamState(CameraPtr)) ); //
+
 	f(_sys.RegisterCameraListObserver(ICameraListObserverPtr(camObserver)), "register cam observer");
 
 	listCams();
@@ -81,10 +83,8 @@ void Core::updateCameras()
 		}
 		if (!found)
 		{
-
 			_cameras.push_back(std::make_shared<Cam>(vcam)); //create Cam() from CameraPtr vcam
-			print("cam connected");
-			//vcam->GetName(), threadsPerCam
+			print({"cam connected:",_cameras.back()->name()});
 		}
 	}
 
@@ -103,22 +103,28 @@ void Core::updateCameras()
 		}
 		if (!found)
 		{
+			print({"cam disconnected",(*it)->name()});
 			it = _cameras.erase(it);
-			print("cam disconnected");
 		}
 		else
 		{
 			++it;
 		}
 	}
-
-	// Update states of cameras
-	// for (const auto& cam : _cameras) {
-		// Update state of 'cam' based on corresponding camera's state in 'vmbcameras'
-	// }
-
 } // now ~Camera() should be called on removed cams. >> camObserver
 
+void Core::updateCamState(CameraPtr vcam)
+{
+	for (const auto& cam : _cameras)
+	{
+		if (cam->getCameraPtr() == vcam)
+		{
+			cam->toggleOpenClose();
+			break;
+		}
+	}
+}
+
 // update + print camlist
 void Core::listCams()
 {
diff --git a/src/core.h b/src/core.h
index 4e7aec9e6637adec01d8c955ac9b0815e3504a69..bd1f9a241eadd3be008313b7813cfaaae7f54034 100644
--- a/src/core.h
+++ b/src/core.h
@@ -23,6 +23,7 @@ public:
 
 public slots:
 	void listCams();
+	void updateCamState(CameraPtr);
 	bool openCam();
 
 	CamPtr cam(const unsigned long &idx=-1);