diff --git a/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt
index c7e02c0ebe1fafa5e877480c741ca1f460780991..56b94d5c733dfd426388957d302b65fd3b6be07a 100644
--- a/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt
@@ -3,13 +3,14 @@ package com.example.ellegadodepintia
 import android.graphics.Color
 import android.os.Bundle
 import android.view.ViewGroup
+import android.widget.Button
 import android.widget.ImageView
 import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import com.example.ellegadodepintia.exploradoresDePintia.ModalDetallesCompra
 import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
 import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils
-import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoConsumible
+import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto
 import com.example.ellegadodepintia.repositorios.RepositorioJugador
 import com.example.ellegadodepintia.repositorios.RepositorioObjetos
 
@@ -18,16 +19,30 @@ class TiendaActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_tienda)
 
-        GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this) }
+        GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this)
+            cargarObjetos()}
 
         val nivelCiudad = GameState.jugador.nivelCiudad
         val nObjetos = nivelCiudad * 2
-        val objetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos)
-        val preciosGenerados = ArrayList<Int>()
+
+        val botonRefrescar = findViewById<Button>(R.id.botonRefrescar)
+        botonRefrescar.setOnClickListener {
+            GameState.jugador.actualizarObjetosTienda(nObjetos)
+        }
 
         val textoMonedas = findViewById<TextView>(R.id.textoMonedas)
         GameState.jugador.monedas.toString().also { textoMonedas.text = it }
 
+        cargarObjetos()
+    }
+
+    private fun cargarObjetos(){
+
+        val nivelCiudad = GameState.jugador.nivelCiudad
+        val nObjetos = nivelCiudad * 2
+        val objetos = RepositorioObjetos.convertirNombresAObjetos(GameState.jugador.objetosTienda)
+        val preciosGenerados = ArrayList<Int>()
+
         val slots = listOf<ImageView>(
             findViewById(R.id.slot01),
             findViewById(R.id.slot02),
@@ -71,7 +86,7 @@ class TiendaActivity : AppCompatActivity() {
 
         slots.forEachIndexed { index, slot ->
             if (index < nObjetos) {
-                slot.setImageResource(objetos[index].imagen)
+                slot.setImageResource(objetos[index]!!.imagen)
                 slot.setOnClickListener {
                     val modalDetallesFragment = ModalDetallesCompra().apply {
                         objeto = objetos[index]
@@ -100,14 +115,16 @@ class TiendaActivity : AppCompatActivity() {
         }
     }
 
-    private fun ejecutarCompra(objeto: ObjetoConsumible, coste: Int){
+    private fun ejecutarCompra(objeto: Objeto?, coste: Int){
         val texto = findViewById<TextView>(R.id.textoInformacion)
         if (GameState.jugador.monedas < coste){
             "No hay dinero".also { texto.text = it }
         }else{
             GameState.jugador.actualizarMonedas(GameState.jugador.monedas - coste)
             RepositorioJugador.setMonedas(GameState.jugador.monedas)
-            GameState.jugador.conseguirObjeto(objeto)
+            if (objeto != null) {
+                GameState.jugador.conseguirObjeto(objeto)
+            }
             "Objeto comprado y añadido al inventario".also { texto.text = it }
         }
     }
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt
index 861ae25d2d00f12f18c912956bcc3d4167fbb8ac..e19e2d4eeb759c34f10ee94a1eeb327c4d5aa9ac 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt
@@ -15,6 +15,8 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto
 import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable
 import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoUtilidad
 import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento
+import com.example.ellegadodepintia.repositorios.RepositorioJugador
+import com.example.ellegadodepintia.repositorios.RepositorioObjetos
 
 class Jugador {
     var nivelCiudad = 1
@@ -27,6 +29,7 @@ class Jugador {
     var habilidades = ArrayList<Habilidad>(1)
     var buffos = ArrayList<EfectoBuffo>()
     var monedas = 0
+    var objetosTienda = ArrayList<String>(6)
 
     init {
         atributos[Atributo.Vida] = 10
@@ -169,6 +172,13 @@ class Jugador {
         notifyObservers()
     }
 
+    fun actualizarObjetosTienda(nObjetos : Int){
+        val nuevosObjetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos)
+        this.objetosTienda = nuevosObjetos
+        RepositorioJugador.setObjetosTienda(nuevosObjetos)
+        notifyObservers()
+    }
+
     fun reset() {
         observers.clear()
 
@@ -185,6 +195,7 @@ class Jugador {
 
         vidaMax = 10
         energiaMax = 10
+        actualizarObjetosTienda(nivelCiudad*2)
     }
 
 }
diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt
index df00a229895e8bd78e1f59f8397763696e9e64d3..c3f6e292283c54b358f1f82237fb5edaeeb52984 100644
--- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt
@@ -14,6 +14,14 @@ object RepositorioJugador {
         db.collection("users").document(email).get().addOnSuccessListener {
             GameState.jugador.monedas = (it.get("monedas") as Long).toInt()
             GameState.jugador.nivelCiudad = (it.get("nivelCiudad") as Long).toInt()
+
+            val objetosTienda = (it.get("objetosTienda") as? List<*>)
+                ?.filterIsInstance<String>()
+                ?.toCollection(ArrayList())
+                ?: ArrayList()
+
+            println(objetosTienda)
+            GameState.jugador.objetosTienda = objetosTienda
         }
     }
 
@@ -21,7 +29,8 @@ object RepositorioJugador {
         db.collection("users").document(email).set(
             hashMapOf("monedas" to 0,
                 "username" to username,
-                "nivelCiudad" to 1)
+                "nivelCiudad" to 1,
+                "objetosTienda" to RepositorioObjetos.obtenerObjetosAleatoriosTienda(2))
         )
     }
 
@@ -30,6 +39,11 @@ object RepositorioJugador {
         userRef.set(hashMapOf("monedas" to monedas), SetOptions.merge())
     }
 
+    fun setObjetosTienda(objetosTienda : ArrayList<String>) {
+        val userRef = db.collection("users").document(email)
+        userRef.set(hashMapOf("objetosTienda" to objetosTienda), SetOptions.merge())
+    }
+
     fun cargarJugadores(callback: (List<PlayerLeaderBoard>) -> Unit) {
         db.collection("users")
             .get()
diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
index 492cc14dce4bc393a5925345751653747ee7fc0a..1c12161d0f92c72b2274889458133e3ab1b2d415 100644
--- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
@@ -86,8 +86,18 @@ object RepositorioObjetos {
         return objetos[nombre]
     }
 
-    fun obtenerObjetosAleatoriosTienda(cantidad: Int): List<ObjetoConsumible> {
+    fun obtenerObjetosAleatoriosTienda(cantidad: Int): ArrayList<String> {
         val consumibles = objetos.values.filterIsInstance<ObjetoConsumible>()
-        return List(cantidad) { consumibles.random() }
+        return ArrayList<String>().apply {
+            repeat(cantidad) {
+                add(consumibles.random().nombre)
+            }
+        }
+    }
+
+    fun convertirNombresAObjetos(nombres: List<String>): List<Objeto?> {
+        return nombres.map { nombre ->
+            obtenerObjetoPorNombre(nombre)
+        }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_tienda.xml b/app/src/main/res/layout/activity_tienda.xml
index b80b65352823df7ad3cb7347d2ea9dcfb345198d..e3985beeb70b1bd09561a1ee69194262edb36e1e 100644
--- a/app/src/main/res/layout/activity_tienda.xml
+++ b/app/src/main/res/layout/activity_tienda.xml
@@ -433,6 +433,21 @@
         app:layout_constraintEnd_toEndOf="parent"
         android:gravity="center"/>
 
+
+    <Button
+        android:id="@+id/botonRefrescar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="20dp"
+        android:backgroundTint="@color/pintiaButton"
+        android:fontFamily="@font/pixeled"
+        android:text="Refrescar tienda por 1 moneda"
+        android:textColor="@color/pintiaButtonText"
+        android:textStyle="bold"
+        app:layout_constraintTop_toBottomOf="@id/textoInformacion"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+
     <LinearLayout
         android:id="@+id/bottom_navigation"
         style="?android:attr/buttonBarStyle"