     {:keep_state_and_data, {:reply, from, :error}}
   end
 
-  def evolution({:call, from}, {:put_card, user, {index, property}}, game) do
+  def evolution({:call, from}, {:put_card, user, {from_index, property, to_index}}, game) do
     player = game.players |> Enum.find(fn user_game ->
       user_game.id == user.id
     end)
-    card = Enum.at(player.cards, card)
-    # check if card has that property
+    card = Enum.at(player.cards, from_index)
     with true <- user.id != game.current_turn.id,
          true <- !is_nil(player),
-         true <- !is_nil(card) do
+         true <- !is_nil(card),
+         true <- card |> String.split("_") |> Enum.member?(property) do
       # define if user can put the card at that position
       {:keep_state_and_data, {:reply, from, :ok}}
     else

  alias Evolution.Game
  alias Evolution.Repo
  alias Evolution.UserGame
  import Ecto.Query

  def start_link(%Game{fsm_state: fsm_state} = game) do

    player = game.players |> Enum.find(fn user_game ->
      user_game.id == user.id
    end)
    with true <- user.id != game.current_turn.id,
         true <- !is_nil(player),
         true <- !is_nil(Enum.at(player.cards, card)),
         {:ok, animal} <- create_animal(card, game, user, player) do
      {:keep_state_and_data, {:reply, from, :ok}}
    else
      false -> {:keep_state_and_data, {:reply, from, :error}}
