diff --git a/compositor-message/main.cpp b/compositor-message/main.cpp
index 0b13f75ee2aed8106dafbd605b1bb573c78b813d..1a3bad738315e43b000d8c15cd748633c6054663 100644
--- a/compositor-message/main.cpp
+++ b/compositor-message/main.cpp
@@ -18,15 +18,15 @@ int main(int argc, char *argv[])
     parser.process(a);
 
     const QStringList args = parser.positionalArguments();
-    if(args.length() < 2){
+    if(args.length() < 1){
         parser.showHelp();
         exit(-1);
     }
 
     QString command;
     bool ok;
-    qint32 windowid;
-    qint32 screenid = 0;
+    qint32 windowid = -1;
+    qint32 screenid = -1;
 
     command = QString(args[0]);
     windowid = qint32(args[1].toInt(&ok));
diff --git a/multiscreen-compositor/compositor-messages.cpp b/multiscreen-compositor/compositor-messages.cpp
index 38ff1aa566f0f219827066a9ebf89fc541ebef26..52ed2d98b1d6014a8ceca409a04dca9122a7e6f1 100644
--- a/multiscreen-compositor/compositor-messages.cpp
+++ b/multiscreen-compositor/compositor-messages.cpp
@@ -8,7 +8,7 @@ CompositorMessages::CompositorMessages(QObject *parent)
 {
 }
 
-void CompositorMessages::messageReceived(QString message, quint32 windowId, quint32 screenId){
+void CompositorMessages::messageReceived(QString message, qint32 windowId, qint32 screenId){
     qDebug() << "CompositorMessage::messageReceived New message" << message;
 
     if(message == "moveWindowToScreen"){
diff --git a/multiscreen-compositor/compositor-messages.h b/multiscreen-compositor/compositor-messages.h
index cb70d0a376dc6bcaef2494ef99df9698b720c9b7..256c7f9827fe7b9fad37505802532dd3aaf7403d 100644
--- a/multiscreen-compositor/compositor-messages.h
+++ b/multiscreen-compositor/compositor-messages.h
@@ -12,7 +12,7 @@ public:
     Q_INVOKABLE bool isPidAlive(int pid);
 
 public slots:
-    void messageReceived(QString, quint32 value0, quint32 value2);
+    void messageReceived(QString, qint32 value0, qint32 value2);
     void screenInfoReceived(int screenId);
 signals:
     void moveWindowToScreen(qint32 windowid, qint32 screenid);
diff --git a/multiscreen-compositor/main.cpp b/multiscreen-compositor/main.cpp
index 7916cd2a6c50eea3bc7195cf634083a74f42a5b9..09499fab250d08f6b1ad58eef4fcf6559fe7f6b8 100644
--- a/multiscreen-compositor/main.cpp
+++ b/multiscreen-compositor/main.cpp
@@ -88,8 +88,8 @@ int main(int argc, char *argv[])
     }
 
     CompositorMessages commands;
-    QObject::connect(&server, SIGNAL(newMessage(QString,quint32,quint32)),
-                     &commands, SLOT(messageReceived(QString,quint32,quint32)));
+    QObject::connect(&server, SIGNAL(newMessage(QString,qint32,qint32)),
+                     &commands, SLOT(messageReceived(QString,qint32,qint32)));
 
     QObject::connect(&commands, SIGNAL(sendStatus(int)),
                      &server, SLOT(returnStatus(int)));
diff --git a/multiscreen-compositor/message-server.cpp b/multiscreen-compositor/message-server.cpp
index 1e3916f2379b27c671eae37ee78d54195541319d..65550f6e75198aa55c94cdf5bac39738585e4818 100644
--- a/multiscreen-compositor/message-server.cpp
+++ b/multiscreen-compositor/message-server.cpp
@@ -63,7 +63,7 @@ void MessageServer::connectionGone(MessageServerConnection* c){
     delete c;
 }
 
-void MessageServer::messageReceived(QString m, quint32 value0, quint32 value1)
+void MessageServer::messageReceived(QString m, qint32 value0, qint32 value1)
 {
     qDebug() << "MessageServer::messageReceived Got message" << m << value0 << value1;
     emit newMessage(m , value0, value1);
@@ -75,7 +75,7 @@ void MessageServer::returnStatus(int status)
     emit sendStatus(status);
 }
 
-void MessageServer::broadcastMessage(QString msg, quint32 windowId, quint32 screenId)
+void MessageServer::broadcastMessage(QString msg, qint32 windowId, qint32 screenId)
 {
     emit sendMessage(msg, windowId, screenId);
 }
diff --git a/multiscreen-compositor/message-server.h b/multiscreen-compositor/message-server.h
index 32874d930673b2a1c0fb099bbebf0fecfc11f076..85dc5fda275106e4fb3655c686956d6fdf2bcd26 100644
--- a/multiscreen-compositor/message-server.h
+++ b/multiscreen-compositor/message-server.h
@@ -11,21 +11,21 @@ public:
     explicit MessageServer(QObject *parent = nullptr);
     bool listen();
 
-    Q_INVOKABLE void broadcastMessage(QString msg, quint32 windowId, quint32 screenId);
+    Q_INVOKABLE void broadcastMessage(QString msg, qint32 windowId, qint32 screenId);
     Q_INVOKABLE void returnStatus(int);
 
 public slots:
     void destroy();
 
 signals:
-    void newMessage(QString, quint32 value0, quint32 value2);
+    void newMessage(QString, qint32 value0, qint32 value2);
     void sendStatus(int);
-    void sendMessage(QString msg, quint32 windowId, quint32 screenId);
+    void sendMessage(QString msg, qint32 windowId, qint32 screenId);
 
 private slots:
     void handleConnection(void);
     void connectionGone(MessageServerConnection *c);
-    void messageReceived(QString, quint32, quint32);
+    void messageReceived(QString, qint32, qint32);
 
 private:
     static const QString socketName;
diff --git a/multiscreen-compositor/qml/main.qml b/multiscreen-compositor/qml/main.qml
index b75fe94bf16fa5cf7493bc7f63fa6f206f613bfb..05e0b708efff36a12132b6b0805075123293d57c 100644
--- a/multiscreen-compositor/qml/main.qml
+++ b/multiscreen-compositor/qml/main.qml
@@ -368,14 +368,20 @@ WaylandCompositor {
         function onMoveWindowToScreen(windowid, screenid) {
             console.log("Received a moveWindowToOutput Signal", windowid, screenid)
 
-            if( screenid > screens.count ){
+            if( screenid >= screens.count || screenid < 0){
                 console.log("Given screen ID is out of range");
                 server.returnStatus(-1);
                 return
             }
 
             var affectedSurfaces = getActiveSurfaces(getPidFromIviId(windowid));
-            //if (affectedSurfaces.length === 0) return;
+            if (affectedSurfaces.length === 0)
+            {
+                console.log("no screens found for ID", screenid);
+                server.returnStatus(-1);
+                return;
+            }
+
             for (var i=0; i < affectedSurfaces.length; i++)
             {
                 var surface = affectedSurfaces[i];
@@ -386,14 +392,19 @@ WaylandCompositor {
                     updateScreenAssignment(getPidFromIviId(windowid), screenid);
                 }
             }
-            server.returnStatus(screenid);
+            server.returnStatus(0);
             server.sendMessage("Move", windowid, screenid);
         }
 
         function windowVisibility(windowid, show){
             var ret = 0;
             var affectedSurfaces = getActiveSurfaces(getPidFromIviId(windowid));
-            //if (affectedSurfaces.length === 0) return;
+            if (affectedSurfaces.length === 0)
+            {
+                server.returnStatus(-1);
+                return;
+            }
+
             for (var i=0; i < affectedSurfaces.length; i++)
             {
                 var surface = affectedSurfaces[i];
@@ -406,8 +417,8 @@ WaylandCompositor {
                 }
             }
 
-            server.returnStatus(ret);
-            server.sendMessage(show ? "Show" : "Hide", windowid, null);
+            server.returnStatus(0);
+            server.sendMessage(show ? "Show" : "Hide", windowid, getScreenFromIviId(windowid));
         }
 
         function onHideWindow(windowid){