public boolean executeCommand(Command c) {
		boolean result = false;
		// Check for hazards

		if (c == null) {
			return result;
		}
		String rRS = c.getRS();
		String rRT = c.getRT();

		for (Command cTemp : ROB) {
			if (cTemp == null) {
				continue;
			}

			String RSc = cTemp.getRS();
			String RTc = cTemp.getRT();

			if (cTemp == c) {
				break;
			} else if (RTc.equalsIgnoreCase(rRS) || RSc.equalsIgnoreCase(rRT)) {
//				System.out.println("Did not execute command: "
//						+ c.toAddrAssembly());
				return true;
			}
		}

		// Jump or Branch Instructions
		if (c.getOPT().equals(Constants.BEQ)) {
			Register RT = Registers.get(MIPSutil
					.getRegisterIndex(constants.regMap.get(c.getRT())));
			Register RS = Registers.get(MIPSutil
					.getRegisterIndex(constants.regMap.get(c.getRS())));

			if (RT.value.equalsIgnoreCase(RS.value)) {
				// Branch Taken
				BTB btb = new BTB();
				btb.branchAddr = Integer.valueOf(PC.value) + MIPSutil.getOffset(c)-4;
				btb.instructionAddr = Integer.valueOf(c.getAddress());
				btb.twoBitPredictor = "11";
				
				PC.value = btb.branchAddr+"";
				
				flushPipeline();

				addBTBEntry(btb);
			} else {
				// Branch Not taken
				BTB btb = new BTB();
				btb.branchAddr = Integer.valueOf(PC.value) + 4;
				btb.instructionAddr = Integer.valueOf(c.getAddress());
				btb.twoBitPredictor = "00";

				addBTBEntry(btb);
			}
		}else if (c.getOPT().equals(Constants.J)) {

			//Update PC 
			int newPC = MIPSutil.getInstr_index(c)-4;
			PC.value = newPC +"";
			//Flush out fetch and decode stages on a jump
			flushPipeline();
			
		}

		//System.out.println("Command Executed! " + c.toAddrAssembly());

		return result;
	}