diff --git a/Protocol.cpp b/Protocol.cpp
index 6a2613b5faedfb9b5c2a13f32f82070e8ba06516..ee6d55225a4508b98694c683a6f832d6b077212a 100644
--- a/Protocol.cpp
+++ b/Protocol.cpp
@@ -189,7 +189,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);
@@ -199,6 +199,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 637f0ce24804343e5cf50193ad847e5a0d3587bc..345997c87b21d0d53774516bc0e59948187e81c2 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());
                 vector<BYTE> val(1,(BYTE)0);
                 sendProtocol.setData(val, OK);
@@ -28,6 +29,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){