diff --git a/lib_lista.c b/lib_lista.c
index e7c4b38f67f381518d832afe1275f1d805b2a9b1..0352efc020754b36aecc74ed96eb82b40a176223 100644
--- a/lib_lista.c
+++ b/lib_lista.c
@@ -201,72 +201,55 @@ int pertence_lista(int chave, t_lista *l)
 	return 1;
 }
 
-/* 
-	Para poder retornar o ponteiro de atual, foi necessário 
-	alterar o tipo do retorno de void para t_nodo*.
-*/
-t_nodo* inicializa_atual_inicio(t_lista *l)
+int inicializa_atual_inicio(t_lista *l)
 {
 	if (lista_vazia(l))
-		return NULL;
+		return 0;
 
 	l->atual = l->ini->prox;
-	return l->atual;
+	return 1;
 }
 
-/* 
-	Para poder retornar o ponteiro de atual, foi necessário 
-	alterar o tipo do retorno de void para t_nodo*.
-*/
-t_nodo* inicializa_atual_fim(t_lista *l)
+int inicializa_atual_fim(t_lista *l)
 {
 	if (lista_vazia(l))
-		return NULL;
+		return 0;
 
 	l->atual = l->fim->prev;
-	return l->atual;
+	return 1;
 }
 
-/* 
-	Para poder retornar o ponteiro de atual, foi necessário 
-	alterar o tipo do retorno de void para t_nodo*.
-*/
-t_nodo* incrementa_atual(t_lista *l)
+void incrementa_atual(t_lista *l)
 {
 	if (lista_vazia(l) || l->atual == NULL) 
-		return NULL;
+		return;
 
 	if (l->atual->prox == l->fim)
-		return NULL;
+		return;
 
 	l->atual = l->atual->prox;
-
-	return l->atual;	
 }
 
-/* 
-	Para poder retornar o ponteiro de atual, foi necessário 
-	alterar o tipo do retorno de void para t_nodo*.
-*/
-t_nodo* decrementa_atual(t_lista *l)
+void decrementa_atual(t_lista *l)
 {
 	if (lista_vazia(l) || l->atual == NULL) 
-		return NULL;
+		return;
 
 	if (l->atual->prev == l->ini)
-		return NULL;
+		return;
 
 	l->atual = l->atual->prev;
-
-	return l->atual;	
 }
 
-int consulta_item_atual(int *item, t_nodo *atual)
+int consulta_item_atual(int *item, t_lista *atual)
 {
-	if (atual == NULL) 
+	if (atual->atual == NULL) 
+		return 0;
+
+	if (atual->atual == atual->ini || atual->atual == atual->fim)
 		return 0;
 
-	*item = atual->chave;
+	*item = atual->atual->chave;
 	return 1;
 }
 
@@ -275,15 +258,14 @@ int remove_item_atual(int *item, t_lista *l)
 	if (l->atual == NULL)
 		return 0;
 
+	if (l->atual == l->ini || l->atual == l->fim)
+		return 0;
+
 	t_nodo *p = l->atual;
 	p->prev->prox = p->prox;
 	p->prox->prev = p->prev;
 
-	if (p->prox->prox == NULL)
-		l->atual = p->prev;
-
-	else
-		l->atual = p->prox;
+	l->atual = p->prox;
 
 	*item = p->chave;
 	free (p);
diff --git a/lib_lista.h b/lib_lista.h
index 0821c3e41fab648ac541a73e3249ba97fe6a1f6e..0a74103f85fdb9f3f9cd3416587399446d09c531 100644
--- a/lib_lista.h
+++ b/lib_lista.h
@@ -93,33 +93,33 @@ int pertence_lista(int chave, t_lista *l);
   Inicializa o ponteiro atual para o primeiro elemento da lista.
   Retorna 1 se a operação foi bem sucedida e zero caso contrário.
 */
-t_nodo* inicializa_atual_inicio(t_lista *l);
+int inicializa_atual_inicio(t_lista *l);
 
 /* 
   Inicializa o ponteiro atual para o ultimo elemento da lista.
   Retorna 1 se a operação foi bem sucedida e zero caso contrário.
 */
-t_nodo* inicializa_atual_fim(t_lista *l);
+int inicializa_atual_fim(t_lista *l);
 
 /*
   Faz o ponteiro atual apontar para o próximo nodo da lista l e retorna 
   este ponteiro. Se atual estiver apontando para o último, isto é, não 
   tem próximo, retorna NULL.
 */
-t_nodo* incrementa_atual(t_lista *l);
+void incrementa_atual(t_lista *l);
 
 /*
   Faz o ponteiro atual apontar para o nodo anterior da lista l e retorna 
   este ponteiro. Se atual estiver apontando para o primeiro, isto é, não 
   tem anterior, retorna NULL.
 */
-t_nodo* decrementa_atual(t_lista *l);
+void decrementa_atual(t_lista *l);
 
 /*
   Retorna em *item o valor contido na chave apontada pelo ponteiro atual. 
   Se atual não for válido a função retorna zero senão retorna 1.
 */
-int consulta_item_atual(int *item, t_nodo *atual);
+int consulta_item_atual(int *item, t_lista *atual);
 
 /*
   Remove o elemento apontado por atual da lista l e o retorna em *item.
diff --git a/main.c b/main.c
index 10b84f578410ea6eb329074a4005719491a1600c..d2a186d5fc5b1a209965346b395dcb51a127e1c0 100644
--- a/main.c
+++ b/main.c
@@ -21,7 +21,6 @@ int main ()
 {
 	t_lista l;
 	int item;
-	t_nodo* atual;
 
 	inicializa_lista(&l);
 	insere_ordenado_lista(7, &l);
@@ -30,18 +29,23 @@ int main ()
 	insere_ordenado_lista(3, &l);
 	insere_ordenado_lista(2, &l);
 	imprime (&l);
-	atual = inicializa_atual_inicio(&l);
-	atual = incrementa_atual(&l);
-	atual = incrementa_atual(&l);
-	atual = incrementa_atual(&l);
-	atual = incrementa_atual(&l);
-	remove_item_atual (&item, &l);
-	printf ("%d\n", item);
+
+	inicializa_atual_inicio(&l);
+
+	incrementa_atual(&l);
+	incrementa_atual(&l);
+	incrementa_atual(&l);
+	incrementa_atual(&l);
+
+
+	remove_item_atual(&item,&l);
+	printf("%d\n",item);
+
+	remove_item_atual(&item,&l);
+	printf("%d\n",item);
+
 	imprime (&l);
-	atual = decrementa_atual(&l);
-	atual = incrementa_atual(&l);
-	consulta_item_atual (&item, atual);
-	printf ("%d\n", item);
 
+	destroi_lista (&l);
 	return 0;
 }