Current grid implementations are based on the common paradigm of treating clusters as separate administrative domains. Clusters are grouped to form grids which participate in Virtual Organizations (VO) and share resources to meet common computing goals. Each cluster is a separate administrative domain and can choose to be a part of many VOs. Because of the nature of a VO, a cluster typically gives a higher preference to scheduling jobs for one VO over other VOs. In this paper we present a grid scheduling architecture which takes into consideration the current resource availability and scheduling policies of clusters at various sites. This architecture considers both hardware and software resources. The primary goal of this scheduler is to reduce the completion time of jobs by reducing the queuing time of jobs, also providing an increase in CPU utilization. We show the effect of our scheduling technique using a prototype implementation and compare the results against a typical grid scheduler based on random allocation of resources.