diff --git a/Protocol.cpp b/Protocol.cpp
index 081fde22990a24d3f4c8409e6f1db729b859f66e..352e2c85b57766eaaacd57f15dbe5b2de754aad5 100644
--- a/Protocol.cpp
+++ b/Protocol.cpp
@@ -187,7 +187,7 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){
         if(status == NOISE){
             continue;
         } else if(status == type) {
-            if(messages.back().sequence.to_ulong() != nextSequence){
+            if(!messages.empty() && (messages.back().sequence.to_ulong() != nextSequence)){
                 response.reset();
                 vector<BYTE> val(1,(BYTE)nextSequence);
                 response.setData(val, NACK);
@@ -197,6 +197,7 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){
                 vector<BYTE> val(1,(BYTE)messages.back().sequence.to_ulong());
                 response.setData(val, ACK);
                 nextSequence = (messages.back().sequence.to_ulong()+1)%(MAXSIZE+1);
+                shouldSend = true;
             } else {
                 //TODO: treat something?
             }
diff --git a/server.cpp b/server.cpp
index 40b87c6c17ff25799ea748f11c6c2450b55ac60c..e2ae51ecd3d43502af797c933db4ff14ce17a88b 100644
--- a/server.cpp
+++ b/server.cpp
@@ -17,6 +17,7 @@ int main(){
             }
             if(status == CD){
                 cout << "Recebeu CD\n";
+                cout << "CD: " << receiveProtocol.getDataAsString() << endl;
                 cd(receiveProtocol.getDataAsString());
             }else if(status == LS){
                 cout << "protocol data: " << receiveProtocol.getDataAsString() << endl;
@@ -25,6 +26,7 @@ int main(){
                 cout << "LS: " << output << endl;
                 sendProtocol.setData(vector<BYTE>(output.begin(), output.end()), OUTPUT);
                 sendProtocol.transmit(sockt, WAIT_STOP);
+                cout << "finished transmit" << endl;
             }else if(status == PUT){
                 //TODO
             }else if(status == GET){