diff --git a/src/main.cpp b/src/main.cpp
index a9d29301d2e898642861e3393a5c58a32b639abc..9d1e6efe98331677dd334462172631d49e6eaeba 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -103,14 +103,15 @@ int main(int argc, char *argv[]) {
             }
           }else if(serverReceive.getType() == 5){
             if(serverReceive.checkParity()){ // Se a paridade estiver errada
-              resposta.setData((unsigned char*)"4",0,0); // Manda um Nack
+              resposta.setData((unsigned char*)"5",0,0); // Manda um Nack
               send(soquete,resposta.objToString(),68, 0);
             } else {
-              resposta.setData((unsigned char*)"4",1,0); // Manda um ack
+              resposta.setData((unsigned char*)"5",8,0); // Manda um ack
               send(soquete,resposta.objToString(),68, 0);
-              if(mainMessage.receivePUT(serverReceive.getData(), currentPath)){
-                cout << "ERRO: put.";
+              if(mainMessage.receivePUT(serverReceive.getData(), currentPath) == 0){
+                cout << "arquivo recebido" << endl;
               }
+              cout << "ERRO: put." << endl;
             }
           }
         }
diff --git a/src/messages.cpp b/src/messages.cpp
index fbb318eb585c7090ac7c8912f479da10be2d9097..75f31cb559fb85a0700a51cfae22f450cb3dbe29 100644
--- a/src/messages.cpp
+++ b/src/messages.cpp
@@ -151,11 +151,11 @@ int Message::sendPUT(unsigned char* fileName){
 
   fileIn.open((char*)fileName, ios::in);
   fileIn.seekg(0);
-
+cout << "PUT ===> 1" << endl;
   while(getline(fileIn, temp)) {
     fileData += temp + "\n";
   }
-
+cout << "PUT ===> 2" << endl;
   while(!success){
     error = send(soquete, put.objToString(), 68, 0);
     if (error == -1){
@@ -171,16 +171,22 @@ int Message::sendPUT(unsigned char* fileName){
           cout << "Erro no recebimento de resposta (messages.cpp::sendPUT)" << endl;
           return -1;
         } else {
+cout << "PUT ===> 3" << endl;
           recv(soquete, receiptMessage, 68, 0);
           answer.stringToObj((unsigned char*)receiptMessage);
+cout << "PUT ===> 4" << endl;
           // Lê começo da mensagem e vê se tem o delimitador de início
           if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110
             success = 1;
+cout << "PUT ===> 5" << endl;
             if(answer.getType() == 8){ // 8 = OK
               // OK, mandar tamanho
               sprintf(fileSize, "%d", fileData.size());
+cout << "PUT ===> 6 (fileSize)" << fileSize << endl;
               size.setData((unsigned char*)fileSize,9,0);
+cout << "PUT ===> 7" << endl;
               send(soquete, size.objToString(), 68, 0);
+cout << "PUT ===> 8" << endl;
               success = 0;
               while(!success){
                 rv = poll(ufds, 1, 500);
@@ -189,22 +195,28 @@ int Message::sendPUT(unsigned char* fileName){
                     cout << "Erro no recebimento de resposta (messages.cpp::sendPUT)" << endl;
                     return -1;
                   } else {
+cout << "PUT ===> 9" << endl;
                     recv(soquete, receiptMessage, 68, 0);
+cout << "PUT ===> 10" << endl;
                     answer.stringToObj((unsigned char*)receiptMessage);
+cout << "PUT ===> 11" << endl;
                     if(answer.getStartMessage() == 0x7E){ // 0x7E = 01111110
                       if(answer.getType() == 8){
+cout << "PUT ===> 12" << endl;
                         success = 1;
                         if(sendData((unsigned char*)fileData.c_str(), 13)){
                           cout << "Erro ao mandar dados (messages.cpp::sendPUT)" << endl;
                           return -1;
                         }
                       } else if (answer.getType() == 0){
+cout << "PUT ===> 13" << endl;
                         success = 0;
                       } else if (answer.getType() == 15){ // 15 = 0xE --> Erro
                         if(answer.getData()[0] == '2'){
                           cout << "Não tem espaço para mandar o arquivo" << endl;
                           return -1;
                         } else {
+cout << "PUT ===> 14" << endl;
                           success = 0;
                         }
                       }
@@ -213,6 +225,7 @@ int Message::sendPUT(unsigned char* fileName){
                 }
               }
             } else if(answer.getType() == 0){ // 0 = NACK
+cout << "PUT ===> 15" << endl;
               // NACK
               success = 0; // reenvia pedido
             }
@@ -588,13 +601,18 @@ int Message::receivePUT(unsigned char* fileName, char* currentPath){
   ufds[0].fd = soquete;
   ufds[0].events = POLLIN;
   string receivedFile;
-  ofstream fileOut;
+  FILE *fileOut;
+  fileOut = fopen((char*)fileName, "w");
+  if (fileOut == NULL){
+    cout << "Erro ao criar arquivo, saindo" << endl;
+    return -1;
+  }
 
   // Calcula espaço livre
   if(statvfs(currentPath, buff) == -1){
     cout << "Erro ao calcular espaço livre (messages.cpp::receivePUT)" << endl;
   }
-  availableSize = buff->f_bsize * buff->f_bfree;
+  availableSize = buff->f_bsize + buff->f_bfree;
   while(!success){
     rv = poll(ufds, 1, 500);
     if(rv){
@@ -622,11 +640,10 @@ int Message::receivePUT(unsigned char* fileName, char* currentPath){
               // Fica esperando dados
               receivedFile = receiveData(13);
               if(receivedFile != ""){
+                fputs(receivedFile.c_str(),fileOut);
+                fclose(fileOut);
                 cout << "Dados recebidos com sucesso!" << endl;
-                fileOut.open((char*)fileName, ios::binary);
-                for(i = 0; i < receivedFile.size(); i++){
-                  fileOut.write((char*)&receivedFile[i], sizeof(unsigned char));
-                }
+                //fileOut.close();
                 return 0;
               } else {
                 cout << "Erro ao receber dados (messages.cpp::receivePUT)" << endl;
diff --git a/src/miniShell.cpp b/src/miniShell.cpp
index f20d3cb5fc91ab6f99eef08ada46619cf31b7ed2..35c88ffc9dc055d09b94901e3f51d13681927550 100644
--- a/src/miniShell.cpp
+++ b/src/miniShell.cpp
@@ -53,7 +53,7 @@ int lsMini(string parameter, char* currentPath){
 	// Remove arquivo ls.txt
 	remove(fileName.c_str());
 
-	cout << "mostra:" << mostra << endl;
+	cout << mostra << endl;
 	return 0;
 }