First of all, thank you very much for this tutorial! As a beginner, I found it very educational and fairly straightforward to follow. However, there is something that I am having trouble understanding. Using the code provided, I am able to purchase 5HTs for 1ETH. Success! This is utilizing "uint8 public decimals = 18;" in HashcodeToken.sol My understanding is that each HT is divisible up to 18 decimals. From what I've read, setting uint8 "public decimals = 0; should create a token that is indivisible. However, deploying the contract with only this change creates far too many tokens! So, it seems that in HashnodeCrowdsale.sol, the token distribution needs to be changed from: uint256 public maxTokens = 100000000000000000000; to: uint256 public maxTokens = 100; for all token amounts in the contract. Is this a correct interpretation? If so, I can't seem to work out is how the "rate" should change. if (stage == CrowdsaleStage.PreICO) { set CurrentRate(5); } else if (stage == CrowdsaleStage.ICO) { set CurrentRate(2); Setting the rate to 0.1 for example returns an error and keeping the rate "as is" creates errors when running the TestCrowdsale. I've tried looking at the documentation but I can't seem to wrap my mind around it! How can I make this HashnodeToken indivisible and what effect does it have on the rate?