diff --git a/src/Components/ItemCardAction.js b/src/Components/ItemCardAction.js
index c02455ea93709a2a1fc5b00605246c84258ab7bc..e323fd88afe54fdd28a6d67b1e27092b301578b7 100644
--- a/src/Components/ItemCardAction.js
+++ b/src/Components/ItemCardAction.js
@@ -24,6 +24,14 @@ import Snackbar from '@material-ui/core/Snackbar';
 import MuiAlert from '@material-ui/lab/Alert';
 import Button from '@material-ui/core/Button';
 import gem from '../img/gamification/gem.svg';
+import SnackbarContent from '@material-ui/core/SnackbarContent';
+import Dialog from '@material-ui/core/Dialog';
+import DialogActions from '@material-ui/core/DialogActions';
+import DialogContent from '@material-ui/core/DialogContent';
+import DialogContentText from '@material-ui/core/DialogContentText';
+import DialogTitle from '@material-ui/core/DialogTitle';
+import axios from 'axios'
+import {apiUrl} from '../../env';
 
 function Alert(props) {
   return <MuiAlert elevation={6} variant="filled" {...props} />;
@@ -47,11 +55,21 @@ const GemImg = styled.img`
 	top: 8px;
 	padding-right: 5px;
 `
+
+const GemSpan = styled.span`
+	color: red;
+`
+
 export default function ItemCardAction (props) {
 	const [success, setSuccess] = useState(false);
 	const [failure, setFailure] = useState(false);
-	const [message, setMessage] = useState("beerarea");
+	const [message, setMessage] = useState("");
 	const [info, setInfo] = useState(false);
+	const [item_id, setItemID] = useState(0);
+	const [last_operation, setLastOperation] = useState();
+	const [open_dialog, setOpenDialog] = useState(false);
+	const nonPurchaseMessage = <span>Item {last_operation == 'equip' ? 'retirado' : 'equipado'}. <a onClick={revertLastOperation}>Desfazer</a></span>;
+
 
 	const handleClose = (snackbar) => {
 		if (snackbar == 'success')
@@ -62,23 +80,46 @@ export default function ItemCardAction (props) {
 			setFailure(false);
 	}
 
+	const revertLastOperation = () => {
+		manageItemAndShowSnackbar(last_operation == 'equip' ? 'unequip' : 'equip', 
+			setInfo, 
+			nonPurchaseMessage;
+			'Erro');
+	}
+
+	const manageItemAndShowSnackbar = (operation, setSnackbar, successMessage, failureMessage) => {
+		axios.patch(apiUrl + '/users/' + operation + '_item?id=' + item_id).then(
+			response => {
+				if (response.status == 200) {
+					setSnackbar(true);
+					setMessage(successMessage);
+				} else {
+					setFailure(true);
+					setMessage(failureMessage);
+				}
+			}
+		);
+		setLastOperation(operation == 'purchase' ? last_operation : (operation == 'equip' ? 'unequip' : 'equip'));
+	}
+	
+	const handleClickBuyItem = () => {
+			setOpenDialog(false);
+			manageItemAndShowSnackbar('purchase', setSuccess, <span>Item comprado.</span>, 
+																<span>Compra falhou. Tente novamente</span>);
+	}
+
+	const handleDialogClose = () => {
+		setOpenDialog(false);
+	}
+
 	const handleClick = () => {
 		// this will become an axios get
-		if (props.operation == 'unequip') {
-			setInfo(true);
-			setMessage("Item retirado");
-		}
-		else if (props.operation == 'equip') {
-			setInfo(true);
-			setMessage("Item equipado");
-		}
+		if (props.operation == 'unequip')
+			manageItemAndShowSnackbar('unequip', setInfo, nonPurchaseMessage, 'Erro');
+		else if (props.operation == 'equip')
+			manageItemAndShowSnackbar('equip', setInfo, nonPurchaseMessage, 'Erro');
 		else if (props.operation == 'buy') {
-			setSuccess(true);
-			setMessage("Item comprado");
-		}
-		else {
-			setFailure(true);
-			setMessage("Compra falhou");
+			setOpenDialog(true);
 		}
 	}
 
@@ -104,6 +145,33 @@ export default function ItemCardAction (props) {
 				{props.operation == 'buy' ? "COMPRAR" :
 						props.operation == 'equip' ? "USAR" : "TIRAR"}
 			</span>
+			<Dialog
+        open={open_dialog}
+        onClose={handleClose}
+        aria-labelledby="alert-dialog-title"
+        aria-describedby="alert-dialog-description"
+      >
+        <DialogTitle id="alert-dialog-title">{"Deseja realmente comprar este item?"}</DialogTitle>
+        <DialogContent>
+          <DialogContentText id="alert-dialog-description">
+						<strong>Esta compra não envolve nenhum dinheiro real.</strong>
+
+						<br/><br/>O item que você deseja comprar, <strong>NOME DO ITEM</strong>, custa 
+						<GemImg src={gem}/><GemSpan>PREÇO</GemSpan> gemas. Você possui 
+						<GemImg src={gem}/><GemSpan><strong>GEMAS</strong></GemSpan> gemas.
+
+						<br/><br/>Comprar este item lhe deixará com <GemImg src={gem}/><GemSpan><strong>TANTAS</strong></GemSpan> gemas.
+          </DialogContentText>
+        </DialogContent>
+        <DialogActions>
+          <Button onClick={handleDialogClose} color="primary">
+            Cancelar
+          </Button>
+          <Button onClick={handleClickBuyItem} color="primary" autoFocus>
+            Comprar
+          </Button>
+        </DialogActions>
+      </Dialog>
 		</div>
 	)
 }
diff --git a/src/Components/StoreGuide.js b/src/Components/StoreGuide.js
index 03bcf8a2cb6b78f4377c961f224b363fdd0e5901..a4b0f509b11a3c8ab590e397c1fe07e9ba616c5c 100644
--- a/src/Components/StoreGuide.js
+++ b/src/Components/StoreGuide.js
@@ -47,21 +47,38 @@ export default function ItemStoreContainer (props) {
 										O que são "gemas"?
 									</StoreTopic>
 										<StoreBody>
-											Aqui eu explico muito bem o que são "gemas"
+											Gemas são moedas virtuais que você ganha usando a plataforma MEC RED (publicando recursos, avaliando recursos, criando conexões, etc) e pode usar para adquirir itens cosméticos para seu perfil, como insígnias e bordas de avatar.
 										</StoreBody>
 									<StoreTopic>
-										Regras
+										Posso usar dinheiro real para comprar gemas?
 									</StoreTopic>
 										<StoreBody>
-											1st RULE: You do not talk about FIGHT CLUB.
-											2nd RULE: You DO NOT talk about FIGHT CLUB.
-											3rd RULE: If someone says "stop" or goes limp, taps out the fight is over.
-											4th RULE: Only two guys to a fight.
-											5th RULE: One fight at a time.
-											6th RULE: No shirts, no shoes.
-											7th RULE: Fights will go on as long as they have to.
-											8th RULE: If this is your first night at FIGHT CLUB, you HAVE to fight.
+											<strong>Não.</strong> Gemas são adquiridas exclusivamente através do uso da plataforma.
 										</StoreBody>
+									<StoreTopic>
+										Qual a vantagem de usar itens?
+									</StoreTopic>
+										<StoreBody>
+											Os itens são uma maneira de mostrar quem você é, quais os seus interesses e quais foram suas contribuições mais importantes. Nenhum item oferece funcionalidade a mais, de maneira que novos usuários não sofram desvantagem.
+										</StoreBody>
+									<StoreTopic>
+										Como usar
+									</StoreTopic>
+										<StoreBody>
+											As seções da loja dividem os itens por <strong>categoria</strong>.
+											<ul>
+												<li>
+													Itens adquiridos <strong>somente por conquistas</strong> não aparecem 
+													na loja (exceto pelos que você já tem);
+												</li>
+												<li>
+													Outros itens podem ser comprados (usando gemas), usados (usar uma borda de avatar, por exemplo) ou tirados (se estiverem sendo usados).
+												</li>
+											</ul>
+										</StoreBody>
+										<h4>
+											Boas compras!
+										</h4>
 							</CardContent>
 						</Card>
 					</Grid>
diff --git a/src/Components/TabPanels/TabPanelStatusEConquistas.js b/src/Components/TabPanels/TabPanelStatusEConquistas.js
index 9b41ad4faeabbf006cca38986d251c5129d025d9..67eeaa52441dd54934a1d1fabd5a77293e87c8e4 100644
--- a/src/Components/TabPanels/TabPanelStatusEConquistas.js
+++ b/src/Components/TabPanels/TabPanelStatusEConquistas.js
@@ -27,7 +27,7 @@ export default function TabPanelStatusEConquistas (props) {
 		axios.all(
 				['xp_to_next_lvl', 'percent_to_next_level', 'points', 'xp', 'get_level',
 				'completed_achievements'].map((r) => {
-					return axios.get(apiUrl + '/' + r + '/' + state.currentUser.id);
+					return axios.get(apiUrl + '/' r + '?id=' + state.currentUser.id);
 			})).then(axios.spread((xp_to_next_lvl, percent_to_next_level, points,
 							xp, level, completed_achievements) => {
 								this.setXpToNextLevel(xp_to_next_lvl);
diff --git a/src/Pages/ItemStore.js b/src/Pages/ItemStore.js
index 92d3865724c1656ac49d01e7fdbe801e4ed281be..0487644e38c7988c326324524aae251757127d0a 100644
--- a/src/Pages/ItemStore.js
+++ b/src/Pages/ItemStore.js
@@ -30,10 +30,17 @@ import {apiUrl} from '../env';
 
 const SectionTitle = styled.h3`
 	font-weight: 100;
+	margin-bottom: 0;
 `
+
+const StoreDivider = styled.hr`
+	width: 50px;
+	margin-left: 0;
+`
+
 const StoreSection = styled.div`
 	font-size: 1.5em;
-	margin-top: 20px;
+	margin-top: 60px;
 	margin-bottom: 20px;
 `
 
@@ -49,17 +56,18 @@ export default function ItemStoreContainer (props) {
 							return axios.get(apiUrl + '/' + 'user_items/index?q={"item_type":'
 								+ r + ', "op": "none", "unlock_rule": "purchase"}'); 
 						})).then(axios.spread((avatar, card, cover, badge) => {
-							setAvatarFrames(avatar);
-							setCardFrames(card);
-							setCoverFrames(cover);
-							setBadges(badge);
+							console.log([avatar, card, cover, badge]);
+							//setAvatarFrames(avatar);
+							//setCardFrames(card);
+							//setCoverFrames(cover);
+							//setBadges(badge);
 						}));
 				}, [])
 			
 				var items = [
 					{
 						src: "https://upload.wikimedia.org/wikipedia/en/9/90/The_DuckDuckGo_Duck.png",
-						action: "equip",
+						action: "buy",
 						name: "Avatar um",
 						description: "Descrição | Descrição"
 					}
@@ -83,18 +91,25 @@ export default function ItemStoreContainer (props) {
 						</Grid>
 						<StoreSection>
 							<SectionTitle>Bordas de avatar</SectionTitle>
+							<StoreDivider/>
 							<ItemCarousel items={items}/>
 						</StoreSection>
+
 						<StoreSection>
 							<SectionTitle>Insígnias</SectionTitle>
+							<StoreDivider/>
 							<ItemCarousel items={items}/>
 						</StoreSection>
+
 						<StoreSection>
 							<SectionTitle>Bordas de card</SectionTitle>
+							<StoreDivider/>
 							<ItemCarousel items={items}/>
 						</StoreSection>
+
 						<StoreSection>
 							<SectionTitle>Bordas de capa de perfil</SectionTitle>
+							<StoreDivider/>
 							<ItemCarousel items={items}/>
 						</StoreSection>
 					</Container>