Index: modules/in-commerce/units/gateways/gateways_config.php
===================================================================
--- modules/in-commerce/units/gateways/gateways_config.php
+++ modules/in-commerce/units/gateways/gateways_config.php
@@ -19,6 +19,24 @@
 					'ListClass'			=>	Array('class'=>'kDBList','file'=>'','build_event'=>'OnListBuild'),
 					'EventHandlerClass'	=>	Array('class'=>'GatewayEventHandler','file'=>'gw_event_handler.php','build_event'=>'OnBuild'),
 					'TagProcessorClass' =>	Array('class'=>'GatewayTagProcessor','file'=>'gw_tag_processor.php','build_event'=>'OnBuild'),
+
+					'RegisterClasses' => array(
+						array('pseudo' => 'kGWBase', 'class' => 'kGWBase', 'file' => 'gw_classes/gw_base.php', 'build_event' => ''),
+						array('pseudo' => 'kAtosOriginGW', 'class' => 'kAtosOriginGW', 'file' => 'gw_classes/atosorigin.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWAuthorizeNet', 'class' => 'kGWAuthorizeNet', 'file' => 'gw_classes/authorizenet.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWGoogleCheckout', 'class' => 'kGWGoogleCheckout', 'file' => 'gw_classes/google_checkout.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWiDEALnl', 'class' => 'kGWiDEALnl', 'file' => 'gw_classes/ideal_nl.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kMultiCardsGW', 'class' => 'kMultiCardsGW', 'file' => 'gw_classes/multicards.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kPayboxGW', 'class' => 'kPayboxGW', 'file' => 'gw_classes/paybox.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kPaymentechGW', 'class' => 'kPaymentechGW', 'file' => 'gw_classes/paymentech.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWPayPal', 'class' => 'kGWPayPal', 'file' => 'gw_classes/paypal.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWPaypalDirect', 'class' => 'kGWPaypalDirect', 'file' => 'gw_classes/paypal_direct.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWRightConnect', 'class' => 'kGWRightConnect', 'file' => 'gw_classes/rightconnect.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kSellaGuestPayGW', 'class' => 'kSellaGuestPayGW', 'file' => 'gw_classes/sella_guestpay.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kVerisignPfLinkGW', 'class' => 'kVerisignPfLinkGW', 'file' => 'gw_classes/verisign_pflink.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+						array('pseudo' => 'kGWWorldPay', 'class' => 'kGWWorldPay', 'file' => 'gw_classes/worldpay.php', 'build_event' => '', 'require_classes' => 'kGWBase'),
+					),
+
 					'AutoLoad'			=>	true,
 					'Hooks'	=>	Array(
 												Array(
@@ -54,7 +72,7 @@
 					'ListSQLs' => Array (
 						'' => 'SELECT * FROM %s',
 					), // key - special, value - list select sql
-					
+
 					'ItemSQLs' => Array (
 						''=>'SELECT * FROM %s',
 					),
@@ -70,5 +88,5 @@
 
 					'VirtualFields' => Array (
 						'Value' => Array('type' => 'string', 'default' => ''),
-					),				
-	);
\ No newline at end of file
+					),
+	);
Index: modules/in-commerce/units/orders/order_validator.php
===================================================================
--- modules/in-commerce/units/orders/order_validator.php
+++ modules/in-commerce/units/orders/order_validator.php
@@ -120,9 +120,8 @@
 		if (defined('DEBUG_MODE') && kUtil::constOn('DBG_PAYMENT_GW')) {
 			$gw_data = $this->dataSource->getGatewayData();
 
-			$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
-			$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-
+			/** @var kGWBase $gateway_object */
+			$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 			$test_numbers = $gateway_object->GetTestCCNumbers();
 
 			if ( in_array($value, $test_numbers) ) {
@@ -244,4 +243,4 @@
 
 		return true;
 	}
-}
\ No newline at end of file
+}
Index: modules/in-commerce/units/orders/orders_event_handler.php
===================================================================
--- modules/in-commerce/units/orders/orders_event_handler.php
+++ modules/in-commerce/units/orders/orders_event_handler.php
@@ -350,9 +350,8 @@
 	{
 		$gw_data = $order->getGatewayData();
 
-		$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
-		$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-		/* @var $gateway_object kGWBase */
+		/** @var kGWBase $gateway_object */
+		$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 
 		$payment_result = $gateway_object->DirectPayment($order->GetFieldValues(), $gw_data['gw_params']);
 		$sql = 'UPDATE %s SET GWResult1 = %s WHERE %s = %s';
@@ -2102,9 +2101,8 @@
 				// charge user for order in case if we user 2step charging (e.g. AUTH_ONLY + PRIOR_AUTH_CAPTURE)
 				$gw_data = $object->getGatewayData();
 
-				$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
-				$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-				/* @var $gateway_object kGWBase */
+				/** @var kGWBase $gateway_object */
+				$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 
 				$charge_result = $gateway_object->Charge($object->GetFieldValues(), $gw_data['gw_params']);
 				$sql = 'UPDATE %s SET GWResult2 = %s WHERE %s = %s';
@@ -2168,9 +2166,8 @@
 					$gw_data = $object->getGatewayData();
 
 					if ( $gw_data ) {
-						$this->Application->registerClass($gw_data['ClassName'], GW_CLASS_PATH . '/' . $gw_data['ClassFile']);
+						/** @var kGWBase $gateway_object */
 						$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
-
 						$gateway_object->OrderDeclined($object->GetFieldValues(), $gw_data['gw_params']);
 					}
 				}
@@ -2222,9 +2219,8 @@
 					// inform payment gateway that order was shipped
 					$gw_data = $object->getGatewayData();
 
-					$this->Application->registerClass($gw_data['ClassName'], GW_CLASS_PATH . '/' . $gw_data['ClassFile']);
+					/** @var kGWBase $gateway_object */
 					$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
-
 					$gateway_object->OrderShipped($object->GetFieldValues(), $gw_data['gw_params']);
 				}
 				else {
Index: modules/in-commerce/units/orders/orders_tag_processor.php
===================================================================
--- modules/in-commerce/units/orders/orders_tag_processor.php
+++ modules/in-commerce/units/orders/orders_tag_processor.php
@@ -1101,10 +1101,9 @@
 			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData( isset($params['payment_type_id']) ? $params['payment_type_id'] : null );
-			$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
 
-			$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-			/* @var $gateway_object kGWBase */
+			/** @var kGWBase $gateway_object */
+			$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 
 			return $gateway_object->getFormAction($gw_data['gw_params']);
 		}
@@ -1115,10 +1114,9 @@
 			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData( isset($params['payment_type_id']) ? $params['payment_type_id'] : null );
-			$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
 
-			$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-			/* @var $gateway_object kGWBase */
+			/** @var kGWBase $gateway_object */
+			$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 
 			$tpl = '<input type="hidden" name="%s" value="%s" />'."\n";
 			$hidden_fields = $gateway_object->getHiddenFields($object->GetFieldValues(), $params, $gw_data['gw_params']);
@@ -1142,10 +1140,9 @@
 			/* @var $object OrdersItem */
 
 			$gw_data = $object->getGatewayData( isset($params['payment_type_id']) ? $params['payment_type_id'] : null );
-			$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
 
-			$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-			/* @var $gateway_object kGWBase */
+			/** @var kGWBase $gateway_object */
+			$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 
 			return $gateway_object->NeedPlaceButton($object->GetFieldValues(), $params, $gw_data['gw_params']);
 		}
@@ -1384,9 +1381,8 @@
 			$object = $this->getObject($params);
 			$gw_data = $object->getGatewayData($params['payment_type_id']);
 
-			$this->Application->registerClass( $gw_data['ClassName'], GW_CLASS_PATH.'/'.$gw_data['ClassFile'] );
-			$gateway_object = $this->Application->recallObject( $gw_data['ClassName'] );
-
+			/** @var kGWBase $gateway_object */
+			$gateway_object = $this->Application->recallObject($gw_data['ClassName']);
 
 			$sql = 'SELECT oi.*
 					FROM '.TABLE_PREFIX.'OrderItems oi