diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 4078c8f..f2d871f 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -603,28 +603,29 @@
     else {
       sprintf(response,"RSP NOISELEV 1  0");
     }
-  }   
-  else if (strcmp(command,"SETPOWER")==0) {
+  }
+  else if (!strcmp(command, "SETPOWER")) {
     // set output power in dB
     int dbPwr;
-    sscanf(buffer,"%3s %s %d",cmdcheck,command,&dbPwr);
-    if (!mOn) 
-      sprintf(response,"RSP SETPOWER 1 %d",dbPwr);
+    sscanf(buffer, "%3s %s %d", cmdcheck, command, &dbPwr);
+    if (!mOn)
+      sprintf(response, "RSP SETPOWER 1 %d", dbPwr);
     else {
       mPower = dbPwr;
-      mRadioInterface->setPowerAttenuation(dbPwr, chan);
-      sprintf(response,"RSP SETPOWER 0 %d",dbPwr);
+      mRadioInterface->setPowerAttenuation(mPower, chan);
+      sprintf(response, "RSP SETPOWER 0 %d", dbPwr);
     }
   }
-  else if (strcmp(command,"ADJPOWER")==0) {
+  else if (!strcmp(command,"ADJPOWER")) {
     // adjust power in dB steps
     int dbStep;
-    sscanf(buffer,"%3s %s %d",cmdcheck,command,&dbStep);
-    if (!mOn) 
-      sprintf(response,"RSP ADJPOWER 1 %d",mPower);
+    sscanf(buffer, "%3s %s %d", cmdcheck, command, &dbStep);
+    if (!mOn)
+      sprintf(response, "RSP ADJPOWER 1 %d", mPower);
     else {
       mPower += dbStep;
-      sprintf(response,"RSP ADJPOWER 0 %d",mPower);
+      mRadioInterface->setPowerAttenuation(mPower, chan);
+      sprintf(response, "RSP ADJPOWER 0 %d", mPower);
     }
   }
 #define FREQOFFSET 0//11.2e3
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index ff9f493..5bddb5c 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -38,8 +38,7 @@
                                int wReceiveOffset, GSM::Time wStartTime)
   : mRadio(wRadio), mSPSTx(sps), mSPSRx(1), mChans(chans), mMIMO(diversity),
     sendCursor(0), recvCursor(0), underrun(false), overrun(false),
-    receiveOffset(wReceiveOffset), mOn(false), powerScaling(1.0),
-    loadTest(false)
+    receiveOffset(wReceiveOffset), mOn(false), loadTest(false)
 {
   mClock.set(wStartTime);
 }
@@ -63,6 +62,7 @@
   convertSendBuffer.resize(mChans);
   convertRecvBuffer.resize(mChans);
   mReceiveFIFO.resize(mChans);
+  powerScaling.resize(mChans);
 
   for (size_t i = 0; i < mChans; i++) {
     sendBuffer[i] = new signalVector(CHUNK * mSPSTx);
@@ -120,9 +120,9 @@
   digAtten = atten - mRadio->maxTxGain() + rfGain;
 
   if (digAtten < 1.0)
-    powerScaling = 1.0;
+    powerScaling[chan] = 1.0;
   else
-    powerScaling = 1.0/sqrt(pow(10, (digAtten/10.0)));
+    powerScaling[chan] = 1.0 / sqrt(pow(10, digAtten / 10.0));
 }
 
 int RadioInterface::radioifyVector(signalVector &wVector,
@@ -255,7 +255,6 @@
                          *burst->getVector(n));
       }
 
-
       if (mReceiveFIFO[i].size() < 32)
         mReceiveFIFO[i].write(burst);
       else
@@ -363,7 +362,7 @@
   for (size_t i = 0; i < mChans; i++) {
     convert_float_short(convertSendBuffer[i],
                         (float *) sendBuffer[i]->begin(),
-                        powerScaling, 2 * sendCursor);
+                        powerScaling[i], 2 * sendCursor);
   }
 
   /* Send the all samples in the send buffer */ 
diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h
index 95ef2b2..b3f6b15 100644
--- a/Transceiver52M/radioInterface.h
+++ b/Transceiver52M/radioInterface.h
@@ -47,7 +47,7 @@
 
   std::vector<short *> convertRecvBuffer;
   std::vector<short *> convertSendBuffer;
-
+  std::vector<float> powerScaling;
   bool underrun;			      ///< indicates writes to USRP are too slow
   bool overrun;				      ///< indicates reads from USRP are too slow
   TIMESTAMP writeTimestamp;		      ///< sample timestamp of next packet written to USRP
@@ -59,8 +59,6 @@
 
   bool mOn;				      ///< indicates radio is on
 
-  double powerScaling;
-
   bool loadTest;
   int mNumARFCNs;
   signalVector *finalVec, *finalVec9;
diff --git a/Transceiver52M/radioInterfaceResamp.cpp b/Transceiver52M/radioInterfaceResamp.cpp
index 6f14a42..81b52fe 100644
--- a/Transceiver52M/radioInterfaceResamp.cpp
+++ b/Transceiver52M/radioInterfaceResamp.cpp
@@ -238,7 +238,7 @@
 
 	convert_float_short(convertSendBuffer[0],
 			    (float *) outerSendBuffer->begin(),
-			    powerScaling, 2 * outer_len);
+			    powerScaling[0], 2 * outer_len);
 
 	num_sent = mRadio->writeSamples(convertSendBuffer,
 					outer_len,
