Problem with using Neo 6m GPS and LSM303 compass at the same time?

Both the compass and GPS work perfectly independently. However, when I plug them into the same breadboard, they will not show accurate values. I don’t think it’s a library conflict because it happens before I even upload the code. I also don’t think it’s a memory issue because I can use use the very small code for the compass alone and it still goes on the fritz immediately when I plug it into the same breadboard the GPS is in. I’ve tried rewiring it and solving for power issues, I just can’t figure out why the compass and GPS won’t work together.

#include <TinyGPS++.h>
#include <Wire.h>
#include <LSM303.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h> 
#include <math.h>

void GetCompassHeading();
void GetFinalBearing();
void GetDistance();
void GetLatLon();

LiquidCrystal_I2C lcd(0x27, 16, 2);

//const float pi = 3.14;
//int pos = 90; 

LSM303 compass;
TinyGPSPlus gps; // create gps object
//Servo myservo, myservoSteer;

float heading;
double latitude;
double longitude;
float courseTo;
double Distance_M;
float FinalBearing;
  static const double DEST_LAT = 38.85314, DEST_LON = -104.77110;

void setup() {
//Serial.begin(9600);
Wire.begin();
compass.init();
compass.enableDefault();


  //Serial.begin(57600); // connect serial
  Serial1.begin(9600); // connect serial
  Serial.println("The GPS Received Signal:");
  //gpsSerial.begin(9600); // connect gps sensor
  lcd.init();
  lcd.backlight();

  delay(100);
  
  compass.m_min = (LSM303::vector<int16_t>){  +919,  -4362,  -1564}; 
  compass.m_max = (LSM303::vector<int16_t>){ +6518,  +2173,  +4597};

  //myservo.attach(9);
  //myservo.attach(12);

}

void loop() {

   GetCompassHeading();
  
  while(Serial1.available())
    {
      if(gps.encode(Serial1.read()))
      { 
       
        GetLatLon();
        GetDistance();
        GetFinalBearing();

        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("C_heading ");
        lcd.print(heading);
        
        lcd.setCursor(0,1);
        lcd.print("G_heading ");
        lcd.print(courseTo);
        delay(2000);

      
       }
       
    }
}


void GetCompassHeading()
{
  compass.read();
  delay(110);
  heading = compass.heading((LSM303::vector<int>){1,0, 0});
  heading = heading - 20;

  if (heading < 0)
  {
    heading = 360 + heading;
  }
  delay(300);
}

void GetFinalBearing ()
{
  courseTo = TinyGPSPlus::courseTo(latitude, longitude, DEST_LAT, DEST_LON);
  FinalBearing = courseTo - heading; 
}

void GetDistance()
{
Distance_M = TinyGPSPlus::distanceBetween(latitude, longitude, DEST_LAT, DEST_LON);
delay(300);
}

void GetLatLon()
{
latitude = gps.location.lat();
longitude = gps.location.lng();
delay(300);
}