public Instance createInstance(InstanceContext context) {
		RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
		
		runInstancesRequest.withImageId(context.getImageId())
				.withMinCount(1).withMaxCount(1);

		if (context.getInstanceType() != null) {
			runInstancesRequest.withInstanceType(context.getInstanceType());
		}
		
		if (context.getSecurityGroup() != null) {
			runInstancesRequest.withSecurityGroupIds(context.getSecurityGroup());
		}
		
		if (context.getKeyName() != null) {
			runInstancesRequest.withKeyName(context.getKeyName());
		}
		
//		RunInstancesResult result = null;
		
		try {
//			result = ec2.runInstances(runInstancesRequest);
			ec2.runInstances(runInstancesRequest);
		} catch (Exception e) {
			// Not enough resources
			return null;
		}
		
//		Reservation reservation = result.getReservation();
//		if (reservation.getInstances().isEmpty()) {
//			return null;
//		}
//		Instance instance = reservation.getInstances().iterator().next();
//		return instance;
		
		//FIXME EUCA crazy hack
		DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
		DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesRequest);
		
		List<Instance> instances = new LinkedList<Instance>();
		
		List<Reservation> reservations = describeInstancesResult.getReservations();
		for (Reservation reservation : reservations) {
			for (Instance instance : reservation.getInstances()) {
				instances.add(instance);
			}
		}
		
		Collections.sort(instances, new Comparator<Instance>() {
			@Override
			public int compare(Instance o1, Instance o2) {
				return o2.getLaunchTime().compareTo(o1.getLaunchTime());
			}
		});
		
		for (Instance instance : instances) {
			return instance;
		}
		
		return null;
	}