support only async, distributed quota and preciseAtSecondsLevel always true
diff --git a/api_test.go b/api_test.go
index 2fe6bc0..07b14f2 100644
--- a/api_test.go
+++ b/api_test.go
@@ -1,10 +1,10 @@
 package apidQuota_test
 
 import (
-	. "github.com/onsi/ginkgo"
 	"bytes"
 	"encoding/json"
 	"github.com/google/uuid"
+	. "github.com/onsi/ginkgo"
 	"io/ioutil"
 	"net/http"
 	"time"
diff --git a/constants/constants.go b/constants/constants.go
index 2b640ac..6c2f131 100644
--- a/constants/constants.go
+++ b/constants/constants.go
@@ -4,7 +4,7 @@
 
 const (
 	//config variables.
-	ApigeeSyncBearerToken = "apigeesync_bearer_token"
+	ApigeeSyncBearerToken        = "apigeesync_bearer_token"
 	ConfigCounterServiceBasePath = "apidquota_counterService_base_path"
 
 	//add to acceptedTimeUnitList in init() if case any other new timeUnit is added
@@ -19,7 +19,7 @@
 	InvalidQuotaTimeUnitType = "invalidQuotaTimeUnitType"
 	InvalidQuotaType         = "invalidQuotaType"
 	InvalidQuotaPeriod       = "invalidQuotaPeriod"
-	AsyncQuotaBucketEmpty = "AsyncDetails_for_quotaBucket_are_empty"
+	AsyncQuotaBucketEmpty    = "AsyncDetails_for_quotaBucket_are_empty"
 
 	QuotaTypeCalendar      = "calendar"      // after start time
 	QuotaTypeRollingWindow = "rollingwindow" // in the past "window" time
@@ -36,7 +36,7 @@
 	ErrorCheckingQuotaLimit     = "error_checking_quota_limit"
 	QuotaBasePathDefault        = "/quota"
 
-	URLCounterServiceNotSet      = "url_counter_service_not_set"
-	URLCounterServiceInvalid     = "url_counter_service_invalid"
-	MarshalJSONError             = "marshal_JSON_error"
+	URLCounterServiceNotSet  = "url_counter_service_not_set"
+	URLCounterServiceInvalid = "url_counter_service_invalid"
+	MarshalJSONError         = "marshal_JSON_error"
 )
diff --git a/quotaBucket/apiUtil.go b/quotaBucket/apiUtil.go
index 26b958d..7b33ddc 100644
--- a/quotaBucket/apiUtil.go
+++ b/quotaBucket/apiUtil.go
@@ -8,9 +8,26 @@
 )
 
 const (
+	//request response common params
 	reqEdgeOrgID = "edgeOrgID"
 	reqID        = "id"
 	reqMaxCount  = "maxCount"
+
+	//request specific params
+	reqInterval = "interval"
+	reqTimeUnit = "timeUnit"
+	reqQType = "type"
+	reqStartTimestamp = "startTimestamp"
+	reqSyncTimeInSec = "syncTimeInSec"
+	reqSyncMessageCount = "syncMessageCount"
+	reqWeight = "weight"
+
+	//response specific params
+	respExceeded = "exceeded"
+	respRemainingCount = "remainingCount"
+	respExpiresTimestamp = "expiresTimestamp"
+	respStartTimestamp = "startTimestamp"
+
 )
 
 type QuotaBucketResults struct {
@@ -28,78 +45,68 @@
 	var edgeOrgID, id, timeUnit, quotaType string
 	var interval int
 	var startTime, maxCount, weight int64
-	var preciseAtSecondsLevel, distributed bool
 	newQBucket := &QuotaBucket{}
 	var err error
 
 	value, ok := quotaBucketMap[reqEdgeOrgID]
 	if !ok {
-		return errors.New(`missing field: 'edgeOrgID' is required`)
+		return errors.New("missing field: "+ reqEdgeOrgID + " is required")
 	}
 	if edgeOrgIDType := reflect.TypeOf(value); edgeOrgIDType.Kind() != reflect.String {
-		return errors.New(`invalid type : 'edgeOrgID' should be a string`)
+		return errors.New("invalid type : "+ reqEdgeOrgID + " should be a string")
 	}
 	edgeOrgID = value.(string)
 
 	value, ok = quotaBucketMap[reqID]
 	if !ok {
-		return errors.New(`missing field: 'id' is required`)
+		return errors.New("missing field: "+ reqID + " is required")
 	}
 	if idType := reflect.TypeOf(value); idType.Kind() != reflect.String {
-		return errors.New(`invalid type : 'id' should be a string`)
+		return errors.New("invalid type : "+ reqID + " should be a string")
 	}
 	id = value.(string)
 
 	//build cacheKey - to retrieve from or add to quotaCache
 	cacheKey = edgeOrgID + constants.CacheKeyDelimiter + id
 
-	value, ok = quotaBucketMap["interval"]
+	value, ok = quotaBucketMap[reqInterval]
 	if !ok {
-		return errors.New(`missing field: 'interval' is required`)
+		return errors.New("missing field: "+ reqInterval + " is required")
 	}
-	//from input when its read its float, need to then convert to int.
+	//from input its read as float, hence need to then convert to int.
 	if intervalType := reflect.TypeOf(value); intervalType.Kind() != reflect.Float64 {
-		return errors.New(`invalid type : 'interval' should be a number`)
+		return errors.New("invalid type : "+ reqInterval + " should be a number")
 	}
 	intervalFloat := value.(float64)
 	interval = int(intervalFloat)
 
 	//TimeUnit {SECOND, MINUTE, HOUR, DAY, WEEK, MONTH}
-	value, ok = quotaBucketMap["timeUnit"]
+	value, ok = quotaBucketMap[reqTimeUnit]
 	if !ok {
-		return errors.New(`missing field: 'timeUnit' is required`)
+		return errors.New("missing field: "+ reqTimeUnit + " is required")
 	}
 	if timeUnitType := reflect.TypeOf(value); timeUnitType.Kind() != reflect.String {
-		return errors.New(`invalid type : 'timeUnit' should be a string`)
+		return errors.New("invalid type : "+ reqTimeUnit + " should be a string")
 	}
 	timeUnit = value.(string)
 
 	//QuotaType {CALENDAR, FLEXI, ROLLING_WINDOW}
-	value, ok = quotaBucketMap["type"]
+	value, ok = quotaBucketMap[reqQType]
 	if !ok {
-		return errors.New(`missing field: 'type' is required`)
+		return errors.New("missing field: "+ reqQType + " is required")
 	}
 	if quotaTypeType := reflect.TypeOf(value); quotaTypeType.Kind() != reflect.String {
-		return errors.New(`invalid type : 'type' should be a string`)
+		return errors.New("invalid type : "+ reqQType + " should be a string")
 	}
 	quotaType = value.(string)
 
-	value, ok = quotaBucketMap["preciseAtSecondsLevel"]
-	if !ok {
-		return errors.New(`missing field: 'preciseAtSecondsLevel' is required`)
-	}
-	if preciseAtSecondsLevelType := reflect.TypeOf(value); preciseAtSecondsLevelType.Kind() != reflect.Bool {
-		return errors.New(`invalid type : 'preciseAtSecondsLevel' should be boolean`)
-	}
-	preciseAtSecondsLevel = value.(bool)
-
-	value, ok = quotaBucketMap["startTimestamp"]
+	value, ok = quotaBucketMap[reqStartTimestamp]
 	if !ok { //todo: in the current cps code startTime is optional for QuotaBucket. should we make startTime optional to NewQuotaBucket?
 		startTime = time.Now().UTC().Unix()
 	} else {
 		//	//from input when its read its float, need to then convert to int.
 		if startTimeType := reflect.TypeOf(value); startTimeType.Kind() != reflect.Float64 {
-			return errors.New(`invalid type : 'startTime' should be UNIX timestamp`)
+			return errors.New("invalid type : "+ reqStartTimestamp + " should be UNIX timestamp")
 		}
 		startTimeFloat := value.(float64)
 		startTime = int64(startTimeFloat)
@@ -107,127 +114,79 @@
 
 	value, ok = quotaBucketMap[reqMaxCount]
 	if !ok {
-		return errors.New(`missing field: 'maxCount' is required`)
+		return errors.New("missing field: "+ reqMaxCount + " is required")
 	}
 	//from input when its read its float, need to then convert to int.
 	if maxCountType := reflect.TypeOf(value); maxCountType.Kind() != reflect.Float64 {
-		return errors.New(`invalid type : 'maxCount' should be a number`)
+		return errors.New("invalid type : "+ reqMaxCount + " should be a number")
 	}
 	maxCountFloat := value.(float64)
 	maxCount = int64(maxCountFloat)
 
-	value, ok = quotaBucketMap["weight"]
+	value, ok = quotaBucketMap[reqWeight]
 	if !ok {
-		return errors.New(`missing field: 'weight' is required`)
+		return errors.New("missing field: "+ reqWeight + " is required")
 	}
 	//from input when its read its float, need to then convert to int.
 	if weightType := reflect.TypeOf(value); weightType.Kind() != reflect.Float64 {
-		return errors.New(`invalid type : 'maxCount' should be a number`)
+		return errors.New("invalid type : "+ reqWeight + " should be a number")
 	}
 	weightFloat := value.(float64)
 	weight = int64(weightFloat)
 
-	value, ok = quotaBucketMap["distributed"]
-	if !ok {
-		return errors.New(`missing field: 'distributed' is required`)
+	syncTimeValue, syncTimeOK := quotaBucketMap[reqSyncTimeInSec]
+	syncMsgCountValue, syncMsgCountOK := quotaBucketMap[reqSyncMessageCount]
+
+	if syncTimeOK && syncMsgCountOK {
+		return errors.New("either "+ reqSyncTimeInSec + " or "+ reqSyncMessageCount + " should be present but not both.")
 	}
-	if preciseAtSecondsLevelType := reflect.TypeOf(value); preciseAtSecondsLevelType.Kind() != reflect.Bool {
-		return errors.New(`invalid type : 'distributed' should be boolean`)
+
+	if !syncTimeOK && !syncMsgCountOK {
+		return errors.New("either "+ reqSyncTimeInSec + " or "+ reqSyncMessageCount + " should be present. both cant be empty.")
 	}
-	distributed = value.(bool)
 
-	//if distributed check for sync or async Quota
-	if distributed {
-		value, ok = quotaBucketMap["synchronous"]
-		if !ok {
-			return errors.New(`missing field: 'synchronous' is required`)
+	if syncTimeOK {
+		if syncTimeType := reflect.TypeOf(syncTimeValue); syncTimeType.Kind() != reflect.Float64 {
+			return errors.New("invalid type : "+ reqSyncTimeInSec + " should be a number")
 		}
-		if synchronousType := reflect.TypeOf(value); synchronousType.Kind() != reflect.Bool {
-			return errors.New(`invalid type : 'synchronous' should be boolean`)
-		}
-		synchronous := value.(bool)
-
-		// for async retrieve syncTimeSec or syncMessageCount
-		if !synchronous {
-			syncTimeValue, syncTimeOK := quotaBucketMap["syncTimeInSec"]
-			syncMsgCountValue, syncMsgCountOK := quotaBucketMap["syncMessageCount"]
-
-			if syncTimeOK && syncMsgCountOK {
-				return errors.New(`either syncTimeInSec or syncMessageCount should be present but not both.`)
-			}
-
-			if !syncTimeOK && !syncMsgCountOK {
-				return errors.New(`either syncTimeInSec or syncMessageCount should be present. both cant be empty.`)
-			}
-
-			if syncTimeOK {
-				if syncTimeType := reflect.TypeOf(syncTimeValue); syncTimeType.Kind() != reflect.Float64 {
-					return errors.New(`invalid type : 'syncTimeInSec' should be a number`)
-				}
-				syncTimeFloat := syncTimeValue.(float64)
-				syncTimeInt := int64(syncTimeFloat)
-
-				//try to retrieve from cache
-				newQBucket, ok = getFromCache(cacheKey, weight)
-
-				if !ok {
-					newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType, preciseAtSecondsLevel,
-						startTime, maxCount, weight, distributed, synchronous, syncTimeInt, -1)
-					if err != nil {
-						return errors.New("error creating quotaBucket: " + err.Error())
-					}
-
-					qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
-
-					if err := qBucketRequest.Validate(); err != nil {
-						return errors.New("error validating quotaBucket: " + err.Error())
-					}
-
-					addToCache(qBucketRequest)
-					return nil
-				}
-				qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
-
-				return nil
-
-			} else if syncMsgCountOK {
-				if syncMsgCountType := reflect.TypeOf(syncMsgCountValue); syncMsgCountType.Kind() != reflect.Float64 {
-					return errors.New(`invalid type : 'syncTimeInSec' should be a number`)
-				}
-				syncMsgCountFloat := syncMsgCountValue.(float64)
-				syncMsgCountInt := int64(syncMsgCountFloat)
-				//try to retrieve from cache
-				newQBucket, ok = getFromCache(cacheKey, weight)
-
-				if !ok {
-					newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType, preciseAtSecondsLevel,
-						startTime, maxCount, weight, distributed, synchronous, -1, syncMsgCountInt)
-					if err != nil {
-						return errors.New("error creating quotaBucket: " + err.Error())
-					}
-					qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
-
-					if err := qBucketRequest.Validate(); err != nil {
-						return errors.New("error validating quotaBucket: " + err.Error())
-					}
-
-					addToCache(qBucketRequest)
-					return nil
-
-				}
-				qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
-
-				return nil
-			}
-		}
+		syncTimeFloat := syncTimeValue.(float64)
+		syncTimeInt := int64(syncTimeFloat)
 
 		//try to retrieve from cache
 		newQBucket, ok = getFromCache(cacheKey, weight)
 
 		if !ok {
-			//for synchronous quotaBucket
-			newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType, preciseAtSecondsLevel,
-				startTime, maxCount, weight, distributed, synchronous, -1, -1)
+			newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType,
+				startTime, maxCount, weight, syncTimeInt, -1)
+			if err != nil {
+				return errors.New("error creating quotaBucket: " + err.Error())
+			}
+
+			qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
+
+			if err := qBucketRequest.Validate(); err != nil {
+				return errors.New("error validating quotaBucket: " + err.Error())
+			}
+
+			addToCache(qBucketRequest)
+			return nil
+		}
+		qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
+
+		return nil
+
+	} else if syncMsgCountOK {
+		if syncMsgCountType := reflect.TypeOf(syncMsgCountValue); syncMsgCountType.Kind() != reflect.Float64 {
+			return errors.New("invalid type : "+ reqSyncMessageCount + " should be a number")
+		}
+		syncMsgCountFloat := syncMsgCountValue.(float64)
+		syncMsgCountInt := int64(syncMsgCountFloat)
+		//try to retrieve from cache
+		newQBucket, ok = getFromCache(cacheKey, weight)
+
+		if !ok {
+			newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType,
+				startTime, maxCount, weight, -1, syncMsgCountInt)
 			if err != nil {
 				return errors.New("error creating quotaBucket: " + err.Error())
 			}
@@ -236,37 +195,36 @@
 			if err := qBucketRequest.Validate(); err != nil {
 				return errors.New("error validating quotaBucket: " + err.Error())
 			}
+
 			addToCache(qBucketRequest)
 			return nil
-		}
 
+		}
 		qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
+
 		return nil
 	}
 
-	//for non distributed quotaBucket
-	//retrieveFromCache.
+	//try to retrieve from cache
 	newQBucket, ok = getFromCache(cacheKey, weight)
 
 	if !ok {
-		//for non distributed quotaBucket
-		newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType, preciseAtSecondsLevel,
-			startTime, maxCount, weight, distributed, false, -1, -1)
+		//for synchronous quotaBucket
+		newQBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit, quotaType,
+			startTime, maxCount, weight, -1, -1)
 		if err != nil {
 			return errors.New("error creating quotaBucket: " + err.Error())
-
 		}
-
 		qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
 
 		if err := qBucketRequest.Validate(); err != nil {
 			return errors.New("error validating quotaBucket: " + err.Error())
 		}
-
 		addToCache(qBucketRequest)
+		return nil
 	}
-	qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
 
+	qBucketRequest.quotaBucketData = newQBucket.quotaBucketData
 	return nil
 
 }
@@ -276,10 +234,10 @@
 	resultsMap[reqEdgeOrgID] = qBucketResults.EdgeOrgID
 	resultsMap[reqID] = qBucketResults.ID
 	resultsMap[reqMaxCount] = qBucketResults.MaxCount
-	resultsMap["exceeded"] = qBucketResults.exceeded
-	resultsMap["remainingCount"] = qBucketResults.remainingCount
-	resultsMap["startTimestamp"] = qBucketResults.startTimestamp
-	resultsMap["expiresTimestamp"] = qBucketResults.expiresTimestamp
+	resultsMap[respExceeded] = qBucketResults.exceeded
+	resultsMap[respRemainingCount] = qBucketResults.remainingCount
+	resultsMap[respStartTimestamp] = qBucketResults.startTimestamp
+	resultsMap[respExpiresTimestamp] = qBucketResults.expiresTimestamp
 
 	return resultsMap
 }
diff --git a/quotaBucket/quotaBucket.go b/quotaBucket/quotaBucket.go
index 081211e..334f3c0 100644
--- a/quotaBucket/quotaBucket.go
+++ b/quotaBucket/quotaBucket.go
@@ -155,19 +155,133 @@
 	return aSyncbucket.asyncGLobalCount + aSyncbucket.asyncLocalMessageCount, nil
 }
 
+func (quotaBucketType *aSyncQuotaBucket) incrementQuotaCount(q *QuotaBucket) (*QuotaBucketResults, error) {
+	period, err := q.GetPeriod()
+	if err != nil {
+		return nil, errors.New("error getting period: " + err.Error())
+	}
+	aSyncBucket := q.GetAsyncQuotaBucket()
+	if aSyncBucket == nil {
+		return nil, errors.New(constants.AsyncQuotaBucketEmpty + " : aSyncQuotaBucket to increment cannot be empty.")
+	}
+	currentCount, err := aSyncBucket.getCount(q, period)
+	if err != nil {
+		return nil, err
+	}
+
+	maxCount := q.GetMaxCount()
+	exceeded := false
+	remainingCount := int64(0)
+	weight := q.GetWeight()
+
+	if period.IsCurrentPeriod(q) {
+
+		if currentCount < maxCount {
+			diffCount := (currentCount + weight) - maxCount
+			if diffCount > 0 {
+				exceeded = true
+				remainingCount = maxCount - currentCount
+
+			} else {
+				aSyncBucket.addToCounter(weight)
+				aSyncBucket.addToAsyncLocalMessageCount(weight)
+				remainingCount = maxCount - (currentCount + weight)
+
+			}
+
+			asyncMessageCount, err := aSyncBucket.getAsyncSyncMessageCount()
+			if err != nil {
+				return nil, err
+			}
+
+			asyncLocalMsgCount, err := aSyncBucket.getAsyncLocalMessageCount()
+			if err != nil {
+				return nil, err
+			}
+
+			if asyncMessageCount > 0 &&
+				asyncLocalMsgCount >= asyncMessageCount {
+				err = internalRefresh(q, period)
+				if err != nil {
+					return nil, err
+				}
+			}
+		} else {
+			exceeded = true
+			remainingCount = maxCount - currentCount
+		}
+	}
+	if remainingCount < 0 {
+		remainingCount = int64(0)
+	}
+
+	results := &QuotaBucketResults{
+		EdgeOrgID:        q.GetEdgeOrgID(),
+		ID:               q.GetID(),
+		exceeded:         exceeded,
+		remainingCount:   remainingCount,
+		MaxCount:         maxCount,
+		startTimestamp:   period.GetPeriodStartTime().Unix(),
+		expiresTimestamp: period.GetPeriodEndTime().Unix(),
+	}
+
+	return results, nil
+}
+
+func internalRefresh(q *QuotaBucket, period *quotaPeriod) error {
+	var err error
+	aSyncBucket := q.GetAsyncQuotaBucket()
+	if aSyncBucket == nil {
+		return errors.New(constants.AsyncQuotaBucketEmpty)
+	}
+
+	weight := int64(0)
+	countFromCounterService := int64(0)
+	globalCount, err := aSyncBucket.getAsyncGlobalCount()
+	if err != nil {
+		return err
+	}
+
+	maxCount := q.GetMaxCount()
+	for _, counterEle := range *aSyncBucket.asyncCounter {
+		weight += counterEle
+
+		//delete from asyncCounter
+		temp := *aSyncBucket.asyncCounter
+		temp = temp[1:]
+		aSyncBucket.asyncCounter = &temp
+
+		if (weight + globalCount) >= maxCount {
+			//clear asyncCounter
+			for range *aSyncBucket.asyncCounter {
+				//delete all elements from asyncCounter
+				temp := *aSyncBucket.asyncCounter
+				temp = temp[1:]
+				aSyncBucket.asyncCounter = &temp
+			}
+		}
+	}
+
+	countFromCounterService, err = services.IncrementAndGetCount(q.GetEdgeOrgID(), q.GetID(), weight, period.GetPeriodStartTime().Unix(), period.GetPeriodEndTime().Unix())
+	if err != nil {
+		return err
+	}
+	aSyncBucket.asyncGLobalCount = countFromCounterService
+
+	aSyncBucket.asyncLocalMessageCount -= weight
+	return nil
+}
+
 type quotaBucketData struct {
-	EdgeOrgID             string
-	ID                    string
-	Interval              int
-	TimeUnit              string //TimeUnit {SECOND, MINUTE, HOUR, DAY, WEEK, MONTH}
-	QuotaType             string //QuotaType {CALENDAR, FLEXI, ROLLING_WINDOW}
-	PreciseAtSecondsLevel bool
-	StartTime             time.Time
-	MaxCount              int64
-	Weight                int64
-	Distributed           bool
-	Synchronous           bool
-	AsyncQuotaDetails     *aSyncQuotaBucket
+	EdgeOrgID         string
+	ID                string
+	Interval          int
+	TimeUnit          string //TimeUnit {SECOND, MINUTE, HOUR, DAY, WEEK, MONTH}
+	QuotaType         string //QuotaType {CALENDAR, FLEXI, ROLLING_WINDOW}
+	StartTime         time.Time
+	MaxCount          int64
+	Weight            int64
+	AsyncQuotaDetails *aSyncQuotaBucket
 }
 
 type QuotaBucket struct {
@@ -175,98 +289,86 @@
 }
 
 func NewQuotaBucket(edgeOrgID string, id string, interval int,
-	timeUnit string, quotaType string, preciseAtSecondsLevel bool,
-	startTime int64, maxCount int64, weight int64, distributed bool,
-	synchronous bool, syncTimeInSec int64, syncMessageCount int64) (*QuotaBucket, error) {
+	timeUnit string, quotaType string,
+	startTime int64, maxCount int64, weight int64, syncTimeInSec int64, syncMessageCount int64) (*QuotaBucket, error) {
 
 	fromUNIXTime := time.Unix(startTime, 0)
 	quotaBucketDataStruct := quotaBucketData{
-		EdgeOrgID:             edgeOrgID,
-		ID:                    id,
-		Interval:              interval,
-		TimeUnit:              timeUnit,
-		QuotaType:             quotaType,
-		PreciseAtSecondsLevel: preciseAtSecondsLevel,
-		StartTime:             fromUNIXTime,
-		MaxCount:              maxCount,
-		Weight:                weight,
-		Distributed:           distributed,
-		Synchronous:           synchronous,
-		AsyncQuotaDetails:     nil,
+		EdgeOrgID:         edgeOrgID,
+		ID:                id,
+		Interval:          interval,
+		TimeUnit:          timeUnit,
+		QuotaType:         quotaType,
+		StartTime:         fromUNIXTime,
+		MaxCount:          maxCount,
+		Weight:            weight,
+		AsyncQuotaDetails: nil,
 	}
 
 	quotaBucket := &QuotaBucket{
 		quotaBucketData: quotaBucketDataStruct,
 	}
 
-	if !quotaBucket.IsDistrubuted() {
-		if quotaBucket.IsSynchronous(){
-			return nil, errors.New("quota bucket cannot be both nonDistributed and synchronous.")
-		}
+	var quotaTicker int64
+	//ensure just one of syncTimeInSec and syncMessageCount is set.
+	if syncTimeInSec > -1 && syncMessageCount > -1 {
+		return nil, errors.New("both syncTimeInSec and syncMessageCount canot be set. only one of them should be set.")
 	}
-	//for async set AsyncQuotaDetails and start the NewTicker
-	if distributed && !synchronous {
-		var quotaTicker int64
-		//ensure just one of syncTimeInSec and syncMessageCount is set.
-		if syncTimeInSec > -1 && syncMessageCount > -1 {
-			return nil,errors.New("both syncTimeInSec and syncMessageCount canot be set. only one of them should be set.")
-		}
-		//set default syncTime for AsyncQuotaBucket.
-		//for aSyncQuotaBucket with 'syncMessageCount' the ticker is invoked with DefaultQuotaSyncTime
-		quotaTicker = constants.DefaultQuotaSyncTime
+	//set default syncTime for AsyncQuotaBucket.
+	//for aSyncQuotaBucket with 'syncMessageCount' the ticker is invoked with DefaultQuotaSyncTime
+	quotaTicker = constants.DefaultQuotaSyncTime
 
-		if syncTimeInSec > 0 { //if sync with counter service periodically
-			quotaTicker = syncTimeInSec
-		}
+	if syncTimeInSec > 0 { //if sync with counter service periodically
+		quotaTicker = syncTimeInSec
+	}
 
-		counter := make([]int64, 0)
-		newAsyncQuotaDetails := &aSyncQuotaBucket{
-			syncTimeInSec:          syncTimeInSec,
-			syncMessageCount:       syncMessageCount,
-			asyncCounter:           &counter,
-			asyncGLobalCount:       constants.DefaultCount,
-			asyncLocalMessageCount: constants.DefaultCount,
-			initialized:            false,
-			qTicker:                time.NewTicker(time.Duration(time.Second.Nanoseconds() * quotaTicker)),
-		}
+	counter := make([]int64, 0)
+	newAsyncQuotaDetails := &aSyncQuotaBucket{
+		syncTimeInSec:          syncTimeInSec,
+		syncMessageCount:       syncMessageCount,
+		asyncCounter:           &counter,
+		asyncGLobalCount:       constants.DefaultCount,
+		asyncLocalMessageCount: constants.DefaultCount,
+		initialized:            false,
+		qTicker:                time.NewTicker(time.Duration(time.Second.Nanoseconds() * quotaTicker)),
+	}
 
-		quotaBucket.setAsyncQuotaBucket(newAsyncQuotaDetails)
-		go func() {
-			aSyncBucket := quotaBucket.GetAsyncQuotaBucket()
-			if aSyncBucket != nil {
-				exitCount := int64(0)
-				qticker, _ := aSyncBucket.getAsyncQTicker()
-				for t := range qticker.C {
-					globalVariables.Log.Debug("t: ", t.String())
-					if len(*aSyncBucket.asyncCounter) == 0 {
-						exitCount += 1
-					}
-					period, err := quotaBucket.GetPeriod()
-					if err != nil {
-						globalVariables.Log.Error("error getting period for: ", err.Error(), "for quotaBucket: ", quotaBucket)
-						qticker.Stop()
-						continue
-					}
-					//sync with counterService.
-					err = internalRefresh(quotaBucket, period)
-					if err != nil {
-						globalVariables.Log.Error("error during internalRefresh: ", err.Error(), "for quotaBucket: ", quotaBucket)
-						qticker.Stop()
-						continue
-					}
-
-					if exitCount > 3 {
-						removeFromCache( quotaBucket.GetEdgeOrgID()+
-								constants.CacheKeyDelimiter + quotaBucket.GetID(),
-						quotaCache[quotaBucket.GetEdgeOrgID()+constants.CacheKeyDelimiter + quotaBucket.GetID()])
-						qticker.Stop()
-					}
+	quotaBucket.setAsyncQuotaBucket(newAsyncQuotaDetails)
+	go func() {
+		aSyncBucket := quotaBucket.GetAsyncQuotaBucket()
+		if aSyncBucket != nil {
+			exitCount := int64(0)
+			qticker, _ := aSyncBucket.getAsyncQTicker()
+			for t := range qticker.C {
+				globalVariables.Log.Debug("t: ", t.String())
+				if len(*aSyncBucket.asyncCounter) == 0 {
+					exitCount += 1
 				}
-			} else {
-				globalVariables.Log.Error("aSyncBucketDetails are empty for the given quotaBucket: ", quotaBucket)
+				period, err := quotaBucket.GetPeriod()
+				if err != nil {
+					globalVariables.Log.Error("error getting period for: ", err.Error(), "for quotaBucket: ", quotaBucket)
+					qticker.Stop()
+					continue
+				}
+				//sync with counterService.
+				err = internalRefresh(quotaBucket, period)
+				if err != nil {
+					globalVariables.Log.Error("error during internalRefresh: ", err.Error(), "for quotaBucket: ", quotaBucket)
+					qticker.Stop()
+					continue
+				}
+
+				if exitCount > 3 {
+					removeFromCache(quotaBucket.GetEdgeOrgID()+
+						constants.CacheKeyDelimiter+quotaBucket.GetID(),
+						quotaCache[quotaBucket.GetEdgeOrgID()+constants.CacheKeyDelimiter+quotaBucket.GetID()])
+					qticker.Stop()
+				}
 			}
-		}()
-	}
+		} else {
+			globalVariables.Log.Error("aSyncBucketDetails are empty for the given quotaBucket: ", quotaBucket)
+		}
+	}()
 
 	return quotaBucket, nil
 
@@ -321,10 +423,6 @@
 	return q.quotaBucketData.QuotaType
 }
 
-func (q *QuotaBucket) GetIsPreciseAtSecondsLevel() bool {
-	return q.quotaBucketData.PreciseAtSecondsLevel
-}
-
 func (q *QuotaBucket) GetMaxCount() int64 {
 	return q.quotaBucketData.MaxCount
 }
@@ -333,14 +431,6 @@
 	return q.quotaBucketData.Weight
 }
 
-func (q *QuotaBucket) IsDistrubuted() bool {
-	return q.quotaBucketData.Distributed
-}
-
-func (q *QuotaBucket) IsSynchronous() bool {
-	return q.quotaBucketData.Synchronous
-}
-
 //setCurrentPeriod only for rolling window else just return the value of QuotaPeriod.
 func (q *QuotaBucket) GetPeriod() (*quotaPeriod, error) {
 
@@ -378,12 +468,7 @@
 
 func (q *QuotaBucket) IncrementQuotaLimit() (*QuotaBucketResults, error) {
 
-	qBucketHandler, err := GetQuotaBucketHandler(q)
-	if err != nil {
-		return nil, errors.New("error getting quotaBucketHandler: " + err.Error())
-	}
-
-	return qBucketHandler.incrementQuotaCount(q)
+	return q.GetAsyncQuotaBucket().incrementQuotaCount(q)
 
 }
 
diff --git a/quotaBucket/quotaBucketType.go b/quotaBucket/quotaBucketType.go
deleted file mode 100644
index cb3c1b7..0000000
--- a/quotaBucket/quotaBucketType.go
+++ /dev/null
@@ -1,232 +0,0 @@
-package quotaBucket
-
-import (
-	"errors"
-	"github.com/30x/apidQuota/services"
-	"github.com/30x/apidQuota/constants"
-)
-
-type QuotaBucketType interface {
-	resetCount(bucket *QuotaBucket) error
-	incrementQuotaCount(qBucket *QuotaBucket) (*QuotaBucketResults, error)
-}
-
-type SynchronousQuotaBucketType struct{}
-
-func (sQuotaBucket SynchronousQuotaBucketType) resetCount(qBucket *QuotaBucket) error {
-	//do nothing.
-	return nil
-}
-
-func (sQuotaBucket SynchronousQuotaBucketType) incrementQuotaCount(q *QuotaBucket) (*QuotaBucketResults, error) {
-	period, err := q.GetPeriod()
-	if err != nil {
-		return nil, errors.New("error getting period: " + err.Error())
-	}
-	maxCount := q.GetMaxCount()
-	exceeded := false
-	remainingCount := int64(0)
-
-	weight := q.GetWeight()
-
-	//first retrieve the count from counter service.
-	currentCount, err := services.GetCount(q.GetEdgeOrgID(), q.GetID(), period.GetPeriodStartTime().Unix(), period.GetPeriodEndTime().Unix())
-	if err != nil {
-		return nil, err
-	}
-
-	if period.IsCurrentPeriod(q) {
-		if currentCount < maxCount {
-			allowed := maxCount - currentCount
-			if allowed >= weight {
-				if weight != 0 {
-					currentCount, err = services.IncrementAndGetCount(q.GetEdgeOrgID(), q.GetID(), weight, period.GetPeriodStartTime().Unix(), period.GetPeriodEndTime().Unix())
-					if err != nil {
-						return nil, err
-					}
-				}
-				remainingCount = maxCount - (currentCount)
-
-			} else {
-				if weight != 0 {
-					exceeded = true
-				}
-				remainingCount = maxCount - currentCount
-			}
-		} else {
-			exceeded = true
-			remainingCount = maxCount - currentCount
-		}
-	}
-
-	if remainingCount < 0 {
-		remainingCount = int64(0)
-	}
-
-	results := &QuotaBucketResults{
-		EdgeOrgID:        q.GetEdgeOrgID(),
-		ID:               q.GetID(),
-		exceeded:         exceeded,
-		remainingCount:   remainingCount,
-		MaxCount:         maxCount,
-		startTimestamp:   period.GetPeriodStartTime().Unix(),
-		expiresTimestamp: period.GetPeriodEndTime().Unix(),
-	}
-
-	return results, nil
-}
-
-type AsynchronousQuotaBucketType struct {
-}
-
-func (quotaBucketType AsynchronousQuotaBucketType) resetCount(q *QuotaBucket) error {
-	//yet to implement
-	return nil
-}
-
-func (quotaBucketType AsynchronousQuotaBucketType) incrementQuotaCount(q *QuotaBucket) (*QuotaBucketResults, error) {
-	period, err := q.GetPeriod()
-	if err != nil {
-		return nil, errors.New("error getting period: " + err.Error())
-	}
-	aSyncBucket := q.GetAsyncQuotaBucket()
-	if aSyncBucket == nil {
-		return nil, errors.New(constants.AsyncQuotaBucketEmpty + " : aSyncQuotaBucket to increment cannot be empty.")
-	}
-	currentCount, err := aSyncBucket.getCount(q, period)
-	if err != nil {
-		return nil, err
-	}
-
-	maxCount := q.GetMaxCount()
-	exceeded := false
-	remainingCount := int64(0)
-	weight := q.GetWeight()
-
-	if period.IsCurrentPeriod(q) {
-
-		if currentCount < maxCount {
-			diffCount := (currentCount + weight) - maxCount
-			if diffCount > 0 {
-				exceeded = true
-				remainingCount = maxCount - currentCount
-
-			} else {
-				aSyncBucket.addToCounter(weight)
-				aSyncBucket.addToAsyncLocalMessageCount(weight)
-				remainingCount = maxCount - (currentCount + weight)
-
-			}
-
-			asyncMessageCount, err := aSyncBucket.getAsyncSyncMessageCount()
-			if err != nil {
-				return nil, err
-			}
-
-			asyncLocalMsgCount,err := aSyncBucket.getAsyncLocalMessageCount()
-			if err != nil {
-				return nil, err
-			}
-
-			if asyncMessageCount > 0 &&
-				asyncLocalMsgCount >= asyncMessageCount {
-				err = internalRefresh(q, period)
-				if err != nil {
-					return nil, err
-				}
-			}
-		} else {
-			exceeded = true
-			remainingCount = maxCount - currentCount
-		}
-	}
-	if remainingCount < 0 {
-		remainingCount = int64(0)
-	}
-
-	results := &QuotaBucketResults{
-		EdgeOrgID:        q.GetEdgeOrgID(),
-		ID:               q.GetID(),
-		exceeded:         exceeded,
-		remainingCount:   remainingCount,
-		MaxCount:         maxCount,
-		startTimestamp:   period.GetPeriodStartTime().Unix(),
-		expiresTimestamp: period.GetPeriodEndTime().Unix(),
-	}
-
-	return results, nil
-}
-
-func internalRefresh(q *QuotaBucket, period *quotaPeriod) error {
-	var err error
-	aSyncBucket := q.GetAsyncQuotaBucket()
-	if aSyncBucket == nil {
-		return errors.New(constants.AsyncQuotaBucketEmpty)
-	}
-
-	weight := int64(0)
-	countFromCounterService := int64(0)
-	globalCount,err := aSyncBucket.getAsyncGlobalCount()
-	if err != nil {
-		return err
-	}
-
-	maxCount := q.GetMaxCount()
-	for _, counterEle := range *aSyncBucket.asyncCounter {
-		weight += counterEle
-
-		//delete from asyncCounter
-		temp := *aSyncBucket.asyncCounter
-		temp = temp[1:]
-		aSyncBucket.asyncCounter = &temp
-
-		if (weight + globalCount) >= maxCount {
-			//clear asyncCounter
-			for range *aSyncBucket.asyncCounter {
-				//delete all elements from asyncCounter
-				temp := *aSyncBucket.asyncCounter
-				temp = temp[1:]
-				aSyncBucket.asyncCounter = &temp
-			}
-		}
-	}
-
-	countFromCounterService, err = services.IncrementAndGetCount(q.GetEdgeOrgID(), q.GetID(), weight, period.GetPeriodStartTime().Unix(), period.GetPeriodEndTime().Unix())
-	if err != nil {
-		return err
-	}
-	aSyncBucket.asyncGLobalCount = countFromCounterService
-
-	aSyncBucket.asyncLocalMessageCount -= weight
-	return nil
-}
-
-type NonDistributedQuotaBucketType struct{}
-
-func (sQuotaBucket NonDistributedQuotaBucketType) resetCount(qBucket *QuotaBucket) error {
-	//yet to implement
-	return errors.New("methog not implemented")
-}
-func (sQuotaBucket NonDistributedQuotaBucketType) incrementQuotaCount(qBucket *QuotaBucket) (*QuotaBucketResults, error) {
-
-	return nil, errors.New("methog not implemented")
-}
-
-func GetQuotaBucketHandler(qBucket *QuotaBucket) (QuotaBucketType, error) {
-
-	if !qBucket.IsDistrubuted() {
-		quotaBucketType := &NonDistributedQuotaBucketType{}
-		return quotaBucketType, nil
-	} else {
-		if qBucket.IsSynchronous() {
-			quotaBucketType := &SynchronousQuotaBucketType{}
-			return quotaBucketType, nil
-		}
-		quotaBucketType := &AsynchronousQuotaBucketType{}
-		return quotaBucketType, nil
-
-	}
-
-	return nil, errors.New("ignoring: unrecognized quota type")
-
-}
diff --git a/quotaBucket/quotaBucketType_test.go b/quotaBucket/quotaBucketType_test.go
deleted file mode 100644
index d6ac8c0..0000000
--- a/quotaBucket/quotaBucketType_test.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package quotaBucket_test
-
-import (
-	. "github.com/onsi/ginkgo"
-)
-
-var _ = Describe("QuotaBucketType", func() {
-	It("test QuotaBucketType", func() {
-		//fmt.Println("inside QuotaBucketType")
-	})
-})
diff --git a/quotaBucket/quotaBucket_test.go b/quotaBucket/quotaBucket_test.go
index cba72c4..4c5788b 100644
--- a/quotaBucket/quotaBucket_test.go
+++ b/quotaBucket/quotaBucket_test.go
@@ -1,6 +1,5 @@
 package quotaBucket_test
 
-
 import (
 	"github.com/30x/apidQuota/constants"
 	. "github.com/30x/apidQuota/quotaBucket"
@@ -35,10 +34,15 @@
 		if IsValidTimeUnit("invalidType") {
 			Fail("Expected false: invalidType is not a valid TimeUnit")
 		}
+
+		//invalid type
+		if IsValidTimeUnit("") {
+			Fail("Expected false: invalidType is not a valid TimeUnit")
+		}
+
 	})
 })
 
-
 var _ = Describe("Test AcceptedQuotaTypes", func() {
 	It("testTimeUnit", func() {
 		if !IsValidType("calendar") {
@@ -50,6 +54,9 @@
 		if IsValidType("invalidType") {
 			Fail("Expected false: invalidType is not a valid quotaType")
 		}
+		if IsValidType("") {
+			Fail("Expected false: invalidType is not a valid quotaType")
+		}
 	})
 })
 
@@ -58,18 +65,15 @@
 
 	//validate all fields set as expected.
 	//validate period set as expected.
-	//validate async QuotaBucket is empty.
+	//validate async QuotaBucket is not empty.
 	It("Create with NewQuotaBucket with all valid fields", func() {
 		edgeOrgID := "sampleOrg"
 		id := "sampleID"
 		interval := 1
 		timeUnit := "hour"
 		quotaType := "calendar"
-		preciseAtSecondsLevel := true
 		maxCount := int64(10)
 		weight := int64(1)
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
@@ -77,8 +81,8 @@
 		startTime := time.Now().UTC().AddDate(0, -1, 0).Unix()
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		now := time.Now().UTC()
 		currentHour := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.UTC)
@@ -94,44 +98,11 @@
 		Expect(getPeriod.GetPeriodStartTime().String()).Should(Equal(currentHour.String()))
 		Expect(getPeriod.GetPeriodEndTime().String()).Should(Equal(currentHour.Add(time.Hour).String()))
 
-		//check if isDistributed and isSynchronous are true.
-		if !quotaBucket.IsDistrubuted(){
-			Fail("expected true, returned true.")
-		}
-		if !quotaBucket.IsSynchronous(){
-			Fail("expected true, returned true.")
-		}
-
 		asyncBucket := quotaBucket.GetAsyncQuotaBucket()
-		if asyncBucket != nil{
-			Fail("asyncBucket should be nil for synchronous request.")
+		if asyncBucket == nil {
+			Fail("asyncBucket cannot not be nil.")
 		}
 
-		//testCase2: synchronous := true  and (syncTimeInSec and syncMessageCount) > -1 -> aSyncQuotaBucket is nil.
-		syncTimeInSec = int64(10)
-		syncMessageCount = int64(10)
-		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
-		Expect(err).NotTo(HaveOccurred())
-		now = time.Now().UTC()
-		currentHour = time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.UTC)
-		err = quotaBucket.Validate()
-		Expect(err).NotTo(HaveOccurred())
-		//check if isDistributed and isSynchronous are true.
-		if !quotaBucket.IsDistrubuted(){
-			Fail("expected true, returned true.")
-		}
-		if !quotaBucket.IsSynchronous(){
-			Fail("expected true, returned true.")
-		}
-
-		asyncBucket = quotaBucket.GetAsyncQuotaBucket()
-		if asyncBucket != nil{
-			Fail("asyncBucket should be nil for synchronous request.")
-		}
-
-
 	})
 
 	//startTime for quotaBucket after time.Now()
@@ -141,18 +112,15 @@
 		interval := 1
 		timeUnit := "hour"
 		quotaType := "calendar"
-		preciseAtSecondsLevel := true
 		maxCount := int64(10)
 		weight := int64(1)
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 		//start time is after now() -> should still set period.
 		startTime := time.Now().UTC().AddDate(0, 1, 0).Unix()
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		now := time.Now().UTC()
 		currentHour := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.UTC)
@@ -167,17 +135,9 @@
 		Expect(getPeriod.GetPeriodStartTime().String()).Should(Equal(currentHour.String()))
 		Expect(getPeriod.GetPeriodEndTime().String()).Should(Equal(currentHour.Add(time.Hour).String()))
 
-		//check if isDistributed and isSynchronous are true.
-		if !quotaBucket.IsDistrubuted(){
-			Fail("expected true, returned false.")
-		}
-		if !quotaBucket.IsSynchronous(){
-			Fail("expected true, returned false.")
-		}
-
-		asyncBucket := quotaBucket.GetAsyncQuotaBucket()
-		if asyncBucket != nil{
-			Fail("asyncBucket should be nil for synchronous request.")
+		currentPeriod := getPeriod.IsCurrentPeriod(quotaBucket);
+		if currentPeriod {
+			Fail("expected currentPeriod to be false")
 		}
 	})
 
@@ -190,11 +150,8 @@
 		interval := 1
 		timeUnit := "hour"
 		quotaType := "calendar"
-		preciseAtSecondsLevel := true
 		maxCount := int64(10)
 		weight := int64(1)
-		distributed := true
-		synchronous := false
 
 		//Testcase1 : with syncTimeInSec
 		syncTimeInSec := int64(10)
@@ -202,8 +159,8 @@
 		//start time is after now() -> should still set period.
 		startTime := time.Now().UTC().AddDate(0, 1, 0).Unix()
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		now := time.Now().UTC()
 		currentHour := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.UTC)
@@ -218,16 +175,8 @@
 		Expect(getPeriod.GetPeriodStartTime().String()).Should(Equal(currentHour.String()))
 		Expect(getPeriod.GetPeriodEndTime().String()).Should(Equal(currentHour.Add(time.Hour).String()))
 
-		//check if isDistributed is true and isSynchronous is false.
-		if !quotaBucket.IsDistrubuted(){
-			Fail("expected true, returned false.")
-		}
-		if quotaBucket.IsSynchronous(){
-			Fail("expected false, returned true.")
-		}
-
 		asyncBucket := quotaBucket.GetAsyncQuotaBucket()
-		if asyncBucket == nil{
+		if asyncBucket == nil {
 			Fail("asyncBucket should be nil for synchronous request.")
 		}
 
@@ -237,8 +186,8 @@
 		//start time is after now() -> should still set period.
 		startTime = time.Now().UTC().AddDate(0, 1, 0).Unix()
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		now = time.Now().UTC()
 		currentHour = time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.UTC)
@@ -253,16 +202,8 @@
 		Expect(getPeriod.GetPeriodStartTime().String()).Should(Equal(currentHour.String()))
 		Expect(getPeriod.GetPeriodEndTime().String()).Should(Equal(currentHour.Add(time.Hour).String()))
 
-		//check if isDistributed is true and isSynchronous is false.
-		if !quotaBucket.IsDistrubuted(){
-			Fail("expected true, returned false.")
-		}
-		if quotaBucket.IsSynchronous(){
-			Fail("expected false, returned true.")
-		}
-
 		asyncBucket = quotaBucket.GetAsyncQuotaBucket()
-		if asyncBucket == nil{
+		if asyncBucket == nil {
 			Fail("asyncBucket should be nil for synchronous request.")
 		}
 
@@ -272,8 +213,8 @@
 		//start time is after now() -> should still set period.
 		startTime = time.Now().UTC().AddDate(0, 1, 0).Unix()
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).To(HaveOccurred())
 
 	})
@@ -284,11 +225,8 @@
 		interval := 1
 		timeUnit := "hour"
 		quotaType := "calendar"
-		preciseAtSecondsLevel := true
 		maxCount := int64(10)
 		weight := int64(1)
-		distributed := false
-		synchronous := false
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
@@ -296,14 +234,13 @@
 		startTime := time.Now().UTC().AddDate(0, -1, 0).Unix()
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		now := time.Now().UTC()
 		currentHour := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.UTC)
 		err = quotaBucket.Validate()
 		Expect(err).NotTo(HaveOccurred())
-		Expect(quotaBucket.IsSynchronous()).Should(BeFalse())
 
 		//also check if all the fields are set as expected
 		getPeriod, err := quotaBucket.GetPeriod()
@@ -314,28 +251,14 @@
 		Expect(getPeriod.GetPeriodStartTime().String()).Should(Equal(currentHour.String()))
 		Expect(getPeriod.GetPeriodEndTime().String()).Should(Equal(currentHour.Add(time.Hour).String()))
 
-		//check if isDistributed is false and isSynchronous is false.
-		if quotaBucket.IsDistrubuted(){
-			Fail("expected false, returned true.")
-		}
-		if quotaBucket.IsSynchronous(){
-			Fail("expected false, returned true.")
-		}
 
 		asyncBucket := quotaBucket.GetAsyncQuotaBucket()
-		if asyncBucket != nil {
-			Fail("asyncBucket should be nil for synchronous request.")
+		if asyncBucket == nil {
+			Fail("asyncBucket can not be nil.")
 		}
 
-		synchronous = true
-		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
-		Expect(err).To(HaveOccurred())
 	})
 
-
-
 	It("Test invalid timeUnitType", func() {
 		edgeOrgID := "sampleOrg"
 		id := "sampleID"
@@ -344,16 +267,13 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
 		startTime := time.Now().UTC().AddDate(0, -1, 0).Unix()
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		err = quotaBucket.Validate()
 		Expect(err).To(HaveOccurred())
 
@@ -371,16 +291,13 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
 		startTime := time.Now().UTC().AddDate(0, -1, 0).Unix()
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		err = quotaBucket.Validate()
 		Expect(err).To(HaveOccurred())
 
@@ -400,9 +317,6 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
@@ -410,8 +324,8 @@
 		startTime := time.Now().UTC().AddDate(0, -1, 0).Unix()
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight,syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		err = quotaBucket.Validate()
 		Expect(err).NotTo(HaveOccurred())
@@ -427,8 +341,8 @@
 		//InputStart time is now
 		startTime = time.Now().UTC().Unix()
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 		err = quotaBucket.Validate()
 		Expect(err).NotTo(HaveOccurred())
@@ -452,17 +366,14 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
 		//InputStart time is after now.
 		startTime := time.Now().UTC().AddDate(0, 1, 0).Unix()
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -485,9 +396,6 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
@@ -495,8 +403,8 @@
 		startTime := time.Now().UTC().UTC().AddDate(-1, -1, 0).Unix()
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -513,8 +421,8 @@
 		//InputStart time is now
 		startTime = time.Now().UTC().Unix()
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -540,9 +448,6 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
@@ -550,8 +455,8 @@
 		startTime := time.Now().UTC().AddDate(0, 1, 0).Unix()
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -575,17 +480,14 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		//InputStart time is before now
 		startTime := time.Now().UTC().AddDate(0, -1, 0).Unix()
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight,syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -605,8 +507,8 @@
 		//for non rolling Type window setCurrentPeriod as endTime is < time.now.
 		quotaType = "calendar"
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		qPeriod, err = quotaBucket.GetPeriod()
diff --git a/quotaBucket/quotaCache.go b/quotaBucket/quotaCache.go
index 4afae81..6815f0b 100644
--- a/quotaBucket/quotaCache.go
+++ b/quotaBucket/quotaCache.go
@@ -1,10 +1,10 @@
 package quotaBucket
 
 import (
+	"errors"
 	"github.com/30x/apidQuota/constants"
 	"sync"
 	"time"
-	"errors"
 )
 
 var quotaCachelock = sync.RWMutex{}
@@ -52,17 +52,15 @@
 func removeFromCache(cacheKey string, qBucketCache quotaBucketCache) error {
 	//for async Stop the scheduler.
 
-	if qBucketCache.qBucket.Distributed && !qBucketCache.qBucket.IsSynchronous() {
-		aSyncBucket := qBucketCache.qBucket.GetAsyncQuotaBucket()
-		if aSyncBucket == nil {
-			return errors.New(constants.AsyncQuotaBucketEmpty + " : aSyncQuotaBucket to increment cannot be empty.")
-		}
-		qticker, err := aSyncBucket.getAsyncQTicker()
-		if err != nil {
-			return err
-		}
-		qticker.Stop()
+	aSyncBucket := qBucketCache.qBucket.GetAsyncQuotaBucket()
+	if aSyncBucket == nil {
+		return errors.New(constants.AsyncQuotaBucketEmpty + " : aSyncQuotaBucket to increment cannot be empty.")
 	}
+	qticker, err := aSyncBucket.getAsyncQTicker()
+	if err != nil {
+		return err
+	}
+	qticker.Stop()
 
 	quotaCachelock.Lock()
 	delete(quotaCache, cacheKey)
diff --git a/quotaBucket/quotaDescriptorType_test.go b/quotaBucket/quotaDescriptorType_test.go
index 26316f4..9f4ec8e 100644
--- a/quotaBucket/quotaDescriptorType_test.go
+++ b/quotaBucket/quotaDescriptorType_test.go
@@ -47,16 +47,13 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
-		preciseAtSecondsLevel := true
 		startTime := time.Now().UTC().UTC().AddDate(0, -1, 0).Unix()
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -78,8 +75,8 @@
 		timeUnit = "minute"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight,  syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -101,8 +98,8 @@
 		timeUnit = "hour"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -124,8 +121,8 @@
 		timeUnit = "day"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight,  syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -147,8 +144,8 @@
 		timeUnit = "week"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -170,8 +167,8 @@
 		timeUnit = "month"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -203,16 +200,13 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
 		startTime := time.Now().UTC().UTC().AddDate(0, -1, 0).Unix()
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight,  syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -234,8 +228,8 @@
 		timeUnit = "invalidTimeUnit"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		err = quotaBucket.Validate()
 		Expect(err).To(HaveOccurred())
 		if ok := strings.Contains(err.Error(), constants.InvalidQuotaTimeUnitType); !ok {
@@ -254,16 +248,13 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
 		startTime := time.Now().UTC().UTC().AddDate(0, -1, 0).Unix()
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -285,8 +276,8 @@
 		timeUnit = "minute"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -308,8 +299,8 @@
 		timeUnit = "hour"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -331,8 +322,8 @@
 		timeUnit = "day"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -354,8 +345,8 @@
 		timeUnit = "week"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -377,8 +368,8 @@
 		timeUnit = "month"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -410,16 +401,13 @@
 		interval := 1
 		maxCount := int64(10)
 		weight := int64(1)
-		preciseAtSecondsLevel := true
 		startTime := time.Now().UTC().UTC().AddDate(0, -1, 0).Unix()
-		distributed := true
-		synchronous := true
 		syncTimeInSec := int64(-1)
 		syncMessageCount := int64(-1)
 
 		quotaBucket, err := NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		Expect(err).NotTo(HaveOccurred())
 
 		err = quotaBucket.Validate()
@@ -441,8 +429,8 @@
 		timeUnit = "invalidTimeUnit"
 
 		quotaBucket, err = NewQuotaBucket(edgeOrgID, id, interval, timeUnit,
-			quotaType, preciseAtSecondsLevel, startTime, maxCount,
-			weight, distributed, synchronous, syncTimeInSec, syncMessageCount)
+			quotaType, startTime, maxCount,
+			weight, syncTimeInSec, syncMessageCount)
 		err = quotaBucket.Validate()
 		Expect(err).To(HaveOccurred())
 		if ok := strings.Contains(err.Error(), constants.InvalidQuotaTimeUnitType); !ok {
diff --git a/services/counterServiceHelper.go b/services/counterServiceHelper.go
index 5a21ce8..186afb6 100644
--- a/services/counterServiceHelper.go
+++ b/services/counterServiceHelper.go
@@ -10,6 +10,8 @@
 	"net/http"
 	"net/url"
 	"time"
+	"fmt"
+	"os"
 )
 
 const (
@@ -75,15 +77,23 @@
 	}
 	addApigeeSyncTokenToHeader(request)
 
+	fmt.Println("request: ", request)
 	resp, err := client.Do(request)
 
 	if err != nil {
 		return 0, errors.New("error calling CounterService: " + err.Error())
 	}
+	defer resp.Body.Close()
+
 
 	globalVariables.Log.Debug("response: ", resp)
 	if resp.StatusCode != http.StatusOK {
+		fmt.Println("resp: ", resp)
+
 		respBodyBytes, err := ioutil.ReadAll(resp.Body)
+		fmt.Println(os.Stdout, string(respBodyBytes)) //<-- here !
+
+
 		if resp.StatusCode == http.StatusNotFound {
 			return 0, errors.New("response from counter service: " + resp.Status + " and response body is: " + string(respBodyBytes))
 		}