diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Accelerometer.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Accelerometer.cpp
index 6a367a8..78df478 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Accelerometer.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Accelerometer.cpp
@@ -15,6 +15,7 @@
  */
 void Accelerometer::InitAccelerometer()
 {
+	m_table = NULL;
 	m_voltsPerG = 1.0;
 	m_zeroGVoltage = 2.5;
 	nUsageReporting::report(nUsageReporting::kResourceType_Accelerometer, m_analogChannel->GetChannel(), m_analogChannel->GetModuleNumber() - 1);
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/AnalogChannel.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/AnalogChannel.cpp
index beb8688..4bdfb20 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/AnalogChannel.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/AnalogChannel.cpp
@@ -22,6 +22,7 @@
  */
 void AnalogChannel::InitChannel(UINT8 moduleNumber, UINT32 channel)
 {
+	m_table = NULL;
 	char buf[64];
 	Resource::CreateResourceObject(&channels, kAnalogModules * kAnalogChannels);
 	if (!CheckAnalogModule(moduleNumber))
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/CANJaguar.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/CANJaguar.cpp
index 75d6195..e3196f0 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/CANJaguar.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/CANJaguar.cpp
@@ -31,6 +31,7 @@
  */
 void CANJaguar::InitCANJaguar()
 {
+	m_table = NULL;
 	m_transactionSemaphore = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
 	if (m_deviceNumber < 1 || m_deviceNumber > 63)
 	{
@@ -1248,11 +1249,15 @@
 }
 
 void CANJaguar::StartLiveWindowMode() {
-	m_table->AddTableListener("Value", this, true);
+	if (m_table != NULL) {
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void CANJaguar::StopLiveWindowMode() {
-	m_table->RemoveTableListener(this);
+	if (m_table != NULL) {
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string CANJaguar::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Compressor.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Compressor.cpp
index 4760c02..d874986 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Compressor.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Compressor.cpp
@@ -47,6 +47,7 @@
 		UINT8 compresssorRelayModuleNumber,
 		UINT32 compressorRelayChannel)
 {
+	m_table = NULL;
 	m_enabled = false;
 	m_pressureSwitch = new DigitalInput(pressureSwitchModuleNumber, pressureSwitchChannel);
 	m_relay = new Relay(compresssorRelayModuleNumber, compressorRelayChannel, Relay::kForwardOnly);
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Counter.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Counter.cpp
index 98b3ade..8adb719 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Counter.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Counter.cpp
@@ -19,6 +19,7 @@
  */
 void Counter::InitCounter(Mode mode)
 {
+	m_table = NULL;
 	Resource::CreateResourceObject(&counters, tCounter::kNumSystems);
 	UINT32 index = counters->Allocate("Counter");
 	if (index == ~0ul)
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalInput.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalInput.cpp
index b5c5566..6f3bf1e 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalInput.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalInput.cpp
@@ -20,6 +20,7 @@
  */
 void DigitalInput::InitDigitalInput(UINT8 moduleNumber, UINT32 channel)
 {
+	m_table = NULL;
 	char buf[64];
 	Resource::CreateResourceObject(&interruptsResource, tInterrupt::kNumSystems);
 	if (!CheckDigitalModule(moduleNumber))
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalOutput.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalOutput.cpp
index 375b264..87f136c 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalOutput.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/DigitalOutput.cpp
@@ -19,6 +19,7 @@
  */
 void DigitalOutput::InitDigitalOutput(UINT8 moduleNumber, UINT32 channel)
 {
+	m_table = NULL;
 	char buf[64];
 	if (!CheckDigitalModule(moduleNumber))
 	{
@@ -288,11 +289,15 @@
 }
 
 void DigitalOutput::StartLiveWindowMode() {
-	m_table->AddTableListener("Value", this, true);
+	if (m_table != NULL) {
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void DigitalOutput::StopLiveWindowMode() {
-	m_table->RemoveTableListener(this);
+	if (m_table != NULL) {
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string DigitalOutput::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.cpp
index f5a48ce..dfcf7e7 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/DoubleSolenoid.cpp
@@ -15,6 +15,7 @@
  */
 void DoubleSolenoid::InitSolenoid()
 {
+	m_table = NULL;
 	char buf[64];
 	if (!CheckSolenoidModule(m_moduleNumber))
 	{
@@ -158,12 +159,16 @@
 
 void DoubleSolenoid::StartLiveWindowMode() {
 	Set(kOff);
-	m_table->AddTableListener("Value", this, true);
+	if (m_table != NULL) {
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void DoubleSolenoid::StopLiveWindowMode() {
 	Set(kOff);
-	m_table->RemoveTableListener(this);
+	if (m_table != NULL) {
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string DoubleSolenoid::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Encoder.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Encoder.cpp
index 246df4b..2c44f9d 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Encoder.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Encoder.cpp
@@ -25,6 +25,7 @@
  */
 void Encoder::InitEncoder(bool reverseDirection, EncodingType encodingType)
 {
+	m_table = NULL;
 	m_encodingType = encodingType;
 	tRioStatusCode localStatus = NiFpga_Status_Success;
 	switch (encodingType)
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Gyro.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Gyro.cpp
index 2f55e58..4ea3588 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Gyro.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Gyro.cpp
@@ -28,6 +28,7 @@
  */
 void Gyro::InitGyro()
 {
+	m_table = NULL;
 	if (!m_analog->IsAccumulatorChannel())
 	{
 		wpi_setWPIErrorWithContext(ParameterOutOfRange,
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicColorSensor.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicColorSensor.cpp
index d4d70fd..fe6035a 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicColorSensor.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicColorSensor.cpp
@@ -32,6 +32,7 @@
 HiTechnicColorSensor::HiTechnicColorSensor(UINT8 moduleNumber)
 	: m_i2c (NULL)
 {
+	m_table = NULL;
 	DigitalModule *module = DigitalModule::GetInstance(moduleNumber);
 	m_mode = kActive;
 	
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicCompass.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicCompass.cpp
index 3c353b3..ef9e80c 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicCompass.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/HiTechnicCompass.cpp
@@ -26,6 +26,7 @@
 HiTechnicCompass::HiTechnicCompass(UINT8 moduleNumber)
 	: m_i2c (NULL)
 {
+	m_table = NULL;
 	DigitalModule *module = DigitalModule::GetInstance(moduleNumber);
 	if (module)
 	{
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/LiveWindow/LiveWindowStatusListener.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/LiveWindow/LiveWindowStatusListener.cpp
index 5254a7a..a2093a5 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/LiveWindow/LiveWindowStatusListener.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/LiveWindow/LiveWindowStatusListener.cpp
@@ -1,7 +1,7 @@
 #include "LiveWindow/LiveWindowStatusListener.h"
 #include "Commands/Scheduler.h"
 
-void ValueChanged(ITable* source, const std::string& key, EntryValue value, bool isNew) {
+void LiveWindowStatusListener::ValueChanged(ITable* source, const std::string& key, EntryValue value, bool isNew) {
 	
 }
 
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/PWM.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/PWM.cpp
index adf5938..8901b74 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/PWM.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/PWM.cpp
@@ -26,6 +26,7 @@
  */
 void PWM::InitPWM(UINT8 moduleNumber, UINT32 channel)
 {
+	m_table = NULL;
 	char buf[64];
 	Resource::CreateResourceObject(&allocated, tDIO::kNumSystems * kPwmChannels);
 	if (!CheckPWMModule(moduleNumber))
@@ -345,12 +346,16 @@
 }
 
 void PWM::StartLiveWindowMode() {
-	m_table->AddTableListener("Value", this, true);
+	if (m_table != NULL) {
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void PWM::StopLiveWindowMode() {
 	SetSpeed(0);
-	m_table->RemoveTableListener(this);
+	if (m_table != NULL) {
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string PWM::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Relay.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Relay.cpp
index e02cd31..eedbd4c 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Relay.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Relay.cpp
@@ -25,6 +25,7 @@
  */
 void Relay::InitRelay (UINT8 moduleNumber)
 {
+	m_table = NULL;
 	char buf[64];
 	Resource::CreateResourceObject(&relayChannels, tDIO::kNumSystems * kRelayChannels * 2);
 	if (!SensorBase::CheckRelayModule(moduleNumber))
@@ -244,11 +245,15 @@
 }
 
 void Relay::StartLiveWindowMode() {
-	m_table->AddTableListener("Value", this, true);
+	if(m_table != NULL){
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void Relay::StopLiveWindowMode() {
-	m_table->RemoveTableListener(this);
+	if(m_table != NULL){
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string Relay::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Servo.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Servo.cpp
index 8acb0d7..462e805 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Servo.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Servo.cpp
@@ -20,6 +20,7 @@
  */
 void Servo::InitServo()
 {
+	m_table = NULL;
 	// TODO: compute the appropriate values based on digital loop timing
 	SetBounds(245, 0, 0, 0, 11);
 	SetPeriodMultiplier(kPeriodMultiplier_4X);
@@ -134,11 +135,15 @@
 }
 
 void Servo::StartLiveWindowMode() {
-	m_table->AddTableListener("Value", this, true);
+	if (m_table != NULL) {
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void Servo::StopLiveWindowMode() {
-	m_table->RemoveTableListener(this);
+	if (m_table != NULL) {
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string Servo::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Solenoid.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Solenoid.cpp
index 498a969..2b753d3 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Solenoid.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Solenoid.cpp
@@ -14,6 +14,7 @@
  */
 void Solenoid::InitSolenoid()
 {
+	m_table = NULL;
 	char buf[64];
 	if (!CheckSolenoidModule(m_moduleNumber))
 	{
@@ -115,12 +116,16 @@
 
 void Solenoid::StartLiveWindowMode() {
 	Set(false);
-	m_table->AddTableListener("Value", this, true);
+	if (m_table != NULL) {
+		m_table->AddTableListener("Value", this, true);
+	}
 }
 
 void Solenoid::StopLiveWindowMode() {
 	Set(false);
-	m_table->RemoveTableListener(this);
+	if (m_table != NULL) {
+		m_table->RemoveTableListener(this);
+	}
 }
 
 std::string Solenoid::GetSmartDashboardType() {
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/Ultrasonic.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/Ultrasonic.cpp
index a8b3991..e21d227 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/Ultrasonic.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/Ultrasonic.cpp
@@ -56,6 +56,7 @@
  */
 void Ultrasonic::Initialize()
 {
+	m_table = NULL;
 	bool originalMode = m_automaticEnabled;
 	if (m_semaphore == 0) m_semaphore = semBCreate(SEM_Q_PRIORITY, SEM_FULL);
 	SetAutomaticMode(false); // kill task when adding a new sensor
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketServerStreamProvider.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketServerStreamProvider.cpp
index 2f89af9..97fc3e8 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketServerStreamProvider.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketServerStreamProvider.cpp
@@ -111,8 +111,8 @@
 				if (connectedSocket == ERROR)
 					return NULL;
 				
-				int on = 1;
-				setsockopt(connectedSocket, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
+				//int on = 1;
+				//setsockopt(connectedSocket, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
 				
 				return new FDIOStream(connectedSocket);
 			}
diff --git a/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketStreamFactory.cpp b/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketStreamFactory.cpp
index 8e3af60..5a12083 100644
--- a/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketStreamFactory.cpp
+++ b/azaleasource/WPILibCProgramming/trunk/WPILib/networktables2/stream/SocketStreamFactory.cpp
@@ -59,8 +59,8 @@
     	return NULL;
     }//TODO close fd if an error occured
 
-	int on = 1;
-	setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
+	//int on = 1;
+	//setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&on, sizeof(on));
 
 	return new FDIOStream(sockfd);
 #endif
